MuJoCo¶
MuJoCo 代表“多关节接触动力学”(Multi-Joint dynamics with Contact)。它是一个物理引擎,旨在促进机器人学、生物力学、图形学和动画以及其他需要快速准确仿真的领域的研究与开发。机器人与环境之间存在物理接触——MuJoCo 通过追求物理准确性和计算效率,试图为可能的物理接触动力学提供逼真的物理仿真。
该环境集所需的独特依赖项(包括 MuJoCo 仿真器)可以通过以下方式安装:
pip install gymnasium[mujoco]
自 2021 年 10 月起,DeepMind 收购了 MuJoCo 并于 2022 年将其开源,使其对所有人免费。在 Gymnasium 中使用 MuJoCo 需要安装 mujoco 框架(上述命令已包含该依赖项)。安装 MuJoCo 引擎的说明可以在其 官网 和 GitHub 仓库 中找到。
依赖于 mujoco-py 框架的 MuJoCo v3 及更早版本的环境,从 gymnasium v1.2 开始已迁移至 gymnasium-robotics 包中。关于使用这些旧版本的信息,请参阅 gymnasium-robotics 文档。原始的 mujoco-py 框架可在其 GitHub 仓库 中找到。
旧版本环境的依赖项可以通过以下方式安装:
pip install gymnasium_robotics[mujoco-py]
共有十一个 MuJoCo 环境(按复杂度大致递增排序):
机器人 |
简要描述 |
|---|---|
倒立摆系列 |
|
InvertedPendulum |
CartPole 环境的 MuJoCo 版本(带有连续动作) |
InvertedDoublePendulum |
CartPole 环境的双摆变体 |
机械臂 |
|
Reacher |
带有达到目标物体任务的 2D 机械臂 |
Pusher |
带有将物体推向目标位置任务的 3D 机械臂 |
2D 奔跑者 |
|
HalfCheetah |
以奔跑为目标的 2D 四足机器人 |
Hopper |
以跳跃为目标的 2D 单足机器人 |
Walker2d |
以步行为目标的 2D 双足机器人 |
游泳者 |
|
Swimmer |
以游泳为目标的 3D 机器人 |
四足机器人 |
|
Ant |
以奔跑为目标的 3D 四足机器人 |
人形双足机器人 |
|
Humanoid |
以奔跑为目标的人形机器人 |
HumanoidStandup |
以站立为目标的人形机器人 |
所有这些环境在初始状态上都是随机的,通过在固定的初始状态中添加高斯噪声来增加随机性。Gymnasium 中 MuJoCo 环境的状态空间由两部分组成,经过展平和拼接:身体部位和关节的位置(mujoco.MjData.qpos)及其对应的速度(mujoco.MjData.qvel)(更多信息请参阅 MuJoCo 物理状态文档)。
在 Gymnasium 的各类环境中,这组环境通常被认为通过策略求解的难度较大。
可以通过更改 xml_file 参数和/或调整其类参数来配置环境。
版本¶
Gymnasium 包含以下环境版本:
版本 |
仿真器 |
注意 |
|---|---|---|
|
|
推荐(功能最全,Bug 最少) |
|
|
为了可重复性而维护 |
|
|
已迁移至 |
|
|
已迁移至 |
更多信息,请查看每个环境的“版本历史”部分。
v1 及更早版本不再包含在 Gymnasium 中。
比较各版本的训练性能¶
如果使用相同/默认参数,v2 和 v3 的训练性能是完全相同的。
v2/v3 与 v4 的训练性能不能直接比较,因为更换了更新的仿真器。但对于 Ant 和 Humanoid 以外的环境,其结果是可比的(更多信息请参阅 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 上进行无头(headless)渲染 |
|
|
在 CPU 上进行无头(headless)渲染 |
更多信息请参阅 MuJoCo/OpenGL 文档。