ROS 2 的 DDS (Data Distribution Service) 和 ROS 1 的 roscore
核心概念與運作機制有根本上的差異。它們分別代表了 ROS 兩代架構中不同的通訊核心。
以下是它們的差異、啟動方式和驗證方法:
DDS 與 roscore
的核心差異
簡而言之:
roscore
就像是整個 ROS 1 網路的中央電話交換機。所有節點必須向它註冊,並透過它來交換位址資訊。DDS 則是 ROS 2 網路中的分散式共享白板。所有節點將數據發佈到白板上,其他節點能自動發現並訂閱他們感興趣的數據,無需中心服務。
啟動方式與驗證
1. ROS 1 (roscore
)
如何啟動?
只需要在終端機中執行:
roscore
作用:
roscore
實際上啟動了三個關鍵元件:rosmaster
: 提供名稱註冊和查詢服務。rosout
: 處理所有節點的日誌訊息。param server
: 儲存和管理全域參數。
如何驗證?
觀察輸出: 執行
roscore
後,如果成功,終端機將顯示 ROS Master、Parameter Server 和 Loggers 的啟動訊息,並且保持運行。使用工具: 在另一個終端機中執行
rosnode list
。如果roscore
正在運行,它至少會列出/rosout
節點。
2. ROS 2 (DDS)
如何啟動?
ROS 2 不需要 roscore
! 它的通訊核心 (DDS) 是自動在幕後運行的。
啟動步驟:
設定環境: 確保你已經載入了 ROS 2 的環境變數 (例如,
source /opt/ros/humble/setup.bash
)。直接運行節點: 你可以直接啟動任何 ROS 2 節點,例如:
# 啟動一個發布者節點 ros2 run demo_nodes_cpp talker # 在另一個終端啟動一個訂閱者節點 ros2 run demo_nodes_cpp listener
DDS 的運行: 當第一個 ROS 2 節點啟動時,底層的 DDS 中間件就會被初始化,並開始在背景執行節點發現和數據交換的任務。
如何驗證?
你驗證的不是 DDS 本身,而是節點間是否成功發現並交換數據。
驗證通訊:
運行
talker
和listener
範例。如果通訊成功,listener
的終端機將會實時收到talker
發送的 "Hello World: X" 訊息。
使用 ROS 2 命令列工具:
檢查節點列表: 在節點運行時,執行
ros2 node list
。如果看到/talker
和/listener
,表示這些節點已成功加入 ROS 2 網路。檢查主題列表: 執行
ros2 topic list
。如果看到/chatter
主題,表示節點間正在使用這個主題進行數據交換。檢查 DDS 發現: 執行
ros2 topic echo /chatter
。如果能實時看到數據流,則確認 DDS 正在正常工作,實現了分散式通訊。
總結指導
在您的 ROS 2 URDF 機械手臂整合 專案中:
忘記
roscore
: 您只需要專注於如何設計您的 ROS 2 節點 (例如:arm_control_node
,lidar_slam_node
),以及它們之間如何透過 Topic、Service 和 Action 進行分散式通訊。tf2
是核心: 在您的 自走車與機械手臂協同工作 環節中,tf2
的座標轉換廣播和監聽是絕對關鍵。它也是透過 DDS 機制來傳輸數據的。DDS 供應商: 雖然通常不需要管,但要知道 ROS 2 預設使用 Fast DDS。如果您需要切換到其他 DDS (如 Cyclone DDS) 進行性能測試,只需要修改一個環境變數即可。
沒有留言:
張貼留言