Wiki
DiffBot與差速底盤控制
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
差速控制器把車體線速度和角速度轉換為左右輪角速度。本節先運行官方完整實例。
1.示例 1:啓動官方 DiffBot
停止其它實例,在 source 系統與官方工作區後運行:
source /opt/ros/jazzy/setup.bash
source ~/ros2_control_jazzy_demos_ws/install/setup.bash
ros2 launch ros2_control_demo_example_2 diffbot.launch.py gui:=false
另一終端:
ros2 control list_controllers
ros2 control list_hardware_interfaces
ros2 topic list -t
ros2 param get /diffbot_base_controller open_loop
所選官方配置採用開環里程計時,里程計由命令積分。下一章顯式使用反饋計算里程計。先檢查配置,不能把所有 odom 都解釋為編碼器結果。
2.示例 2:帶時間戳的速度命令
ros2 topic pub --rate 10 /cmd_vel geometry_msgs/msg/TwistStamped \
"{header: auto, twist: {linear: {x: 0.05}, angular: {z: 0.0}}}"
header: auto 由 CLI 填寫時間戳。Topic 名稱來自該啓動文件的 remapping,自己的底盤後面使用控制器私有 cmd_vel。
檢查輪子反饋和里程計:
ros2 topic echo /joint_states
ros2 topic echo /diffbot_base_controller/odom
應看到兩輪位置同向變化,直行時 x 增加;停止發佈後觀察命令超時。用仿真時間時,發送端也需要使用相同時間域,不能給仿真控制器發送牆上時間戳。
3.運動學推導
輪半徑 r、輪距 b、車體線速度 v、角速度 w:
左轮角速度 = (v - w*b/2) / r
右轮角速度 = (v + w*b/2) / r
r=0.05、b=0.30 時,v=0.10、w=0 對應兩輪 2 rad/s;原地 w=0.5 對應左輪 -1.5、右輪 1.5 rad/s。輪軸安裝與編碼器符號也必須符合座標約定。
4.重要參數
wheel_radius 影響尺度,wheel_separation 影響轉彎;position_feedback 選擇輪位置或輪速度反饋;open_loop 決定里程計取命令還是反饋;cmd_vel_timeout 約束輸入時效。
源碼:ros2_controllers/diff_drive_controller/src/diff_drive_controller.cpp、ros2_controllers/diff_drive_controller/src/odometry.cpp。先看超時和速度換算,再讀里程計積分。
返回 Jazzy 總覽 · 上一篇:Harmonic機械臂物理仿真 · 下一篇:Harmonic差速底盤仿真