1、系统环境
ROS2-Jazzy + Gazebo
2、项目整体搭建流程
2.1、建立工作空间与包结构
创建 microban_ws 工作空间,建立标准机器人资源包目录:
-
urdf/:机器人模型文件
-
config/:控制器 yaml 配置
-
launch/:仿真启动脚本
-
package.xml:包依赖声明
-
CMakeLists.txt:编译安装规则
2.2、编写核心文件
-
microban.urdf:机器人连杆、关节、传感器、ros2_control 插件
-
controllers.yaml:关节位置控制器、状态广播器配置
-
launch.py:启动 Gazebo、状态发布、机器人生成、桥接、控制器
2.3、依赖安装与编译
-
rosdep 自动安装依赖
-
colcon 编译工作空间
-
source 环境变量启动仿真
3、问题
问题1:colcon build 报错找不到 setup.py
报错原因 :package.xml 声明为 ament_python 包,但本项目是纯资源包(urdf/launch/config),不需要 Python 编译。
解决方法:
-
将 package.xml 编译类型改为 ament_cmake
-
新建 CMakeLists.txt 实现资源目录安装
问题2:source install/setup.bash 提示不存在
原因 :ROS2 Jazzy 新版只生成 setup.sh,不再生成 setup.bash。
解决 :统一使用:source install/setup.sh
问题3:Gazebo 启动报错 --shadows 参数不存在
原因:Gazebo8(Jazzy 默认)删除了 --shadows 旧参数。
解决:删除 launch 中 --shadows 启动参数。
问题4:ros_gz_bridge No template specialization 桥接失败
原因:Jazzy 桥接语法顺序旧写法颠倒。
正确新格式 :/topic@ROS类型@GZ类型
例:/imu@sensor_msgs/msg/Imu@gz.msgs.Imu
问题5:URDF 第770行 noise 标签解析失败
原因:noise 标签未闭合、嵌套错误、非法放置(只能在 IMU 内部)。
解决:
-
修正标签闭合
-
或临时删除 noise 块保证模型先跑通
问题6:Gazebo 崩溃:Couldn't parse params-file $(find)
致命核心问题(今天最难的坑)
原因 :GZ Sim 插件不支持 ROS 的 $(find) 语法,URDF 中 gz_ros2_control 插件读取 yaml 路径失败,直接导致仿真内核崩溃终止。
临时解决(可跑通仿真):暂时删除 URDF 中的 ros2_control plugin 块、注释 launch 控制器 spawner。
最终根治方案 :后续使用绝对路径加载 controllers.yaml。
问题5:RMW 中间件实现未安装
系统环境变量 RMW_IMPLEMENTATION 设置为 rmw_cyclonedds_cpp,但对应的共享库 librmw_cyclonedds_cpp.so 不存在于系统中,导致所有 ROS2 节点无法初始化并崩溃。
错误信息:
failed to load shared library 'librmw_cyclonedds_cpp.so' due to dlopen error:
librmw_cyclonedds_cpp.so: cannot open shared object file: No such file or directory
解决方案
方案一:安装 CycloneDDS(推荐)
sudo apt update
sudo apt install ros-jazzy-rmw-cyclonedds-cpp
# 查看当前 RMW 实现
echo $RMW_IMPLEMENTATION
# 验证 ROS2 环境
ros2 doctor --report | grep rmw
# 检查已安装的 RMW 包
dpkg -l | grep rmw
安装后重新运行 launch 文件即可。
方案二:切换到默认 RMW 实现
如果不想使用 CycloneDDS,可以切换到 ROS2 默认的 Fast DDS:
# 临时切换(仅当前终端)
unset RMW_IMPLEMENTATION
# 或
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
# 重新运行
ros2 launch microban microban_gz.launch.py
永久配置(可选)
将 RMW 设置添加到 ~/.bashrc:
# 使用 Fast DDS
echo 'export RMW_IMPLEMENTATION=rmw_fastrtps_cpp' >> ~/.bashrc
source ~/.bashrc
# 或继续使用 CycloneDDS
echo 'export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp' >> ~/.bashrc
source ~/.bashrc
附加问题:VMware 3D 加速
日志中还出现了 3D 渲染警告:
VMware: No 3D enabled
libEGL warning: egl: failed to create dri2 screen
这可能导致模型渲染异常。如需完整 3D 体验:
关闭虚拟机
VMware 设置 → Display → 启用 Accelerate 3D graphics
分配至少 256MB 显存
重启虚拟机
4、最终成功运行状态
-
Gazebo 正常启动无崩溃
-
URDF 模型解析成功、无 XML 报错
-
robot_state_publisher 正常启动
-
机器人成功生成在仿真世界
-
桥接语法错误消除
-
CycloneDDS安装成功

5、后续待完成任务
-
修复 ros2_control 绝对路径问题,恢复控制器功能
-
优化 URDF 惯性矩阵、增加 dummy_link 消除警告
-
恢复 IMU noise 传感器噪声参数
-
编写关节控制节点,实现机器人站立、运动控制