Skip to content

Wiki

DiffBot与差速底盘控制

About 3 min read

Existing English translations were reused. 17 current source blocks remain in Simplified Chinese, without triggering paid translation.

差速控制器把车体线速度和角速度转换为左右轮角速度。本节先运行官方完整实例。

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差速底盘仿真