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 包含以下环境版本:

版本

仿真器

注意

v5

mujoco=>2.3.3

推荐(功能最全,Bug 最少)

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 和 Humanoid 以外的环境,其结果是可比的(更多信息请参阅 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 上进行无头(headless)渲染

OSMESA

MUJOCO_GL=osmesa

在 CPU 上进行无头(headless)渲染

更多信息请参阅 MuJoCo/OpenGL 文档