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

版本

模拟器

备注

v5

mujoco=>2.3.3

推荐(功能最多,错误最少)

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 和非 Humanoids 的结果是可比较的(更多信息请参阅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 上无头渲染

OSMESA

MUJOCO_GL=osmesa

在 CPU 上无头渲染

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