適用場景:
主機運行 ROS2 Humble(發布 /scan 等),板子運行 ROS2 Foxy(發布 /tf 等),兩邊通過 ROS_DOMAIN_ID 跨平臺通訊。需要保證系統時間對齊,避免 TF 插值失敗、建圖抖動等問題。
一、主機端配置(NTP服務端)
1. 安裝 chrony
sudo apt install chrony
2. 修改配置文件
sudo nano /etc/chrony/chrony.conf
將原有 pool
替換為:
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
local stratum 10
allow 192.168.0.0/16
bindaddress 0.0.0.0
確保這幾項存在。
3. 重啟并啟用開機自啟
sudo systemctl restart chrony
sudo systemctl enable chrony
4. 驗證狀態
chronyc tracking
確認輸出中包含:
Leap status : Normal
二、板載設備配置(NTP客戶端)
1. 安裝 chrony
sudo apt install chrony
2. 修改配置文件
sudo nano /etc/chrony/chrony.conf
添加如下行(僅保留一條 server):
server 192.168.x.x iburst # 改為你的主機 IP
makestep 1 3
3. 重啟服務并啟用開機自啟
sudo systemctl restart chrony
sudo systemctl enable chrony
4. 驗證同步結果
chronyc tracking
確認 Leap status 為 Normal,且時間偏差在 0.1 秒以內。
三、建圖抖動消除建議
在 Cartographer 的 .lua
文件中添加:
lookup_transform_timeout_sec = 0.5
確保 .yaml
中 use_sim_time: false
,并開啟 EKF 的 publish_tf: true
。
四、測試通過表現
- ros2 launch 無任何 extrapolation 報錯
- rviz2 地圖無抖動
- /tf 和 /scan 時間戳一致
- cartographer_node 日志正常,submap 插入穩定