差速移动机器人轨迹跟踪:从PID到PurePursuit的工程实践与仿真对比
1. 差速移动机器人轨迹跟踪基础差速移动机器人通过左右轮速差实现转向这种结构简单可靠广泛应用于仓储AGV、服务机器人等领域。轨迹跟踪的核心问题是让机器人实际路径尽可能贴近预设轨迹这涉及到三个关键环节首先需要处理传感器数据。GPS采集的经纬度存在噪声和坏点我常用3σ准则进行滤波计算坐标点与均值的偏差超过3倍标准差即判定为异常值。接着将WGS84坐标系转换为平面直角坐标系米勒投影公式如下import math def miller_projection(lon, lat, width): x (width/2) (width/(2*math.pi)) * lon * (math.pi/180) y (width/2) - (width/(2*2.3)) * 1.25 * math.log(math.tan(0.25*math.pi 0.4*lat*(math.pi/180))) return x, y运动学建模是控制算法的基础。对于轮距D0.4m的差速机器人其线速度V和角速度W与轮速关系为V (V_left V_right)/2 W (V_right - V_left)/D在Simulink中建立离散化模型时采样时间T的选择很关键。我通常取T0.1s既能保证实时性又不会引入过多计算延迟。2. PID控制器的工程实现2.1 双环PID设计要点传统PID控制器采用距离-航向角双闭环结构。航向环负责消除角度偏差距离环控制接近速度。实际调试中发现几个坑航向角需要归一化到[-π,π]范围否则在180°附近会出现跳变积分项容易导致超调需要加抗饱和处理微分项对噪声敏感建议先对输入信号进行低通滤波航向角PID输出公式W Kp*θ_err Ki*∫θ_err Kd*dθ_err/dt2.2 参数整定技巧通过仿真对比不同参数组合的性能指标参数组最大误差(m)稳态误差(m)超调量(%)Kp50.320.0518.7Kp80.210.0312.5Kp100.150.0225.3我的经验是先用Ziegler-Nichols法确定初始参数再微调先将Ki、Kd置零逐渐增大Kp直到系统开始振荡记录临界增益Ku和振荡周期Tu按经验公式设置Kp0.6Ku, Ki2Kp/Tu, KdKp*Tu/83. PurePursuit算法实战3.1 预瞄距离的奥秘PurePursuit的核心是动态计算预瞄点。我发现预瞄距离Ld与速度v的关系至关重要Ld k*v L0其中k0.8-1.2效果较好L0取机器人长度0.5m。在Matlab中实现时要注意function [lookahead_point] findLookAhead(path, current_pos, Ld) distances sqrt(sum((path - current_pos).^2, 2)); idx find(distances Ld, 1); lookahead_point path(idx,:); end3.2 曲率计算优化传统曲率公式γ2x/Ld²在急转弯时会出现突变。我改进为γ (2*sin(α))/Ld其中α是当前航向与预瞄点方向的夹角这样处理后的轨迹更平滑。实测在90°直角弯时跟踪误差降低约40%。4. 仿真对比与工程选型4.1 性能指标对比在相同测试轨迹下含直线段、S弯、直角弯算法平均误差最大误差计算耗时适用场景PID0.12m0.45m2ms精确点对点移动PurePursuit0.18m0.32m5ms连续路径跟踪4.2 实际应用建议仓储拣选场景选用PID控制配合RFID地标实现厘米级定位园区配送场景PurePursuit更适合处理复杂路径配合激光SLAM混合方案直线段用PID提高效率转弯切换PurePursuit保证平滑性在Matlab仿真中我发现PID参数对初始条件敏感而PurePursuit的视距参数需要根据速度动态调整。建议先用仿真确定参数范围再通过实车测试微调。