Mujoco入门(1)—— 安装和测试
·
1. 概述
- MuJoCo (Multi - Joint Dynamics with Contact) 是一个通用物理引擎,旨在促进机器人、生物力学、图形和动画、机器学习以及其他需要快速、精确模拟关节结构与其环境交互的领域的研究和开发,其本质是一个 C/C++ 库,提供 C API,已开源
- MuJoCo 基于内置 XML 解析器和编译器预分配的底层数据结构进行操作,可用于实现基于模型的计算,例如控制综合、状态估计、系统辨识、机构设计、通过逆动力学进行数据分析以及用于机器学习应用的并行采样。它也可以用作更传统的仿真器,包括用于游戏和交互式虚拟环境,在强化学习和具身智能等领域得到广泛应用。部分特性如下
- 支持使用原生 MJCF 场景描述语言定义模型,这是一种 XML 文件格式
- 支持加载 URDF 模型文件
- 支持交互式可视化,其原生 GUI 使用 OpenGL 渲染
- 提供了大量用于计算物理相关量的实用函数。
2. 安装
- 在 conda 环境中,使用 pip 安装 mojoco 仓库
# 1. 创建 Conda 环境 conda create -n mujoco python=3.12 -y # 2. 激活环境 conda activate mujoco # 3. 升级 pip python -m pip install --upgrade pip # 4. 安装 MuJoCo pip install mujoco==3.13.0 - 检查版本
python -c "import mujoco; print('MuJoCo version:', mujoco.__version__)" # 正常应输出 MuJoCo version: 3.13.0 - 测试 Python 绑定能不能正常创建模型
python - <<'PY' import mujoco xml = """ <mujoco> <worldbody> <geom type="plane" size="1 1 0.1"/> <body pos="0 0 1"> <joint type="free"/> <geom type="sphere" size="0.1"/> </body> </worldbody> </mujoco> """ model = mujoco.MjModel.from_xml_string(xml) data = mujoco.MjData(model) for _ in range(100): mujoco.mj_step(model, data) print("Simulation OK") print("time =", data.time) print("qpos =", data.qpos) PY # 正常应看到 Simulation OK
3. 模拟器测试
- 使用
python -m mujoco.viewer启动 MuJoCo 自带的交互式可视化工具。其可用来加载 MJCF 模型、实时查看仿真过程,并检查关节、接触、力、传感器等状态,适合在建模和控制算法开发阶段快速检查模型是否正常

可以用python -m mujoco.viewer --mjcf=/path/to/some/mjcf.xml参数指定要展示模型,或直接把 .xml 文件拖入以上窗口
3.1 常用操作
- 双击选中的物体并高亮
- 双击选中物体后,按住ctrl+左键是调整姿态
- 双击选中物体后,按住ctrl+右键是在双击选中的位置施加一个力
- +和-(不按ctrl)是仿真世界时间流逝速度
- ctrl+A相机视角回正
3.2 快捷键
| key | function |
|---|---|
| F1 | help |
| F2 | info |
| F3 | profiler |
| F4 | sensors |
| F5 | 全屏 |
| F6 | 切换可视化坐标系 |
| F7 | 实体名字标签 |
| TAB | 隐藏左侧工具栏 |
| Delete | 重置世界 |
| ` | geom最小外界矩形和碰撞状态 |
| Q | Camera可视化 |
| W | 世界网格化 |
| E | Equality |
| R | 开关光线反射 |
| T | 几何体透明化 |
| Y | 测距可视化 |
| U | 驱动器方向可视化 |
| I | 转动惯量可视化 |
| O | 调整物体位姿可视化 |
| P | Contact可视化 |
| [ / ] | 切换相机视角 |
| \ | Mesh Tree |
| A | auto Connect |
| D | 只显示body |
| S | 画面亮度调整 |
| F | 接触力大小及方向可视化(配合接触点C) |
| G | 迷雾 |
| J | 关节方向可视化 |
| H | 凸包可视化 |
| J | 关节选装方向可视化 |
| K | 关闭天空盒 |
| ; | Skin可视化 |
| ’ | 缩放转动惯量 |
| Z | 灯光 |
| X | Texture关闭 |
| C | 接触点可视化(配合接触力F) |
| V | 肌腱可视化 |
| B | 扰动力大小及方向可视化 |
| M | 质心可视化 |
| , | Activation |
| / | haze 地平线 |
3.3 MJCF 和 URDF 文件
- URDF 和 MJCF 都是用 XML 描述机器人模型的格式,但侧重点不同:
-
URDF:主要描述机器人的结构关系,核心是
link + joint,常用于 ROS、MoveIt 和 CAD 导出。一个很简化的 URDF 大概长这样:<robot name="duck"> <link name="body"> ... </link> <link name="thigh"> ... </link> <joint name="hip" type="revolute"> <parent link="body"/> <child link="thigh"/> </joint> </robot>核心概念就是:
Robot ├── link 刚体 ├── joint 关节 ├── visual 外观 ├── collision 碰撞几何 └── inertial 质量和惯量它非常适合描述机械结构拓扑,所以 ROS、MoveIt、Gazebo,以及各种 CAD→机器人转换工具,都大量使用 URDF
-
MJCF:MuJoCo 原生格式,除了结构,还能描述 actuator、sensor、contact、friction、tendon、equality 等,更适合动力学仿真和强化学习。它不只是描述“机器人长什么样”,还直接面向物理仿真:
<mujoco model="duck"> <worldbody> <body name="body"> <geom type="box"/> <body name="thigh"> <joint name="hip" type="hinge" /> <geom type="capsule"/> </body> </body> </worldbody> <actuator> <motor joint="hip"/> </actuator> </mujoco>可见,MJCF 的核心组织方式不是
link + joint,而是 层次化组织的body,然后 joint 挂在 body 上。更准确地说是:MJCF │ ├── worldbody │ ├── body │ ├── joint │ ├── geom │ ├── site │ └── camera │ ├── actuator ├── sensor ├── tendon ├── equality ├── contact ├── asset └── default所以它天然就比 URDF 更像一个完整的物理仿真场景描述语言。
-
- 一句话描述:URDF 更像“机器人机械结构说明书”,MJCF 更像“机器人 + 控制器 + 传感器 + 物理世界的仿真工程文件”
URDF MJCF 出身 ROS MuJoCo 主要目标 描述机器人结构 描述物理仿真模型 刚体 linkbody关节 jointjoint碰撞 collisiongeom外观 visualgeom/ assetactuator 很弱,通常靠 ROS 扩展 原生支持 sensor 通常靠插件/扩展 原生支持 tendon 不擅长 原生支持 闭环机构 比较麻烦 equality 等原生支持 参数继承 弱 default很强接触/摩擦 相对基础 非常详细 MuJoCo 适配 可导入 原生格式
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)