Gzserver 和 Gzclient 確實可以在不同 IP 的主機上運行,這是 Gazebo 模擬器設計的核心優勢之一,允許您將複雜的物理模擬(在 Gzserver 上)與圖形化視覺化(在 Gzclient 上)分開。這對於遠端控制、高效能計算或多使用者協作非常有用。
如何建立 Gzserver 與 Gzclient 的遠端連線
要讓 Gzserver 和 Gzclient 在不同 IP 的主機上成功連線,您需要確保以下條件和步驟:
步驟一:設定環境變數
這是最關鍵的步驟。Gzserver 和 Gzclient 預設會尋找一個名為 GAZEBO_MASTER_URI
的環境變數來建立連線。這個變數會告訴客戶端伺服器的位置。
在運行 Gzserver 的主機上:
Gzserver 在啟動時會綁定一個主機位址和埠號。您可以透過
export
設定GAZEBO_MASTER_URI
,也可以讓它使用預設值。預設的埠號是11345
。# 這行指令是選擇性,如果未指定,Gazebo會自動使用預設的 'localhost:11345' export GAZEBO_MASTER_URI=http://<伺服器IP位址>:11345
然後,啟動伺服器:
gzserver --verbose empty.world
在運行 Gzclient 的主機上:
這是最重要的一步。您必須將客戶端的
GAZEBO_MASTER_URI
設定為伺服器的 IP 位址。# 這裡的 <伺服器IP位址> 是運行 gzserver 的主機的實際 IP export GAZEBO_MASTER_URI=http://<伺服器IP位址>:11345
接著,啟動客戶端:
gzclient
如果一切設定正確,Gzclient 將會連線到遠端伺服器,並開始顯示模擬畫面。
步驟二:確保網路連線暢通
防火牆設定:請確保伺服器主機的防火牆允許來自客戶端主機的連線,特別是 Gazebo 使用的
11345
埠號。如果需要,您可能需要新增一條防火牆規則。IP 位址:確保客戶端填寫的 IP 位址是伺服器主機在網路中的可達位址。如果兩台主機在同一個區域網路,通常是
192.168.x.x
或10.0.x.x
這樣的位址。
ROS2 與 Gazebo Sim (新版) 的連線
對於 ROS2 和 Gazebo Sim(例如 Fortress 或 Garden),連線機制更加簡化。它依賴於 ROS2 的 DDS (Data Distribution Service) 通訊協定。
ROS2 的節點(包括 Gazebo Sim 的 ROS 插件)使用 DDS 進行發現和通訊。只要兩台電腦在同一個網路中,且 ROS2 的環境變數(例如 ROS_DOMAIN_ID
)設定一致,它們就能自動找到彼此並建立連線。
因此,在 ROS2 環境中,您通常只需要確保:
ROS2 環境變數一致:在兩台主機上執行
source
指令來載入相同的 ROS2 版本,並確保ROS_DOMAIN_ID
環境變數相同。啟動 Gazebo Sim:
在伺服器主機上啟動 Gazebo Sim,通常是透過 ROS2 啟動檔案:
Bashros2 launch my_robot_pkg my_robot.launch.py
在客戶端主機上,您只需要啟動一個 ROS 節點來處理資料或發送命令,例如啟動 RVIZ2 來視覺化:
Bashros2 run rviz2 rviz2
總之,Gzserver 和 Gzclient 可以在不同主機上連線。在 Gazebo Classic 中,這需要手動設定 GAZEBO_MASTER_URI
;而在 ROS2 的新版 Gazebo Sim 中,它則透過更先進的 DDS 機制自動完成。
沒有留言:
張貼留言