You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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变换链。

完整建图流程

  1. 启动RPLidar:
ros2 launch rplidar_ros rplidar.launch.py
  1. 发布静态TF变换:
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 base_link laser
  1. 启动修改后的Slam Toolbox:
ros2 launch 你的工作空间名 online_async_launch.py
  1. 启动RViz查看建图:
ros2 run rviz2 rviz2

在RViz中添加Map组件(话题选择/map)和LaserScan组件(话题选择/scan),即可实时查看建图效果。

额外排查点

  • 若报错仍存在,检查雷达数据发布频率:执行ros2 topic hz /scan,如果频率过高(超过20Hz),可修改RPLidar的launch文件降低扫描频率,减少数据量。
  • 确保单机器节点时钟同步,多机器部署需配置时间同步。

内容的提问来源于stack exchange,提问作者kathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:57:45