Curieux.JY
  • Post
  • Note
  • Jung Yeon Lee

On this page

  • 1 NVIDIA Isaac Lab ๋ฐ Newton์œผ๋กœ Quadruped ๋ณดํ–‰ ์ •์ฑ…์„ ํ•™์Šตํ•˜๊ณ  ์ฒœ(์˜ท๊ฐ) ์กฐ์ž‘์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ
    • 1.1 Newton์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
    • 1.2 Newton ๋ฒ ํƒ€(ฮฒ) ๋ฆด๋ฆฌ์Šค์˜ ํ•˜์ด๋ผ์ดํŠธ
    • 1.3 Isaac Lab์—์„œ Newton์„ ์‚ฌ์šฉํ•ด ์ฟผ๋“œ๋ŸฌํŽ˜๋“œ ๋ณดํ–‰ ์ •์ฑ…์„ ํ•™์Šตํ•˜๋Š” ๋ฐฉ๋ฒ•(๊ฐœ์š”)
      • 1.3.1 Step 1 โ€” Newton์œผ๋กœ ๋ณดํ–‰ ์ •์ฑ… ํ•™์Šตํ•˜๊ธฐ
      • 1.3.2 Step 2 โ€” Sim2Sim ์ „์ด ๊ฒ€์ฆ(Validation with Sim2Sim transfer)
      • 1.3.3 Step 3 โ€” Sim2Real ๋ฐฐํฌ ์ค€๋น„(Prepare for Sim2Real)
    • 1.4 Newton ๋…๋ฆฝ(standalone) ์—”์ง„์„ ์ด์šฉํ•œ ๋ฉ€ํ‹ฐํ”ผ์ง์Šค(Multiphysics)
      • 1.4.1 Franka ์•”(๋กœ๋ด‡ ํŒ”) + Cloth(์ฒœ) ๋ฐ๋ชจ ์‹คํ–‰ ์˜ˆ์ œ
      • 1.4.2 ๋ฉ€ํ‹ฐํ”ผ์ง์Šค ๊ฒฐํ•ฉ ์ดํ•ดํ•˜๊ธฐ
    • 1.5 Newton์„ ์ƒํƒœ๊ณ„(์—์ฝ”์‹œ์Šคํ…œ)์ด ์–ด๋–ป๊ฒŒ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‚˜?
    • 1.6 Newton ์‹œ์ž‘ํ•˜๊ธฐ(Get started)
    • 1.7 ํ–‰์‚ฌ ๋ฐ ์ฑŒ๋ฆฐ์ง€ ๊ด€๋ จ ์ •๋ณด
      • 1.7.1 ์›๋ฌธ ์ฐธ์กฐ
  • 2 Sim2Sim ์ „์ด (์›๋ฌธ ์„น์…˜: Step 2: Validate the policy with Sim2Sim transfer)
    • 2.1 ์ง์—ญ (์ƒ์„ธ)
  • 3 cloth ์˜ˆ์ œ (example_cloth_franka.py) ๊ด€๋ จ ๊ธฐ์ˆ  ์„ค๋ช… ๋ฐ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ ์ง์—ญ
    • 3.1 ์ง์—ญ (์ƒ์„ธ)
    • 3.2 ์‹คํ–‰ ๋ฐฉ๋ฒ•(์›๋ฌธ์—์„œ ์•ˆ๋‚ดํ•œ ๋ช…๋ น์–ด ๋ณด์กด)
  • 4 ์ฐธ๊ณ (์›๋ฌธ ๋งํฌ๋“ค โ€” ์›๋ฌธ์—์„œ ๊ทธ๋Œ€๋กœ ๋ณด์กด)

๐ŸงฉNewton

newton
isaacsim
2025
Train a Quadruped Locomotion Policy and Simulate Cloth Manipulation with NVIDIA Isaac Lab and Newton
Published

September 30, 2025

News

This post is a translated article of the original news.

Reference

  • https://github.com/newton-physics/newton
  • https://deepwiki.com/newton-physics/newton
  • https://newton-physics.github.io/newton/guide/overview.html

Newton was initiated by Disney Research, Google DeepMind, and NVIDIA.

1 NVIDIA Isaac Lab ๋ฐ Newton์œผ๋กœ Quadruped ๋ณดํ–‰ ์ •์ฑ…์„ ํ•™์Šตํ•˜๊ณ  ์ฒœ(์˜ท๊ฐ) ์กฐ์ž‘์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ

(์›๋ฌธ: โ€œTrain a Quadruped Locomotion Policy and Simulate Cloth Manipulation with NVIDIA Isaac Lab and Newtonโ€)

๊ฒŒ์‹œ์ผ: 2025๋…„ 9์›” 29์ผ ์ €์ž: Mohammad Mohajerani, Aravindh Shanmuganathan, Eric Heiden, Anka Chen, Gilles Daviet, Milad Rakhsha, Antoine Richard.

๋ฌผ๋ฆฌ(Physics)๋Š” ๋กœ๋ด‡ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋กœ๋ด‡ ๋™์ž‘๊ณผ ํ˜„์‹ค์ ์ธ ํ™˜๊ฒฝ ๋‚ด ์ƒํ˜ธ์ž‘์šฉ์„ ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ€์ƒ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ธฐ์ดˆ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์—ฐ๊ตฌ์ž์™€ ์—”์ง€๋‹ˆ์–ด๋Š” ๋กœ๋ด‡ ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•™์Šตยท๊ฐœ๋ฐœยทํ…Œ์ŠคํŠธยท๊ฒ€์ฆํ•˜๊ณ , ํ”„๋กœํ† ํƒ€์ž…์„ ์•ˆ์ „ํ•˜๊ณ  ๊ฐ€์†ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์‹คํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ์ข…์ข… ํ˜„์‹ค๊ณผ ์™„์ „ํžˆ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋ฐ, ์ด๋ฅผ sim-to-real gap(์‹œ๋ฎฌ๋ ˆ์ด์…˜โ†’ํ˜„์‹ค ์ฐจ์ด)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋ณดํ‹ฑ์Šค ๊ฐœ๋ฐœ์ž๋“ค์€ ๋‹ค์–‘ํ•œ ์†”๋ฒ„๋ฅผ ์ง€์›ํ•˜๋Š” ํ†ตํ•ฉ ๊ฐ€๋Šฅํ•˜๊ณ , ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆ ๊ฐ€๋Šฅํ•œ ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ง ์†”๋ฃจ์…˜์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” NVIDIA Isaac Lab ๋‚ด์—์„œ Newton์„ ์‚ฌ์šฉํ•ด ์ฟผ๋“œ๋ŸฌํŽ˜๋“œ ๋กœ๋ด‡์„ ํ•œ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ์ง€์ ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ณดํ–‰(Locomotion) ์ •์ฑ…์„ ํ•™์Šตํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์‚ฐ์—…์šฉ ๋งค๋‹ˆํ“ฐ๋ ˆ์ดํ„ฐ(Franka)๋กœ ์ฒœ(Cloth)์„ ์ ‘๋Š” ๋“ฑ ๋‹ค์ค‘ ๋ฌผ๋ฆฌ(multi-physics) ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

1.1 Newton์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Newton์€ NVIDIA, Google DeepMind, Disney Research๊ฐ€ ๊ณต๋™ ๊ฐœ๋ฐœํ•˜๊ณ  Linux Foundation์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค, ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฌผ๋ฆฌ ์—”์ง„์œผ๋กœ ๋กœ๋ด‡ ํ•™์Šต ๋ฐ ๊ฐœ๋ฐœ์„ ์ง„์ „์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Newton์€ NVIDIA Warp ๋ฐ OpenUSD ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ, MuJoCo Playground๋‚˜ Isaac Lab ๊ฐ™์€ ๋กœ๋ด‡ ํ•™์Šต ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

Newton์˜ ํ•ต์‹ฌ์€ ์ˆ˜์น˜์  ์ ๋ถ„๊ณผ ์ œ์•ฝ(constraint) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์†”๋ฒ„ ๋ชจ๋“ˆ(solver modules) ์ž…๋‹ˆ๋‹ค. ์ด ์†”๋ฒ„๋“ค์€ ์ œ์•ฝ ๊ธฐ๋ฐ˜์ด๊ฑฐ๋‚˜ ํž˜(force) ๊ธฐ๋ฐ˜์ผ ์ˆ˜ ์žˆ๊ณ , ์ง์ ‘๋ฒ•(direct) ๋˜๋Š” ๋ฐ˜๋ณต๋ฒ•(iterative)์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ตœ๋Œ€์ขŒํ‘œ(maximal) ๋˜๋Š” ์ถ•์†Œ์ขŒํ‘œ(reduced) ํ‘œํ˜„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ณต์œ  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด MuJoCo Warp, Disney Research์˜ Kamino ์†”๋ฒ„ ๋˜๋Š” ์ปค์Šคํ…€ ์†”๋ฒ„ ๋“ฑ ์–ด๋А ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋“  Newton์„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด ์ถฉ๋Œ ์ฒ˜๋ฆฌ, ์—ญ๊ธฐ๊ตฌํ•™, ์ƒํƒœ ๊ด€๋ฆฌ, ํƒ€์ž„์Šคํ… ๋กœ์ง์„ ์žฌ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•™์Šต(Training)์„ ์œ„ํ•ด Newton์€ ๋ฌผ๋ฆฌ ์ƒํƒœ๋ฅผ PyTorch ๋ฐ NumPy ํ˜ธํ™˜ ๋ฐฐ์—ด๋กœ ๋…ธ์ถœํ•˜๋Š” ํ…์„œ ๊ธฐ๋ฐ˜ API๋ฅผ ์ œ๊ณตํ•ด ๋ฐฐ์นญ(batch) ์ฒ˜๋ฆฌ์™€ Isaac Lab ๊ฐ™์€ ๋กœ๋ด‡ ํ•™์Šต ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ํ†ตํ•ฉ์„ ํšจ์œจ์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Newton Selection API๋ฅผ ํ†ตํ•ด ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ด€์ ˆ ์ƒํƒœ๋ฅผ ์งˆ์˜ํ•˜๊ณ (action) ์ ์šฉํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํ”ผ๋“œ๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MuJoCo Warp(๊ตฌ๊ธ€ ๋”ฅ๋งˆ์ธ๋“œ ๊ฐœ๋ฐœ)๋Š” Newton ์†”๋ฒ„๋กœ ์™„์ „ ํ†ตํ•ฉ๋˜์–ด ์žˆ์œผ๋ฉฐ, MJX ๋ฐ Playground์—์„œ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Newton ๋ฐ ์—ฐ๊ด€ ์†”๋ฒ„๋“ค์€ Apache 2.0 ๋ผ์ด์„ ์Šค๋กœ ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค.

1.2 Newton ๋ฒ ํƒ€(ฮฒ) ๋ฆด๋ฆฌ์Šค์˜ ํ•˜์ด๋ผ์ดํŠธ

  • MuJoCo Warp(์ฃผ์š” Newton ์†”๋ฒ„)๋Š” GeForce RTX 4090์—์„œ ๋กœ์ฝ”๋ชจ์…˜(๋ณดํ–‰)์— ๋Œ€ํ•ด ์ตœ๋Œ€ 152๋ฐฐ, ์กฐ์ž‘(manipulation)์— ๋Œ€ํ•ด ์ตœ๋Œ€ 313๋ฐฐ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค. (NVIDIA RTX PRO 6000 Blackwell Series๋Š” MuJoCo Warp์— ๋Œ€ํ•ด ์ตœ๋Œ€ 44% ์ถ”๊ฐ€ ์†๋„, MJX์— ๋Œ€ํ•ด 75% ์ถ”๊ฐ€ ์†๋„ ์ œ๊ณต)
  • Newton ๋ฒ ํƒ€๋Š” ์ฐจ์„ธ๋Œ€ Isaac Lab ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉ๋  ๋•Œ, MuJoCo Warp ๋Œ€๋น„ PhysX๋ณด๋‹ค ์ธํ•ธ๋“œ(dexterous) ์กฐ์ž‘์—์„œ ์ตœ๋Œ€ 65% ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์–‡์€ ๋ณ€ํ˜•์ฒด(์˜ˆ: ์˜๋ณต)์šฉ Vortex Block Descent(VBD) ์†”๋ฒ„์™€, ์ž…์ž ๊ธฐ๋ฐ˜ ์žฌ๋ฃŒ(์˜ˆ: ํ™ยท์ž๊ฐˆ)์šฉ ์•”์‹œ์  Material Point Method(MPM) ์†”๋ฒ„์˜ ์„ฑ๋Šฅ ๋ฐ ์•ˆ์ •์„ฑ ํ™•์žฅ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

1.3 Isaac Lab์—์„œ Newton์„ ์‚ฌ์šฉํ•ด ์ฟผ๋“œ๋ŸฌํŽ˜๋“œ ๋ณดํ–‰ ์ •์ฑ…์„ ํ•™์Šตํ•˜๋Š” ๋ฐฉ๋ฒ•(๊ฐœ์š”)

Isaac Lab์— ํ†ตํ•ฉ๋œ Newton ๋ฌผ๋ฆฌ ์—”์ง„์€ ๋กœ๋ด‡ ์—ฐ๊ตฌ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋” ๋น ๋ฅด๊ณ  ๊ฐ•๊ฑดํ•œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ฟผ๋“œ๋ŸฌํŽ˜๋“œ(ANYmal-D ๋กœ๋ด‡ ์‚ฌ์šฉ ์˜ˆ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ์—”๋“œ ํˆฌ ์—”๋“œ(train โ†’ validate โ†’ deploy) ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

1.3.1 Step 1 โ€” Newton์œผ๋กœ ๋ณดํ–‰ ์ •์ฑ… ํ•™์Šตํ•˜๊ธฐ

  1. ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์„ค์ •: Isaac Lab ์ €์žฅ์†Œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(๋ ˆํฌ์ง€ํ† ๋ฆฌ ์…‹์—… ๋งํฌ: https://isaac-sim.github.io ์ฐธ์กฐ).
  2. ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰: Isaac Lab์˜ RL ์Šคํฌ๋ฆฝํŠธ(์˜ˆ: rsl_rl)๋ฅผ ์‚ฌ์šฉํ•ด ANYmal-D๋ฅผ ํ‰์ง€์—์„œ ๊ฑท๋„๋ก ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. GPU ๋ณ‘๋ ฌํ™”๋ฅผ ํ†ตํ•ด ์ˆ˜์ฒœ ๊ฐœ์˜ ๋ณ‘๋ ฌ ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅด๊ฒŒ ์ˆ˜๋ ด์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํ—ค๋“œ๋ฆฌ์Šค(headless) ๋ชจ๋“œ์—์„œ ํ•™์Šต(์ตœ๋Œ€ ์„ฑ๋Šฅ ๊ถŒ์žฅ) โ€” ์˜ˆ์‹œ ์ปค๋งจ๋“œ(๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ):
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py \
  --task Isaac-Velocity-Flat-Anymal-D-v0 --num_envs 4096 --headless
  1. Newton Visualizer(๊ฒฝ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ): ์ „์ฒด Omniverse GUI ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ํ•™์Šต ์ง„ํ–‰์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด --newton_visualizer ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py \
  --task Isaac-Velocity-Flat-Anymal-D-v0 --num_envs 4096 --headless \
  --newton_visualizer

ํ•™์Šต์ด ์™„๋ฃŒ๋˜๋ฉด .pt ํ˜•์‹์˜ ์ •์ฑ… ์ฒดํฌํฌ์ธํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

1.3.2 Step 2 โ€” Sim2Sim ์ „์ด ๊ฒ€์ฆ(Validation with Sim2Sim transfer)

  • Sim2Sim ์ „์ด๋Š” ์ •์ฑ…์ด ํŠน์ • ๋ฌผ๋ฆฌ ์—”์ง„ ํŠน์„ฑ์— ๊ณผ์ ํ•ฉ(overfit)๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•„์ˆ˜ ๊ฒ€์ฆ์ž…๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ(์˜ˆ: PhysX โ†”๏ธŽ Newton) ๊ฐ„ ์ „์ด๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด ์‹ค์ œ ๋กœ๋ด‡์—์„œ๋„ ๋™์ž‘ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
  • ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ ์—”์ง„์€ USD๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ๋ฐฉ์‹์ด๋‚˜ ๊ด€์ ˆ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ด€์ฐฐ(observation)๊ณผ ํ–‰๋™(action)์„ ์žฌ๋งคํ•‘ํ•˜๋Š” ๊ฐ„๋‹จํ•œ YAML ๋งคํ•‘ ํŒŒ์ผ๋กœ ์ด๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • Newton์—์„œ ํ•™์Šตํ•œ ์ •์ฑ…์„ PhysX ๊ธฐ๋ฐ˜ Isaac Lab์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ œ๊ณต๋˜๋Š” ์ „์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”:
./isaaclab.sh -p scripts/newton_sim2sim/rsl_rl_transfer.py \
  --task=Isaac-Velocity-Flat-Anymal-D-v0 \
  --num_envs=32 \
  --checkpoint <PATH_TO_POLICY_CHECKPOINT> \
  --policy_transfer_file scripts/sim2sim_transfer/config/newton_to_physx_anymal_d.yaml

ํ•ด๋‹น ์ „์ด ์Šคํฌ๋ฆฝํŠธ๋Š” Isaac Sim / IsaacLab GitHub ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

1.3.3 Step 3 โ€” Sim2Real ๋ฐฐํฌ ์ค€๋น„(Prepare for Sim2Real)

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ํ•™์Šตํ•œ ์ •์ฑ…์„ ์‹ค์ œ ๋กœ๋ด‡์œผ๋กœ ์ด์ „ํ•˜๋Š” ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” ์ •์ฑ… ํ•™์Šต ์‹œ IMU, ๊ด€์ ˆ ์ธ์ฝ”๋”์™€ ๊ฐ™์€ ์‹ค์ œ ๋กœ๋ด‡์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ด€์ฐฐ๊ฐ’๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œํ•˜์—ฌ ํŠน๊ถŒ ์ •๋ณด(privileged info)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Œ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ETH Zurich Robotic Systems Lab(RSL)์˜ ํ˜‘๋ ฅ์œผ๋กœ ํ•ด๋‹น ์ •์ฑ…์€ ๋ฌผ๋ฆฌ์  ANYmal ๋กœ๋ด‡์— ์ง์ ‘ ๋ฐฐํฌ๋˜์–ด ๊ฑท๋Š” ๋™์ž‘์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค(ํ•˜๋“œ์›จ์–ด ํ…Œ์ŠคํŠธ ๋น„๋””์˜ค ์ฐธ์กฐ). ์ด๋Š” Isaac Lab์—์„œ์˜ ํ•™์Šต์ด ์‹ค์„ธ๊ณ„ ํ…Œ์ŠคํŠธ๋กœ ์ด์–ด์ง€๋Š” ์ง์ ‘์ ์ธ ๊ฒฝ๋กœ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

1.4 Newton ๋…๋ฆฝ(standalone) ์—”์ง„์„ ์ด์šฉํ•œ ๋ฉ€ํ‹ฐํ”ผ์ง์Šค(Multiphysics)

๋ฉ€ํ‹ฐํ”ผ์ง์Šค ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ๊ฐ•์ฒด(์˜ˆ: ๋กœ๋ด‡ ์†)์™€ ๋ณ€ํ˜•์ฒด(์˜ˆ: ์ฒœ/์˜ท๊ฐ) ๊ฐ„์˜ ๊ฒฐํ•ฉ๋œ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์บก์ฒ˜ํ•˜์—ฌ, ๋กœ๋ด‡ ์„ค๊ณ„ยท์ œ์–ดยทํƒœ์Šคํฌ ์„ฑ๋Šฅ์„ ๋ณด๋‹ค ํ˜„์‹ค์ ์œผ๋กœ ํ‰๊ฐ€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Newton์€ Isaac Lab๊ณผ ํ•จ๊ป˜ ๋™์ž‘ํ•  ๋ฟ ์•„๋‹ˆ๋ผ, ๋…๋ฆฝ Python ๋ชจ๋“œ๋กœ๋„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋ฌผ๋ฆฌ ์‹œ์Šคํ…œ์„ ์‹คํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.4.1 Franka ์•”(๋กœ๋ด‡ ํŒ”) + Cloth(์ฒœ) ๋ฐ๋ชจ ์‹คํ–‰ ์˜ˆ์ œ

  1. Newton ์ €์žฅ์†Œ ๋ฃจํŠธ์—์„œ ๋ฐ๋ชจ๋ฅผ ํ•œ ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํ™˜๊ฒฝ ์„ค์ •:
# Newton ์˜ˆ์ œ ์‹คํ–‰์„ ์œ„ํ•œ uv ํ™˜๊ฒฝ ์„ค์ •
uv sync --extra examples
  1. Franka ์•”๊ณผ ์ฒœ ๋ฐ๋ชจ ์‹คํ–‰:
# Franka arm + cloth ๋ฐ๋ชจ ์‹คํ–‰
uv run -m newton.examples cloth_franka

๋ฐ๋ชจ๋Š” ์‹ค์‹œ๊ฐ„ GPU ๊ฐ€์† ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋ณด์—ฌ์ฃผ๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ทฐ์–ด๋ฅผ ์—ด๋ฉฐ, Franka-cloth ๋ฐ๋ชจ๋Š” GPU ๊ธฐ๋ฐ˜ VBD Cloth ์†”๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. RTX 4090์—์„œ ์•ฝ 30 FPS๋กœ ์‹คํ–‰๋˜๋ฉฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋‚ด ์นจํˆฌ(penetration) ์—†๋Š” ์ ‘์ด‰์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ GPU ๊ธฐ๋ฐ˜ ์นจํˆฌ-์ œ๊ฑฐ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ(์˜ˆ: GPU-IPC)์™€ ๋น„๊ตํ•ด 300๋ฐฐ ์ด์ƒ์˜ ์„ฑ๋Šฅ ์šฐ์œ„๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋“ฑ, ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์™„์ „ ์นจํˆฌ-ํ”„๋ฆฌ(fully penetration-free) ์ฒœ ์กฐ์ž‘ ๋ฐ๋ชจ ์ค‘ ๋งค์šฐ ๋น ๋ฅธ ํŽธ์ž…๋‹ˆ๋‹ค.

1.4.2 ๋ฉ€ํ‹ฐํ”ผ์ง์Šค ๊ฒฐํ•ฉ ์ดํ•ดํ•˜๊ธฐ

  • ์ด ๋ฐ๋ชจ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋™์—ญํ•™์  ๊ฑฐ๋™์„ ๊ฐ€์ง„ ์‹œ์Šคํ…œ์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฉ€ํ‹ฐํ”ผ์ง์Šค ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ตฌ์„ฑ์š”์†Œ์— ์ „๋ฌธํ™”๋œ ์†”๋ฒ„๋ฅผ ํ• ๋‹นํ•จ์œผ๋กœ์จ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ ์Šคํฌ๋ฆฝํŠธ(example_cloth_franka.py)์—์„œ ์†”๋ฒ„ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
# ๋กœ๋ด‡์šฉ Featherstone ์†”๋ฒ„ ์ดˆ๊ธฐํ™”
self.robot_solver = SolverFeatherstone(self.model, ...)

# ์ฒœ์šฉ Vertex-Block Descent (VBD) ์†”๋ฒ„ ์ดˆ๊ธฐํ™”
self.cloth_solver = SolverVBD(self.model, ...)
  • ๋กœ๋ด‡ ์†”๋ฒ„๋ฅผ SolverFeatherstone ๋Œ€์‹  SolverMuJoCo์ฒ˜๋Ÿผ ๊ฐ•์ฒด ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ง€์›ํ•˜๋Š” ๋‹ค๋ฅธ ์†”๋ฒ„๋กœ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์ œ๋Š” ๋‹จ๋ฐฉํ–ฅ(one-way) ๊ฒฐํ•ฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(๊ฐ•์ฒด๊ฐ€ ๋ณ€ํ˜•์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€๋งŒ, ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ ์˜ํ–ฅ์€ ๋ฌด์‹œ). ์ฒœ ์กฐ์ž‘๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์ฒœ์ด ๋กœ๋ด‡ ๋™์—ญํ•™์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ด ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ์–ด ์ด ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฃจํ”„(๋‹จ์ˆœํ™”๋œ ํ˜•ํƒœ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
def simulate(self):
    for _step in range(self.sim_substeps):
        # 1. ๋กœ๋ด‡ ์†”๋ฒ„๋ฅผ ํ•œ ์Šคํ… ์ง„ํ–‰
        self.robot_solver.step(self.state_0, self.state_1, ...)

        # 2. ๋กœ๋ด‡๊ณผ ์ฒœ ์ž…์ž ๊ฐ„ ์ถฉ๋Œ ์ฒดํฌ
        self.contacts = self.model.collide(self.state_0, ...)

        # 3. ๋กœ๋ด‡์˜ ์ถฉ๋Œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ฒœ ์†”๋ฒ„ ํ•œ ์Šคํ… ์ง„ํ–‰
        self.cloth_solver.step(self.state_0, self.state_1, ..., self.contacts, ...)
  • ์ด์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ๋ฃจํ”„๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉ๋˜๋Š”์ง€๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค. ํŒ€์€ ํ–ฅํ›„ ์–‘๋ฐฉํ–ฅ(two-way) ๊ฒฐํ•ฉ(์˜ˆ: ํ™ยท์ง„ํ™๊ณผ ๊ฐ™์€ ๋ณ€ํ˜•์„ฑ ์ง€๋ฉด ์œ„์—์„œ์˜ ๋ณดํ–‰ ์‹œ ์ง€๋ฉด์ด ๊ฐ•์ฒด์— ์—ญ์œผ๋กœ ํž˜์„ ๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ) ๋ฐ ์ผ๋ถ€ ์†”๋ฒ„ ์กฐํ•ฉ์— ๋Œ€ํ•œ ์•”์‹œ์ (implicit) ๊ฒฐํ•ฉ์„ ํƒ์ƒ‰ํ•ด ๋” ์ž๋™ํ™”๋œ ํž˜ ๊ตํ™˜ ๊ด€๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

1.5 Newton์„ ์ƒํƒœ๊ณ„(์—์ฝ”์‹œ์Šคํ…œ)์ด ์–ด๋–ป๊ฒŒ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‚˜?

Newton ์˜คํ”ˆ ์ƒํƒœ๊ณ„๋Š” ๋น ๋ฅด๊ฒŒ ํ™•์žฅ ์ค‘์ด๋ฉฐ, ์—ฌ๋Ÿฌ ๋Œ€ํ•™ ๋ฐ ๊ธฐ์—…๋“ค์ด ํŠนํ™”๋œ ์†”๋ฒ„์™€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด‰๊ฐ ์„ผ์‹ฑ(tactile sensing)์—์„œ ์ฒœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ์„ฌ์„ธํ•œ ์กฐ์ž‘(dexterous manipulation)์—์„œ ๊ฑฐ์นœ ์ง€ํ˜•(locomotion over rough terrain)์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ํ˜‘์—…์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์‚ฌ๋ก€:

  • ETH Zurich Robotic Systems Lab (RSL): ๋Œ€ํ˜• ์žฅ๋น„ ์ž๋™ํ™”(earthmoving) ๊ด€๋ จ ๋ฉ€ํ‹ฐํ”ผ์ง์Šค ์‹œ๋ฎฌ๋ ˆ์ด์…˜์— Newton์„ ์ ๊ทน ํ™œ์šฉ. ์•”์‹œ์  MPM ์†”๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด ํ† ์–‘ยท์ž๊ฐˆยท๋Œ ๊ฐ™์€ ์ž…์ž ์ƒํ˜ธ์ž‘์šฉ์„ ์บก์ฒ˜. ๋˜ํ•œ Warp๋ฅผ ๋กœ๋ณดํ‹ฑ์Šคยท๊ทธ๋ž˜ํ”ฝ์Šค ์—ฐ๊ตฌ ์ „๋ฐ˜์— ํ™œ์šฉ(๋ฏธ๋ถ„ ๊ฐ€๋Šฅํ•œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ๊ถค์  ์ตœ์ ํ™”, ๋Œ€๊ทœ๋ชจ 3D ์˜๋ฅ˜ ๋ชจ๋ธ๋ง ๋“ฑ).
  • Lightwheel: SimReady ์—์…‹ ๊ฐœ๋ฐœ ๋ฐ ๋ณ€ํ˜•์ฒด(soil, cables ๋“ฑ) ์†”๋ฒ„ ์ตœ์ ํ™”์— ๊ธฐ์—ฌ. ANYmal ์ฟผ๋“œ๋ŸฌํŽ˜๋“œ๊ฐ€ ๋‹ค์ค‘ ์žฌ์งˆ๋กœ ๊ตฌ์„ฑ๋œ ๋น„๊ฐ•์ฒด(non-rigid) ์ง€ํ˜•(๋ชจ๋ž˜ยท์ž๊ฐˆ ๋“ฑ) ์œ„๋ฅผ ์ด๋™ํ•˜๋Š” ๋ฐ MPM ์†”๋ฒ„๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐ๋ชจ๋ฅผ ์ œ์ž‘.
  • Peking University (PKU): IPC ๊ธฐ๋ฐ˜ ์†”๋ฒ„(Taccel)๋ฅผ Newton์— ํ†ตํ•ฉํ•ด ๋น„์ „ ๊ธฐ๋ฐ˜ ์ด‰๊ฐ ์„ผ์‹ฑ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ํ™•์žฅ. Newton์˜ GPU ๊ฐ€์†ยท๋ฏธ๋ถ„ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด ์„ฌ์„ธํ•œ ์ ‘์ด‰ ์ƒํ˜ธ์ž‘์šฉ์„ ๋ชจ๋ธ๋ง.
  • Style3D: ์˜๋ฅ˜ยท์—ฐ์„ฑ์ฒด ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ธฐ์ˆ ์„ Newton์œผ๋กœ ํ†ตํ•ฉ, ์ˆ˜๋ฐฑ๋งŒ ์ •์  ์ˆ˜์ค€์˜ ๋Œ€๊ทœ๋ชจ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ API ๋…ธ์ถœ ๊ณ„ํš.
  • TUM (Technical University of Munich): ์‹ค์ œ ๋กœ๋ด‡์—์„œ ๊ฒ€์ฆ๋œ ์ˆ™๋ จ๋œ ์กฐ์ž‘ ์ •์ฑ…์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ๋‹ค์‹œ ์žฌ์ƒ(์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒ€์ฆ)ํ•˜๋Š” ์ž‘์—… ๋“ฑ์„ ์ง„ํ–‰ ์ค‘์ด๋ฉฐ, MuJoCo Warp์—์„œ 4,000 ๋ณ‘๋ ฌ ํ™˜๊ฒฝ์œผ๋กœ ํ•™์Šตํ•˜๋Š” ๊ฒƒ๋„ ์ด๋ฏธ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ณด๊ณ . ํ–ฅํ›„ ํ•˜๋“œ์›จ์–ด๋กœ์˜ ์ „์†ก ๋ฐ ๊ณต๊ฐ„ ๋ถ„ํ•ด ์ด‰๊ฐ(Spatially resolved tactile skin)์„ ์ด์šฉํ•œ ๋ฏธ์„ธ ์กฐ์ž‘(fine manipulation)์œผ๋กœ ํ™•์žฅ ์˜ˆ์ •.

1.6 Newton ์‹œ์ž‘ํ•˜๊ธฐ(Get started)

  • Newton ๋ฌผ๋ฆฌ ์—”์ง„์€ ๋ชจ๋“ˆํ˜•ยทํ™•์žฅํ˜•ยท์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋ฌด๊ด€ํ•œ(simulator-agnostic) ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ๋กœ๋ด‡ ํ•™์Šต์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์†”๋ฒ„ ๊ฒฐํ•ฉ์„ ๊ฐ„๋‹จํžˆ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฃผ๋„ ํ”„๋กœ์ ํŠธ๋กœ์„œ ๊ฐœ๋ฐœ์ž๋“ค์€ Newton์„ ์‚ฌ์šฉยท๋ฐฐํฌยทํ™•์žฅํ•˜๊ณ , ์ปค์Šคํ…€ ์†”๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•ด ์ƒํƒœ๊ณ„์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ (์ฃผ์š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ/์ž๋ฃŒ)

  • Newton standalone Beta ์‹œ์ž‘: GitHub ๋ ˆํฌ์ง€ํ† ๋ฆฌ newton-physics/newton โ€” https://github.com/newton-physics/newton.
  • Isaac Lab์—์„œ Newton ์‚ฌ์šฉํ•ด๋ณด๊ธฐ: Isaac Lab GitHub โ€” https://github.com/isaac-sim/IsaacLab.
  • Newton Developer(์ถ”๊ฐ€ ์ž๋ฃŒ): (์›๋ฌธ ๋‚ด ๋งํฌ: Newton Developer).

1.7 ํ–‰์‚ฌ ๋ฐ ์ฑŒ๋ฆฐ์ง€ ๊ด€๋ จ ์ •๋ณด

  • ๋ณธ ๊ธ€์— ์†Œ๊ฐœ๋œ ์—ฐ๊ตฌ๋Š” 2025๋…„ 9์›” 27์ผ~10์›” 2์ผ ์„œ์šธ์—์„œ ์—ด๋ฆฌ๋Š” CoRL ๋ฐ Humanoids์—์„œ ์ „์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋˜ํ•œ 2025 BEHAVIOR Challenge(๊ฐ€์ •์šฉ ์ž‘์—… 50๊ฐœ ๋ฐ 10,000๊ฐœ ์›๊ฒฉ์กฐ์ž‘ ๋ฐ๋ชจ ํฌํ•จ)์— ์ฐธ์—ฌํ•ด ๋ณผ ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

1.7.1 ์›๋ฌธ ์ฐธ์กฐ

  • ์›๋ฌธ ๊ธฐ์‚ฌ: https://developer.nvidia.com/blog/train-a-quadruped-locomotion-policy-and-simulate-cloth-manipulation-with-nvidia-isaac-lab-and-newton/
  • Newton GitHub: https://github.com/newton-physics/newton
  • Isaac Lab (GitHub / ๋ฌธ์„œ): https://github.com/isaac-sim/IsaacLab ๋ฐ https://isaac-sim.github.io (๋ฌธ์„œ ํŽ˜์ด์ง€)
  • Newton Visualizer: (์›๋ฌธ์— ์–ธ๊ธ‰๋œ Newton Visualizer ๋งํฌ) โ€” https://isaac-sim.github.io (๊ด€๋ จ ํŽ˜์ด์ง€).

์•„๋ž˜๋Š” NVIDIA ๊ฐœ๋ฐœ์ž ๋ธ”๋กœ๊ทธ ๊ธฐ์‚ฌ ์ค‘ Sim2Sim ์ „์ด(transfer) ๊ด€๋ จ ์„น์…˜๊ณผ cloth ์˜ˆ์ œ(example_cloth_franka.py)์— ๋‚˜์˜ค๋Š” ์ฝ”๋“œ/์„ค๋ช… ๋ถ€๋ถ„์„ ์ƒ์„ธํ•˜๊ฒŒ ์ง์—ญ(์ฝ”๋“œ ์ฃผ์„ ํฌํ•จ)ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2 Sim2Sim ์ „์ด (์›๋ฌธ ์„น์…˜: Step 2: Validate the policy with Sim2Sim transfer)

์›๋ฌธ ์š”์ง€(ํ•œ ๋ฌธ์žฅ ์š”์•ฝ) Sim2Sim ์ „์ด๋Š” ์ •์ฑ…์ด ํŠน์ • ๋ฌผ๋ฆฌ ์—”์ง„ ํŠน์„ฑ์— ๊ณผ์ ํ•ฉ(overfit)๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ค‘์š”ํ•œ ๊ฒ€์ฆ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ(์˜ˆ: PhysX์™€ Newton) ์‚ฌ์ด์—์„œ ์ž˜ ์ „์ด๋˜๋Š” ์ •์ฑ…์€ ์‹ค์ œ ๋กœ๋ด‡์—์„œ๋„ ์„ฑ๊ณตํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

2.1 ์ง์—ญ (์ƒ์„ธ)

Sim2Sim ์ „์ด๋Š” ๋‹จ์ผ ๋ฌผ๋ฆฌ ์—”์ง„์˜ ํŠน์ • ํŠน์„ฑ์— ์ •์ฑ…์ด ๊ณผ์ ํ•ฉ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ์ •ํ•ฉ ๊ฒ€์ฆ(sanity check)์ž…๋‹ˆ๋‹ค. PhysX์™€ Newton๊ณผ ๊ฐ™์€ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ์‚ฌ์ด์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์ „์ด๋˜๋Š” ์ •์ฑ…์€ ์‹ค์ œ ๋กœ๋ด‡์—์„œ ๋™์ž‘ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํ›จ์”ฌ ๋†’์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ํ•ต์‹ฌ์ ์ธ ๋ฌธ์ œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ ์—”์ง„์ด ๋กœ๋ด‡์˜ USD๋ฅผ ํŒŒ์‹ฑ(parsing)ํ•  ๋•Œ ๊ด€์ ˆ(joint)์˜ ์ˆœ์„œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ YAML ๋งคํ•‘ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ฑ…์˜ ๊ด€์ธก(observations)๊ณผ ์•ก์…˜(actions)์„ ์žฌ๋งคํ•‘(remap)ํ•จ์œผ๋กœ์จ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

PhysX ๊ธฐ๋ฐ˜ Isaac Lab์—์„œ Newton์œผ๋กœ ํ•™์Šต๋œ(๋˜๋Š” ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์˜) ์ •์ฑ…์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ œ๊ณต๋œ ์ „์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์˜ˆ(์›๋ฌธ ๋ช…๋ น์–ด ํ˜•์‹):

# Newton์—์„œ ํ•™์Šตํ•œ ์ •์ฑ…์„ PhysX ๊ธฐ๋ฐ˜ Isaac Lab์—์„œ ์‹คํ–‰ (์˜ˆ์‹œ)
./isaaclab.sh -p scripts/newton_sim2sim/rsl_rl_transfer.py \
    --task=Isaac-Velocity-Flat-Anymal-D-v0 \
    --num_envs=32 \
    --checkpoint <PATH_TO_POLICY_CHECKPOINT> \
    --policy_transfer_file scripts/sim2sim_transfer/config/newton_to_physx_anymal_d.yaml

์ด ์ „์ด ์Šคํฌ๋ฆฝํŠธ๋Š” isaac-sim/IsaacLab GitHub ์ €์žฅ์†Œ์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ๋ฐ ์ œํ•œ ์‚ฌํ•ญ (์›๋ฌธ ๋‚ด์šฉ์˜ ์ง์—ญ)

  • ์ด ์ „์ด ๋ฐฉ๋ฒ•์€ Unitree G1, Unitree Go2, Unitree H1, ๋ฐ ANYmal-D ๋กœ๋ด‡์œผ๋กœ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • PhysXโ†’Newton ์ „์ด๋Š” physx_to_newton_*.yaml ๋งคํ•‘ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Newtonโ†’PhysX ์ „์ด๋Š” newton_to_physx_*.yaml ๋งคํ•‘ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€์ธก ์žฌ๋งคํ•‘(observation remapping)์€ ๊ธฐ๋ณธ(base) ๊ด€์ธก ๋‹ค์Œ์— ๊ด€์ ˆ ๊ด€์ธก์ด ์˜ค๋Š”(locomotion layout) ํ˜•ํƒœ๋ฅผ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ด€์ธก ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ scripts/sim2sim_transfer/rsl_rl_transfer.py ํŒŒ์ผ์˜ get_joint_mappings ํ•จ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์•„์ด์ž‘ ์‹ฌ)
  • ์ƒˆ ๋กœ๋ด‡์ด๋‚˜ ๋ฐฑ์—”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ์†Œ์Šค์™€ ํƒ€๊นƒ(์˜ˆ: PhysX vs Newton)์—์„œ ๋™์ผํ•œ ๊ด€์ ˆ ์ด๋ฆ„์„ ๊ฐ€์ง€๋ฉฐ YAML ๋ชฉ๋ก์ด ๊ฐ ๋ฐฑ์—”๋“œ๊ฐ€ ๊ด€์ ˆ์„ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3 cloth ์˜ˆ์ œ (example_cloth_franka.py) ๊ด€๋ จ ๊ธฐ์ˆ  ์„ค๋ช… ๋ฐ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ ์ง์—ญ

์›๋ฌธ ์š”์ง€(ํ•œ ๋ฌธ์žฅ ์š”์•ฝ) Newton์˜ standalone ์˜ˆ์ œ์—๋Š” Franka ๋กœ๋ด‡์ด ์ฒœ(cloth)์„ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ๋ชจ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ์†”๋ฒ„(์˜ˆ: ๋กœ๋ด‡์šฉ Featherstone, ์ฒœ์šฉ VBD)๋ฅผ ์กฐํ•ฉํ•ด ๋ฉ€ํ‹ฐํ”ผ์ง์Šค(multiphyics) ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

3.1 ์ง์—ญ (์ƒ์„ธ)

Newton์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ ํŠน์„ฑ์„ ๊ฐ€์ง„ ์‹œ์Šคํ…œ(์˜ˆ: ๊ฐ•์ฒด ๋กœ๋ด‡๊ณผ ๋ณ€ํ˜•์ฒด์ธ ์ฒœ)์ด ์ƒํ˜ธ์ž‘์šฉํ•˜๋„๋ก ๋ฉ€ํ‹ฐํ”ผ์ง์Šค ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ๋ชจ๋Š” ๊ฐ ์ปดํฌ๋„ŒํŠธ์— ํŠนํ™”๋œ ์†”๋ฒ„๋ฅผ ํ• ๋‹น(assign)ํ•จ์œผ๋กœ์จ ์ด๋ฅผ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. example_cloth_franka.py ํŒŒ์ผ์„ ๋ณด๋ฉด ์†”๋ฒ„๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ดˆ๊ธฐํ™”๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# ๋กœ๋ด‡์šฉ Featherstone ์†”๋ฒ„ ์ดˆ๊ธฐํ™”
self.robot_solver = SolverFeatherstone(self.model, ...)

# ์ฒœ์šฉ Vertex-Block Descent (VBD) ์†”๋ฒ„ ์ดˆ๊ธฐํ™”
self.cloth_solver = SolverVBD(self.model, ...)

์›๋ฌธ ์„ค๋ช…์— ๋”ฐ๋ฅด๋ฉด, ๋กœ๋ด‡ ์†”๋ฒ„๋ฅผ SolverFeatherstone ๋Œ€์‹  SolverMuJoCo ๊ฐ™์€ ๋‹ค๋ฅธ ๊ฐ•์ฒด ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ง€์›ํ•˜๋Š” ์†”๋ฒ„๋กœ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฃจํ”„์—์„œ ์ด๋“ค ์†”๋ฒ„๋ฅผ ์–ด๋–ป๊ฒŒ ์กฐ์ •ํ•˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ๋Š” ์ผ๋ฐฉํ–ฅ ๊ฒฐํ•ฉ(one-way coupling)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค โ€” ์ฆ‰, ๊ฐ•์ฒด๊ฐ€ ๋ณ€ํ˜•์ฒด(์ฒœ)์— ์˜ํ–ฅ์„ ์ฃผ์ง€๋งŒ ์ฒœ์ด ๋กœ๋ด‡์˜ ๋™์—ญํ•™์— ๋˜๋Œ๋ ค์ฃผ๋Š” ์˜ํ–ฅ์€ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ฒœ ์กฐ์ž‘(cloth manipulation) ์‚ฌ๋ก€์—์„œ๋Š” ์ฒœ์ด ๋กœ๋ด‡ ๋™์—ญํ•™์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ด ๋ฌด์‹œ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋  ๋•Œ ํ•ฉ๋ฆฌ์ ์ธ ์ ‘๊ทผ์ž…๋‹ˆ๋‹ค.

์›๋ฌธ์— ๋‚˜์˜ค๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฃจํ”„(๋‹จ์ˆœํ™”๋œ ํ˜•ํƒœ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

# example_cloth_franka.py์˜ ๋‹จ์ˆœํ™”๋œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฃจํ”„ ๋ณด๊ธฐ

def simulate(self):
    for _step in range(self.sim_substeps):
        # 1. ๋กœ๋ด‡ ์†”๋ฒ„๋ฅผ ์•ž์œผ๋กœ ํ•œ ์Šคํ… ์ง„ํ–‰
        self.robot_solver.step(self.state_0, self.state_1, ...)

        # 2. ๋กœ๋ด‡๊ณผ ์ฒœ ์‚ฌ์ด์˜ ์ถฉ๋Œ(contacts)์„ ๊ฒ€์‚ฌ
        self.contacts = self.model.collide(self.state_0, ...)

        # 3. ๋กœ๋ด‡ ์ถฉ๋Œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ฒœ ์†”๋ฒ„๋ฅผ ํ•œ ์Šคํ… ์ง„ํ–‰
        self.cloth_solver.step(self.state_0, self.state_1, ..., self.contacts, ...)

(์œ„๋Š” ์›๋ฌธ์— ์žˆ๋Š” ๊ฐ„๋‹จํ™”๋œ ์ฝ”๋“œ ๋ธ”๋ก์˜ ์ง์—ญ์ž…๋‹ˆ๋‹ค.) ์ด ๋ช…์‹œ์ (explicit), ์‚ฌ์šฉ์ž ์ œ์–ดํ˜• ๋ฃจํ”„๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ์—ฐ๊ตฌ์ž์—๊ฒŒ ๋ฏธ์„ธํ•œ ์ œ์–ด๊ถŒ(fine-grained control)์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์›๋ฌธ ํŒ€์€ ์•ž์œผ๋กœ ์ƒํ˜ธ ์˜ํ–ฅ(two-way coupling) ๋˜๋Š” ์•”๋ฌต์ (implicit) ๊ฒฐํ•ฉ ๋ฐฉ์‹์„ ๋” ํƒ๊ตฌํ•˜์—ฌ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๋ด‡์ด ํ† ์–‘์ด๋‚˜ ์ง„ํ™ ๊ฐ™์€ ๋ณ€ํ˜•์„ฑ ์ง€๋ฉด ์œ„๋ฅผ ๊ฑธ์„ ๋•Œ์ฒ˜๋Ÿผ ๋‘ ์‹œ์Šคํ…œ์ด ์„œ๋กœ์— ๊ฐ•ํ•˜๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ƒํ™ฉ์— ๋Œ€์‘ํ•˜๊ณ ์ž ํ•œ๋‹ค๊ณ  ๋ฐํžˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

3.2 ์‹คํ–‰ ๋ฐฉ๋ฒ•(์›๋ฌธ์—์„œ ์•ˆ๋‚ดํ•œ ๋ช…๋ น์–ด ๋ณด์กด)

Newton ์ €์žฅ์†Œ ๋ฃจํŠธ์—์„œ ๋‹ค์Œ ๋‹จ์ผ ๋ช…๋ น์œผ๋กœ Franka-์ฒœ ๋ฐ๋ชจ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์›๋ฌธ ๋ช…๋ น์–ด ๊ทธ๋Œ€๋กœ ๋ณด์กด):

# Newton ์˜ˆ์ œ ํ™˜๊ฒฝ ์„ค์ • (์›๋ฌธ)
uv sync --extra examples

# Franka arm + cloth ๋ฐ๋ชจ ์‹คํ–‰ (์›๋ฌธ)
uv run -m newton.examples cloth_franka

์›๋ฌธ์€ ๋˜ํ•œ ์ด ๋ฐ๋ชจ๊ฐ€ GPU ๊ธฐ๋ฐ˜ VBD Cloth ์†”๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, RTX 4090 ๊ธฐ์ค€์œผ๋กœ ์•ฝ 30 FPS ์ •๋„๋กœ ๋™์ž‘ํ•˜๊ณ  ์นจํˆฌ ์—†๋Š”(penetration-free) ์ ‘์ด‰์„ ๋ณด์žฅํ•œ๋‹ค๊ณ  ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ GPU ๊ธฐ๋ฐ˜ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ(์˜ˆ: GPU-IPC)์™€ ๋น„๊ตํ•ด ์ด ๋ฐ๋ชจ๊ฐ€ ๋งค์šฐ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰(performance)์„ ๋‹ฌ์„ฑํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.


4 ์ฐธ๊ณ (์›๋ฌธ ๋งํฌ๋“ค โ€” ์›๋ฌธ์—์„œ ๊ทธ๋Œ€๋กœ ๋ณด์กด)

  • ๊ธฐ์‚ฌ ์›๋ฌธ: https://developer.nvidia.com/blog/train-a-quadruped-locomotion-policy-and-simulate-cloth-manipulation-with-nvidia-isaac-lab-and-newton/
  • Isaac Lab Sim2Sim ๋ฌธ์„œ(๊ด€๋ จ): https://isaac-sim.github.io/IsaacLab/โ€ฆ (๋ฌธ์„œ ๋‚ด Sim2Sim ์„ค๋ช…๊ณผ ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ๋ฅผ ์ฐธ์กฐ). (์•„์ด์ž‘ ์‹ฌ)
  • Newton GitHub: https://github.com/newton-physics/newton (์˜ˆ์ œ ์‹คํ–‰ ๋ฐฉ๋ฒ• ๋ฐ cloth_franka ์˜ˆ์ œ๊ฐ€ ์ €์žฅ์†Œ ์˜ˆ์ œ ๋ชฉ๋ก์— ๋‚˜์˜ต๋‹ˆ๋‹ค). (GitHub)

Copyright 2024, Jung Yeon Lee