apollo学习之曲率平滑处理
·
在Apollo自动驾驶系统中,Planning(规划)和Control(控制)模块中的曲率平滑(Curvature Smoothing)是确保车辆轨迹平顺、舒适且符合车辆动力学约束的关键步骤。
1. 曲率平滑的核心目标
- 减少横向加速度突变:避免方向盘的频繁剧烈转动,提升舒适性。
- 满足车辆运动学约束:确保曲率连续且符合最大转向角限制(如阿克曼转向几何)。
- 路径跟踪可行性:控制模块(如MPC)需要平滑的曲率输入以生成合理的转向指令。
2. Planning模块中的曲率平滑
(1) 输入与输出
- 输入:规划模块生成的初始路径(离散点列,含坐标 ((x,y))((x, y))((x,y)) 和航向角 (θ)(\theta)(θ))。
- 输出:平滑后的路径点,附带曲率 (κ)(\kappa)(κ) 信息。
(2) 平滑算法:基于优化与样条曲线
Apollo主要采用以下两种方法:
方法一:二次规划(QP) + 曲率约束
- 优化变量:路径点的横向偏移量 (li)(l_i)(li)(相对于参考线)。
- 代价函数:平衡曲率变化率和平滑性:
min∑i(κi+1−2κi+κi−1)2+w⋅li2 \min \sum_{i} \left( \kappa_{i+1} - 2\kappa_i + \kappa_{i-1} \right)^2 + w \cdot l_i^2 mini∑(κi+1−2κi+κi−1)2+w⋅li2 - 第一项最小化曲率的二阶差分(曲率变化率)。
- 第二项防止偏离原始路径过远(权重 (w)(w)(w) 调节)。
- 约束条件:
- 曲率连续性:(κi=θi+1−θiΔs)(\kappa_i = \frac{\theta_{i+1} - \theta_i}{\Delta s})(κi=Δsθi+1−θi)((Δs)(\Delta s)(Δs) 为弧长)。
- 最大曲率限制:(∣κi∣≤κmax)(|\kappa_i| \leq \kappa_{\text{max}})(∣κi∣≤κmax)(由车辆最小转弯半径决定)。
方法二:螺旋曲线(Clothoid/Euler Spiral)
- 原理:螺旋曲线的曲率随弧长线性变化((κ(s)=κ0+c⋅s)(\kappa(s) = \kappa_0 + c \cdot s)(κ(s)=κ0+c⋅s)),天然适合平滑过渡。
- Apollo实现:
- 将路径分段拟合为螺旋曲线,连接处曲率和曲率导数连续。
- 使用Fresnel积分数值计算曲线坐标:
x(s)=∫0scos(c2t2+κ0t)dt,y(s)=∫0ssin(c2t2+κ0t)dt x(s) = \int_0^s \cos\left(\frac{c}{2} t^2 + \kappa_0 t\right) dt, \quad y(s) = \int_0^s \sin\left(\frac{c}{2} t^2 + \kappa_0 t\right) dt x(s)=∫0scos(2ct2+κ0t)dt,y(s)=∫0ssin(2ct2+κ0t)dt
(3) 工程优化技巧
- 预处理:对原始路径进行等弧长重采样(
apollo::common::PathApproximation)。 - 曲率估算:使用五点差分法计算离散曲率:
κi≈ΔθΔs=(θi+2−θi−2)2⋅(si+2−si−2) \kappa_i \approx \frac{\Delta \theta}{\Delta s} = \frac{(\theta_{i+2} - \theta_{i-2})}{2 \cdot (s_{i+2} - s_{i-2})} κi≈ΔsΔθ=2⋅(si+2−si−2)(θi+2−θi−2) - 热启动(Warm Start):用上一帧平滑结果初始化QP变量,加速收敛。
3. Control模块中的曲率跟踪
(1) 输入与输出
- 输入:规划模块提供的平滑路径(含曲率 (κ)(\kappa)(κ) 和速度 (v)(v)(v))。
- 输出:方向盘转角 (δ)(\delta)(δ) 和加速度指令。
(2) 模型预测控制(MPC)中的曲率处理
- 车辆模型:使用自行车模型(Bicycle Model)关联曲率与转向角:
κ=tanδL(L为轴距) \kappa = \frac{\tan \delta}{L} \quad (L \text{为轴距}) κ=Ltanδ(L为轴距) - MPC代价函数:惩罚曲率跟踪误差:
J=∑k=0N(κref,k−κpred,k)2 J = \sum_{k=0}^{N} \left( \kappa_{\text{ref},k} - \kappa_{\text{pred},k} \right)^2 J=k=0∑N(κref,k−κpred,k)2 - (κref,k)(\kappa_{\text{ref},k})(κref,k):参考路径在第(k)(k)(k)步的曲率。
- (κpred,k)(\kappa_{\text{pred},k})(κpred,k):模型预测的曲率。
(3) 前馈-反馈控制(Feedforward + Feedback)
- 前馈控制:根据曲率直接计算理论转向角:
δff=arctan(κ⋅L) \delta_{\text{ff}} = \arctan(\kappa \cdot L) δff=arctan(κ⋅L) - 反馈控制:PID或LQR纠正横向误差(如路径偏移量 (e)(e)(e)):
δfb=Kpe+Kddedt \delta_{\text{fb}} = K_p e + K_d \frac{de}{dt} δfb=Kpe+Kddtde - 最终转向指令:(δ=δff+δfb)(\delta = \delta_{\text{ff}} + \delta_{\text{fb}})(δ=δff+δfb).
4. 实际案例与调参
(1) 曲率突变处理
- 问题场景:路径中存在急转弯(曲率从0.1突变为0.5 m⁻¹)。
- 解决方案:
- 在QP中增加曲率变化率约束:(∣dκds∣≤0.1 m−2)(\left| \frac{d\kappa}{ds} \right| \leq 0.1 \text{ m}^{-2})(dsdκ≤0.1 m−2).
- 使用螺旋曲线过渡,确保曲率线性变化。
(2) 速度-曲率协同优化
- 动态调整:根据曲率限制速度,满足横向加速度约束:
vmax=alat,maxκ,alat,max≈2.0 m/s² v_{\text{max}} = \sqrt{\frac{a_{\text{lat,max}}}{\kappa}}, \quad a_{\text{lat,max}} \approx 2.0 \text{ m/s²} vmax=κalat,max,alat,max≈2.0 m/s²
5. 与其他模块的交互
- 与Routing模块:全局路径的粗略曲率用于早期速度规划。
- 与Perception模块:障碍物避让时,局部路径曲率需动态调整(如绕行障碍物后重新平滑)。
总结
Apollo中的曲率平滑通过优化算法(QP)和几何曲线(螺旋曲线)在Planning模块生成动力学可行的路径,再通过Control模块的MPC和前馈控制实现精准跟踪。其核心思想是:
- 规划层:以数学优化保证曲率连续性和舒适性;
- 控制层:结合模型动力学实现物理可执行性。
这种分层处理显著提升了自动驾驶的平顺性和安全性。
更多推荐



所有评论(0)