跳至主要内容

Time Sync Viewer

Time Sync Viewer 是一個專為 ROS2 設計的時間同步檢測工具,以 rqt plugin 的形式提供。它用於即時監控與分析多感測器資料的同步狀態。在機器人應用中,確保精確的時間同步至關重要,因為它會直接影響 SLAM、深度學習以及感測器融合等技術的性能與穩定性。Time Sync Viewer 提供同步檢測、視覺化分析以及詳細的時間統計,協助開發者快速識別並解決同步問題。

時間同步範圍

  • 維持感測器與運算單元之間的統一時鐘
    必須確保所有感測器與運算元件都參考並同步於同一個時鐘來源,例如 GPS。可以使用多種技術達成此目的:

    1. Network Time Protocol (NTP): 用於透過網路同步時鐘的標準協定。
    2. Precision Time Protocol (PTP): 提供比 NTP 更高的精度,適用於工業與嵌入式系統。
    3. 使用 Jetson 的 NvPPS 模組: Jetson kernel 中的 NvPPS 模組可用於精確時間同步。它接收外部 1PPS(每秒一脈衝)訊號(通常來自透過 GPIO 連接的 GPS 裝置),並用於事件時間戳記。這使其能與其他時間域(如 TSC 或 PTP)同步。
  • 在資料抵達時進行時間戳記
    必須確保每一筆感測器資料在抵達運算單元時都會被賦予新的時間戳記。雖然有些系統會使用外部 MCU 或 FPGA 來處理,但僅依賴此方式存在風險,可能會忽略從感測器傳輸到運算單元過程中的各種延遲。

  • 確保穩定的資料接收間隔
    來自不同來源的感測器資料應以一致且可接受的間隔被接收,例如每 100 毫秒一次。Advantech 的 Time Sync Viewer(Robotic Suite)可用於視覺化顯示輸入資料的頻率與分佈。如果所有感測器資料都在預期的 100 ms 時間窗內接收完成,系統會觸發一個 flag。透過監控這些 flag 的間隔,開發者可以偵測異常並判斷是否需要調整系統。

功能特色

  • 多感測器時間戳視覺化: 視覺化顯示多個感測器的時間戳,協助使用者檢查資料對齊狀態。
  • 時間同步旗標(sync_flag): 當滿足同步條件時自動觸發旗標,提供即時確認。
  • 感測器檢查: 協助使用者識別可能造成資料不完整的硬體延遲、網路抖動與資料遺失。
  • 提升感測器融合效果: 增強資料一致性與穩定性,適用於 SLAM、機械手臂、無人機與 AMR 等應用。

Note: Time Sync Viewer 僅支援 Ubuntu 22.04


介面說明

以相機、IMU、LiDAR 為例:

  1. Time Axis Display
    圖中顯示不同資料流(topic)的時間戳,每一條水平線代表一個 topic。例如:

    • camera(相機影像)
    • imu(IMU 資料)
    • lidar(LiDAR 掃描)
    • z_sync_flag(同步旗標)
  2. Synchronization Range

    • 在此範例中,sync_range 設為 2 毫秒。所有在此 2ms 時間窗內抵達的資料點都會被視為同步。
    • 在時間軸上,當觸發同步事件時會標記 sync_flag。在觸發當下,flag 的時間戳會與最後接收到的資料點對齊。這組資料將不會用於下一次同步檢測。
  3. Synchronization Analysis

    • 當所有感測器資料點都落在 2ms 範圍內時,即視為同步(sync)。
    • 圖中顯示多個 sync 點,代表在那些時刻感測器資料已正確同步。

ROS2_time_sync_viewer


操作步驟

步驟 1: 發佈假感測器資料,包括 camera、IMU 與 LiDAR(也可以使用實體感測器)。

Terminal 1 – 發佈 camera topic:

cd /usr/local/Advantech/ros/humble/ros2-timesync-viewer/test/fake_sensor
python3 camera.py

Terminal 2 – 發佈 lidar topic:

cd /usr/local/Advantech/ros/humble/ros2-timesync-viewer/test/fake_sensor
python3 lidar.py

Terminal 3 – 發佈 imu topic:

cd /usr/local/Advantech/ros/humble/ros2-timesync-viewer/test/fake_sensor
python3 imu.py

步驟 2: 在瀏覽器輸入 127.0.0.1:8081。帳號為 root,密碼為 P@ssw0rd。進入 Time Sync Viewer Web UI,從左側選擇 Utility。

Robotic-suite-quickstart-tutorials2_01

步驟 3: 將 Sync Period 設定為 1ms 到 2000ms 之間的值(預設:100ms)。

Robotic-suite-quickstart-tutorials2_07

步驟 4: 點擊 launch 按鈕,然後會開啟 Time Sync Viewer 視窗。

Robotic-suite-quickstart-tutorials2_02

步驟 5: 點擊 start 按鈕。

Robotic-suite-quickstart-tutorials2_03

步驟 6: 選擇想要查看的 topics,然後點擊 OK。

Robotic-suite-quickstart-tutorials2_04

輸出:

Robotic-suite-quickstart-tutorials2_05


注意事項

  1. 建議連續使用 5 小時後重新開啟 UI 以避免延遲。
  2. 若要驗證自訂或特殊 topic,必須先在 .bashrc 中加入對應環境的 source 指令。這是 ROS2 的機制,用於確保系統載入正確的開發環境與套件路徑,讓 topic 正常運作。
  3. 若 Time Sync Viewer UI 無法顯示,請先檢查目前環境的 DISPLAY 參數是否為 :0。若不是,請修改 /usr/local/Advantech/E2I/robotic-node-client/run.sh 中的 DISPLAY 變數,儲存後重新執行應用程式。