ROS2 Humble中RVIZ提示camera_depth_frame队列满丢帧问题求助
问题描述
- 使用ROS2 Humble发行版,目标是结合slam_toolbox实现无激光雷达的环境建图
- 通过depthimage_to_laserscan功能包将深度相机原始图像转为LaserScan消息,话题可输出有效值,但无法在RVIZ中可视化
- RVIZ终端报错:
[rviz]: Message Filter dropping message: frame 'camera_depth_frame' at time 5.000 for a reason 'discarding message because the queue is full'
- 已尝试调大消息队列长度,但问题未解决
解决方案
1. 检查TF树与时间同步
- 用
ros2 run tf2_tools view_frames.py生成TF树,确认camera_depth_frame到机器人根坐标系(如base_link)的变换存在且正常发布 - 检查深度相机的时间戳是否与系统时间同步,若偏差过大,可在depthimage_to_laserscan的配置中开启时间戳同步,或用
static_transform_publisher补全静态TF变换 - 确保所有节点的
use_sim_time参数一致:实际机器人场景设为false,仿真场景统一设为true
2. 调整RVIZ的消息过滤参数
- 在RVIZ的LaserScan可视化组件中,调大
Queue Size到100以上(如200),同时设置Time Tolerance为0.5秒左右,允许消息存在一定时间偏差 - 检查RVIZ全局选项的
Fixed Frame,确保设置为机器人根坐标系(如base_link),而非camera_depth_frame
3. 优化depthimage_to_laserscan的性能
- 降低LaserScan输出频率:在depthimage_to_laserscan的配置中设置
rate参数为10Hz左右,避免因相机帧率过高导致消息积压 - 减少计算负载:缩小激光扫描的角度范围(调整
min_angle、max_angle)或降低扫描线数量(scan_height),降低节点CPU占用
4. 统一QoS配置
- 用
ros2 topic info /scan --verbose查看话题的QoS配置,确保depthimage_to_laserscan发布端与RVIZ、slam_toolbox订阅端的QoS兼容 - 在depthimage_to_laserscan的launch文件中显式设置QoS:
reliability=RELIABLE、durability=VOLATILE,匹配RVIZ默认订阅规则
5. 验证slam_toolbox的配置
- 确认slam_toolbox订阅的LaserScan话题名称正确(默认是
/scan),且其坐标系配置与当前机器人TF树一致 - 查看slam_toolbox的启动日志,排查是否存在TF变换相关错误,这类错误会间接导致RVIZ的消息过滤异常
内容的提问来源于stack exchange,提问作者jee wooo
相关产品推荐
相关产品推荐

