根据你描述的现象(RViz 定位飘、消息队列满、频率显示异常),这是典型的 ROS2 通信瓶颈 + 时间同步问题。按以下优先级排查:
立即执行(3 步解决 80% 问题)
强制时间同步(最关键!)
定位飘移 90% 是时间不同步导致传感器数据时间戳错乱。
# 小车端安装 chrony
sudo apt install chrony -y
sudo chronyd -q 'server ntp.aliyun.com iburst'
# 虚拟机端同样执行
sudo chronyd -q 'server ntp.aliyun.com iburst'
# 验证时间差(必须 < 10ms)
chronyc tracking
降低网络负载
消息队列满 = 网络带宽不足,优先砍掉非必要数据:
# 修改 yahboomcar_nav_launch.py,找到雷达节点添加:
parameters=[{'use_sim_time': False,
'scan_topic': '/scan_raw', # 改用降频话题
'publish_rate': 5.0}] # 强制 5Hz
或在 RViz 中取消订阅 /point_cloud、/camera 等高带宽话题。
调整 EKF 参数
编辑 ekf_config.yaml(通常在 yahboomcar_nav/config/):
odom0: /odom
odom0_config: [true, true, false, false, false, true, true, false, false, false, false, true, false, false, false]
odom0_differential: true # 启用微分模式抗漂移
odom0_relative: true
深度排查(若仍未解决)
检查网络质量
# 小车端持续 ping 虚拟机
ping -i 0.2 <虚拟机 IP>
# 虚拟机端监控 ROS2 流量
ros2 topic hz /odom /scan /tf
正常值:延迟 < 20ms,丢包率 0%。若延迟>50ms,换 5G WiFi 或有线连接。
验证 QoS 配置
在 RViz 启动命令中添加 QoS 参数:
ros2 run rviz2 rviz2 --ros-args -p use_sim_time:=false \
-p qos_overrides./odom.depth:=100 \
-p qos_overrides./scan.depth:=100
检查传感器冲突
# 查看是否有重复发布 odom 的节点
ros2 topic info /odom -v
# 临时禁用底盘里程计测试
ros2 param set /base_controller publish_odom false
社区参考
关键提示:亚博套件默认配置未针对 ROS2 优化,务必先做时间同步+降频,再调参数。若仍飘移,建议用 ros2 bag record 录制数据包分析时间戳连续性。