📌 ROS 2 多主機 (Multi-Machine) 通訊架構
ROS 2 採用了 DDS(Data Distribution Service),這是一種**無需 Master(去中心化)**的通訊架構,因此在 不同主機之間的 Node 互聯 變得更加靈活。以下是如何在 多主機架構下整合 ROS 2 分佈式通訊 的方法。
1️⃣ ROS 2 多主機通訊的基本概念
在 ROS 1 中,所有的 Node 都需要連接到 ROS Master(單一管理中心),所以需要設定:
但在 ROS 2 中,沒有 ROS Master,而是基於 DDS,使用 Peer-to-Peer(P2P)網絡發現,這使得 ROS 2 可以直接讓不同主機上的 Node 通訊,無需中心管理。
2️⃣ ROS 2 多主機通訊設定
要讓不同主機的 ROS 2 Node 可以互相通訊,需要:
🔹 (1) 確保所有設備在相同的網絡內
所有 ROS 2 主機必須在 相同的子網 或 VPN 內,否則 DDS 發現機制可能無法運行。例如:
🔹 (2) 設定 ROS_DOMAIN_ID
每台電腦都必須設定相同的 ROS_DOMAIN_ID
來確保它們屬於相同的 ROS 2 網絡:
ROS_DOMAIN_ID
預設為 0,如果你有多組 ROS 2 網絡,需要分配不同的 ID。
💡 建議方式:將這個設定寫入
~/.bashrc
:
🔹 (3) 檢查 DDS 廠商(RMW Implementation)
ROS 2 預設支援多種 DDS 廠商(Middleware),但不同 DDS 可能無法互通,因此確保所有機器使用 相同的 DDS:
可用的 DDS 供應商:
rmw_fastrtps_cpp
(預設)rmw_cyclonedds_cpp
rmw_connextdds
(需額外安裝)
測試目前 DDS 設定:
🔹 (4) 測試不同主機的 ROS 2 通訊
在 主機 A 啟動 Talker:
在 主機 B 啟動 Listener:
如果設定正確,主機 B 應該能夠接收來自主機 A 的 ROS 2 訊息。
3️⃣ 多主機架構的進階整合方法
如果你希望不同主機之間的 ROS 2 通訊更穩定或跨網段通訊,你可以使用以下進階方案。
🔹 (1) 設定 FASTRTPS_DEFAULT_PROFILES_FILE
ROS 2 使用 Fast DDS 作為預設 DDS,並且允許透過 XML 設定手動指定 ROS 2 網絡的通訊模式。
- 建立
fastdds.xml
在/etc/ros2/
目錄下建立fastdds.xml
: - 讓 ROS 2 使用這個設定
🔹 (2) 使用 ROS 2 DDS Router
ROS 2 DDS Router 可用來讓不同網段或 VPN 之間的 ROS 2 通訊,這是因為 ROS 2 預設的 DDS 無法在不同網段內自動發現對方。
- 安裝 ROS 2 DDS Router
- 建立 Router 設定
建立
/etc/ros2/dds_router.yaml
: - 啟動 DDS Router
在機器上執行:
這將允許跨網段通訊。
🔹 (3) 使用 VPN 來確保 ROS 2 網絡穩定
如果你的主機不在同一個區域網路,ROS 2 可能無法透過 DDS 自動發現 對方,解決方案:
- 使用 VPN(如 Tailscale, Zerotier) 來模擬相同子網。
- 確保 VPN 內的 IP 在
fastdds.xml
內手動指定。
📌 總結
方法 | 適用情境 | 設定難度 |
---|---|---|
ROS_DOMAIN_ID 相同 | 本地區域網內,所有機器在相同子網 | 低 |
FASTRTPS_DEFAULT_PROFILES_FILE | 指定特定機器連線,適合跨不同子網 | 中 |
ROS 2 DDS Router | 跨網段,適用於不同 VPN 或遠端機器 | 中等 |
VPN(Tailscale, Zerotier) | 不同地點的 ROS 2 機器互聯 | 高 |
🚀 推薦方式
1️⃣ 如果在相同區域網,使用 ROS_DOMAIN_ID 設定相同的值即可。
2️⃣ 如果機器跨網段,使用 Fast DDS XML 設定 來手動指定 IP。
3️⃣ 如果機器不在同一區域網或遠端機器要通訊,使用 ROS 2 DDS Router 或 VPN。
這樣你的 ROS 2 分散式系統 就可以跨多主機運行,讓機器人與邊緣設備無縫通訊!🚀🎉
沒有留言:
張貼留言