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 文档。