ROS2 Humble下RP Lidar结合Slam Toolbox建图报错求助
解决ROS2 Humble下RPLidar + Slam Toolbox静态SLAM的消息队列溢出问题
问题本质
你遇到的discarding message because the queue is full报错,核心原因是TF坐标变换链不完整,导致Slam Toolbox无法及时处理雷达数据,进而引发消息堆积丢弃。因为你没有URDF文件,缺少base_link到laser的坐标定义,同时Slam Toolbox依赖完整的map→odom→base_link→laser变换链才能正常工作。
修复步骤
1. 补充静态TF变换
直接发布base_link到laser的静态坐标变换(假设雷达无偏移安装在基座中心,可根据实际安装位置调整前6个参数):
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 base_link laser
参数说明:x y z roll pitch yaw 父坐标系 子坐标系
2. 调整Slam Toolbox消息队列容量
修改Slam Toolbox的启动配置,增大消息过滤器队列大小,避免数据快速被丢弃:
- 复制系统默认的
online_async_launch.py到你的工作空间launch目录(路径通常为/opt/ros/humble/share/slam_toolbox/launch/) - 编辑复制后的文件,在
slam_toolbox_node的参数列表中添加:
parameters=[ # 保留原有参数,新增以下配置 {'message_filter_queue_size': 100} ]
- 用修改后的launch文件启动SLAM:
ros2 launch 你的工作空间名 online_async_launch.py
3. 验证TF链完整性
启动所有节点后,执行以下命令生成TF树可视化文件:
ros2 run tf2_tools view_frames.py
打开生成的frames.pdf,确认存在完整的map→odom→base_link→laser变换链。
完整建图流程
- 启动RPLidar:
ros2 launch rplidar_ros rplidar.launch.py
- 发布静态TF变换:
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 base_link laser
- 启动修改后的Slam Toolbox:
ros2 launch 你的工作空间名 online_async_launch.py
- 启动RViz查看建图:
ros2 run rviz2 rviz2
在RViz中添加Map组件(话题选择/map)和LaserScan组件(话题选择/scan),即可实时查看建图效果。
额外排查点
- 若报错仍存在,检查雷达数据发布频率:执行
ros2 topic hz /scan,如果频率过高(超过20Hz),可修改RPLidar的launch文件降低扫描频率,减少数据量。 - 确保单机器节点时钟同步,多机器部署需配置时间同步。
内容的提问来源于stack exchange,提问作者kathan
相关产品推荐
相关产品推荐

