文章目录
1. 引言
在自动驾驶领域,路径规划是一个核心问题,它需要计算出一条既安全又舒适的轨迹。分段加加速度优化算法(Piecewise Jerk Path Optimization Algorithm)是一种在Frenet坐标系下解决路径规划问题的有效方法。该算法通过将路径离散化,并优化每个离散点的位置、速度、加速度和加加速度,来生成一条平滑且符合运动学约束的轨迹。
2. 算法理论推导
2.1 问题定义
如下图所示:
在frenet坐标系下, s s s是沿着参考路径的距离, l l l是车辆相对于参考路径的横向偏移,给定 l l l的上下边界,使用优化的思想,定义一个包括包含起点、平滑(舒适)、在上下边界内(安全)、靠近中心线和终点的代价函数,求解代价最小的最优轨迹。
对于优化问题,我们经常将其转换为二次规划(Quadratic Programming, QP)问题,因为QP问题有着成熟的理论和高效的算法。二次规划问题是一种特殊的优化问题,其目标函数是二次的,约束条件是线性的。二次规划问题的一般形式如下:
minimize 1 2 x T P x + q T x subject to l ≤ A x ≤ u \begin{aligned} \text{minimize} \quad & \frac{1}{2} x^T P x + q^T x \\ \text{subject to} \quad & l \leq A x \leq u \end{aligned} minimizesubject to21xTPx+qTxl≤Ax≤u
通过将优化问题转换为QP问题,我们可以利用现有的优化算法和软件工具,以系统化和标准化的方式找到问题的最优解。
2.2 定义优化变量
为了在实际应用中有效地构建优化问题并评估约束条件的满足程度,分段加加速度优化算法采用了以下方法:将路径函数 l ( s ) l(s) l(s)依据空间参数 s s s进行离散化处理,以达到特定的分辨率 Δ s \Delta s Δs。通过这些离散化的点,我们能够控制路径的形状,并对约束条件的满足情况进行近似评估。该方法的核心思想在于将一维函数 l ( s ) l(s) l(s)离散化至其二阶导数层面,并利用恒定的三阶导数项来“连接”连续的离散点。位置变量的三阶导数通常被称为加加速度(jerk),这也是“分段加加速度优化算法”名称的由来。通过这种方法,我们可以在优化问题中考虑到车辆的动态特性,同时简化问题的复杂性,使其可以通过数值优化技术来求解。
在frenet坐标系下,我们沿着 s s s方向,以一定距离 Δ s \Delta s Δs将路径进行采样:
l 0 l 0 ′ l 0 ′ ′ → Δ s l 1 l 1 ′ l 1 ′ ′ → Δ s l 2 l 2 ′ l 2 ′ ′ … l n − 2 l n − 2 ′ l n − 2 ′ ′ → Δ s l n − 1 l n − 1 ′ l n − 1 ′ ′ \begin{aligned} \begin{matrix} l_0\\ l^{'}_0\\ l^{''}_0\\ \end{matrix} \overset{\Delta s}{\rightarrow} \begin{matrix} l_1\\ l^{'}_1\\ l^{''}_1\\ \end{matrix} \overset{\Delta s}{\rightarrow} \begin{matrix} l_2\\ l^{'}_2\\ l^{''}_2\\ \end{matrix} \dots \begin{matrix} l_{n-2}\\ l^{'}_{n-2}\\ l^{''}_{n-2}\\ \end{matrix} \overset{\Delta s}{\rightarrow} \begin{matrix} l_{n-1}\\ l^{'}_{n-1}\\ l^{''}_{n-1}\\ \end{matrix} \end{aligned} l0l0′l0′′→Δsl1l1′l1′′→Δsl2l2′l2′′…ln−2ln−2′ln−2′′→Δsln−1ln−1′ln−1′′
为了和QP的形式保持一致,我们使用 x x x来表示 l l l,因此,可以将优化变量定义为
x = [ x 0 x 1 ⋮ x n − 1 x 0 ′ x 1 ′ ⋮ x n − 1 ′ x 0 ′ ′ x 1 ′ ′ ⋮ x n − 1 ′ ′ ] 3 n × 1 \begin{aligned} x= \begin{bmatrix} x_0\\ x_1\\ \vdots\\ x_{n-1}\\ x^{'}_0\\ x^{'}_1\\ \vdots\\ x^{'}_{n-1}\\ x^{''}_0\\ x^{''}_1\\ \vdots\\ x^{''}_{n-1}\\ \end{bmatrix}_{3n\times1} \end{aligned} x=
x0x1⋮xn−1x0′x1′⋮xn−1′x0′′x1′′⋮xn−1′′
3n×1
2.3 定义代价函数
代价函数 J J J 通常由以下几个部分组成,以确保路径规划的安全性、舒适性和合规性:
-
平滑代价:为了确保行驶的平稳性,我们希望最小化横向位移的变化率,其主要受 x i ′ x_i' xi′、 x i ′ ′ x_i'' xi′′ 和 x i ′ ′ ′ x_i''' xi′′′ 的影响。
-
道路中心线贴近代价:为了遵守交通规则,我们希望轨迹尽可能地靠近道路中心线,这通过路径偏移量 x i x_i xi 来衡量。
-
终点匹配代价:为了确保轨迹的终点与预定的目标点一致,我们引入终点权重,即 x e n d = x r e f _ e n d x_{end} = x_{ref\_end} xend=xref_end。
-
可行驶区域的中心线贴近代价:为了安全起见,我们希望轨迹远离障碍物,尽可能地靠近可行驶区域的中心线,这通过路径偏移量与参考偏移量之差 x i − x i _ r e f x_i - x_{i\_ref} xi−xi_ref 来衡量。
综合这些因素,代价函数 J J J 可以写为:
J = w x _ r e f ∑ i = 0 n − 1 ( x i − x i _ r e f ) 2 + w x ∑ i = 0 n − 1 ( x i ) 2 + w d x ∑ i = 0 n − 1 ( x i ′ ) 2 + w d d x ∑ i = 0 n − 1 ( x i ′ ′ ) 2 + w d d d x ∑ i = 0 n − 2 ( x i ′ ′ ′ ) 2 + w e n d _ x ( x n − 1 − x e n d _ l ) 2 + w e n d _ d x ( x n − 1 ′ − x e n d _ l ′ ) 2 + w e n d _ d d x ( x n − 1 ′ ′ − x e n d _ l ′ ′ ) 2 \begin{aligned} J&=w_{x\_ref}\sum_{i=0}^{n-1}(x_i - x_{i\_ref})^2+ w_x\sum_{i=0}^{n-1}(x_i)^2\\ &+w_{dx}\sum_{i=0}^{n-1}(x_i^{'})^2+w_{ddx}\sum_{i=0}^{n-1}(x_i^{''})^2+w_{dddx}\sum_{i=0}^{n-2}(x_i^{'''})^2\\ &+w_{end\_x}(x_{n-1}-x_{end\_l})^2+w_{end\_dx}(x_{n-1}^{'}-x_{end\_l}^{'})^2+w_{end\_ddx}(x_{n-1}^{''}-x_{end\_l}^{''})^2\\ \end{aligned} J=wx_refi=0∑n−1(xi−xi_ref)2+wxi=0∑n−1(xi)2+wdxi=0∑n−1(xi′)2+wddxi=0∑n−1(xi′′)2+wdddxi=0∑n−2(xi′′′)2+wend_x(xn−1−xend_l)2+wend_dx(xn−1′−xend_l′)2+wend_ddx(xn−1′′−xend_l′′)2
将 x i ′ ′ ′ = x i + 1 ′ ′ − x i ′ ′ Δ s x^{'''}_{i}=\frac{x^{''}_{i+1}-x^{''}_{i}}{\Delta s} xi′′′=Δsxi+1′′−xi′′代入后展开
J = w x _ r e f ∑ i = 0 n − 1 ( x i − x i _ r e f ) 2 + w x ∑ i = 0 n − 1 ( x i ) 2 + w d x ∑ i = 0 n − 1 ( x i ′ ) 2 + w d d x ∑ i = 0 n − 1 ( x i ′ ′ ) 2 + w d d d x ∑ i = 0 n − 2 ( x i + 1 ′ ′ − x i ′ ′ Δ s ) 2 + w e n d _ x ( x n − 1 − x e n d _ l ) 2 + w e n d _ d x ( x n − 1 ′ − x e n d _ l ′ ) 2 + w e n d _ d d x ( x n − 1 ′ ′ − x e n d _ l ′ ′ ) 2 = w x _ r e f ∑ i = 0 n − 1 ( x i 2 − 2 x i x i _ r e f + x i _ r e f 2 ) + w x ∑ i = 0 n − 1 ( x i ) 2 + w d x ∑ i = 0 n − 1 ( x i ′ ) 2 + w d d x ∑ i = 0 n − 1 ( x i ′ ′ ) 2 + w d d d x Δ s 2 ∑ i = 0 n − 2 [ x i + 1 ′ ′ 2 + x i ′ ′ 2 − 2 x i + 1 ′ ′ x i ′ ′ ] + w e n d _ x [ ( x n − 1 ) 2 + ( x e n d _ l ) 2 − 2 x n − 1 x e n d _ l ] + w e n d _ d x [ ( x n − 1 ′ ) 2 + ( x e n d _ l ′ ) 2 − 2 x n − 1 ′ x e n d _ l ′ ] + w e n d _ d d x [ ( x n − 1 ′ ′ ) 2 + ( x e n d _ l ′ ′ ) 2 − 2 x n − 1 ′ ′ x e n d _ l ′ ′ ] = w x _ r e f ∑ i = 0 n − 1 ( x i 2 − 2 x i x i _ r e f + x i _ r e f 2 ) + w x ∑ i = 0 n − 1 ( x i ) 2 + w d x ∑ i = 0 n − 1 ( x i ′ ) 2 + w d d x ∑ i = 0 n − 1 ( x i ′ ′ ) 2 + 2 w d d d x Δ s 2 ∑ i = 0 n − 1 x i ′ ′ 2 − w d d d x Δ s 2 ( x 0 ′ ′ 2 + x n − 1 ′ ′ 2 ) − 2 w d d d x Δ s 2 ∑ i = 0 n − 2 ( x i + 1 ′ ′ x i ′ ′ ) + w e n d _ x [ ( x n − 1 ) 2 + ( x e n d _ l ) 2 − 2 x n − 1 x e n d _ l ] + w e n d _ d x [ ( x n − 1 ′ ) 2 + ( x e n d _ l ′ ) 2 − 2 x n − 1 ′ x e n d _ l ′ ] + w e n d _ d d x [ ( x n − 1 ′ ′ ) 2 + ( x e n d _ l ′ ′ ) 2 − 2 x n − 1 ′ ′ x e n d _ l ′ ′ ] \begin{aligned} J&=w_{x\_ref}\sum_{i=0}^{n-1}(x_i - x_{i\_ref})^2+w_x\sum_{i=0}^{n-1}(x_i)^2\\ &\quad+w_{dx}\sum_{i=0}^{n-1}(x_i^{'})^2 + w_{ddx}\sum_{i=0}^{n-1}(x_i^{''})^2+w_{dddx}\sum_{i=0}^{n-2}(\frac{x^{''}_{i+1}-x^{''}_{i}}{\Delta s})^2\\ &\quad+w_{end\_x}(x_{n-1}-x_{end\_l})^2+w_{end\_dx}(x_{n-1}^{'}-x_{end\_l}^{'})^2+w_{end\_ddx}(x_{n-1}^{''}-x_{end\_l}^{''})^2\\ &=w_{x\_ref}\sum_{i=0}^{n-1}(x_i^2 - 2x_i x_{i\_ref} + x_{i\_ref}^2)+w_x\sum_{i=0}^{n-1}(x_i)^2\\ &\quad+w_{dx}\sum_{i=0}^{n-1}(x_i^{'})^2 + w_{ddx} \sum_{i=0}^{n-1}(x_i^{''})^2+\frac{w_{dddx}}{
{\Delta s}^2}\sum_{i=0}^{n-2}[{x^{''}_{i+1}}^2+{x^{''}_{i}}^2-2x^{''}_{i+1}x^{''}_{i}]\\ &\quad+w_{end\_x}[(x_{n-1})^2+(x_{end\_l})^2-2x_{n-1}x_{end\_l}]\\ &\quad+w_{end\_dx}[(x_{n-1}^{'})^2+(x_{end\_l}^{'})^2-2x_{n-1}^{'}x_{end\_l}^{'}]\\ &\quad+w_{end\_ddx}[(x_{n-1}^{''})^2+(x_{end\_l}^{''})^2-2x_{n-1}^{''}x_{end\_l}^{''}]\\ &=w_{x\_ref}\sum_{i=0}^{n-1}(x_i^2 - 2x_i x_{i\_ref} + x_{i\_ref}^2)+w_x\sum_{i=0}^{n-1}(x_i)^2\\ &\quad+w_{dx}\sum_{i=0}^{n-1}(x_i^{'})^2 + w_{ddx} \sum_{i=0}^{n-1}(x_i^{''})^2 +\frac{2w_{dddx}}{
{\Delta s}^2}\sum_{i=0}^{n-1}{
{x^{''}_{i}}^2}-\frac{w_{dddx}}{
{\Delta s}^2}({x^{''}_{0}}^2+{x^{''}_{n-1}}^2) -\frac{2w_{dddx}}{
{\Delta s}^2}\sum_{i=0}^{n-2}(x^{''}_{i+1}x^{''}_{i})\\ &\quad+w_{end\_x}[(x_{n-1})^2+(x_{end\_l})^2-2x_{n-1}x_{end\_l}]\\ &\quad+w_{end\_dx}[(x_{n-1}^{'})^2+(x_{end\_l}^{'})^2-2x_{n-1}^{'}x_{end\_l}^{'}]\\ &\quad+w_{end\_ddx}[(x_{n-1}^{''})^2+(x_{end\_l}^{''})^2-2x_{n-1}^{''}x_{end\_l}^{''}]\\ \end{aligned} J=wx_refi=0∑n−1(xi−xi_ref)2+wxi=0∑n−1(xi)2+wdxi=0∑n−1(xi′)2+wddxi=0∑n−1(xi′′)2+wdddxi=0∑n−2(Δsxi+1′′−xi′′)2+wend_x(xn−1−xend_l)2+wend_dx(xn−1