导航时小车定位飘怎么办

根据你描述的现象(RViz 定位飘、消息队列满、频率显示异常),这是典型的 ROS2 通信瓶颈 + 时间同步问题。按以下优先级排查:


:wrench: 立即执行(3 步解决 80% 问题)

:one: 强制时间同步(最关键!)

定位飘移 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

:two: 降低网络负载

消息队列满 = 网络带宽不足,优先砍掉非必要数据:

# 修改 yahboomcar_nav_launch.py,找到雷达节点添加:
parameters=[{'use_sim_time': False, 
             'scan_topic': '/scan_raw',  # 改用降频话题
             'publish_rate': 5.0}]       # 强制 5Hz

或在 RViz 中取消订阅 /point_cloud/camera 等高带宽话题。

:three: 调整 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

:magnifying_glass_tilted_left: 深度排查(若仍未解决)

:play_button: 检查网络质量

# 小车端持续 ping 虚拟机
ping -i 0.2 <虚拟机 IP> 

# 虚拟机端监控 ROS2 流量
ros2 topic hz /odom /scan /tf

正常值:延迟 < 20ms,丢包率 0%。若延迟>50ms,换 5G WiFi 或有线连接。

:play_button: 验证 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

:play_button: 检查传感器冲突

# 查看是否有重复发布 odom 的节点
ros2 topic info /odom -v

# 临时禁用底盘里程计测试
ros2 param set /base_controller publish_odom false

:pushpin: 社区参考

:light_bulb: 关键提示:亚博套件默认配置未针对 ROS2 优化,务必先做时间同步+降频,再调参数。若仍飘移,建议用 ros2 bag record 录制数据包分析时间戳连续性。