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
! 🎉
沒有留言:
張貼留言