로봇 정책을 학습하려는 팀은 첫 주에 시뮬레이터를 고르고, 그 선택이 로봇 모델 형식, 필요한 GPU, 학습 코드 구조까지 결정합니다. 이 글은 MuJoCo, Isaac Lab, PyBullet, Genesis World 네 가지를 같은 기준으로 비교하고 과제 유형별로 어떤 것을 먼저 검토할지 정리합니다. 시뮬레이터에서 학습한 정책을 실제 로봇으로 옮기는 문제는 Sim-to-Real 격차 해법에서 따로 다룹니다.
비교에 쓴 다섯 가지 기준
시뮬레이터 비교 글이 흔히 “어느 쪽이 빠른가"에서 멈추는데, 속도는 측정 조건(로봇 모델, 접촉 수, 렌더링 여부, GPU)에 따라 순위가 바뀝니다. 그래서 이 글은 공식 문서에서 확인 가능한 구조적 차이를 기준으로 삼습니다.
- 접촉 모델과 솔버: 접촉을 어떤 수학 문제로 푸는지, 어떤 솔버를 고를 수 있는지
- GPU 병렬화 방식: 수천 개 환경을 한 GPU에서 동시에 돌릴 수 있는지, 어떤 하드웨어에서 되는지
- 센서와 렌더링: 카메라·깊이·레이캐스트 같은 시각 입력을 학습 루프 안에서 만들 수 있는지
- 라이선스와 유지 상태: 상용 제품에 넣을 수 있는지, 업데이트가 이어지는지
- 설치 요구 사항: OS, GPU 메모리, 드라이버 조건
네 시뮬레이터 한눈에 비교
| 항목 | MuJoCo (+MJX) | Isaac Lab | PyBullet | Genesis World |
|---|---|---|---|---|
| 라이선스 | Apache 2.0 | BSD-3 (일부 워크플로에 Isaac Sim 등 별도 약관) | zlib | Apache 2.0 |
| 접촉 계산 | 볼록 최적화 기반 소프트 접촉, Newton·CG·PGS 솔버 | Newton, OVPhysX 등 복수 물리 백엔드 | Bullet 강체·충돌 엔진 | 강체·FEM·MPM·PBD·SPH 등 다중 솔버를 한 장면에 결합 |
| GPU 병렬 | MJX-JAX(NVIDIA·AMD GPU, Apple Silicon, TPU), MJX-Warp(NVIDIA GPU) | GPU 가속 프레임워크, 30개 이상 예제 환경 | 실험적 OpenCL GPU 파이프라인 | Quadrants 컴파일러로 CUDA·ROCm·Metal·Vulkan·x86·ARM64 |
| 센서·렌더링 | 기본 OpenGL 시각화, MJX는 물리 중심 | RTX 카메라(RGB·깊이·분할), IMU, 접촉 센서, 레이캐스터 | 기본 렌더러 | Nyx, Luisa(레이 트레이서), Pyrender를 카메라 센서로 연결 |
| 미분 가능성 | MJX-JAX 지원, MJX-Warp 미지원 | 기본 목표 아님 | 미지원 | Quadrants에 autodiff 기능 포함(세부 범위는 문서 확인 필요) |
| 설치 | pip install mujoco | Isaac Sim pip 또는 바이너리 + 소스 설치 | pip install pybullet | PyTorch 설치 후 pip install genesis-world |
표의 항목은 각 저장소 README와 공식 문서를 2026-10-19에 대조한 내용입니다. 버전이 빠르게 바뀌는 영역이라 도입 직전에 한 번 더 확인하는 것이 좋습니다.
MuJoCo: 정밀한 접촉 계산과 두 갈래의 GPU 경로
MuJoCo 계산 문서에 따르면 MuJoCo는 많은 엔진이 쓰는 선형 상보성 문제(LCP) 대신 접촉을 볼록 최적화 문제로 풉니다. 엄격한 상보성 조건을 버리는 대신 아주 작은 침투를 허용하는 소프트 접촉이 되고, 그 덕분에 해를 안정적으로 구할 수 있습니다. 솔버는 기본값인 Newton, 어려운 문제에 쓰는 CG(켤레 기울기), 제약을 하나씩 갱신하는 PGS 중에서 고릅니다. 마찰은 타원형 또는 피라미드형 원뿔로 근사하고, condim 값으로 법선력만 쓸지, 미끄럼·비틀림·구름 마찰까지 넣을지를 접촉마다 정합니다.
GPU 병렬화는 MJX 문서에서 두 백엔드로 나뉩니다. MJX-JAX는 MuJoCo 알고리즘을 JAX로 다시 구현한 것으로 기울기를 계산할 수 있고 NVIDIA·AMD GPU, Apple Silicon, Google Cloud TPU에서 돕니다. 문서는 MJX-JAX가 수천~수만 장면을 병렬로 돌릴 때 이점이 있고, 단일 장면은 CPU에 최적화된 MuJoCo보다 10x 느릴 수 있다고 적고 있습니다. MJX-Warp는 MuJoCo Warp를 쓰는 NVIDIA GPU 전용 경로로, 문서가 “하드웨어 가속 장치용으로 가장 기능이 완전한 MuJoCo 구현"이라고 설명하지만 자동 미분은 지원하지 않습니다.
pip install mujoco # CPU MuJoCo (Python 3.10 이상)
pip install mujoco-mjx # MJX-JAX
pip install "mujoco-mjx[warp]" # MJX-Warp (NVIDIA GPU)
MJX로 옮길 때 자주 걸리는 지점은 지원 범위입니다. MJX-JAX는 CG·Newton 솔버만 지원하고, MJX-Warp는 PGS 솔버와 noslip, 일부 지오메트리·센서 유형을 지원하지 않습니다. 지원하지 않는 기능을 참조하는 모델을 장치로 복사하면 예외가 발생하므로, CPU MuJoCo에서 만든 MJCF를 그대로 올리기 전에 solver, 메시 볼록 껍질 정점 수(maxhullvert), 충돌 쌍 지정 여부를 점검합니다. 문서는 볼록 메시 정점을 64개 이하로 유지하고 충돌 쌍을 명시해 접촉 수를 줄이라고 권합니다.
Isaac Lab: 대규모 병렬 학습과 센서를 함께 쓰는 프레임워크
Isaac Lab README는 이 프로젝트를 GPU 가속 로봇 학습 프레임워크로 소개하고, 물리·렌더링 백엔드로 Newton, OVRTX, OVPhysX, Isaac Sim을 나열합니다. 현재 3.0 계열 문서는 모든 워크플로가 Isaac Sim을 필요로 하지는 않으며, Isaac Sim을 쓰는 워크플로는 호환 버전을 맞춰야 한다고 설명합니다. 예제 환경은 30개가 넘고 RSL RL, SKRL, RL Games, Stable Baselines 같은 강화학습 라이브러리와 바로 연결됩니다.
다른 후보와 가장 크게 갈리는 지점은 센서입니다. RTX 기반 RGB·깊이·분할 카메라, IMU, 접촉 센서, 레이캐스터, LiDAR를 학습 루프 안에서 쓸 수 있어서, 카메라 이미지를 입력으로 받는 시각 정책이나 보행·전신 제어처럼 지형·접촉 정보가 중요한 과제에 맞습니다. 대신 요구 사양이 높습니다. 설치 문서는 Ubuntu 22.04 또는 Windows 11(x64), RAM 32GB, GPU VRAM 16GB를 최소 조건으로 제시하고 렌더링 워크플로는 더 많은 메모리가 필요할 수 있다고 적습니다. 문서 본문과 배지에 표시된 권장 Isaac Sim 버전이 서로 다르게 보일 수 있으므로, 설치 직전에 릴리스 노트에서 호환 버전을 확인합니다.
Isaac Lab의 백엔드 중 하나인 Newton은 Disney Research, Google DeepMind, NVIDIA가 시작한 Linux Foundation 프로젝트로, NVIDIA Warp 위에 만들어졌고 MuJoCo Warp를 주 백엔드로 통합합니다. 즉 MuJoCo 계열의 접촉 계산을 GPU에서 쓰는 경로가 Isaac Lab 안으로도 들어오고 있다는 뜻입니다. Newton README에 따르면 새로 설치하면 Warp 1.18이 선택되고 NVIDIA Turing 이후 GPU와 R580 이상 드라이버가 필요합니다.
PyBullet: 가벼운 시작점, 대규모 학습에는 한계
bullet3 저장소는 소스 코드 전체를 zlib 라이선스로 배포하고, 로봇·강화학습·VR 용도로 PyBullet을 권장합니다. pip install pybullet 한 줄로 설치되고 URDF 로봇을 바로 불러올 수 있어 강의 실습이나 알고리즘 프로토타입에 여전히 많이 쓰입니다.
다만 두 가지를 알고 고릅니다. 첫째, README가 설명하는 GPU 실행은 실험적인 OpenCL 파이프라인이고 OpenCL CPU 장치에서는 동작하지 않는다고 적혀 있어, Isaac Lab이나 MJX처럼 수천 개 환경을 GPU에서 묶어 돌리는 용도로 설계된 것은 아닙니다. 둘째, 저장소의 Releases 항목이 비어 있고 이슈 트래커가 정리 전까지 닫혀 있다고 안내되어 있어, 장기 프로젝트라면 유지 상태를 감안해야 합니다.
Genesis World: 다중 물리와 렌더러를 한 장면에 묶는 신규 플랫폼
Genesis 문서에 따르면 Genesis World는 2024년 12월 학술 프로젝트로 시작해 지금은 Genesis AI가 지원하는 피지컬 AI 시뮬레이션 플랫폼입니다. 강체, FEM, MPM, 입자 기반 PBD·SPH 등 여러 솔버가 하나의 장면과 상태를 공유하므로 천·액체·변형체가 섞인 조작 과제를 한 시뮬레이터 안에서 구성할 수 있습니다. 렌더러는 자체 Nyx, 레이 트레이서 Luisa, 래스터라이저 Pyrender를 카메라 센서처럼 꽂아 씁니다.
연산 코드는 Quadrants라는 컴파일러가 CUDA, AMD ROCm, Apple Metal, Vulkan, x86, ARM64로 변환하므로 NVIDIA 외 GPU나 노트북에서도 같은 코드를 시작할 수 있습니다. README는 PyTorch를 먼저 설치한 뒤 pip install genesis-world를 실행하라고 안내하고, Python 3.10 이상 3.14 미만을 요구합니다. 발표 자료에 나오는 속도 수치는 측정 조건이 공개 문서마다 달라 이 글에서는 옮기지 않았습니다. 성능은 자신의 로봇 모델로 같은 조건에서 직접 재는 것이 정확합니다.
과제 유형별로 먼저 검토할 시뮬레이터
| 과제 | 먼저 검토 | 이유 |
|---|---|---|
| 사족·이족 보행 강화학습(수천 환경 병렬) | Isaac Lab, MJX-Warp | GPU 대량 병렬과 지형·접촉 센서 |
| 카메라 입력 시각 정책 학습 | Isaac Lab | RTX 카메라를 학습 루프에서 렌더링 |
| 접촉이 많은 정밀 조작의 단일 장면 디버깅 | CPU MuJoCo | 솔버·마찰 파라미터를 세밀하게 조정 |
| 미분 가능한 시뮬레이션으로 궤적 최적화 | MJX-JAX | JAX 자동 미분 지원 |
| 천·액체·변형체가 섞인 조작 | Genesis World | 다중 솔버를 한 장면에서 결합 |
| 강의·프로토타입·저사양 노트북 | PyBullet, CPU MuJoCo | pip 설치와 낮은 요구 사양 |
시뮬레이터에서 만든 시연 궤적을 정책 학습 데이터로 쓰는 경우에는 원격조작 실데이터와 합성 데이터 비교에서 정리한 데이터 혼합 순서를 함께 봅니다. NVIDIA 생태계 안에서 Isaac Lab이 어떤 위치에 있는지는 Cosmos·Isaac·GR00T 3-컴퓨터 구조를 참고하면 됩니다.
첫 주에 해 볼 최소 검증 순서
시뮬레이터를 정하기 전에 같은 로봇 모델로 아래 순서를 짧게 돌려 보면 문서만 읽을 때 보이지 않는 차이가 드러납니다.
- 보유한 로봇 모델(URDF 또는 MJCF)을 후보 두 곳에 불러와 관절 한계와 질량이 같게 읽히는지 확인합니다.
- 같은 물체 집기 장면에서 마찰 계수와 솔버 반복 횟수를 맞춘 뒤 접촉 시점의 힘 값을 기록합니다.
- 병렬 환경 수를 단계적으로 늘리며 초당 시뮬레이션 스텝과 GPU 메모리 사용량을 표로 남깁니다.
- 카메라가 필요한 과제라면 렌더링을 켠 상태로 3번을 반복해 병목이 물리인지 렌더링인지 확인합니다.
import mujoco
xml = """
<mujoco>
<option solver="Newton" cone="elliptic"/>
<worldbody>
<geom type="plane" size="1 1 0.1"/>
<body pos="0 0 0.2">
<freejoint/>
<geom type="box" size="0.03 0.03 0.03" condim="4" friction="0.8 0.02 0.001"/>
</body>
</worldbody>
</mujoco>
"""
model = mujoco.MjModel.from_xml_string(xml)
data = mujoco.MjData(model)
for _ in range(500):
mujoco.mj_step(model, data)
print(data.ncon, data.qpos[:3]) # 접촉 수와 상자 위치
이 정도 장면에서 solver, cone, condim을 바꿔 가며 접촉 결과가 어떻게 달라지는지 확인해 두면, 이후 다른 시뮬레이터로 옮겼을 때 결과 차이가 모델 변환 문제인지 접촉 설정 문제인지 구분하기 쉬워집니다.