2025年9月11日 星期四

ROS 2 cmd_vel 指令從 gazebo_ros 轉換到 ros_gz_sim

  將您的 ROS 2 cmd_vel 指令從 gazebo_ros 轉換到 ros_gz_sim

主要是要將 topic 名稱從 /twowheel_amr/cmd_vel 調整為 ros_gz_sim 預設的橋接格式。



問題分析

gazebo_ros 和 ros_gz_sim 兩者之間最大的不同在於 ROS Topic 和 Gazebo Topic 之間的命名約定

  • gazebo_ros: 舊版的 Gazebo 橋接器通常會為每個機器人模型創建一個獨立的命名空間,例如 /twowheel_amr。因此,cmd_vel topic 的完整名稱會是 /twowheel_amr/cmd_vel

  • ros_gz_sim: 新版 ros_gz_sim 的橋接器,預設的 Topic 命名格式為 /model/<model_name>/cmd_vel。這提供了一種更標準且可預測的命名模式,方便跨不同模型進行控制。


解決方案

根據 ros_gz_sim 的命名慣例,您需要修改 ROS Topic 的名稱。

將原來的指令:

Bash
ros2 topic pub -r 5 /twowheel_amr/cmd_vel geometry_msgs/Twist "{linear: {x: 0.2}, angular: {z: 0.0}}"

更改為:

Bash
ros2 topic pub -r 5 /model/twowheel_amr/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.2}, angular: {z: 0.0}}"

額外注意事項

  1. 確保橋接正常運作: 在 gz_sim 中,您需要確保 ros_gz_bridge 橋接節點已經運行,並正確設定了從 ROS 2 /model/twowheel_amr/cmd_vel Topic 到 Gazebo 的 cmd_vel Topic 的轉發。

  2. Twist 訊息類型: 請注意,ros_gz_bridge 的 ROS 2 訊息類型是 geometry_msgs/msg/Twist,與舊版指令中的 geometry_msgs/Twist 略有不同。在 ROS 2 中,通常會加上 /msg 子目錄以明確指定訊息類型。

  3. 模型與驅動: 您的 Gazebo 模型 (twowheel_amr) 必須包含能夠接收 cmd_vel 命令並驅動車輪的 Gazebo 插件(例如 libignition-gazebo-diff-drive-system)。如果沒有這個插件,即使您發布了正確的 Topic,模型也不會移動。


沒有留言:

張貼留言