2. 仿真环境搭建:Gazebo/Webots/MuJoCo 环境配置与验证
做四足机器人仿真,选对工具只是第一步。真正花时间的,是把环境搭稳、跑通、验证过。
我见过不少团队,花两周搭环境,结果一跑就崩。最后发现是模型参数没对齐,或者物理引擎的摩擦系数设错了。说白了,仿真环境搭建不是「装个软件」那么简单,它是个系统工程。
2.1 三大仿真器选型对比
先说说市面上主流的三个选择。我个人习惯根据项目阶段来选,而不是盲目追新。
| 特性 | Gazebo | Webots | MuJoCo |
|---|---|---|---|
| 物理引擎 | ODE / Bullet / DART | ODE 自研 | 自研约束求解器 |
| 渲染质量 | 中等(OGRE) | 良好(WREN) | 基础(OpenGL) |
| ROS 集成 | 原生支持 | ROS2 桥接 | 需第三方适配 |
| 仿真速度 | 中等 | 较快 | 极快 |
| 学习曲线 | 中等 | 平缓 | 陡峭 |
| 典型场景 | 多机器人、SLAM | 教育、快速原型 | 强化学习、大规模训练 |
我的建议是:如果你做足式机器人运动控制,MuJoCo 的仿真精度和速度优势很明显。但如果你需要和真实硬件做联合调试,Gazebo 的 ROS 生态更成熟。Webots 嘛,适合教学和快速验证想法。
2.2 环境配置三步走
不管选哪个仿真器,配置流程都差不多。我总结成三步,你照着做就行。
第一步:安装与依赖
以 Gazebo 为例,Ubuntu 20.04 上的标准安装命令:
# 安装 Gazebo 11
sudo apt-get update
sudo apt-get install gazebo11 libgazebo11-dev
# 安装 ROS Noetic 集成
sudo apt-get install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control
MuJoCo 的安装稍微麻烦点。我记得第一次装的时候,被 Python 绑定折腾了一下午。现在简单了:
# 安装 MuJoCo 2.3.7
pip install mujoco
# 验证安装
python3 -c "import mujoco; print(mujoco.__version__)"
第二步:模型导入与参数校准
这一步最容易出问题。你想想看,一个四足机器人模型,关节限位、质量分布、摩擦系数,哪个不对都会导致行走不稳。
以 URDF 模型为例,关键参数检查清单:
- 关节限位:髋关节 ±45°,膝关节 -120°~0°,踝关节 ±30°
- 质量属性:大腿 0.5kg,小腿 0.3kg,躯干 3.0kg
- 碰撞模型:用简化几何体(box/cylinder)代替 mesh,提高仿真速度
- 摩擦系数:地面摩擦 0.8~1.2,关节摩擦 0.01~0.05
<gazebo> 标签,单独设置摩擦和阻尼。这样不影响 ROS 端的控制逻辑。
第三步:仿真验证
环境搭好了,怎么知道对不对?跑一个简单的站立测试就行。
Gazebo 下的验证脚本:
# 启动仿真世界
roslaunch your_robot_gazebo empty_world.launch
# 生成机器人
roslaunch your_robot_description spawn_robot.launch
# 检查关节状态
rostopic echo /joint_states
正常情况,机器人应该稳稳站在地面上,关节角度保持初始值。如果出现以下现象,说明配置有问题:
- 机器人下沉或穿透地面 → 检查碰撞模型和地面参数
- 关节抖动或漂移 → 检查 PID 参数和关节阻尼
- 机器人侧翻或弹跳 → 检查质心位置和惯性矩阵
2.3 知识体系框架
下面这张图,是我做仿真排查时的思维导图。你把它记下来,以后遇到问题直接对照。
2.4 常见问题与排查
环境搭建过程中,有几个坑我踩过不止一次。分享出来,你遇到了直接对照。
原因:碰撞模型缺失或地面摩擦系数为0。
解决:检查 URDF 中是否包含 <collision> 标签,地面参数设置 <mu1>1.0</mu1>。
原因:PID 参数过激或仿真步长太大。
解决:降低 P 增益,增加 D 增益。Gazebo 中步长设为 0.001s,MuJoCo 中设为 0.002s。
原因:质心位置不对或关节限位设置错误。
解决:用 rviz 查看机器人模型,确认质心在躯干几何中心附近。关节限位参考真实硬件数据。
2.5 验证清单
最后,给你一份验证清单。每次搭完环境,逐项检查:
- 模型加载:机器人能否正常出现在仿真世界中?
- 关节控制:能否通过话题/API 控制每个关节?
- 传感器数据:IMU、关节编码器数据是否合理?
- 物理交互:机器人落地后是否稳定?施加外力后是否正常反弹?
- 仿真速度:实时因子是否接近 1.0?
嗯,到这里,仿真环境搭建这部分就差不多了。记住一句话:环境搭得稳,后面排查才省心。我见过太多人,一上来就调步态算法,结果跑两步就崩,最后发现是环境参数没设对。别走弯路。