2025年8月25日 星期一

gazebo debug notex2

 你的系統少了常用的連接埠檢查工具(sslsof)。先安裝,

然後清掉殘留的 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,通常是 gzservergzclient

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 模擬環境中,gzservergzclient 扮演著不同的角色,它們的協同工作模式是 ROS 模擬的核心。

  • gzserver (Gazebo Server)

    • 角色:模擬器後端,負責所有物理計算和感測器數據生成。

    • 主要職責

      1. 物理模擬:載入世界檔案(.world),處理所有物體之間的物理交互,例如重力、摩擦力、碰撞等。

      2. 感測器數據生成:根據 URDF 中定義的 Gazebo 插件(如 LiDAR、IMU、相機),生成並發佈虛擬的感測器數據。

      3. ROS 橋接:作為 ROS 的服務器,提供 spawn_entityset_model_state 等服務,以及發佈感測器數據和機器人里程計等 ROS 主題。

  • gzclient (Gazebo Client)

    • 角色:模擬器前端,負責所有圖形介面(GUI)的顯示。

    • 主要職責

      1. 視覺化:從 gzserver 接收模擬世界的渲染數據,並將其顯示在螢幕上。

      2. 使用者交互:提供使用者介面,允許使用者通過滑鼠或鍵盤在 3D 世界中移動視角、選擇物體、暫停或重啟模擬。

互動關係

  • gzserver 是核心,即使沒有 gzclient,它也可以在無頭(headless)模式下運行,持續進行模擬和發佈數據。

  • 這對於自動化測試和機器人訓練非常有用。

  • gzclient 是一個可選的 GUI 介面,它連接到 gzserver,以便使用者能夠可視化地觀察模擬過程。

  • 如果 gzserver 崩潰,gzclient 也會因為失去連接而結束。





沒有留言:

張貼留言