在 ROS1 (如 Noetic) 中,若 ROS Master 與 Client Node 分布於不同主機(多台電腦),你需要手動設定環境變數,讓節點之間能夠跨主機透過 TCP 通訊。
✅ 你問的兩個核心問題解答:
🔸 1. ROS Client 主機也要安裝 ROS 嗎?
👉 是的!
- 即使只是運行 ROS Node,也必須安裝 ROS(至少基本套件
ros-<version>-ros-core
或ros-<version>-desktop
)。 - ROS Node 需要用到
roscpp
或rospy
等函式庫來與 Master 溝通。 - 不必安裝完整的 Gazebo/RViz,但
roscore
、rosnode
、rostopic
等基本功能必須存在。
🔸 2. ROS Master 與 Client 在不同 IP 該如何通訊?
💡 前提:兩台主機(例如 Master 為 192.168.0.10
,Client 為 192.168.0.20
)必須能 互 ping、無防火牆阻擋。
📌 步驟:設定跨主機 ROS 通訊(環境變數)
✅ ROS Master 機器設定
✅ ROS Client 機器設定
🧠 說明:
變數名稱 | 說明 |
---|---|
ROS_MASTER_URI | 指定 ROS Master 的位置 (IP:Port) |
ROS_HOSTNAME or ROS_IP | 自己的主機 IP,讓其他節點能回傳給你 |
🚨 注意:只能設定
ROS_HOSTNAME
或ROS_IP
,不要同時設兩個!
🗂️ ROS 的檔案結構與網路通訊角色
🧩 ROS Master(主控端):
負責管理:
- Node 名稱、註冊
- Topic 訂閱者與發布者
- Service 請求管理
啟動指令:
🧩 ROS Node(Client):
- 可以是 Publisher / Subscriber / Service Client / Server。
- 會從
ROS_MASTER_URI
取得其他節點的位置,再進行點對點 TCPROS 連線。
🌐 節點連線架構示意:
🧪 測試連線狀態
✅ 在 ROS Master 機器:
✅ 在 Client 機器(設定環境變數後):
👉 如果連線成功,你會看到來自 ROS Master 的節點清單。
✅ 訂閱測試:
在 Master 上發 topic:
在 Client 上訂閱:
✅ 建議:寫入 .bashrc
你可以將環境變數加入到對應主機的 ~/.bashrc
:
在 Master 機器中:
在 Client 機器中:
然後執行:
🛠️ Troubleshooting Checklist
問題 | 解法 |
---|---|
ping 不通 | 檢查防火牆、防火牆服務 (如 ufw ) 是否有開放 TCP |
沒有收到 topic | 檢查 topic 是否真的存在 (rostopic list ),或主機名解析有問題 |
IP 變動 | 建議固定 IP 或使用 ROS_IP 明確指定 |
Docker 中 ROS 多機 | 使用 --net=host 模式,並設定 ROS_MASTER_URI 、ROS_IP |
✅ 小補充:必要 ROS 套件
若你不想在 Client 安裝整個 ROS,可以只裝核心元件:
這樣可支援最基本的 Node 與 Topic 功能(無 RViz/Gazebo)。
✅ 總結
題目 | 答案 |
---|---|
Client 需要安裝 ROS 嗎? | ✅ 需要安裝 ROS(至少核心) |
跨主機如何連線? | ✅ 設定 ROS_MASTER_URI 與 ROS_HOSTNAME /ROS_IP |
IMU、Camera、Sensor 分布多台機器? | ✅ 各自設成 ROS Node,透過 ROS Master 協調 |
要用 Wi-Fi 還是 LAN? | ✅ 建議用有線網路(LAN)穩定性佳 |
若你提供你目前的 IP 配置與角色(Master 是哪一台、誰是 Client),我可以幫你生成 具體設定與 bashrc 檔案模版 👇
沒有留言:
張貼留言