welcom ! Handel home

2025年2月18日 星期二

ROS Gazebo 的 ROS Topic 介紹

 

Gazebo 的 ROS Topic 介紹

當 Gazebo 運行時,它會發佈多個 ROS Topic 來傳遞機器人狀態、模擬資訊以及控制訊息。這些 Topics 主要透過 ROS Publisher-Subscriber 機制 進行通訊。


1️⃣ Gazebo 主要 Topics 及其功能

🔹 1. /clock (模擬時鐘)

  • 功能:提供 Gazebo 模擬時間,讓 ROS 可以與 Gazebo 保持同步。
  • 訊息格式rosgraph_msgs/Clock
  • 範例:訂閱 /clock
    bash
    rostopic echo /clock
    輸出範例:
    yaml
    clock: secs: 1234 nsecs: 567890000
    這表示 Gazebo 的模擬時間為 1234.567 秒。

🔹 2. /gazebo/model_states (模型狀態)

  • 功能:提供 Gazebo 場景內所有模型的位姿(Position & Orientation),包括機器人和其他物件。
  • 訊息格式gazebo_msgs/ModelStates
  • 範例:訂閱 /gazebo/model_states
    bash
    rostopic echo /gazebo/model_states
    輸出範例:
    yaml
    name: ['robot1', 'box1'] pose: - position: x: 1.0 y: 2.0 z: 0.5 orientation: x: 0.0 y: 0.0 z: 0.707 w: 0.707 - position: x: -1.0 y: -2.0 z: 0.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 1.0
    • 這表示場景內有兩個物件:
      • robot1 位於 (1.0, 2.0, 0.5)
      • box1 位於 (-1.0, -2.0, 0.0)

🔹 3. /gazebo/link_states (連結狀態)

  • 功能:提供 Gazebo 所有連結(Links)的位姿,包含機器人關節的資訊。
  • 訊息格式gazebo_msgs/LinkStates
  • 範例
    bash
    rostopic echo /gazebo/link_states
    輸出範例:
    yaml
    name: ['robot1::base_link', 'robot1::left_wheel'] pose: - position: x: 0.5 y: 0.0 z: 0.1 orientation: x: 0.0 y: 0.0 z: 0.0 w: 1.0
    • robot1::base_link:代表機器人底盤的位姿。
    • robot1::left_wheel:代表機器人左輪的位姿。

🔹 4. /gazebo/set_model_state (設定模型狀態)

  • 功能:用於修改 Gazebo 內特定模型的位置與姿勢
  • 訊息格式gazebo_msgs/ModelState
  • 範例:將機器人 robot1 移動到 (x=2, y=3, z=0)
    bash
    rostopic pub /gazebo/set_model_state gazebo_msgs/ModelState "model_name: 'robot1' pose: position: x: 2.0 y: 3.0 z: 0.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 1.0"
    這會將 robot1 瞬間移動(2.0, 3.0, 0.0)

🔹 5. /joint_states (關節狀態)

  • 功能:提供機器人所有關節(Joints)的當前狀態(位置、速度、力矩)。
  • 訊息格式sensor_msgs/JointState
  • 範例
    bash
    rostopic echo /joint_states
    輸出範例:
    vbnet
    name: ['joint1', 'joint2'] position: [1.57, -0.78] velocity: [0.0, 0.0] effort: [0.0, 0.0]
    • joint1:目前角度為 1.57 弧度(90°)
    • joint2:目前角度為 -0.78 弧度(-45°)

🔹 6. /tf_static(靜態 TF 變換)

  • 功能:提供 機器人不同部分之間的靜態關係(如 base_linkcamera_link
  • 訊息格式tf2_msgs/TFMessage
  • 範例
    bash
    rostopic echo /tf_static
    輸出範例
    yaml
    transforms: - child_frame_id: "camera_link" transform: translation: { x: 0.1, y: 0.0, z: 0.2 } rotation: { x: 0.0, y: 0.0, z: 0.0, w: 1.0 }
    • 這表示相機 camera_link 相對於 base_link 位於 (0.1, 0.0, 0.2)

2️⃣ 如何控制 Gazebo Topic?

在 Gazebo 中,Topic 主要透過 rostopic pubrostopic echo 來進行通訊

✅ 訂閱 Gazebo Topic

bash
rostopic echo /gazebo/model_states

監聽 Gazebo 內所有模型的位置與方向。

✅ 發送命令給 Gazebo

robot1 瞬間移動到指定位置

bash
rostopic pub /gazebo/set_model_state gazebo_msgs/ModelState "model_name: 'robot1' pose: position: x: 3.0 y: 2.0 z: 0.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 1.0"

✅ 發送關節命令

如果機器人有關節控制,你可以發送 關節目標角度

bash
rostopic pub /joint_states sensor_msgs/JointState "name: ['joint1'] position: [1.0] velocity: [0.0] effort: [0.0]"

這會讓 joint1 旋轉到 1.0 弧度


📌 總結

Gazebo Topic功能
/clockGazebo 模擬時間
/gazebo/model_states所有模型的當前位置與方向
/gazebo/link_states所有連結(機器人關節)的狀態
/gazebo/set_model_state移動 Gazebo 內的機器人
/joint_states讀取機器人關節狀態
/tf_static機器人各部分的靜態 TF 變換

🚀 

#如果你要讀取 Gazebo 狀態,使用 rostopic echo

#如果要控制機器人,使用 rostopic pub 🎉


沒有留言: