welcom ! Handel home

2025年2月26日 星期三

Gazebo 啟動後的ROS 內建節點 (nodes) 和話題 (topics)

 🚀 ROS Gazebo 啟動後的內建節點 (nodes) 和話題 (topics)

Gazebo 與 ROS 整合 後,啟動 Gazebo 模擬環境 (gazebo_ros) 會產生一系列 內建的 ROS 節點與話題,這些節點和話題用於:

  • 控制模擬機器人
  • 發佈模擬環境的狀態
  • 提供感測器數據
  • 允許 ROS 節點與 Gazebo 互動

📌 如何啟動 Gazebo 與 ROS

sh
roslaunch gazebo_ros empty_world.launch

這將會啟動 Gazebo 並加載一個空場景 (empty_world)。

如果你要載入機器人:

sh
roslaunch <your_robot_package> <your_robot>.launch

例如:

sh
roslaunch turtlebot3_gazebo turtlebot3_world.launch

🟢 啟動後的內建節點 (rosnode list)

當 Gazebo 啟動後,執行:

sh
rosnode list

你會看到以下內建節點:

節點名稱功能
/gazeboGazebo 主控節點,負責整個模擬環境的運行
/gazebo_gui控制 Gazebo 圖形界面 (GUI)
/clock提供模擬時間
/rosout記錄並發布 ROS 記錄訊息

如果有加載機器人,可能還會有:

機器人相關節點功能
/robot_state_publisher發佈機器人連桿 (TF) 變換關係
/controller_manager控制器管理,負責運動控制
/joint_state_publisher發佈關節 (/joint_states)

🔵 啟動後的內建話題 (rostopic list)

sh
rostopic list

你會看到以下話題:

1️⃣ Gazebo 基礎話題

話題名稱類型功能
/gazebo/link_statesgazebo_msgs/LinkStates發佈所有模型的 link 狀態 (位置、方向)
/gazebo/model_statesgazebo_msgs/ModelStates發佈所有模型的 整體位姿 (pose, twist)
/gazebo/set_model_stategazebo_msgs/SetModelState設定 模型的位置
/gazebo/set_link_stategazebo_msgs/SetLinkState設定 Link 的狀態
/gazebo/reset_simulationstd_srvs/Empty重置整個模擬
/gazebo/reset_worldstd_srvs/Empty重置世界但不影響時間
/gazebo/pause_physicsstd_srvs/Empty暫停物理模擬
/gazebo/unpause_physicsstd_srvs/Empty恢復物理模擬

2️⃣ 模擬時間 (/clock)

話題名稱類型功能
/clockrosgraph_msgs/ClockGazebo 內部時間,ROS 會根據此時間同步

📌 使用範例

sh
rostopic echo /clock

輸出:

yaml
clock: secs: 123 nsecs: 456789000

這表示 Gazebo 模擬時間 已經運行 123 秒


3️⃣ 機器人控制 (/cmd_vel/joint_states)

話題名稱類型功能
/cmd_velgeometry_msgs/Twist控制機器人速度 (線速度 + 角速度)
/joint_statessensor_msgs/JointState提供機器人的關節狀態 (位置、速度、力矩)

📌 控制機器人移動

如果機器人支援 cmd_vel,可用以下方式讓機器人前進:

sh
rostopic pub /cmd_vel geometry_msgs/Twist "linear: {x: 0.5, y: 0.0, z: 0.0} angular: {x: 0.0, y: 0.0, z: 0.0}"

這會讓機器人 以 0.5 m/s 的速度前進


4️⃣ 感測器數據 (/camera/image_raw/scan)

如果模擬環境中有感測器,例如相機或雷射雷達 (LiDAR),會額外出現這些話題:

話題名稱類型功能
/camera/image_rawsensor_msgs/Image相機拍攝的影像
/scansensor_msgs/LaserScan雷射雷達 (LiDAR) 掃描數據
/imu/datasensor_msgs/ImuIMU 傳感器數據 (加速度、角速度)

📌 監聽相機影像

sh
rostopic echo /camera/image_raw

📌 監聽 LiDAR 掃描數據

sh
rostopic echo /scan

📌 Gazebo 內建節點與話題列表

🌟 1. Gazebo 內建節點 (rosnode list)

節點名稱功能
/gazeboGazebo 模擬管理
/gazebo_gui控制 Gazebo 圖形界面
/clock提供模擬時間
/rosout記錄 ROS 記錄訊息
/robot_state_publisher發佈機器人狀態
/joint_state_publisher發佈關節狀態

🌟 2. Gazebo 內建話題 (rostopic list)

話題名稱類型功能
/gazebo/model_statesgazebo_msgs/ModelStates獲取機器人和物體的狀態
/gazebo/set_model_stategazebo_msgs/SetModelState設定機器人的位置
/cmd_velgeometry_msgs/Twist控制機器人運動
/joint_statessensor_msgs/JointState監測機器人關節狀態
/scansensor_msgs/LaserScan雷射雷達 (LiDAR) 數據
/camera/image_rawsensor_msgs/Image相機影像
/clockrosgraph_msgs/Clock模擬時間

🔎 總結

Gazebo 在 ROS 中是一個強大的模擬工具,啟動後會產生許多內建節點與話題,用於控制機器人、監測環境以及提供模擬時間
關鍵節點 包括 /gazebo (管理模擬)、/clock (同步時間) 和 /cmd_vel (控制機器人移動)。
關鍵話題 包括 /gazebo/model_states (獲取機器人位置)、/cmd_vel (控制機器人) 和 /scan (雷射雷達數據)。

🚀 這些知識對於開發 ROS 機器人模擬與控制至關重要! 🚀




沒有留言: