MuJoCo

MuJoCo 代表多关节动力学与接触。它是一个物理引擎,旨在促进机器人学、生物力学、图形和动画以及其他需要快速和精确模拟的领域的研究和开发。机器人与其环境之间存在物理接触——MuJoCo 致力于通过追求物理准确性和计算效率来实现可能的物理接触动力学的真实物理模拟。

这一组环境的独特依赖项,包括 MuJoCo 模拟器,可以通过以下方式安装:

pip install gymnasium[mujoco]

截至2021年10月,DeepMind已收购MuJoCo并在2022年将其开源,使其对所有人免费。使用MuJoCo与Gymnasium需要安装mujoco框架(此依赖项通过上述命令安装)。安装MuJoCo引擎的说明可以在其网站GitHub仓库上找到。

对于 MuJoCo v3 环境及更早版本,需要 mujoco-py 框架(pip install gymnasium[mujoco-py]),可以在 GitHub 仓库 中找到。

有十一个 MuJoCo 环境(大致按复杂度递增排列):

机器人

简短描述

CartPoles

InvertedPendulum

MuJoCo 版本的 CartPole 环境(带有连续动作)

倒立双摆

2 极变化的 CartPole 环境

武器

Reacher

带有目标的2D手臂,目标是触碰一个物体

Pusher

带有将物体推到目标位置目标的3D手臂

2D 跑酷游戏

HalfCheetah

2d 四足动物,目标是奔跑

Hopper

2d 单足跳跃目标

Walker2d

2d 双足机器人,目标是行走

游泳者

游泳者

3D 机器人,目标是游泳

四足动物

蚂蚁

3d 四足动物,目标是奔跑

人形双足动物

人形

3d 人形机器人,目标是跑步

HumanoidStandup

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

已弃用,保留以供复现(有限支持)

v2

mujoco-py

已弃用,保留以供复现(有限支持)

更多信息,请参阅每个环境的“版本历史”部分。

v1 及更早版本不再包含在 Gymnasium 中。

比较不同版本之间的训练性能

假设使用了相同的/默认的参数,v2v3 的训练性能是相同的。

由于采用了新的模拟器,v2/v3v4 的训练性能无法直接比较,但对于非蚂蚁和非人形机器人来说,结果是可比的(更多信息请参见 GitHub 评论 #1GitHub 评论 #2)。

v4v5 的训练性能因环境中的许多变化而不同,但 Half Cheetah 和 Swimmer 表现出相同的行为,Pusher 和 Swimmer 接近(更多信息请参见 GitHub Issue)。

精确的可重复性

注意:由于浮点运算顺序的不同,MuJoCo 模拟器在 mujoco 版本之间的行为略有变化(更多信息请参见他们的文档),如果除了使用 seed 进行实验外还需要精确的可重复性,应使用相同的模拟器版本。

渲染参数

除了通用的 Gymnasium 参数和特定环境的参数外,所有 MuJoCo 环境还接受以下用于配置渲染器的参数:

env = gymnasium.make("Ant-v5", render_mode="rgb_array", width=1280, height=720)

参数

类型

默认

描述

width

整数

480

渲染窗口的宽度

height

整数

480

渲染窗口的高度

camera_id

整数 | 无

None

用于渲染窗口的相机ID

camera_name

字符串 | 无

None

用于渲染窗口的相机名称(与 camera_id 选项互斥)

default_camera_config

dict[str, float | int] | None

None

The mjvCamera 属性

max_geom

整数

1000

要渲染的几何对象的最大数量(对第三方环境有用)

visual_options

Dict[int, bool]

{}

一个包含 mjVisual 标志和值对的字典,例如 {mujoco.mjtVisFlag.mjVIS_CONTACTPOINT: True, mujoco.mjtVisFlag.mjVIS_CONTACTFORCE: True}(显示接触点和力)。