將您的 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 的名稱。
將原來的指令:
ros2 topic pub -r 5 /twowheel_amr/cmd_vel geometry_msgs/Twist "{linear: {x: 0.2}, angular: {z: 0.0}}"
更改為:
ros2 topic pub -r 5 /model/twowheel_amr/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.2}, angular: {z: 0.0}}"
額外注意事項
確保橋接正常運作: 在
gz_sim
中,您需要確保ros_gz_bridge
橋接節點已經運行,並正確設定了從 ROS 2/model/twowheel_amr/cmd_vel
Topic 到 Gazebo 的cmd_vel
Topic 的轉發。Twist
訊息類型: 請注意,ros_gz_bridge
的 ROS 2 訊息類型是geometry_msgs/msg/Twist
,與舊版指令中的geometry_msgs/Twist
略有不同。在 ROS 2 中,通常會加上/msg
子目錄以明確指定訊息類型。模型與驅動: 您的 Gazebo 模型 (
twowheel_amr
) 必須包含能夠接收cmd_vel
命令並驅動車輪的 Gazebo 插件(例如libignition-gazebo-diff-drive-system
)。如果沒有這個插件,即使您發布了正確的 Topic,模型也不會移動。
沒有留言:
張貼留言