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 包含以下環境版本:
版本 |
模擬器 |
備註 |
|---|---|---|
|
|
推薦(功能最多,錯誤最少) |
|
|
為可復現性而維護 |
|
|
已遷移到 |
|
|
已遷移到 |
更多資訊,請參閱每個環境的“版本歷史”部分。
v1 及更早版本不再包含在 Gymnasium 中。
比較不同版本間的訓練效能¶
在相同/預設引數下,v2 和 v3 的訓練效能是相同的。
由於更改為較新的模擬器,v2/v3 和 v4 的訓練效能無法直接比較,但非 Ant 和非 Humanoids 的結果是可比較的(更多資訊請參閱GitHub 評論 #1 和 GitHub 評論 #2)。
v4 和 v5 的訓練效能不同,因為環境有許多變化,但 Half Cheetah 和 Swimmer 表現出相同的行為,Pusher 和 Swimmer 接近(更多資訊請參閱GitHub 問題)。
精確復現性¶
注意:由於浮點運算順序的原因,MuJoCo 模擬器的確切行為在不同 mujoco 版本之間略有變化(更多資訊請參閱其文件),如果除了使用 seed 進行實驗之外還需要精確復現性,則應使用相同的模擬器版本。
渲染引數¶
除了通用的 Gymnasium 引數和環境特定引數外,所有 MuJoCo 環境還接受以下引數來配置渲染器:
env = gymnasium.make("Ant-v5", render_mode="rgb_array", width=1280, height=720)
引數 |
型別 |
預設值 |
描述 |
|---|---|---|---|
|
str |
|
渲染結果的模式。必須是 |
|
int |
|
渲染視窗的寬度 |
|
int |
|
渲染視窗的高度 |
|
int | None |
|
用於渲染視窗的相機 ID |
|
str | None |
|
用於渲染視窗的相機名稱(與 |
|
dict[str, float | int] | None |
|
mjvCamera 屬性 |
|
int |
|
要渲染的幾何物件最大數量(對第三方環境有用) |
|
Dict[int, bool] |
|
一個包含 mjVisual 標誌和值對的字典,例如 |
渲染後端¶
MuJoCo 模擬器使用 OpenGL 渲染影像,並可使用 3 種不同的後端:“glfw”(預設)、“egl”、“omesa”,可透過設定環境變數來選擇。
後端 |
環境變數 |
描述 |
|---|---|---|
|
|
使用 GPU 上的視窗系統渲染 |
|
|
在 GPU 上無頭渲染 |
|
|
在 CPU 上無頭渲染 |
更多資訊請參閱MuJoCo/OpenGL 文件。