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__)"
注意: MuJoCo 2.0 之后不再需要 license key。如果你还在用旧版本,赶紧升级。我曾经因为 license 过期,整个团队停摆两天。

第二步:模型导入与参数校准

这一步最容易出问题。你想想看,一个四足机器人模型,关节限位、质量分布、摩擦系数,哪个不对都会导致行走不稳。

以 URDF 模型为例,关键参数检查清单:

  • 关节限位:髋关节 ±45°,膝关节 -120°~0°,踝关节 ±30°
  • 质量属性:大腿 0.5kg,小腿 0.3kg,躯干 3.0kg
  • 碰撞模型:用简化几何体(box/cylinder)代替 mesh,提高仿真速度
  • 摩擦系数:地面摩擦 0.8~1.2,关节摩擦 0.01~0.05
小技巧: 我习惯在 URDF 里加一个 <gazebo> 标签,单独设置摩擦和阻尼。这样不影响 ROS 端的控制逻辑。

第三步:仿真验证

环境搭好了,怎么知道对不对?跑一个简单的站立测试就行。

Gazebo 下的验证脚本:

# 启动仿真世界
roslaunch your_robot_gazebo empty_world.launch

# 生成机器人
roslaunch your_robot_description spawn_robot.launch

# 检查关节状态
rostopic echo /joint_states

正常情况,机器人应该稳稳站在地面上,关节角度保持初始值。如果出现以下现象,说明配置有问题:

  • 机器人下沉或穿透地面 → 检查碰撞模型和地面参数
  • 关节抖动或漂移 → 检查 PID 参数和关节阻尼
  • 机器人侧翻或弹跳 → 检查质心位置和惯性矩阵

2.3 知识体系框架

下面这张图,是我做仿真排查时的思维导图。你把它记下来,以后遇到问题直接对照。

仿真环境搭建知识体系 仿真环境搭建 Gazebo Webots MuJoCo ROS 集成 URDF 导入 物理引擎 PROTO 模型 控制器 API 超级时间步 MJCF 格式 约束求解 强化学习 核心验证流程 安装配置 → 模型导入 → 参数校准 → 站立测试 → 行走验证 常见问题:穿透、抖动、漂移、侧翻 排查工具:joint_states / 日志 / 可视化调试

2.4 常见问题与排查

环境搭建过程中,有几个坑我踩过不止一次。分享出来,你遇到了直接对照。

问题1:机器人穿透地面

原因:碰撞模型缺失或地面摩擦系数为0。

解决:检查 URDF 中是否包含 <collision> 标签,地面参数设置 <mu1>1.0</mu1>。

问题2:关节抖动

原因:PID 参数过激或仿真步长太大。

解决:降低 P 增益,增加 D 增益。Gazebo 中步长设为 0.001s,MuJoCo 中设为 0.002s。

问题3:机器人无法站立

原因:质心位置不对或关节限位设置错误。

解决:用 rviz 查看机器人模型,确认质心在躯干几何中心附近。关节限位参考真实硬件数据。

2.5 验证清单

最后,给你一份验证清单。每次搭完环境,逐项检查:

  1. 模型加载:机器人能否正常出现在仿真世界中?
  2. 关节控制:能否通过话题/API 控制每个关节?
  3. 传感器数据:IMU、关节编码器数据是否合理?
  4. 物理交互:机器人落地后是否稳定?施加外力后是否正常反弹?
  5. 仿真速度:实时因子是否接近 1.0?

嗯,到这里,仿真环境搭建这部分就差不多了。记住一句话:环境搭得稳,后面排查才省心。我见过太多人,一上来就调步态算法,结果跑两步就崩,最后发现是环境参数没设对。别走弯路。