15. 坐标系与底盘类型¶
15.1 学习目标¶
把“前进、横移、转弯”写成统一的速度变量,并判断本机底盘实际支持哪些自由度。底盘运动模型描述车体速度与各轮速度之间的换算关系。完成后,你应能从一条速度命令推断机器人应该怎样动,也能用轮子反馈解释里程计的方向。
15.2 适用范围¶
| 底盘 | linear.x |
linear.y |
angular.z |
|---|---|---|---|
| 差速、四轮两驱、履带 | 支持 | 不支持 | 支持 |
| 四驱/滑移转向 | 支持 | 不支持 | 支持 |
| 麦克纳姆、全向轮 | 支持 | 支持 | 支持 |
| 阿克曼 | 支持 | 不支持 | 通过转向几何实现,不能原地自旋 |
ROS 版本不影响坐标约定,但具体轮号、正负号和几何参数由底盘固件决定。
15.3 操作前检查¶
- 已完成第 10 章底盘类型识别。
- 轮子编号和前方朝向有清晰标记。
- 本章公式用于理解底盘运动关系;修改固件中的运动学矩阵前,必须结合轮距、轴距、轮径和轮组安装方向重新验证。
15.4 工作原理¶
本书采用 ROS 常用机体坐标:x 向前、y 向左、z 向上。地面运动主要用 v_x、v_y 和绕 z 轴的角速度 ω_z。按照右手定则,ω_z > 0 表示从上方看逆时针转动。
部分底盘通信说明会把 CAN 显示方向写成顺时针,这与 ROS 标准约定可能存在表述差异。工程上不能靠文字猜测。应使用低速正命令,观察底盘和 ROS 话题的实际符号,再确认驱动节点是否做过坐标转换。
底盘运动模型有两个方向:
- 逆运动学把机器人目标速度换成每个轮子的目标速度,用于控制。
- 正运动学把各轮实际速度换成机器人速度,用于里程计。
差速底盘的逆解可写为:
\[
v_L = v_x - \frac{W}{2}\omega_z,\qquad
v_R = v_x + \frac{W}{2}\omega_z
\]
其中 W 是左右轮中心间距。麦轮和全向轮还要考虑轮号、滚子方向、轴距与轮距;同一组公式只有在编号和安装方向一致时才成立。
阿克曼底盘用前轮转角形成转弯半径。接近 v_x = 0 时,不能把很大的 ω_z 当成原地旋转命令,否则转角计算会失去物理意义。
15.5 操作步骤¶
- 在底盘俯视图上标出车头、
x/y/z正方向和每个轮号。 - 手动转动车轮或用最低速遥控,确认每个编码器正方向。
- 列出本机允许的命令组合。例如差速底盘强制
v_y = 0;阿克曼要求非零前进速度才能产生正常转弯。 - 查当前固件中的车型选择和运动学函数,记录轮径
r、轮距W、轴距H及单位。 - 用一组小数值手算差速左右轮目标速度,再与 OLED、日志或调试变量对照。
- 对麦轮或全向轮,只验证当前源码矩阵,不从其他车型复制符号。
15.6 验收标准¶
- 配置记录中有车头、坐标轴、轮号和编码器正方向。
- 正
v_x代表前进,正/负ω_z的实际转向已通过低速测试确认。 - 不支持横移的车型不会接收非零
v_y作为有效动作。 - 差速手算结果与当前底盘实现的左右轮趋势一致。
- 麦轮/全向轮的轮号和滚子方向与固件矩阵逐项对应。
15.7 故障排查¶
| 现象 | 原因 | 处理 |
|---|---|---|
| 前进命令导致后退 | 电机或坐标符号反向 | 先查车型和编码器方向,不同时改多个符号 |
| 原地转向时里程计方向相反 | ω_z 转换或 IMU 轴定义不一致 |
分别检查轮速正解、串口/CAN 转换和 ROS 驱动 |
| 麦轮不能直线横移 | 轮子滚子安装、轮号或矩阵符号错误 | 按实物逐轮核对 |
| 阿克曼收到原地旋转命令后抖动 | 命令不符合转向结构 | 在上层限制最小线速度与最大转角 |