你的系統少了常用的連接埠檢查工具(ss
、lsof
)。先安裝,
然後清掉殘留的 Gazebo,再重新啟動。
1) 安裝工具
sudo apt-get update
sudo apt-get install -y iproute2 lsof net-tools psmisc
# iproute2 提供 ss;net-tools 提供 netstat;psmisc 提供 killall
2) 查誰占用 11345(任選一種)
# 方法 A(建議):ss
sudo ss -lptn 'sport = :11345'
# 方法 B:lsof
sudo lsof -i :11345
# 方法 C:netstat(備用)
sudo netstat -lptn | grep 11345
看輸出中的 COMMAND/PID,通常是 gzserver
或 gzclient
。
3) 關掉殘留的 Gazebo
# 溫和地殺掉
killall gzserver gzclient 2>/dev/null || true
# 若還活著,強制殺(用第2步查到的 PID)
sudo kill -9 <PID1> <PID2>
4) 直接重新啟 gzserver
(先把環境設乾淨)
(無頭、靜音、軟體渲染——最穩定)
source /opt/ros/humble/setup.bash
export ALSOFT_DRIVERS=null
export LIBGL_ALWAYS_SOFTWARE=1
export GALLIUM_DRIVER=llvmpipe
export LIBGL_DRI3_DISABLE=1
gzserver --verbose empty.world \
-s libgazebo_ros_init.so \
-s libgazebo_ros_factory.so \
-s libgazebo_ros_force_system.so
這個終端請保持開著,表示
gzserver
正在跑。
5) 另一個終端再 spawn(用檔案最穩)
source /opt/ros/humble/setup.bash
cd ~/data/ros2_ws4/install/twowheel_bot/share/twowheel_bot/urdf
ros2 run gazebo_ros spawn_entity.py -entity twowheel_amr -file twowheel.urdf
6)(多人或重複實例)改用別的連接埠
如果你常常遇到「Address already in use」:
# 在所有相關終端一致設定(包含 gzserver / gzclient / spawn_entity / ros2 launch)
export GAZEBO_MASTER_URI=http://127.0.0.1:11445
======
單獨啟動 gzserver
gzserver --verbose /usr/share/gazebo-11/worlds/empty.world \
-s libgazebo_ros_init.so -s libgazebo_ros_factory.so -s libgazebo_ros_force_system.so
1. Gzserver 和 Gzclient 的互動關係在 Gazebo 模擬環境中,gzserver
和 gzclient
扮演著不同的角色,它們的協同工作模式是 ROS 模擬的核心。
gzserver
(Gazebo Server):
角色:模擬器後端,負責所有物理計算和感測器數據生成。
主要職責:
物理模擬:載入世界檔案(.world
),處理所有物體之間的物理交互,例如重力、摩擦力、碰撞等。
感測器數據生成:根據 URDF 中定義的 Gazebo 插件(如 LiDAR、IMU、相機),生成並發佈虛擬的感測器數據。
ROS 橋接:作為 ROS 的服務器,提供 spawn_entity
和 set_model_state
等服務,以及發佈感測器數據和機器人里程計等 ROS 主題。
gzclient
(Gazebo Client):
角色:模擬器前端,負責所有圖形介面(GUI)的顯示。
主要職責:
視覺化:從 gzserver
接收模擬世界的渲染數據,並將其顯示在螢幕上。
使用者交互:提供使用者介面,允許使用者通過滑鼠或鍵盤在 3D 世界中移動視角、選擇物體、暫停或重啟模擬。
互動關係:
gzserver
是核心,即使沒有 gzclient
,它也可以在無頭(headless)模式下運行,持續進行模擬和發佈數據。
這對於自動化測試和機器人訓練非常有用。
gzclient
是一個可選的 GUI 介面,它連接到 gzserver
,以便使用者能夠可視化地觀察模擬過程。
如果 gzserver
崩潰,gzclient
也會因為失去連接而結束。
沒有留言:
張貼留言