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 儲存庫中找到。

共有 11 個 MuJoCo 環境(大致按複雜性遞增排序)

Robot (機器人)

簡短描述

CartPoles (倒單擺組)

InvertedPendulum (倒立擺錘)

CartPole (倒單擺) 環境的 MuJoCo 版本(具有連續動作)

InvertedDoublePendulum (倒立雙擺錘)

CartPole (倒單擺) 環境的雙桿變體

Arms (手臂)

Reacher (抓取者)

目標是抓取物體的 2D 手臂

Pusher (推動者)

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

2D Runners (2D 跑步者)

HalfCheetah (獵豹)

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

Hopper (跳跳者)

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

Walker2d (二維步行者)

目標是步行的 2D 雙足動物

Swimmers (游泳者)

Swimmer (游泳者)

目標是游泳的 3D 機器人

Quarduped (四足動物)

Ant (螞蟻)

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

Humanoid Bipeds (人形雙足動物)

Humanoid (人形)

目標是跑步的 3D 人形

HumanoidStandup (人形站立)

目標是站立的 3D 人形

所有這些環境在本質上都是隨機的,在其初始狀態中添加了高斯雜訊到固定的初始狀態,以增加隨機性。Gymnasium 中 MuJoCo 環境的狀態空間由兩個部分組成,這兩個部分被展平並串連在一起:身體部位和關節的位置 (mujoco.MjData.qpos) 及其對應的速度 (mujoco.MjData.qvel)(更多資訊請參閱 MuJoCo 物理狀態文件)。

在 Gymnasium 環境中,這組環境可以被認為是更難以透過策略解決的。

可以透過變更 xml_file 參數和/或調整其類別的參數來配置環境。

版本

Gymnasium 包含以下環境版本

版本

Simulator (模擬器)

Notes (注意事項)

v5

mujoco=>2.3.3

建議使用(功能最多,錯誤最少)

v4

mujoco=>2.1.3

為了可重現性而維護

v3

mujoco-py

已棄用,為了可重現性而保留(有限支援)

v2

mujoco-py

已棄用,為了可重現性而保留(有限支援)

如需更多資訊,請參閱每個環境的「版本歷史記錄」章節。

v1 和更舊版本不再包含在 Gymnasium 中。

跨版本比較訓練效能

假設使用相同/預設參數,v2v3 的訓練效能是相同的。

由於變更為較新的模擬器,v2/v3v4 的訓練效能不具直接可比性,但 Ant 和 Humanoids 以外的結果是可比較的(更多資訊請參閱 GitHub 評論 #1GitHub 評論 #2)。

v4v5 的訓練效能有所不同,因為環境中有很多變更,但 Half Cheetah 和 Swimmer 表現出相同的行為,Pusher 和 Swimmer 則很接近(更多資訊請參閱 GitHub Issue)。

精確的可重現性

注意:由於浮點運算順序,MuJoCo 模擬器的確切行為在 mujoco 版本之間略有變化(更多資訊請參閱他們的 文件),如果除了使用實驗的 seed 之外還需要精確的可重現性,則應使用相同的模擬器版本。

Rendering Arguments (渲染參數)

除了通用的 Gymnasium 參數和環境特定的參數外,所有 MuJoCo 環境也採用以下參數來配置渲染器

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

Parameter (參數)

Type (類型)

Default (預設值)

Description (描述)

render_mode (渲染模式)

str

None

渲染結果的模態。必須是 humanrgb_arraydepth_arrayrgbd_tuple 之一。請注意,human 不會傳回渲染圖像,而是直接渲染到視窗

width (寬度)

int

480

渲染視窗的寬度

height (高度)

int

480

渲染視窗的高度

camera_id (相機 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}(顯示接觸點和力)。

Rendering Backend (渲染後端)

MuJoCo 模擬器使用 OpenGL 渲染圖像,並且可以使用 3 個不同的後端 “glfw”(預設)、“egl”、“omesa”,可以透過設定環境變數來選擇。

Backend (後端)

Environment Variable (環境變數)

Description (描述)

GLFW

MUJOCO_GL=glfw(預設)

使用 GPU 上的視窗系統渲染

EGL

MUJOCO_GL=egl

在 GPU 上無頭渲染

OSMESA

MUJOCO_GL=osmesa

在 CPU 上無頭渲染

有關 MuJoCo/OpenGL 文件的更多資訊。