Gazebo 的 ROS Topic 介紹
當 Gazebo 運行時,它會發佈多個 ROS Topic 來傳遞機器人狀態、模擬資訊以及控制訊息。這些 Topics 主要透過 ROS Publisher-Subscriber 機制 進行通訊。
1️⃣ Gazebo 主要 Topics 及其功能
🔹 1. /clock (模擬時鐘)
- 功能:提供 Gazebo 模擬時間,讓 ROS 可以與 Gazebo 保持同步。
- 訊息格式:
rosgraph_msgs/Clock - 範例:訂閱
/clock輸出範例:這表示 Gazebo 的模擬時間為 1234.567 秒。
🔹 2. /gazebo/model_states (模型狀態)
- 功能:提供 Gazebo 場景內所有模型的位姿(Position & Orientation),包括機器人和其他物件。
- 訊息格式:
gazebo_msgs/ModelStates - 範例:訂閱
/gazebo/model_states輸出範例:- 這表示場景內有兩個物件:
- robot1 位於 (1.0, 2.0, 0.5)
- box1 位於 (-1.0, -2.0, 0.0)
- 這表示場景內有兩個物件:
🔹 3. /gazebo/link_states (連結狀態)
- 功能:提供 Gazebo 所有連結(Links)的位姿,包含機器人關節的資訊。
- 訊息格式:
gazebo_msgs/LinkStates - 範例
輸出範例:robot1::base_link:代表機器人底盤的位姿。robot1::left_wheel:代表機器人左輪的位姿。
🔹 4. /gazebo/set_model_state (設定模型狀態)
- 功能:用於修改 Gazebo 內特定模型的位置與姿勢。
- 訊息格式:
gazebo_msgs/ModelState - 範例:將機器人
robot1移動到 (x=2, y=3, z=0)這會將robot1瞬間移動 到 (2.0, 3.0, 0.0)。
🔹 5. /joint_states (關節狀態)
- 功能:提供機器人所有關節(Joints)的當前狀態(位置、速度、力矩)。
- 訊息格式:
sensor_msgs/JointState - 範例
輸出範例:joint1:目前角度為 1.57 弧度(90°)joint2:目前角度為 -0.78 弧度(-45°)
🔹 6. /tf_static(靜態 TF 變換)
- 功能:提供 機器人不同部分之間的靜態關係(如
base_link→camera_link)。 - 訊息格式:
tf2_msgs/TFMessage - 範例
輸出範例- 這表示相機
camera_link相對於base_link位於 (0.1, 0.0, 0.2)。
- 這表示相機
2️⃣ 如何控制 Gazebo Topic?
在 Gazebo 中,Topic 主要透過 rostopic pub 和 rostopic echo 來進行通訊。
✅ 訂閱 Gazebo Topic
監聽 Gazebo 內所有模型的位置與方向。
✅ 發送命令給 Gazebo
將 robot1 瞬間移動到指定位置:
✅ 發送關節命令
如果機器人有關節控制,你可以發送 關節目標角度:
這會讓 joint1 旋轉到 1.0 弧度。
📌 總結
| Gazebo Topic | 功能 |
|---|---|
/clock | Gazebo 模擬時間 |
/gazebo/model_states | 所有模型的當前位置與方向 |
/gazebo/link_states | 所有連結(機器人關節)的狀態 |
/gazebo/set_model_state | 移動 Gazebo 內的機器人 |
/joint_states | 讀取機器人關節狀態 |
/tf_static | 機器人各部分的靜態 TF 變換 |
🚀
#如果你要讀取 Gazebo 狀態,使用 rostopic echo!
#如果要控制機器人,使用 rostopic pub! 🎉
沒有留言:
張貼留言