2. 仿真环境搭建:安装MuJoCo、配置Python接口、验证第一个仿真模型

好,咱们正式开始动手了。

上一章聊了四足机器人的运动学和动力学基础,那些公式看着可能有点枯燥。但别急,这一章我们就要把这些理论扔进仿真环境里跑起来。我个人习惯是,学机器人控制一定要先搭好仿真环境。为什么?因为真机太贵了,摔一次几千块,你心疼我也心疼。

这一章的目标很明确:装好MuJoCo,配好Python接口,然后让一个简单的模型动起来。整个过程我大概会花30分钟带你走完。

2.1 为什么选MuJoCo?

市面上仿真器不少,Gazebo、PyBullet、Webots……我为什么推荐MuJoCo?

说白了,就三个字:快、准、稳。

  • 快:MuJoCo用C语言写的,计算效率极高。我在项目中跑过四足机器人的MPC控制,MuJoCo的仿真速度能比PyBullet快3-5倍。
  • 准:它的物理引擎基于凸优化求解,碰撞检测和关节约束处理得非常干净。不会出现模型穿地这种尴尬事。
  • 稳:DeepMind收购后一直在维护,文档和社区支持都很好。

一句话总结:MuJoCo是目前做四足机器人平衡控制仿真性价比最高的选择。没有之一。

2.2 安装MuJoCo

MuJoCo现在有两个版本:旧版2.1.x和新版3.x。我建议你直接装3.x,因为Python接口更友好,而且DeepMind官方主推。

2.2.1 下载MuJoCo二进制文件

去MuJoCo的GitHub Releases页面下载对应你操作系统的版本。Windows选win64,Linux选linux64,macOS选macos-universal。

下载后解压,放到一个你记得住的位置。我个人习惯放在 C:\mujoco 或者 ~/mujoco。

2.2.2 设置环境变量

这一步很多人会忘,然后报错说找不到库文件。嗯,这里要注意。

  • Windows:把 C:\mujoco\bin 加到系统Path里。
  • Linux/macOS:在 .bashrc 或 .zshrc 里加一行:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/mujoco/bin

我曾经遇到过:装完MuJoCo后运行示例,提示 mujoco.dll 找不到。折腾了半天才发现是环境变量没配好。别踩这个坑。

2.3 配置Python接口

MuJoCo的Python接口现在叫 mujoco,直接pip安装就行。

pip install mujoco

就这么简单?对,就这么简单。但有个前提——你的Python版本要在3.8以上。我建议用3.10,兼容性最好。

装完之后验证一下:

python -c "import mujoco; print(mujoco.__version__)"

如果输出版本号,比如 3.1.4,那就说明装好了。

小技巧:如果你用conda,建议新建一个虚拟环境:conda create -n mujoco python=3.10。这样不会污染你其他的Python项目。

2.4 第一个仿真模型:让一个球滚起来

好了,环境搭好了,我们来跑第一个模型。别一上来就搞四足机器人,先让一个球滚起来,感受一下MuJoCo的工作流程。

2.4.1 创建模型文件

MuJoCo的模型用XML格式描述,后缀是 .xml。新建一个文件叫 ball.xml:

<mujoco model="ball">
  <worldbody>
    <light name="top" pos="0 0 1"/>
    <geom name="floor" type="plane" size="1 1 0.1" rgba="0.8 0.8 0.8 1"/>
    <body name="ball" pos="0 0 0.5">
      <freejoint/>
      <geom name="sphere" type="sphere" size="0.1" rgba="0.2 0.6 1 1"/>
    </body>
  </worldbody>
</mujoco>

这个模型很简单:一个地面,一个球,球用 freejoint 连接,意味着它可以自由移动和旋转。

2.4.2 写Python脚本跑仿真

新建一个 run_ball.py:

import mujoco
import mujoco.viewer
import time

# 加载模型
model = mujoco.MjModel.from_xml_path('ball.xml')
data = mujoco.MjData(model)

# 用viewer可视化
with mujoco.viewer.launch_passive(model, data) as viewer:
    # 给球一个初始速度
    data.qvel[0] = 2.0  # x方向速度
    data.qvel[1] = 1.0  # y方向速度

    # 跑仿真
    for _ in range(1000):
        mujoco.mj_step(model, data)
        viewer.sync()
        time.sleep(0.01)

运行这个脚本,你会看到一个蓝色的球在灰色地面上滚动。是不是很简单?

核心逻辑:mj_step 是MuJoCo的仿真步进函数,每调用一次,物理引擎就往前推进一步。你想想看,四足机器人的平衡控制,本质上就是不断调用 mj_step,然后根据状态调整关节力矩。

2.5 理解MuJoCo的核心概念

跑完第一个模型,我们来梳理一下MuJoCo的几个核心概念。理解了这些,后面做四足机器人仿真就顺了。

概念 说明 对应代码
MjModel 模型定义,包含几何、关节、执行器等静态信息 mujoco.MjModel.from_xml_path()
MjData 仿真数据,包含位置、速度、力矩等动态信息 mujoco.MjData(model)
mj_step 仿真步进函数,推进物理引擎 mujoco.mj_step(model, data)
freejoint 自由关节,允许物体在6个自由度上运动 XML中的 <freejoint/>

我个人习惯把 MjModel 比作机器人的「设计图纸」,MjData 比作机器人的「实时状态」。图纸不变,但状态每时每刻都在变。

2.6 本章知识结构图

下面这张图帮你理清本章的脉络:

第二章知识结构图 第二章:仿真环境搭建知识结构 MuJoCo仿真环境 1. 安装MuJoCo 2. 配置Python接口 3. 验证仿真模型 下载二进制文件 配置环境变量 pip install mujoco 验证版本号 创建ball.xml模型 编写Python仿真脚本 💡 核心目标:让一个球在MuJoCo中滚起来 理解 MjModel、MjData、mj_step 三者的关系

2.7 常见问题与避坑

最后,分享几个我实际项目中遇到的坑,你提前知道,能省不少时间。

我曾经遇到过:在Linux上装MuJoCo 3.x,运行时报错 libGL.so.1: cannot open shared object file。原因是系统缺少OpenGL库。解决方法:sudo apt install libgl1-mesa-glx。

小提示:如果你用WSL2跑MuJoCo,记得装一个X Server(比如VcXsrv),否则viewer打不开。或者干脆用 mujoco.renderer 做离屏渲染,不依赖图形界面。

关于模型文件:MuJoCo的XML语法很严格,标签必须闭合,属性值必须加引号。我见过有人把 type="sphere" 写成 type=sphere,结果模型加载失败。这种小错误最浪费时间。

好了,到这一步,你的MuJoCo环境应该已经跑起来了。那个蓝色的球在灰色地面上滚动的画面,就是你在四足机器人仿真世界里的第一步。后面我们会一步步把这个球换成四足机器人模型,然后让它站起来、走起来、跑起来。