1. 速度二次规划优化算法概述
在自动驾驶决策规划系统中,速度规划是一个至关重要的环节。它决定了车辆如何在保证安全性和舒适性的前提下,高效地完成行驶任务。Piecewise Jerk Speed Optimizer(分段加加速度速度优化器)是Apollo自动驾驶平台中采用的一种先进速度规划算法。
这个算法的核心思想是将连续的速度变化过程离散化为一系列时间点(默认时间步长为0.1秒),在每个时间点上对车辆的位置、速度和加速度进行优化。通过构建二次规划问题并求解,得到一条平滑、安全且符合车辆动力学约束的速度曲线。
提示:时间步长0.1秒的选择是基于工程经验——过大的步长会导致规划不够精细,过小的步长则会增加计算负担。这个值在大多数场景下能取得良好的平衡。
2. 算法核心原理与数学模型
2.1 运动状态表示
算法使用三维数组来存储车辆的初始运动状态:
- s(t):位置(沿路径的纵向距离)
- v(t):速度(沿路径的纵向速度)
- a(t):加速度(沿路径的纵向加速度)
这种表示方法将复杂的连续运动离散化为一系列离散状态点,便于计算机处理。每个状态点对应一个时间戳t,相邻状态点之间的时间间隔固定为delta_t(默认0.1秒)。
2.2 倒车状态的特殊处理
倒车(reverse driving)在算法中被巧妙地映射为"正向运动":
- 将实际的后退速度视为"正向"速度的负值
- 保持加速度和加加速度的符号不变
- 优化完成后,再将结果映射回实际的后退状态
这种处理方式使得正向和反向运动可以复用同一套优化算法,大大简化了系统设计。在实际实现中,我们只需要在输入输出阶段进行符号转换即可。
2.3 优化目标函数
算法的优化目标由三部分组成,形成一个标准的二次规划问题:
code复制minimize J = w1 * J1 + w2 * J2 + w3 * J3
其中:
- J1:与参考速度的偏差(鼓励跟踪期望速度)
- J2:加速度的平方和(鼓励平缓加速)
- J3:加加速度的平方和(鼓励平滑的加速度变化)
- w1, w2, w3:各项的权重系数,需要根据场景调整
这个目标函数的设计体现了自动驾驶速度规划的核心诉求:既要尽可能接近期望速度(效率),又要保证乘坐舒适性(平滑),同时还要满足各种安全约束。
3. 算法实现细节
3.1 输入数据处理
算法的主要输入来自ST Graph(速度-时间图),包含以下关键信息:
- total_length:路径总长度(米)
- speed_limit:速度限制(可能随位置变化)
- obstacle_info:障碍物在ST图上的投影
- initial_state:初始运动状态[s0, v0, a0]
在Apollo实现中,这些数据由上层规划模块(如DP速度规划)提供。ST Graph的构建质量直接影响最终优化结果,因此需要确保输入数据的准确性。
3.2 约束条件设置
为了保证规划结果的安全性和可行性,算法设置了多种约束条件:
-
运动学约束:
- 速度上下限:0 ≤ v(t) ≤ v_max
- 加速度范围:a_min ≤ a(t) ≤ a_max
- 加加速度限制:da_min ≤ da(t) ≤ da_max
-
障碍物约束:
- 安全距离:与障碍物保持最小纵向距离
- 避让时间:在特定时间段内完成避让
-
连续性约束:
- 位置连续:s(t+1) = s(t) + v(t)dt + 0.5a(t)*dt²
- 速度连续:v(t+1) = v(t) + a(t)*dt
- 加速度连续:a(t+1) = a(t) + da(t)*dt
这些约束条件共同确保了规划结果既符合车辆动力学特性,又能安全避开障碍物。
3.3 二次规划问题构建
将上述目标和约束转化为标准的二次规划形式:
code复制minimize 0.5 * x^T * Q * x + c^T * x
subject to A * x ≤ b
A_eq * x = b_eq
lb ≤ x ≤ ub
其中:
- x:优化变量向量,包含所有时间点的s,v,a
- Q:目标函数的二次项矩阵
- c:目标函数的一次项向量
- A,b:不等式约束矩阵和向量
- A_eq,b_eq:等式约束矩阵和向量
- lb,ub:变量上下界
在Apollo的实现中,使用OSQP(Operator Splitting Quadratic Program)求解器来高效求解这个优化问题。OSQP特别适合处理这类稀疏、大规模的二次规划问题。
4. 实际应用中的经验技巧
4.1 参数调优建议
经过多次实测,我们发现以下参数设置策略效果较好:
-
权重系数:
- 跟踪误差权重(w1):通常设为1.0
- 加速度权重(w2):0.1-0.5之间
- 加加速度权重(w3):0.01-0.1之间
-
约束边界:
- 最大加速度:2.0-3.0 m/s²(乘用车)
- 最大减速度:-3.0--4.0 m/s²(紧急制动)
- 最大加加速度:±1.5 m/s³(保证舒适性)
注意:这些参数需要根据具体车型和场景调整。例如,货车需要更保守的加速度限制,而紧急避让场景可能需要临时放宽舒适性约束。
4.2 常见问题排查
在实际应用中,我们遇到过以下典型问题及解决方案:
-
求解失败或无解:
- 检查约束条件是否过于严格(如速度上限设置过低)
- 确认障碍物投影是否正确,避免不合理的避让要求
- 适当放松某些次要约束(如舒适性约束)
-
规划结果不连续或抖动:
- 检查时间步长是否合适(0.1s通常是安全的)
- 增加加加速度权重(w3)以获取更平滑的结果
- 确认输入数据(如参考速度)是否本身存在突变
-
计算耗时过长:
- 减少规划时间范围(如从8秒缩短到5秒)
- 增大时间步长(如从0.1s改为0.2s),但会牺牲精度
- 使用更高效的求解器或硬件加速
4.3 性能优化技巧
-
热启动(Warm Start):
- 使用上一周期的优化结果作为本次优化的初始猜测
- 可以显著减少迭代次数,提高求解速度
-
稀疏矩阵利用:
- 充分利用QP问题的稀疏性特点
- 使用专门的稀疏矩阵存储和计算方法
-
并行计算:
- 将不同时间段的规划问题分解为子问题
- 在多核处理器上并行求解
5. 算法扩展与改进方向
5.1 动态时间步长调整
固定时间步长虽然实现简单,但在某些场景下可能不是最优选择。我们正在试验动态调整策略:
- 高速场景:使用较大的时间步长(如0.2s)
- 低速精细操作:使用较小的时间步长(如0.05s)
- 紧急情况:局部加密时间步长以提高响应速度
这种自适应方法可以在不显著增加计算负担的情况下,提高关键区域的规划精度。
5.2 多目标协同优化
当前算法主要关注纵向运动规划。未来的改进方向包括:
-
横向-纵向协同优化:
- 将路径和速度规划统一考虑
- 联合优化横向和纵向运动
-
舒适性-效率权衡:
- 根据乘客偏好动态调整目标权重
- 识别急迫场景自动切换优化模式
-
能耗优化:
- 将能耗因素纳入目标函数
- 针对电动车特点优化加减速策略
5.3 机器学习增强
传统优化算法虽然可靠,但缺乏学习能力。我们正在探索以下结合方式:
-
参数自适应:
- 使用强化学习动态调整权重系数
- 根据历史数据学习最优约束边界
-
求解加速:
- 训练神经网络预测优化结果
- 作为传统求解器的热启动
-
场景识别:
- 自动识别特殊场景(如紧急避让)
- 触发相应的优化策略
在实际工程实现中,我们发现算法的鲁棒性比绝对最优性更重要。一个能在所有场景下稳定工作、虽然不一定总是最优但绝对安全的算法,远比在某些情况下表现极佳但在极端情况下会失效的算法更有价值。这也是Apollo选择二次规划方法的重要原因——它在数学上具有良好的收敛性和稳定性保证。