Skip to content

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)\)

  1. 计算当前点到预瞄点的向量在车体坐标系下的表示: $\(\alpha = \text{atan2}(y_L - y, x_L - x) - \theta\)$

  2. 由几何关系(弦长公式),转向角满足: $\(\sin(\alpha) = \frac{L \cdot \sin(\alpha)}{L} = \frac{L_d}{L}\)$

其中 \(L_d\) 是当前点到预瞄点的距离(近似为 \(L\))。

  1. 简化后的转向角公式(纯跟踪核心): $\(\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. 完整控制流程#

  1. 找到最近点:在路径上找到距离车辆当前位置最近的点,作为搜索起点
  2. 搜索预瞄点:从最近点往后遍历,找到距离恰好为 \(L\) 的点
  3. 计算夹角 \(\alpha\):当前点到预瞄点的连线与车体朝向的夹角
  4. 计算角速度\(\omega = 2v\sin(\alpha)/L\)
  5. 更新姿态:使用 \((v, \omega)\) 积分更新车辆 pose
  6. 重复直到到达目标

5. 参数调节指南#

5.1 推荐初始值#

  • 预瞄距离 \(L\):0.3 ~ 1.0 m
  • 线速度 \(v\):0.2 ~ 1.0 m/s

5.2 调节原则#

现象 调整方向
振荡、蛇形 增大 \(L\) 或减小 \(v\)
响应迟缓、跟踪误差大 减小 \(L\) 或增大 \(v\)
高速转弯时甩出 增大 \(L\)

6. 局限性#

  1. 不考虑动力学约束:假设车辆可以瞬时达到任意角速度
  2. 高速不稳定:速度越高,相同的预瞄距离下跟踪性能下降
  3. 需要完整路径:属于开环前瞻方法,无法应对动态障碍物
  4. 夹角死区:当 \(\alpha\) 接近 0 时,控制量接近 0,可能导致路径振荡

7. 参考实现#

01.pure_pursuit_sim.ipynb

  • 圆弧跟踪验证基础功能
  • 8 字形路径验证连续转向
  • 参数敏感性分析