跳转至

20. 里程计、编码器、IMU 与 PID

20.1 学习目标

理解目标速度、编码器反馈、PID、底盘速度、里程计和IMU之间的因果关系,并用这条链判断轮子在动而里程计异常发生在哪一步。

20.2 适用范围

适用于带电机编码器和板载/外置 IMU 的轮式底盘。编码器线数、减速比、轮径、控制周期和 IMU 量程必须取自当前硬件与固件。

20.3 操作前检查

  • 轮号、编码器方向和底盘几何参数已记录。
  • 不在载人或拥挤场地调 PID。
  • 修改参数前保存当前值、固件和一段正常日志。

20.4 工作原理

编码器把电机或车轮的转动变成可计数的脉冲,控制板据此测量轮速。里程计根据轮速和底盘几何参数持续推算机器人走过的距离、朝向和速度;车轮打滑时,这个推算会产生误差。PID 用目标速度与测量速度的差来修正输出。PWM是控制板常用的电机驱动方式:通过改变脉冲的有效时间比例来调节平均驱动强度。

控制与估计链如下:

机器人目标速度
  → 逆运动学 → 各轮目标速度
  → PI/PID 与 PWM → 电机实际速度
  → 编码器脉冲 → 各轮测量速度
  → 正运动学 → 底盘速度
  → 时间积分 → 轮式里程计

IMU 原始加速度/角速度
  → 零偏与量程转换
  → 姿态或融合估计

轮子线速度常按下面关系计算:

\[ v = \omega_m \frac{r}{N} \]

其中 ω_m 是电机轴角速度,N 是减速比,r 是轮半径。若直接从编码器计数计算,还要明确每转脉冲数、四倍频方式和采样周期。

速度控制可采用增量式 PI 思路。PI 是 PID 中省略微分项的形式;许多底盘在这个环节只使用比例项和积分项:

\[ u_k = u_{k-1} + K_p(e_k-e_{k-1}) + K_i e_k \]

e_k 是目标速度与测量速度之差。输出通常还有限幅。参数过大可能引起振荡和发热,过小则响应慢、负载下误差大。

IMU 能提供角速度和加速度,但积分会累积零偏;轮式里程计在打滑时也会漂移。二者是互补信息,不应把单一传感器当成绝对位置真值。

20.5 操作步骤

  1. 架空轮子,给一个稳定的小目标速度,记录目标、编码器计数、测量速度和 PWM。
  2. 手动转动单个轮子,确认编码器计数方向与轮号一致。
  3. 核对每转计数、减速比、轮径和控制周期的单位。
  4. 落地低速直行,比较左右/各轮目标与测量速度。
  5. 静止记录 IMU 至少 30 秒,计算角速度均值和波动,确认零偏是否稳定。
  6. 缓慢原地转动允许自旋的底盘,比较编码器推导角速度与 IMU Z 轴方向。
  7. 在 ROS 2 中同时记录里程计和 IMU 话题;停止后检查速度是否回零、姿态是否持续快速漂移。
  8. 只有硬件、单位和方向均正确后才调 PI。一次只改一个参数,并保存前后曲线。

20.6 验收标准

  • 每个编码器方向和轮号正确。
  • 同一目标下,各轮测量速度趋势相近且不过度振荡。
  • 停止命令后 PWM 与测量速度回落,电机不持续啸叫。
  • 静止 IMU 没有明显跳变,零偏已记录。
  • 正转方向下,轮式角速度与 IMU Z 轴符号经过驱动转换后保持一致。
  • ROS 里程计的单位为米和弧度,未把 mm/s 或放大后的角速度直接发布。

20.7 故障排查

现象 可能原因
轮子转但速度始终为 0 编码器供电、线序、计数中断或错误接口
测量速度符号反了 A/B 相方向或软件符号错误
速度周期性振荡 PI 参数过大、采样周期不稳或机械间隙
低速不动,高速突然冲出 静摩擦、死区补偿或积分累积
直行里程计旋转 左右轮径/方向/比例不一致
静止航向持续漂移 陀螺零偏、温漂或积分未约束

章节导航

上一章:CAN 通信协议 · 返回本篇 · 下一章:直线纠偏、转向标定和常见底盘故障