1. MuJoCo 简介
MuJoCo 是一个通用的物理引擎,旨在促进机器人、生物力学、图形与动画等领域的研究和开发(需要快速准确模拟铰接体与环境相互作用的场景)。MuJoCo 一词取自多关节接触动力学(Multi-Joint dynamics with Contact)。
- 最早由 Roboti LLC 开发
- 2021年10月被 DeepMind 收购,推出 Version 2.1.0
- 2022年3月推出 Version 2.1.2,添加 Python 接口,并于2022年5月开源
用户手册:
Overview - MuJoCo Documentation
2. MuJoCo安装
请参考笔者另外一篇博客:MuJoCo210 和 Mujoco-py 在 Ubuntu22.04 下的安装
3. 建模
MuJoCo 建模语言使用XML与MJB。XML包括原生的MJCF与受限的URDF格式。MJB文件通常是保存的模型。
有三种方式读取mjModel:
(text editor) → MJCF/URDF file → (MuJoCo parser → mjSpec → compiler) → mjModel
(user code) → mjSpec → (MuJoCo compiler) → mjModel
MJB file → (model loader) → mjModel
1. 通过文本编辑器读取MJCF/URDF文件
这种方式涉及将模型定义为MJCF(MuJoCo文件格式)或URDF(统一机器人描述格式)文件,然后使用MuJoCo的解析器和编译器来生成mjModel。
- 1)用户在文本编辑器中创建一个MJCF或URDF文件,定义机器人模型的结构、几何形状、关节、材料等。
- 2)使用
mj_loadXML
API读取这个文件。这个API会调用MuJoCo的解析器来解析文件内容。 - 3)解析器将文件内容转换为mjSpec,这是一个内部表示,包含了模型的所有信息。
- 4)mjSpec然后被传递给MuJoCo的编译器,编译器生成最终的mjModel,这是一个包含了模型所有信息的二进制结构,可以直接用于仿真。
2. 用户代码直接操作mjSpec
这种方式允许用户直接在代码中构建mjSpec,然后使用MuJoCo的编译器生成mjModel。
- 1)用户在自己的代码中直接构建mjSpec,这可能涉及到直接操作MuJoCo的C结构体和数组。
- 2)一旦mjSpec构建完成,用户调用MuJoCo的编译器API(如
mjcompile
或mjcompileModel
)来生成mjModel。 - 3)生成的mjModel可以直接用于仿真。
这种方式适合于需要动态生成模型或对模型有复杂操作的场景,因为它允许用户在运行时构建和修改模型。
3. 从MJB文件加载模型
MJB是MuJoCo的二进制文件格式,它已经包含了编译后的mjModel。
- 1)用户使用
mj_loadFile
或mj_load
API从MJB文件中加载模型。 - 2)这些API直接调用模型加载器,加载器解析MJB文件并生成mjModel。
这种方式是最快的,因为模型已经预先编译,不需要解析和编译步骤。它适用于那些需要快速加载模型的场景,或者当模型太大而不适合每次都从文本文件解析和编译时。
总结
这三种方式各有优势,选择哪种方式取决于具体的应用场景和需求:
- 文本编辑器读取MJCF/URDF文件:适合需要手动编辑模型文件的场景。
- 用户代码直接操作mjSpec:适合需要动态构建或复杂操作模型的场景。
- 从MJB文件加载模型:适合需要快速加载预编译模型的场景。
4. MuJoCo模型的元素
1. Options
每个模型总是包括下列三组Options。如果未在 XML 文件中指定它们的值,则使用默认值。这些选项的设计使得用户可以在每个模拟时间步骤之前更改它们的值。但在一个时间步骤内,则不应更改任何选项。
- mjOption
影响物理模拟的选项:用于选择算法和设置其参数,启用和禁用仿真流水线的不同部分,并调整系统级物理属性,如重力。
- mjVisual
可视化选项:以及OpenGL 呈现选项,这些选项是依赖于会话的,并且不是模型的一部分。
- mjStatistic
编译器计算的模型的统计信息: 平均体重、模型的空间范围等。包含它是为了提供信息,也是为可视化工具将其用于自动定标。
2. Assets
在MuJoCo中,assets
部分是模型定义中用于存储可被模型元素引用的资源集合。这些资源包括网格(meshes)、纹理(textures)和材料(materials)。assets
允许模型元素通过引用这些资源来定义其外观和物理属性,而无需在每个模型元素中重复定义这些信息。下面我将对每个资源类型进行更具体的说明:
Mesh(网格)
- 定义:Mesh是三维模型中的几何结构,由顶点、边和面组成,通常用于定义复杂的形状,如机器人的外壳或物体的表面。
- 来源:MuJoCo可以从OBJ文件和二进制STL文件中加载三角网格。OBJ和STL是两种常见的三维模型文件格式,OBJ文件包含顶点和面的信息,而STL文件则包含三角面片的详细信息。
- 转换工具:可以使用如MeshLab这样的软件将其他格式的三维模型文件转换为OBJ或STL格式。
- 引用:在模型元素(如
geom
)中,可以通过mesh
属性引用一个mesh资源。
Texture(纹理)
- 定义:Texture是用于给模型元素添加细节和颜色的图像文件,它可以模拟表面材质的视觉效果。
- 来源:Texture可以从PNG文件中加载,PNG是一种常用的图像文件格式,支持透明度。
- 合成:除了直接加载图像文件,MuJoCo的编译器还可以根据用户定义的过程参数合成纹理。
- 引用方式:Texture不能直接从模型元素引用,而是必须先从
material
中引用,然后模型元素通过引用material
来间接使用纹理。
Material(材料)
- 定义:Material定义了模型元素(如几何体
geom
、视觉点site
和肌腱tendon
)的外观,包括颜色、反射率、光泽度等属性。 - 外观控制:通过OpenGL的属性,material可以控制光照与模型元素的交互效果,如RGBA(红绿蓝透明度)、反射、亮度和发射。
- 引用:模型元素通过
material
属性来引用一个material资源,从而继承其外观属性。
总结
assets
在MuJoCo中的作用是提供一种集中管理模型资源的方式,使得模型元素可以通过引用这些资源来复用外观和物理属性,而不是在每个元素中重复定义。这样做的好处是简化了模型的定义,使得模型更加易于管理和修改。每个asset
都有一个唯一的名称,模型元素通过这个名称来引用相应的资源。这种设计允许灵活地组合和重用资源,提高了模型定义的效率和灵活性。
https://zhuanlan.zhihu.com/p/696094248