Wiki
DiffBot与差速底盘控制
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差速底盘仿真