Gazebo 仿真¶
使用 Gazebo Harmonic 物理仿真运行机器人演示。
前提条件¶
工作空间已编译
已安装 Gazebo Harmonic 相关软件包
安装 Gazebo¶
sudo apt install ros-jazzy-gz-*
步骤¶
1. Source Workspace¶
在 ./init_repo.sh 和 colcon build 之后,从工作区根目录:
source install/setup.bash
2. Launch with Gazebo¶
hardware:=gz 将 xacro ros2_control_hardware_type 设为 gz,并将 gazebo 设为 true(build_xacro_mappings())。ocs2_arm README:安装 ros-jazzy-ros-gz 和 ros-jazzy-gz-ros2-control。
ros2 launch ocs2_arm_controller demo.launch.py hardware:=gz
Acone xacro 在此键下的插件:gz_ros2_control/GazeboSimSystem。gz 是 launch 键,不是厂商驱动层包 — 驱动层。
3. Interact¶
FSM:/fsm_command(std_msgs/Int32)。不要发布 /target_pose。见 FSM 与话题。
启动选项¶
# Acone (dual-arm, not Lift 2S)
ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone hardware:=gz
demo.launch.py 声明了 world(默认 dart)。它没有声明 rviz:=false 或 headless:=true。
Gazebo 功能¶
物理调参¶
默认物理参数适用于大多数机器人。如需自定义调参,请修改描述软件包中的 SDF 文件。
世界文件¶
demo.launch.py 声明了 world(默认 dart)。只用当前描述 / launch 里存在的 world 键。
录制¶
录制仿真以便回放:
gz service -s /world/default/control \
--reqtype gz.msgs.WorldControl \
--reptype gz.msgs.Boolean \
--timeout 3000 \
--req 'pause: false'
Mock 与 Gazebo 对比¶
方面 |
Mock |
Gazebo |
|---|---|---|
物理 |
无 |
完整仿真 |
速度 |
实时 |
可配置 |
碰撞 |
否 |
是 |
传感器 |
占位 |
仿真 |
资源占用 |
低 |
中高 |
控制器开发使用 mock,行为测试使用 Gazebo。
验证¶
Gazebo 窗口中显示环境里的机器人
机器人响应 ROS 2 指令
物理交互(碰撞、重力)正常工作
故障排除¶
Gazebo 启动时崩溃¶
# Check GPU drivers
nvidia-smi
# Try software rendering
export LIBGL_ALWAYS_SOFTWARE=1
ros2 launch ocs2_arm_controller demo.launch.py hardware:=gz
机器人掉穿地面¶
确认世界文件包含地面平面。
控制器未启动¶
等待 Gazebo 完全初始化后再发送指令。检查是否有控制器生成失败的错误信息。
CPU 占用过高¶
降低物理更新频率,或使用无界面模式运行:
渲染设置见 Gazebo / ros-jazzy-ros-gz 文档。此 launch 文件没有记录 headless:= 参数。