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 框架,從 gymnasium v1.2 開始已遷移到 gymnasium-robotics 包。有關使用這些舊版本的資訊,請參閱 gymnasium-robotics 文件。原始的 mujoco-py 框架可在其GitHub 倉庫中找到。

舊環境版本的依賴項可以透過以下命令安裝:

pip install gymnasium_robotics[mujoco-py]

共有十一個 MuJoCo 環境(按複雜程度大致遞增):

機器人

簡要描述

推車杆

倒立擺

CartPole 環境的 MuJoCo 版本(帶連續動作)

倒立雙擺

CartPole 環境的 2 杆變體

手臂

觸及者 (Reacher)

目標是觸及物體的 2D 手臂

推動者 (Pusher)

目標是將物體推到目標位置的 3D 手臂

2D 奔跑者

半人馬

目標是奔跑的 2D 四足動物

跳躍者 (Hopper)

目標是跳躍的 2D 單足動物

Walker2d

目標是行走的 2D 兩足動物

游泳者

游泳者 (Swimmer)

目標是游泳的 3D 機器人

四足動物

螞蟻 (Ant)

目標是奔跑的 3D 四足動物

人形兩足動物

人形機器人 (Humanoid)

目標是奔跑的 3D 人形機器人

人形機器人站立

目標是站立的 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

已遷移到 gymnasium-robotics(從 gymnasium v1.2 開始)。已棄用,為可復現性而保留。

v2

mujoco-py

已遷移到 gymnasium-robotics(從 gymnasium v1.2 開始)。已棄用,為可復現性而保留。

更多資訊,請參閱每個環境的“版本歷史”部分。

v1 及更早版本不再包含在 Gymnasium 中。

比較不同版本間的訓練效能

在相同/預設引數下,v2v3 的訓練效能是相同的。

由於更改為較新的模擬器,v2/v3v4 的訓練效能無法直接比較,但非 Ant 和非 Humanoids 的結果是可比較的(更多資訊請參閱GitHub 評論 #1GitHub 評論 #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

渲染結果的模式。必須是 humanrgb_arraydepth_arrayrgbd_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 渲染影像,並可使用 3 種不同的後端:“glfw”(預設)、“egl”、“omesa”,可透過設定環境變數來選擇。

後端

環境變數

描述

GLFW

MUJOCO_GL=glfw (預設)

使用 GPU 上的視窗系統渲染

EGL

MUJOCO_GL=egl

在 GPU 上無頭渲染

OSMESA

MUJOCO_GL=osmesa

在 CPU 上無頭渲染

更多資訊請參閱MuJoCo/OpenGL 文件