MuJoCo

MuJoCo 代表 Multi-Joint dynamics with Contact(多关节动力学与接触)。它是一个物理引擎,旨在促进机器人技术、生物力学、图形和动画以及其他需要快速准确仿真的领域的研究和开发。机器人与其环境之间存在物理接触 - 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(倒立摆)

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

InvertedDoublePendulum(倒立双摆)

CartPole 环境的 2 杆变体

Arms(手臂)

Reacher(抓取器)

2d 手臂,目标是抓取物体

Pusher(推杆)

3d 手臂,目标是将物体推到目标位置

2D Runners(2D 跑步者)

HalfCheetah(半猎豹)

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

Hopper(跳跃者)

2d 单足动物,目标是跳跃

Walker2d(二维步行者)

2d 双足动物,目标是行走

Swimmers(游泳者)

Swimmer(游泳者)

3d 机器人,目标是游泳

Quarduped(四足动物)

Ant(蚂蚁)

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

Humanoid Bipeds(人形双足动物)

Humanoid(人形机器人)

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 的训练性能不可直接比较,因为更改为较新的模拟器,但非 Ant 和非 Humanoids 的结果是可比较的(有关更多信息,请参阅 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)

参数

类型

默认值

描述

render_mode(渲染模式)

str

None

渲染结果的模态。必须是 humanrgb_arraydepth_arrayrgbd_tuple 之一。请注意,human 不返回渲染图像,而是直接渲染到窗口

width(宽度)

int

480

渲染窗口的宽度

height(高度)

int

480

渲染窗口的高度

camera_id(相机 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 文档的更多信息。