Pure Pursuit 纯跟踪算法#
1. 算法思想#
纯跟踪(Pure Pursuit)是一种基于几何的路径跟踪控制方法。其核心思想是:在车辆前方一定距离处选取一个预瞄点(lookahead point),然后控制车辆朝向该点行驶。通过调节预瞄距离,可以平衡响应速度与轨迹平滑度。
2. 预瞄点查找#
2.1 几何解释#
预瞄距离 \(L\) 定义为车辆当前位置到预瞄点的直线距离。
当前点 \(P\) 到路径上任意点 \(P_i\) 的距离: $\(d = \sqrt{(x_i - x)^2 + (y_i - y)^2}\)$
2.2 预瞄距离选择#
固定预瞄距离:适用于低速或简单场景。
动态预瞄距离:常用经验公式 $\(L = k \cdot v + L_{d0}\)$
其中: - \(k\):速度前馈系数(通常在 0.5 ~ 1.5 之间) - \(v\):车速 (m/s) - \(L_{d0}\):截距/最小预瞄距离(通常取 0.3 ~ 0.5 m)
高速时需要更大的预瞄距离以保证稳定性。
3. 纯跟踪控制律#
3.1 公式推导#
设当前车辆位置为 \(P(x, y)\),朝向角为 \(\theta\),预瞄点为 \(L(x_L, y_L)\)。
-
计算当前点到预瞄点的向量在车体坐标系下的表示: $\(\alpha = \text{atan2}(y_L - y, x_L - x) - \theta\)$
-
由几何关系(弦长公式),转向角满足: $\(\sin(\alpha) = \frac{L \cdot \sin(\alpha)}{L} = \frac{L_d}{L}\)$
其中 \(L_d\) 是当前点到预瞄点的距离(近似为 \(L\))。
- 简化后的转向角公式(纯跟踪核心): $\(\omega = \frac{2 v \sin(\alpha)}{L}\)$
3.2 核心公式#
\[\boxed{\omega = \frac{2 v \sin(\alpha)}{L}}\]
- \(v\):线速度 (m/s)
- \(L\):预瞄距离 (m)
- \(\alpha\):车体朝向与当前点到预瞄点连线的夹角
3.3 参数意义#
| 参数 | 增大时的效果 |
|---|---|
| \(L\)(预瞄距离) | 响应变慢,轨迹更平滑,稳态误差增大 |
| \(v\)(速度) | 响应加快,可能导致振荡或失稳 |
4. 完整控制流程#
- 找到最近点:在路径上找到距离车辆当前位置最近的点,作为搜索起点
- 搜索预瞄点:从最近点往后遍历,找到距离恰好为 \(L\) 的点
- 计算夹角 \(\alpha\):当前点到预瞄点的连线与车体朝向的夹角
- 计算角速度:\(\omega = 2v\sin(\alpha)/L\)
- 更新姿态:使用 \((v, \omega)\) 积分更新车辆 pose
- 重复直到到达目标
5. 参数调节指南#
5.1 推荐初始值#
- 预瞄距离 \(L\):0.3 ~ 1.0 m
- 线速度 \(v\):0.2 ~ 1.0 m/s
5.2 调节原则#
| 现象 | 调整方向 |
|---|---|
| 振荡、蛇形 | 增大 \(L\) 或减小 \(v\) |
| 响应迟缓、跟踪误差大 | 减小 \(L\) 或增大 \(v\) |
| 高速转弯时甩出 | 增大 \(L\) |
6. 局限性#
- 不考虑动力学约束:假设车辆可以瞬时达到任意角速度
- 高速不稳定:速度越高,相同的预瞄距离下跟踪性能下降
- 需要完整路径:属于开环前瞻方法,无法应对动态障碍物
- 夹角死区:当 \(\alpha\) 接近 0 时,控制量接近 0,可能导致路径振荡
7. 参考实现#
见 01.pure_pursuit_sim.ipynb
- 圆弧跟踪验证基础功能
- 8 字形路径验证连续转向
- 参数敏感性分析