知我者,谓我心忧. 不知我者,谓我何求。— 佚名 黍离
🏰代码及环境配置:请参考 环境配置和代码运行!
PiecewiseJerkOptimizer是Apollo中planning模块生成Path/Speed曲线的优化方法. 基于Frenet坐标系, 生成平滑, 安全的目标曲线. 本节将讲解基于PiecewiseJerk的路径优化方法.
5.5.1 问题定义
SL坐标系下, 给定路径总长 l e n g t h length length, 我们将路径均匀的离散成 n n n个点(上图中的蓝点), 其中 Δ s = l e n g t h / n \Delta s=length/n Δs=length/n. 我们定义 3 n 3n 3n个优化变量, 每个点有3个优化变量:
- l i l_i li:第 i i i个点的横向坐标,
- l i ′ l_i' li′:第 i i i个点的横向偏差的1阶导数, 代表横向的速度
- l i ′ ′ l_i'' li′′:第 i i i个点的横向偏差的2阶导数, 代表横向的加速度
5.5.2 目标函数
目标函数定义如下:
m i n c o s t = w l ∑ i = 1 n ( l i − r i ) 2 + w l ′ ∑ i = 1 n l i ′ 2 + w l ′ ′ ∑ i = 1 n l i ′ ′ 2 + w l ′ ′ ′ ∑ i = 1 n − 1 l i → i + 1 ′ ′ ′ 2 \begin{aligned} min \ \ cost=w_l \sum_{i=1}^{n} (l_i-r_i)^2+w_{l^{\prime}} \sum_{i=1}^{n} l_i^{\prime 2}+ w_{l^{\prime \prime}} \sum_{i=1}^{n} l_i^{\prime \prime 2}+w_{l^{\prime \prime \prime}} \sum_{i=1}^{n-1} l_{i \rightarrow i+1}^{\prime \prime \prime}{ }^2 \end{aligned} min cost=wli=1∑n(li−ri)2+wl′i=1∑nli′2+wl′′i=1∑nli′′2+wl′′′i=1∑n−1li→i+1′′′2
- r i r_i ri:代表第i个点的引导点的横向坐标
- ( l i − r i ) 2 (l_i-r_i)^2 (li−ri)2:代表偏离引导线的惩罚
- l i ′ 2 , l i ′ ′ 2 l_i'^2,l_i''^2 li′2,li′′2:代表横向速度和加速度的惩罚
- l i ′ ′ ′ l_i''' li′′′:横向的3阶导数(jerk), 只计算粗糙值:二阶导数插值得到. l i ′ ′ ′ = l i + 1 ′ ′ − l i ′ ′ Δ s l_i'''=\frac{l_{i+1}''-l_{i}''}{\Delta s} li′′′=Δsli+1′′−li′′
- w l , w l ′ , w l ′ ′ , w l ′ ′ ′ w_l,w_l',w_l'',w_l''' wl,wl′,wl′′,wl′′′:常数, 不同cost的权重
5.5.3 约束条件
5.5.3.1 连接约束
我们决策变量只有 l i , l i ′ , l i ′ ′ l_i,l_i',l_i'' li,li′,li′′, 那么如何保证点与点之间的连接是平滑的呢?
可以利用简单的积分来约束 l i , l i ′ , l i ′ ′ l_i,l_i',l_i'' li,li′,li′′ 和 l i + 1 , l i + 1 ′ , l i + 1 ′ ′ l_{i+1},l_{i+1}',l_{i+1}'' li+1,li+1′,li+1′′的关系:
l i + 1 ′ ′ = l i ′ ′ + ∫ 0 Δ s l i → i + 1 ′ ′ ′ d s = l i ′ ′ + l i → i + 1 ′ ′ ′ ∗ Δ s l i + 1 ′ = l i ′ + ∫ 0 Δ s l ′ ′ ( s ) d s = l i ′ + l i ′ ′ ∗ Δ s + 1 2 ∗ l i → i + 1 ′ ′ ′ ∗ Δ s 2 l i + 1 = l i + ∫ 0 Δ s l ′ ( s ) d s = l i + l i ′ ∗ Δ s + 1 2 ∗ l i ′ ′ ∗ Δ s 2 + 1 6 ∗ l i → i + 1 ′ ′ ′ ∗ Δ s 3 \begin{aligned}l_{i+1}^{\prime \prime} & =l_i^{\prime \prime}+\int_0^{\Delta s} l_{i \rightarrow i+1}^{\prime \prime \prime} d s=l_i^{\prime \prime}+l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s \\l_{i+1}^{\prime} & =l_i^{\prime}+\int_0^{\Delta s} l^{\prime \prime}(s) d s=l_i^{\prime}+l_i^{\prime \prime} * \Delta s+\frac{1}{2} * l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^2 \\l_{i+1} & =l_i+\int_0^{\Delta s} l^{\prime}(s) d s \\& =l_i+l_i^{\prime} * \Delta s+\frac{1}{2} * l_i^{\prime \prime} * \Delta s^2+\frac{1}{6} * l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^3\end{aligned} li+1′′li+1′li+1=li′′+∫0Δsli→i+1′′′ds=li′′+li→i+1′′′∗Δs=li′+∫0Δsl′′(s)ds=li′+li′′∗Δs+21∗li→i+1′′′∗Δs2=li+∫0Δsl′(s)ds=li+li′∗Δs+21∗li′′∗Δs2+61∗li→i+1′′′∗Δs3
本质上, 上面的积分就是泰勒展开式的过程:
f ( x ) = f ( a ) + f ′ ( a ) ( x − a ) + f ′ ′ ( a ) 2 ! ( x − a ) 2 + f ′ ′ ′ ( a ) 3 ! ( x − a ) 3 + ⋯ + f ( n ) ( a ) n ! ( x − a ) n + ⋯ f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \frac{f'''(a)}{3!}(x-a)^3 + \cdots + \frac{f^{(n)}(a)}{n!}(x-a)^n + \cdots f(x)=f(a)+f′(a)(x−a)+2!f′′(a)(x−a)2+3!f′′′(a)(x−a)3+⋯+n!f(n)(a)(x−a)n+⋯
泰勒展开式是一种重要的函数近似方法, 精度取决于泰勒展开的最高阶数. 如果我们用泰勒展开式近似点和点之间的曲线, 舍弃掉泰勒展开式的误差项, 可以得到3阶泰勒展开:
l i + 1 = l i + l i ′ ∗ Δ s + 1 2 l i ′ ′ ∗ Δ s 2 + 1 6 l i → i + 1 ′ ′ ′ ∗ Δ s 3 l_{i+1}=l_i+l_i^{\prime} * \Delta s+\frac{1}{2} l_i^{\prime \prime} * \Delta s^2+\frac{1}{6} l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^3 li+1=li+li′∗Δs+21li′′∗Δs2+61li→i+1′′′∗Δs3
5.5.3.2 边界约束
边界约束较为简单, 主要是
l l o w e r ≤ l i ≤ l u p p e r l m i n ′ ≤ l i ′ ≤ l m a x ′ l m i n ′ ′ ≤ l i ′ ′ ≤ l m a x ′ ′ \begin{aligned} l_{lower} \leq &l_i \leq l_{upper}\\ l_{min}' \leq &l_i' \leq l_{max}'\\ l_{min}'' \leq &l_i'' \leq l_{max}'' \end{aligned} llower≤lmin′≤lmin′′≤li≤lupperli′≤lmax′li′′≤lmax′′
5.5.4 完整问题
最终, 我们得到了完整的PiecewiseJerkPath优化问题, 显然这是一个QP优化问题.
m i n w l ∑ i = 1 n ( l i − r i ) 2 + w l ′ ∑ i = 1 n l i ′ 2 + w l ′ ′ ∑ i = 1 n l i ′ ′ 2 + w l ′ ′ ′ ∑ i = 1 n − 1 l i → i + 1 ′ ′ ′ 2 s u b j e c t t o : l l o w e r ≤ l i ≤ l u p p e r l m i n ′ ≤ l i ′ ≤ l m a x ′ l m i n ′ ′ ≤ l i ′ ′ ≤ l m a x ′ ′ l i + 1 ′ = l i ′ + l i ′ ′ ∗ Δ s + 1 2 ∗ l i → i + 1 ′ ′ ′ ∗ Δ s 2 l i + 1 = l i + l i ′ ∗ Δ s + 1 2 ∗ l i ′ ′ ∗ Δ s 2 + 1 6 ∗ l i → i + 1 ′ ′ ′ ∗ Δ s 3 \begin{aligned} min \ \ &w_l \sum_{i=1}^{n} (l_i-r_i)^2+w_{l^{\prime}} \sum_{i=1}^{n} l_i^{\prime 2}+ w_{l^{\prime \prime}} \sum_{i=1}^{n} l_i^{\prime \prime 2}+w_{l^{\prime \prime \prime}} \sum_{i=1}^{n-1} l_{i \rightarrow i+1}^{\prime \prime \prime}{ }^2 \\ subject & \ to: \\ &l_{lower} \leq l_i \leq l_{upper}\\ &l_{min}' \leq l_i' \leq l_{max}'\\ &l_{min}'' \leq l_i'' \leq l_{max}''\\ l_{i+1}^{\prime} & =l_i^{\prime}+l_i^{\prime \prime} * \Delta s+\frac{1}{2} * l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^2 \\l_{i+1} & =l_i+l_i^{\prime} * \Delta s+\frac{1}{2} * l_i^{\prime \prime} * \Delta s^2+\frac{1}{6} * l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^3 \end{aligned} min subjectli+1′li+1wli=1∑n(li−ri)2+wl′i=1∑nli′2+wl′′i=1∑nli′′2+wl′′′i=1∑n−1li→i+1′′′2 to:llower≤li≤lupperlmin′≤li′≤lmax′lmin′′≤li′′≤lmax′′=li′+li′′∗Δs+21∗li→i+1′′′∗Δs2=li+li′∗Δs+21∗li′′∗Δs2+61∗li→i+1′′′∗Δs3
参考链接:
- Zhang, Yajia, et al. “Optimal vehicle path planning using quadratic optimization for baidu apollo open platform.” 2020 IEEE Intelligent Vehicles Symposium (IV). IEEE, 2020.
🏎️自动驾驶小白说官网:https://www.helloxiaobai.cn