2025年9月30日 星期二

DDS vs roscore 啟動方式和驗證方法

 ROS 2 的 DDS (Data Distribution Service) 和 ROS 1 的 roscore 核心概念與運作機制有根本上的差異。它們分別代表了 ROS 兩代架構中不同的通訊核心。

以下是它們的差異、啟動方式和驗證方法:


DDS 與 roscore 的核心差異

特點ROS 1 (roscore)ROS 2 (DDS)
通訊核心單一中心化節點 (Master/Core)分散式資料總線 (Decentralized Data Bus)
底層協定ROS TCP/UDP (基於 XML-RPC)DDS (如 Fast DDS, Cyclone DDS, RTI Connext)
啟動依賴必須先啟動 roscore,否則任何節點 (node) 無法運作。不需要單獨啟動任何核心服務。節點間能自行發現並通訊。
容錯性單點故障:一旦 roscore 崩潰,所有通訊停止。高容錯性:單一節點崩潰不影響其他節點通訊。
實時性較差,不保證實時性。更好,DDS 協定在設計上就支持 QoS (Quality of Service) 達到近實時要求。


簡而言之:

  • roscore 就像是整個 ROS 1 網路的中央電話交換機。所有節點必須向它註冊,並透過它來交換位址資訊。

  • DDS 則是 ROS 2 網路中的分散式共享白板。所有節點將數據發佈到白板上,其他節點能自動發現並訂閱他們感興趣的數據,無需中心服務。


啟動方式與驗證

1. ROS 1 (roscore)

如何啟動?

只需要在終端機中執行:

roscore
  • 作用: roscore 實際上啟動了三個關鍵元件:

    1. rosmaster 提供名稱註冊和查詢服務。

    2. rosout 處理所有節點的日誌訊息。

    3. param server 儲存和管理全域參數。

如何驗證?

  1. 觀察輸出: 執行 roscore 後,如果成功,終端機將顯示 ROS Master、Parameter Server 和 Loggers 的啟動訊息,並且保持運行

  2. 使用工具: 在另一個終端機中執行 rosnode list如果 roscore 正在運行,它至少會列出 /rosout 節點。


2. ROS 2 (DDS)

如何啟動?

ROS 2 不需要 roscore 它的通訊核心 (DDS) 是自動在幕後運行的。

  • 啟動步驟:

    1. 設定環境: 確保你已經載入了 ROS 2 的環境變數                                                           (例如,source /opt/ros/humble/setup.bash)

    2. 直接運行節點: 你可以直接啟動任何 ROS 2 節點,例如:

    # 啟動一個發布者節點
    ros2 run demo_nodes_cpp talker
    
    # 在另一個終端啟動一個訂閱者節點
    ros2 run demo_nodes_cpp listener
    
  • DDS 的運行: 當第一個 ROS 2 節點啟動時,底層的 DDS 中間件就會被初始化,並開始在背景執行節點發現數據交換的任務。

如何驗證?

你驗證的不是 DDS 本身,而是節點間是否成功發現並交換數據

  1. 驗證通訊:

    • 運行 talkerlistener 範例。如果通訊成功,listener 的終端機將會實時收到 talker 發送的 "Hello World: X" 訊息。

  2. 使用 ROS 2 命令列工具:

    • 檢查節點列表: 在節點運行時,執行 ros2 node list。如果看到 /talker/listener,表示這些節點已成功加入 ROS 2 網路。

    • 檢查主題列表: 執行 ros2 topic list。如果看到 /chatter 主題,表示節點間正在使用這個主題進行數據交換。

    • 檢查 DDS 發現: 執行 ros2 topic echo /chatter。如果能實時看到數據流,則確認 DDS 正在正常工作,實現了分散式通訊。


總結指導

在您的 ROS 2 URDF 機械手臂整合 專案中:

  1. 忘記 roscore 您只需要專注於如何設計您的 ROS 2 節點 (例如:arm_control_node, lidar_slam_node),以及它們之間如何透過 TopicServiceAction 進行分散式通訊。

  2. tf2 是核心: 在您的 自走車與機械手臂協同工作 環節中,tf2 的座標轉換廣播和監聽是絕對關鍵。它也是透過 DDS 機制來傳輸數據的。

  3. DDS 供應商: 雖然通常不需要管,但要知道 ROS 2 預設使用 Fast DDS。如果您需要切換到其他 DDS (如 Cyclone DDS) 進行性能測試,只需要修改一個環境變數即可。



沒有留言:

張貼留言