본문 바로가기

로봇 학습용 물리 시뮬레이터 비교: MuJoCo·Isaac Lab·PyBullet·Genesis 중 무엇을 고르나

로봇 강화학습과 모방학습에 쓰는 물리 시뮬레이터 MuJoCo(MJX·MuJoCo Warp), Isaac Lab, PyBullet, Genesis World를 접촉 모델, GPU 병렬화, 센서 렌더링, 라이선스, 설치 요구 사항 기준으로 비교하고 과제별 선택 기준을 정리합니다.

목차

핵심 요약

  1. 수천 개 환경을 GPU에서 동시에 돌리는 보행·조작 강화학습이 목적이면 Isaac Lab이나 MJX(MuJoCo Warp 백엔드)가 출발점이고, 한 장면을 정밀하게 디버깅하는 용도는 CPU MuJoCo가 가장 단순하다.
  2. MuJoCo는 접촉을 엄격한 LCP 대신 볼록 최적화로 풀어 약간의 침투를 허용하는 소프트 접촉 모델을 쓰며, 기본 솔버는 Newton이다.
  3. MJX는 순수 JAX 구현(MJX-JAX, 미분 가능)과 MuJoCo Warp 기반(MJX-Warp, NVIDIA GPU 전용, 자동 미분 미지원) 두 백엔드로 나뉘므로 미분이 필요한지부터 정해야 한다.
  4. Isaac Lab 설치 문서는 최소 RAM 32GB, GPU VRAM 16GB, Ubuntu 22.04 또는 Windows 11을 요구하고, PyBullet·MuJoCo·Genesis는 pip 한 줄로 설치된다.
  5. PyBullet은 zlib 라이선스와 가벼운 설치가 장점이지만 저장소에 정식 릴리스 목록이 없고 GPU 파이프라인은 실험적인 OpenCL 구현이라 대규모 병렬 학습의 기본 선택지는 아니다.

로봇 정책을 학습하려는 팀은 첫 주에 시뮬레이터를 고르고, 그 선택이 로봇 모델 형식, 필요한 GPU, 학습 코드 구조까지 결정합니다. 이 글은 MuJoCo, Isaac Lab, PyBullet, Genesis World 네 가지를 같은 기준으로 비교하고 과제 유형별로 어떤 것을 먼저 검토할지 정리합니다. 시뮬레이터에서 학습한 정책을 실제 로봇으로 옮기는 문제는 Sim-to-Real 격차 해법에서 따로 다룹니다.

비교에 쓴 다섯 가지 기준

시뮬레이터 비교 글이 흔히 “어느 쪽이 빠른가"에서 멈추는데, 속도는 측정 조건(로봇 모델, 접촉 수, 렌더링 여부, GPU)에 따라 순위가 바뀝니다. 그래서 이 글은 공식 문서에서 확인 가능한 구조적 차이를 기준으로 삼습니다.

  1. 접촉 모델과 솔버: 접촉을 어떤 수학 문제로 푸는지, 어떤 솔버를 고를 수 있는지
  2. GPU 병렬화 방식: 수천 개 환경을 한 GPU에서 동시에 돌릴 수 있는지, 어떤 하드웨어에서 되는지
  3. 센서와 렌더링: 카메라·깊이·레이캐스트 같은 시각 입력을 학습 루프 안에서 만들 수 있는지
  4. 라이선스와 유지 상태: 상용 제품에 넣을 수 있는지, 업데이트가 이어지는지
  5. 설치 요구 사항: OS, GPU 메모리, 드라이버 조건

네 시뮬레이터 한눈에 비교

항목MuJoCo (+MJX)Isaac LabPyBulletGenesis World
라이선스Apache 2.0BSD-3 (일부 워크플로에 Isaac Sim 등 별도 약관)zlibApache 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 mujocoIsaac Sim pip 또는 바이너리 + 소스 설치pip install pybulletPyTorch 설치 후 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-WarpGPU 대량 병렬과 지형·접촉 센서
카메라 입력 시각 정책 학습Isaac LabRTX 카메라를 학습 루프에서 렌더링
접촉이 많은 정밀 조작의 단일 장면 디버깅CPU MuJoCo솔버·마찰 파라미터를 세밀하게 조정
미분 가능한 시뮬레이션으로 궤적 최적화MJX-JAXJAX 자동 미분 지원
천·액체·변형체가 섞인 조작Genesis World다중 솔버를 한 장면에서 결합
강의·프로토타입·저사양 노트북PyBullet, CPU MuJoCopip 설치와 낮은 요구 사양

시뮬레이터에서 만든 시연 궤적을 정책 학습 데이터로 쓰는 경우에는 원격조작 실데이터와 합성 데이터 비교에서 정리한 데이터 혼합 순서를 함께 봅니다. NVIDIA 생태계 안에서 Isaac Lab이 어떤 위치에 있는지는 Cosmos·Isaac·GR00T 3-컴퓨터 구조를 참고하면 됩니다.

첫 주에 해 볼 최소 검증 순서

시뮬레이터를 정하기 전에 같은 로봇 모델로 아래 순서를 짧게 돌려 보면 문서만 읽을 때 보이지 않는 차이가 드러납니다.

  1. 보유한 로봇 모델(URDF 또는 MJCF)을 후보 두 곳에 불러와 관절 한계와 질량이 같게 읽히는지 확인합니다.
  2. 같은 물체 집기 장면에서 마찰 계수와 솔버 반복 횟수를 맞춘 뒤 접촉 시점의 힘 값을 기록합니다.
  3. 병렬 환경 수를 단계적으로 늘리며 초당 시뮬레이션 스텝과 GPU 메모리 사용량을 표로 남깁니다.
  4. 카메라가 필요한 과제라면 렌더링을 켠 상태로 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을 바꿔 가며 접촉 결과가 어떻게 달라지는지 확인해 두면, 이후 다른 시뮬레이터로 옮겼을 때 결과 차이가 모델 변환 문제인지 접촉 설정 문제인지 구분하기 쉬워집니다.

자주 하는 실수

  • 시뮬레이터 이름만 보고 고른 뒤 로봇 모델 형식(MJCF, URDF, USD) 변환 비용을 계산하지 않는 경우
  • MJX-JAX로 단일 장면을 돌려 보고 느리다고 판단하는 경우 — 공식 문서는 MJX-JAX가 수천~수만 장면 병렬에서 이점이 있고 단일 장면은 CPU MuJoCo보다 느릴 수 있다고 안내한다.
  • 접촉 파라미터(마찰 원뿔, condim, 솔버 반복 횟수)를 기본값 그대로 두고 시뮬레이터 간 결과를 비교하는 경우
  • 카메라 렌더링이 필요한 시각 정책 학습인데 물리 연산 속도만 보고 시뮬레이터를 고르는 경우

적용 전 체크리스트

  • 학습 방식(대규모 병렬 RL, 시연 데이터 생성, 미분 가능 최적화)을 먼저 정했는가
  • 보유 로봇 모델이 어떤 형식(MJCF/URDF/USD)이고 변환 도구가 있는가
  • GPU 종류(NVIDIA/AMD/Apple)와 드라이버 버전이 후보 시뮬레이터 요구 사항을 만족하는가
  • 카메라·촉각·레이캐스트 같은 센서 시뮬레이션이 정책 입력에 필요한가
  • 상용 배포 시 라이선스(Apache 2.0, BSD-3, zlib, 상용 구성요소) 조건을 확인했는가

자주 묻는 질문

Isaac Gym은 왜 비교에서 빠졌나요?
Isaac Lab 마이그레이션 문서는 IsaacGymEnvs와 Isaac Gym Preview Release가 모두 지원 종료(deprecated)됐다고 밝히고, 기존 코드를 Isaac Lab으로 옮기는 절차를 안내합니다. 새 프로젝트라면 Isaac Lab 문서를 기준으로 시작합니다.
Gazebo 같은 ROS 시뮬레이터와는 어떻게 다른가요?
Gazebo는 ROS 2와 연동한 시스템 통합·소프트웨어 검증에 강점이 있고, 이 글의 시뮬레이터들은 정책 학습을 위한 대량 병렬 실행과 학습 프레임워크 연동에 초점이 있습니다. 학습은 Isaac Lab이나 MuJoCo에서 하고 통합 테스트는 Gazebo에서 하는 식으로 역할을 나누기도 합니다.

참고 자료 · 검증 기준

  1. google-deepmind/mujoco — GitHub README
  2. MuJoCo Documentation — MuJoCo XLA (MJX)
  3. MuJoCo Documentation — Computation (contact model and solvers)
  4. isaac-sim/IsaacLab — GitHub README
  5. Isaac Lab Documentation — Installation (system requirements)
  6. newton-physics/newton — GitHub README
  7. bulletphysics/bullet3 (PyBullet) — GitHub README
  8. Genesis-Embodied-AI/Genesis — GitHub README
  9. Isaac Lab Documentation — Migrating from IsaacGymEnvs
  10. Genesis World Docs — What is Genesis World

마지막 검증일: