MuJoCo

MuJoCo는 Multi-Joint dynamics with Contact의 약자입니다. 로봇 공학, 생체 역학, 그래픽 및 애니메이션, 그리고 빠르고 정확한 시뮬레이션이 필요한 기타 분야의 연구 및 개발을 촉진하는 물리 엔진입니다. 로봇과 환경 사이에 물리적 접촉이 있으며, MuJoCo는 물리적 정확성과 계산 효율성을 목표로 가능한 물리적 접촉 역학에 대한 사실적인 물리 시뮬레이션을 얻으려고 시도합니다.

이 환경 세트의 MuJoCo 시뮬레이터를 포함한 고유 종속성은 다음을 통해 설치할 수 있습니다.

pip install gymnasium[mujoco]

2021년 10월 기준으로 DeepMind가 MuJoCo를 인수했으며 2022년에 오픈 소스로 공개하여 누구나 무료로 사용할 수 있게 되었습니다. Gymnasium에서 MuJoCo를 사용하려면 프레임워크 mujoco가 설치되어 있어야 합니다(이 종속성은 위 명령으로 설치됩니다). MuJoCo 엔진 설치 방법은 웹사이트GitHub 저장소에서 확인할 수 있습니다.

MuJoCo v3 및 이전 버전 환경의 경우 mujoco-py 프레임워크가 필요합니다(pip install gymnasium[mujoco-py]). 이는 GitHub 저장소에서 찾을 수 있습니다.

MuJoCo 환경은 11가지가 있습니다(대략 복잡성이 증가하는 순서):

로봇

짧은 설명

카트폴(CartPoles)

InvertedPendulum

카트폴 환경의 MuJoCo 버전 (연속 행동)

InvertedDoublePendulum

카트폴 환경의 2개 폴 변형

팔(Arms)

Reacher

물체에 도달하는 것을 목표로 하는 2D 팔

Pusher

물체를 목표 위치로 미는 것을 목표로 하는 3D 팔

2D 러너(Runners)

HalfCheetah

달리는 것을 목표로 하는 2D 네발로 걷는 동물

Hopper

홉핑하는 것을 목표로 하는 2D 외발

Walker2d

걷는 것을 목표로 하는 2D 두발로 걷는 동물

수영 로봇(Swimmers)

Swimmer

수영하는 것을 목표로 하는 3D 로봇

네발로 걷는 동물(Quadruped)

Ant

달리는 것을 목표로 하는 3D 네발로 걷는 동물

휴머노이드 두발 로봇(Humanoid Bipeds)

Humanoid

달리는 것을 목표로 하는 3D 휴머노이드

HumanoidStandup

일어서는 것을 목표로 하는 3D 휴머노이드

이 모든 환경은 초기 상태 면에서 확률적이며, 확률성을 추가하기 위해 고정된 초기 상태에 가우시안 노이즈가 추가됩니다. Gymnasium의 MuJoCo 환경에 대한 상태 공간은 평탄화되어 연결된 두 부분으로 구성됩니다. 즉, 신체 부위와 관절의 위치(mujoco.MjData.qpos)와 해당 속도(mujoco.MjData.qvel)입니다 (MuJoCo 물리 상태 문서에서 자세한 정보 확인 가능).

Gymnasium 환경 중에서 이 환경 세트는 정책으로 해결하기 더 어려운 것으로 간주될 수 있습니다.

환경은 xml_file 인수를 변경하거나 클래스의 매개변수를 조정하여 구성할 수 있습니다.

버전

Gymnasium에는 다음 버전의 환경이 포함됩니다.

버전

시뮬레이터

비고

v5

mujoco=>2.3.3

권장 (가장 많은 기능, 가장 적은 버그)

v4

mujoco=>2.1.3

재현성을 위해 유지됨

v3

mujoco-py

사용 중단됨, 재현성을 위해 유지됨 (제한적 지원)

v2

mujoco-py

사용 중단됨, 재현성을 위해 유지됨 (제한적 지원)

자세한 내용은 각 환경의 “버전 기록” 섹션을 참조하십시오.

v1 및 이전 버전은 더 이상 Gymnasium에 포함되지 않습니다.

버전별 학습 성능 비교

동일/기본 인수가 사용되었다고 가정할 때 v2v3의 학습 성능은 동일합니다.

새로운 시뮬레이터로 변경되었기 때문에 v2/v3v4의 학습 성능은 직접 비교할 수 없지만, Ant 및 Humanoids가 아닌 환경의 결과는 비교 가능합니다 (GitHub Comment #1GitHub Comment #2에서 자세한 정보 확인 가능).

환경의 많은 변경 사항으로 인해 v4v5의 학습 성능은 다르지만, Half Cheetah 및 Swimmer는 동일한 동작을 보이며, Pusher 및 Swimmer는 비슷합니다 (GitHub 이슈에서 자세한 정보 확인 가능).

정확한 재현성

참고: 부동 소수점 연산 순서 때문에 mujoco 버전 간에 MuJoCo 시뮬레이터의 정확한 동작이 약간 변경됩니다 (문서에서 자세한 정보 확인 가능). 실험에 seed를 사용하는 것 외에 정확한 재현성이 필요한 경우 동일한 시뮬레이터 버전을 사용해야 합니다.

렌더링 인수

일반적인 Gymnasium 인수 및 환경별 인수 외에도 모든 MuJoCo 환경은 렌더러를 구성하기 위해 다음 인수를 사용합니다.

env = gymnasium.make("Ant-v5", render_mode="rgb_array", width=1280, height=720)

매개변수

유형

기본값

설명

render_mode

str

None

렌더링 결과의 양식. human, rgb_array, depth_array, rgbd_tuple 중 하나여야 합니다. human은 렌더링된 이미지를 반환하지 않고 창에 직접 렌더링합니다.

width

int

480

렌더링 창의 너비

height

int

480

렌더링 창의 높이

camera_id

int | None

None

렌더링 창에 사용되는 카메라 ID

camera_name

str | None

None

렌더링 창에 사용되는 카메라의 이름 (camera_id와 상호 배타적인 옵션)

default_camera_config

dict[str, float | int] | None

None

mjvCamera 속성

max_geom

int

1000

렌더링할 수 있는 최대 기하학적 객체 수 (써드 파티 환경에 유용)

visual_options

Dict[int, bool]

{}

mjVisual 플래그 및 값 쌍으로 구성된 딕셔너리, 예: {mujoco.mjtVisFlag.mjVIS_CONTACTPOINT: True, mujoco.mjtVisFlag.mjVIS_CONTACTFORCE: True} (접촉점 및 힘 표시).

렌더링 백엔드

MuJoCo 시뮬레이터는 OpenGL로 이미지를 렌더링하며, “glfw”(기본값), “egl”, “omesa”의 3가지 다른 백엔드를 사용할 수 있습니다. 이는 환경 변수를 설정하여 선택할 수 있습니다.

백엔드

환경 변수

설명

GLFW

MUJOCO_GL=glfw (기본값)

GPU에서 Window System으로 렌더링

EGL

MUJOCO_GL=egl

GPU에서 헤드리스로 렌더링

OSMESA

MUJOCO_GL=osmesa

CPU에서 헤드리스로 렌더링

MuJoCo/OpenGL 문서에서 자세한 정보를 확인할 수 있습니다.