將您的 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_veltopic 的完整名稱會是/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_velTopic 到 Gazebo 的cmd_velTopic 的轉發。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,模型也不會移動。
沒有留言:
張貼留言