☰
Mujoco入口(1)—— 安装和测试
2026/10/24 4:09:49 网站建设 项目流程
  • 参考:
    • MuJoCo 文档
    • mujoco建模与仿真教程

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-nmujocopython=3.12-y# 2. 激活环境conda activate mujoco# 3. 升级 pippython-mpipinstall--upgradepip# 4. 安装 MuJoCopipinstallmujoco==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 快捷键

keyfunction
F1help
F2info
F3profiler
F4sensors
F5全屏
F6切换可视化坐标系
F7实体名字标签
TAB隐藏左侧工具栏
Delete重置世界
`geom最小外界矩形和碰撞状态
QCamera可视化
W世界网格化
EEquality
R开关光线反射
T几何体透明化
Y测距可视化
U驱动器方向可视化
I转动惯量可视化
O调整物体位姿可视化
PContact可视化
[ / ]切换相机视角
\Mesh Tree
Aauto Connect
D只显示body
S画面亮度调整
F接触力大小及方向可视化(配合接触点C)
G迷雾
J关节方向可视化
H凸包可视化
J关节选装方向可视化
K关闭天空盒
;Skin可视化
’缩放转动惯量
Z灯光
XTexture关闭
C接触点可视化(配合接触力F)
V肌腱可视化
B扰动力大小及方向可视化
M质心可视化
,Activation
/haze 地平线

3.3 MJCF 和 URDF 文件

  • URDF和MJCF都是用 XML 描述机器人模型的格式,但侧重点不同:
    • URDF:主要描述机器人的结构关系,核心是link + joint,常用于 ROS、MoveIt 和 CAD 导出。一个很简化的 URDF 大概长这样:

      <robotname="duck"><linkname="body">...</link><linkname="thigh">...</link><jointname="hip"type="revolute"><parentlink="body"/><childlink="thigh"/></joint></robot>

      核心概念就是:

      Robot ├── link 刚体 ├── joint 关节 ├── visual 外观 ├── collision 碰撞几何 └── inertial 质量和惯量

      它非常适合描述机械结构拓扑,所以 ROS、MoveIt、Gazebo,以及各种 CAD→机器人转换工具,都大量使用 URDF

    • MJCF:MuJoCo 原生格式,除了结构,还能描述actuator、sensor、contact、friction、tendon、equality等,更适合动力学仿真和强化学习。它不只是描述“机器人长什么样”,还直接面向物理仿真:

      <mujocomodel="duck"><worldbody><bodyname="body"><geomtype="box"/><bodyname="thigh"><jointname="hip"type="hinge"/><geomtype="capsule"/></body></body></worldbody><actuator><motorjoint="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 更像“机器人 + 控制器 + 传感器 + 物理世界的仿真工程文件”
    URDFMJCF
    出身ROSMuJoCo
    主要目标描述机器人结构描述物理仿真模型
    刚体linkbody
    关节jointjoint
    碰撞collisiongeom
    外观visualgeom/ asset
    actuator很弱,通常靠 ROS 扩展原生支持
    sensor通常靠插件/扩展原生支持
    tendon不擅长原生支持
    闭环机构比较麻烦equality 等原生支持
    参数继承弱default很强
    接触/摩擦相对基础非常详细
    MuJoCo 适配可导入原生格式

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询