Building a Healthcare Robot from Simulation to Deployment with NVIDIA Isaac
๐ ์์ฝ
NVIDIA Isaac for Healthcare๋ ํฌ์ค์ผ์ด ๋ก๋ณดํฑ์ค ๋ถ์ผ์ ๋ฐ์ดํฐ ๊ฒฉ์ฐจ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ฎฌ๋ ์ด์ ๊ณผ ์ค์ ํ๋์จ์ด๋ฅผ ํตํฉํ๋ ์๋ก์ด ๊ฐ๋ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ถ์ํ์ต๋๋ค. v0.4 ๋ฆด๋ฆฌ์ค๋ SO-ARM ์คํํฐ ์ํฌํ๋ก์ "์์ฒด ์์ ์ค ๊ตฌ์ถ" ํํ ๋ฆฌ์ผ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์๋ฎฌ๋ ์ด์ ์์ ํ๋ จ, ๋ฐฐํฌ๊น์ง์ ์ ์ฒด ์ํฌํ๋ก๋ฅผ ๊ฒฝํํ๊ณ ์ค์ ํ๋์จ์ด์์ ์์จ ์์คํ ์ ๊ตฌ์ถ ๋ฐ ๊ฒ์ฆํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ด ์ํฌํ๋ก๋ ์ค์ ๋ฐ์ดํฐ ์์ง, GR00t N1.5 ๋ชจ๋ธ ํ๋ จ, ํ๋์จ์ด ๋ฐฐํฌ๋ฅผ ํฌํจํ๋ 3๋จ๊ณ ํ์ดํ๋ผ์ธ์ ๊ตฌํํ๋ฉฐ, ํนํ 93% ์ด์์ ํ๋ จ ๋ฐ์ดํฐ๊ฐ ์๋ฎฌ๋ ์ด์ ์์ ํฉ์ฑ์ ์ผ๋ก ์์ฑ๋์ด Sim2Real ์ ๊ทผ ๋ฐฉ์์ ํจ๊ณผ๋ฅผ ๊ฐ์กฐํฉ๋๋ค.
์๊ฐ
์๋ฎฌ๋ ์ด์ ์ ๋ฐ์ดํฐ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๊ธฐ ์ํด ์๋ฃ ์์ ๋ถ์ผ์์ ์ค๋ซ๋์ ์ค์ํ ์ญํ ์ ํด์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง ํฌ์ค์ผ์ด ๋ก๋ณดํฑ์ค ๋ถ์ผ์์๋ ์๋ฎฌ๋ ์ด์ ์ด ๋๋ฌด ๋๋ฆฌ๊ฑฐ๋, ๋ถ๋ฆฌ๋์ด ์๊ฑฐ๋, ์ค์ ์์คํ ์ผ๋ก์ ์ ํ์ด ์ด๋ ค์ด ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค.
AI ํฌ์ค์ผ์ด ๋ก๋ณดํฑ์ค๋ฅผ ์ํ ๊ฐ๋ฐ์ ํ๋ ์์ํฌ์ธ NVIDIA Isaac for Healthcare๋ ์๋ฎฌ๋ ์ด์ ๊ณผ ํ๋์จ์ด ๋ชจ๋์์ ์๋ํ๋ ํตํฉ ๋ฐ์ดํฐ ์์ง, ํ๋ จ ๋ฐ ํ๊ฐ ํ์ดํ๋ผ์ธ์ ์ ๊ณตํ์ฌ ์ด๋ฌํ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋๋ก ํฌ์ค์ผ์ด ๋ก๋ณดํฑ์ค ๊ฐ๋ฐ์๋ฅผ ์ง์ํฉ๋๋ค. ํนํ Isaac for Healthcare v0.4 ๋ฆด๋ฆฌ์ค๋ ํฌ์ค์ผ์ด ๊ฐ๋ฐ์์๊ฒ ์๋ํฌ์๋ SO - ARM ๊ธฐ๋ฐ ์คํํฐ ์ํฌํ๋ก์ ์์ฒด ์์ ์ค ๊ตฌ์ถ ํํ ๋ฆฌ์ผ์ ์ ๊ณตํฉ๋๋ค. SO-ARM ์คํํฐ ์ํฌํ๋ก๋ MedTech ๊ฐ๋ฐ์๊ฐ ์๋ฎฌ๋ ์ด์ ์์ ํ๋ จ, ๋ฐฐํฌ์ ์ด๋ฅด๋ ์ ์ฒด ์ํฌํ๋ก๋ฅผ ๊ฒฝํํ๊ณ ์ค์ ํ๋์จ์ด์์ ์ฆ์ ์์จ ์์คํ ์ ๊ตฌ์ถ ๋ฐ ๊ฒ์ฆํ ์ ์๋๋ก ์ง์ ์ฅ๋ฒฝ์ ๋ฎ์ถฅ๋๋ค.
์ด ๊ฒ์๋ฌผ์์๋ ์คํํฐ ์ํฌํ๋ก์ ํด๋น ๊ธฐ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋จ๊ณ๋ณ๋ก ์ดํด๋ณด๋ฉฐ, ์ด์ ๊ณผ๋ ๋น๊ตํ ์ ์์ ์ ๋๋ก ์งง์ ์๊ฐ์ ์์ ๋ณด์กฐ ๋ก๋ด์ ๊ตฌ์ถํ ์ ์๋๋ก ๋๊ฒ ์ต๋๋ค.
SO-ARM ์คํํฐ ์ํฌํ๋ก; ์ฒดํ๋ ์์ ๋ณด์กฐ ์์คํ ๊ตฌ์ถ
SO-ARM ์คํํฐ ์ํฌํ๋ก๋ ์์ ๋ณด์กฐ ์์ ์ ํ์ํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ ์ํ๋ฉฐ, ๊ฐ๋ฐ์์๊ฒ ์์จ ์์ ๋ณด์กฐ๋ฅผ ์ํ ์์ ํ ์๋ํฌ์๋ ํ์ดํ๋ผ์ธ์ ์ ๊ณตํฉ๋๋ค.
- LeRobot์ ์ฌ์ฉํ์ฌ ์ค์ ์ธ๊ณ ๋ฐ ํฉ์ฑ ๋ฐ์ดํฐ ์์ง
- GR00t N1.5 ๋ฏธ์ธ ์กฐ์ , IsaacLab์์ ํ๊ฐ ํ ํ๋์จ์ด์ ๋ฐฐํฌ
์ด ์ํฌํ๋ก๋ ๊ฐ๋ฐ์์๊ฒ ์์ ์ค๋ก ์ด๋ํ๊ธฐ ์ ์ ๋ณด์กฐ ๊ธฐ์ ์ ํ๋ จํ๊ณ ๊ฐ์ ํ ์ ์๋ ์์ ํ๊ณ ๋ฐ๋ณต ๊ฐ๋ฅํ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
๊ธฐ์ ๊ตฌํ
์ํฌํ๋ก๋ ์๋ฎฌ๋ ์ด์ ๊ณผ ์ค์ ํ๋์จ์ด๋ฅผ ํตํฉํ๋ 3๋จ๊ณ ํ์ดํ๋ผ์ธ์ ๊ตฌํํฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง: SO101 ๋ฐ LeRobot์ ์ฌ์ฉํ ์๋ฎฌ๋ ์ด์ ๊ณผ ์ค์ ์ธ๊ณ์ ํ ๋ ์คํผ๋ ์ด์ ์์ฐ ํผํฉ
- ๋ชจ๋ธ ํ๋ จ: ๋์ผ ์นด๋ฉ๋ผ ๋น์ ์ ๊ฐ์ถ ํตํฉ ๋ฐ์ดํฐ์ ์์ GR00T N1.5 ๋ฏธ์ธ ์กฐ์
- ์ ์ฑ ๋ฐฐํฌ: RTI DDS ํต์ ์ ์ฌ์ฉํ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด์์์ ์ค์๊ฐ ์ถ๋ก
ํนํ, ์ ์ฑ ํ๋ จ์ ์ฌ์ฉ๋ ๋ฐ์ดํฐ์ 93% ์ด์์ด ์๋ฎฌ๋ ์ด์ ์์ ํฉ์ฑ์ ์ผ๋ก ์์ฑ๋์ด ๋ก๋ด ๋ฐ์ดํฐ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๋ ๋ฐ ์์ด ์๋ฎฌ๋ ์ด์ ์ ๊ฐ์ ์ ๊ฐ์กฐํฉ๋๋ค.
Sim2Real ํผํฉ ํ๋ จ ์ ๊ทผ ๋ฐฉ์
์ด ์ํฌํ๋ก๋ ์ค์ ์ธ๊ณ์์ ๋ก๋ด์ ํ๋ จํ๋ ๊ฒ์ด ๋น์ธ๊ณ ์ ํ์ ์ด๋ฉฐ, ์์ ์๋ฎฌ๋ ์ด์ ์ ์ค์ ์ธ๊ณ์ ๋ณต์ก์ฑ์ ํฌ์ฐฉํ์ง ๋ชปํ๋ ๊ทผ๋ณธ์ ์ธ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ฎฌ๋ ์ด์ ๊ณผ ์ค์ ์ธ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ค์ํ ์๋๋ฆฌ์ค์ ํ๊ฒฝ ๋ณํ๋ฅผ ์ํ ์ฝ 70๊ฐ์ ์๋ฎฌ๋ ์ด์ ์ํผ์๋์ ์ง์ ์ฑ ๋ฐ ๊ธฐ๋ฐํ๋ฅผ ์ํ 10-20๊ฐ์ ์ค์ ์ธ๊ณ ์ํผ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ํผํฉ ํ๋ จ์ ๋จ์ผ ๋๋ฉ์ธ์ ๋์ด ์ผ๋ฐํ๋๋ ์ ์ฑ ์ ์์ฑํฉ๋๋ค.
ํ๋์จ์ด ์๊ตฌ ์ฌํญ
์ํฌํ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ํ๋์จ์ด๋ฅผ ์๊ตฌํฉ๋๋ค.
- GPU: GR00TN1.5 ์ถ๋ก ์ ์ํด ≥30GB VRAM์ ๊ฐ์ถ RT Core ์ง์ ์ํคํ ์ฒ(Ampere ์ด์)
- SO-ARM101 ํ๋ก์: ๋์ผ ์นด๋ฉ๋ผ ๋น์ (์๋ชฉ ๋ฐ ๋ฐฉ)์ ๊ฐ์ถ 6-DOF ์ ๋ฐ ์กฐ์๊ธฐ. SO-ARM101์ 3D ํ๋ฆฐํธ ์ด๋ํฐ๊ฐ ์ฅ์ฐฉ๋ ์๋ชฉ ์นด๋ฉ๋ผ๋ฅผ ํฌํจํ WOWROBO ๋น์ ๊ตฌ์ฑ ์์๋ฅผ ํน์ง์ผ๋ก ํฉ๋๋ค.
- SO-ARM101 ๋ฆฌ๋: ์ ๋ฌธ๊ฐ ์์ฐ ์์ง์ ์ํ 6-DOF ํ ๋ ์คํผ๋ ์ด์ ์ธํฐํ์ด์ค
ํนํ ๊ฐ๋ฐ์๋ DGX Spark ํ๋์์ ๋ชจ๋ ์๋ฎฌ๋ ์ด์ , ํ๋ จ ๋ฐ ๋ฐฐํฌ(๋ฌผ๋ฆฌ์ AI๋ฅผ ์ํ 3๋์ ์ปดํจํฐ ํ์)๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์์ง ๊ตฌํ
LeRobot์์ ์ง์๋๋ SO-ARM101 ํ๋์จ์ด ๋๋ ๊ธฐํ ๋ฒ์ ์ ์ฌ์ฉํ ์ค์ ๋ฐ์ดํฐ ์์ง์ ๊ฒฝ์ฐ:
python lerobot-record \
--robot.type=so101_follower \
--robot.port=<follower_port_id> \
--robot.cameras="{wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, room: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
--robot.id=so101_follower_arm \
--teleop.type=so101_leader \
--teleop.port=<leader_port_id> \
--teleop.id=so101_leader_arm \
--dataset.repo_id=<user>/surgical_assistance/surgical_assistance \
--dataset.num_episodes=15 \
--dataset.single_task="Prepare and hand surgical instruments to surgeon"
์๋ฎฌ๋ ์ด์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์์ง์ ๊ฒฝ์ฐ:
# ํค๋ณด๋ ํ
๋ ์คํผ๋ ์ด์
์ฌ์ฉ
python -m simulation.environments.teleoperation_record \
--enable_cameras \
--record \
--dataset_path=/path/to/save/dataset.hdf5 \
--teleop_device=keyboard
# SO-ARM101 ๋ฆฌ๋ ํ ์ฌ์ฉ
python -m simulation.environments.teleoperation_record \
--port=<your_leader_arm_port_id> \
--enable_cameras \
--record \
--dataset_path=/path/to/save/dataset.hdf5
์๋ฎฌ๋ ์ด์ ํ ๋ ์คํผ๋ ์ด์ ์ ์ด
๋ฌผ๋ฆฌ์ SO-ARM101 ํ๋์จ์ด๊ฐ ์๋ ์ฌ์ฉ์์ ๊ฒฝ์ฐ, ์ํฌํ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ์ธํธ ์ ์ด๋ฅผ ๊ฐ์ถ ํค๋ณด๋ ๊ธฐ๋ฐ ํ ๋ ์คํผ๋ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ์กฐ์ธํธ 1 (์ด๊นจ ํฌ): Q (+) / U (-)
- ์กฐ์ธํธ 2 (์ด๊นจ ๋ฆฌํํธ): W (+) / I (-)
- ์กฐ์ธํธ 3 (ํ๊ฟ์น ๊ตด๊ณก): E (+) / O (-)
- ์กฐ์ธํธ 4 (์๋ชฉ ๊ตด๊ณก): A (+) / J (-)
- ์กฐ์ธํธ 5 (์๋ชฉ ํ์ ): S (+) / K (-)
- ์กฐ์ธํธ 6 (๊ทธ๋ฆฌํผ): D (+) / L (-)
- R ํค: ๋ นํ ํ๊ฒฝ ์ฌ์ค์
- N ํค: ์ํผ์๋๋ฅผ ์ฑ๊ณต์ผ๋ก ํ์
๋ชจ๋ธ ํ๋ จ ํ์ดํ๋ผ์ธ
์๋ฎฌ๋ ์ด์ ๋ฐ ์ค์ ์ธ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์์งํ ํ, ํ๋ จ์ ์ํด ๋ฐ์ดํฐ์ ์ ๋ณํํ๊ณ ๊ฒฐํฉํฉ๋๋ค.
# ์๋ฎฌ๋ ์ด์
๋ฐ์ดํฐ๋ฅผ LeRobot ํ์์ผ๋ก ๋ณํ
python -m training.hdf5_to_lerobot \
--repo_id=surgical_assistance_dataset \
--hdf5_path=/path/to/your/sim_dataset.hdf5 \
--task_description="Autonomous surgical instrument handling and preparation"
# ํผํฉ ๋ฐ์ดํฐ์
์์ GR00T N1.5 ๋ฏธ์ธ ์กฐ์
python -m training.gr00t_n1_5.train \
--dataset_path /path/to/your/surgical_assistance_dataset \
--output_dir /path/to/surgical_checkpoints \
--data_config so100_dualcam
ํ๋ จ๋ ๋ชจ๋ธ์ "์ธ๊ณผ ์์ฌ๋ฅผ ์ํด ๋ฉ์ค๋ฅผ ์ค๋นํด์ค" ๋๋ "ํฌ์ ์ ๊ฑด๋ค์ค"์ ๊ฐ์ ์์ฐ์ด ์ง์นจ์ ์ฒ๋ฆฌํ๊ณ ํด๋น ๋ก๋ด ๋์์ ์คํํฉ๋๋ค. LeRobot ์ต์ ๋ฆด๋ฆฌ์ค(0.4.0)๋ฅผ ์ฌ์ฉํ๋ฉด LeRobot์์ Gr00t N1.5๋ฅผ ๋ค์ดํฐ๋ธ๋ก ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ต๋๋ค!
์๋ํฌ์๋ Sim Collect–Train–Eval ํ์ดํ๋ผ์ธ
์๋ฎฌ๋ ์ด์ ์ ๋ฃจํ์ ์ผ๋ถ์ผ ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํฉ๋๋ค: ์์ง → ํ๋ จ → ํ๊ฐ → ๋ฐฐํฌ.
v0.3๋ถํฐ IsaacLab์ ์ด ์ ์ฒด ํ์ดํ๋ผ์ธ์ ์ง์ํฉ๋๋ค.
์๋ฎฌ๋ ์ด์ ์์ ํฉ์ฑ ๋ฐ์ดํฐ ์์ฑ
- ํค๋ณด๋ ๋๋ ํ๋์จ์ด ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๋ด ํ ๋ ์คํผ๋ ์ด์
- ๋ค์ค ์นด๋ฉ๋ผ ๊ด์ฐฐ, ๋ก๋ด ์ํ ๋ฐ ๋์ ์บก์ฒ
- ์ค์ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์์งํ ์ ์๋ ์ฃ์ง ์ผ์ด์ค๊ฐ ์๋ ๋ค์ํ ๋ฐ์ดํฐ์ ์์ฑ
์ ์ฑ ํ๋ จ ๋ฐ ํ๊ฐ
- Isaac Lab์ RL ํ๋ ์์ํฌ์ PPO ํ๋ จ์ ์ํ ์ฌ์ธต ํตํฉ
- ๋ณ๋ ฌ ํ๊ฒฝ (๋์์ ์์ฒ ๊ฐ์ ์๋ฎฌ๋ ์ด์ )
- ๋ด์ฅ๋ ๊ถค์ ๋ถ์ ๋ฐ ์ฑ๊ณต ์งํ
- ๋ค์ํ ์๋๋ฆฌ์ค์ ๋ํ ํต๊ณ์ ๊ฒ์ฆ
๋ชจ๋ธ์ TensorRT๋ก ๋ณํ
- ํ๋ก๋์ ๋ฐฐํฌ๋ฅผ ์ํ ์๋ ์ต์ ํ
- ๋์ ๋ชจ์ ๋ฐ ๋ค์ค ์นด๋ฉ๋ผ ์ถ๋ก ์ง์
- ์ค์๊ฐ ์ฑ๋ฅ์ ํ์ธํ๊ธฐ ์ํ ๋ฒค์น๋งํน ๋๊ตฌ
์ด๋ฅผ ํตํด ์คํ์์ ๋ฐฐํฌ๊น์ง์ ์๊ฐ์ ๋จ์ถํ๊ณ sim2real์ ์ผ์ ๊ฐ๋ฐ์ ์ค์ฉ์ ์ธ ๋ถ๋ถ์ผ๋ก ๋ง๋ญ๋๋ค.
์์ํ๊ธฐ
Isaac for Healthcare SO-ARM ์คํํฐ ์ํฌํ๋ก๋ฅผ ์ง๊ธ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
- ์ ์ฅ์ ๋ณต์ :
git clone https://github.com/isaac-for-healthcare/i4h-workflows.git - ์ํฌํ๋ก ์ ํ: ์์ ๋ณด์กฐ๋ฅผ ์ํ SO-ARM ์คํํฐ ์ํฌํ๋ก๋ก ์์ํ๊ฑฐ๋ ๋ค๋ฅธ ์ํฌํ๋ก ํ์
- ์ค์ ์คํ: ๊ฐ ์ํฌํ๋ก์๋ ์๋ํ๋ ์ค์ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค (์:
tools/env_setup_so_arm_starter.sh).
๋ฆฌ์์ค
- GitHub ์ ์ฅ์: ์ ์ฒด ์ํฌํ๋ก ๊ตฌํ
- ๋ฌธ์: ์ค์ ๋ฐ ์ฌ์ฉ ๊ฐ์ด๋
- GR00T ๋ชจ๋ธ: ์ฌ์ ํ๋ จ๋ ๊ธฐ์ด ๋ชจ๋ธ
- ํ๋์จ์ด ๊ฐ์ด๋: SO-ARM101 ์ค์ ์ง์นจ
- LeRobot ์ ์ฅ์: ์๋ํฌ์๋ ๋ก๋ณดํฑ์ค ํ์ต
์๋ฌธ ์ถ์ฒ: https://huggingface.co/blog/lerobotxnvidia-healthcare
๋๊ธ
๋๊ธ ์ฐ๊ธฐ