二次规划问题
二次规划问题标准形式:
m i n i m i s e : f ( x ) = 1 2 x T P x + q T x s u b j e c t t o : l ≤ A x ≤ u \begin{aligned} &minimise:\ f(x)=\frac{1}{2}x^TPx+q^Tx\\ &subject\ to: \ l\le Ax \le u\\ \end{aligned} minimise: f(x)=21xTPx+qTxsubject to: l≤Ax≤u
Apollo使用osqp进行二次规划问题的求解。第一行为代价函数,第二行为约束条件。二次优化的目标就是在满足约束条件的基础上,找到变量的最有估值使得代价函数的值最小。二次规划只在代价函数为凸函数的时候能够收敛到最优解,因此这需要P矩阵为半正定矩阵,这是非常重要的一个条件。这反映在Apollo中的规划算法则为需要进行求解的空间为凸空间,这样二次规划才能收敛到一条最优路径。
定义优化变量
路径规划一般是在Frenet坐标系中进行的。s为沿着参考线的方向,l为垂直于坐标系的方向。如图所示,将障碍物分别投影到SL坐标系上。在s方向上以间隔 △ s \triangle s △s作为一个间隔点,从 s 0 , s 1 , s 2 s_0,s_1,s_2 s0,s1,s2一直到 s n − 1 s_{n-1} sn−1,构成了规划的路径。选取每个间隔点的 l , l ˙ , l ¨ l,\dot{l},\ddot{l} l,l˙,l¨作为优化变量:
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} l_0\\ \dot{l}_0\\ \ddot{l}_0\\ \end{aligned}\stackrel{\triangle s}{\longrightarrow}\begin{aligned} l_1\\ \dot{l}_1\\ \ddot{l}_1\\ \end{aligned}\stackrel{\triangle s}{\longrightarrow}\begin{aligned} l_2\\ \dot{l}_2\\ \ddot{l}_2\\ \end{aligned}\ ......\ \begin{aligned} l_{n-2}\\ \dot{l}_{n-2}\\ \ddot{l}_{n-2}\\ \end{aligned}\stackrel{\triangle s}{\longrightarrow}\begin{aligned} l_{n-1}\\ \dot{l}_{n-1}\\ \ddot{l}_{n-1}\\ \end{aligned} l0l˙0l¨0⟶△sl1l˙1l¨1⟶△sl2l˙2l¨2 ...... ln−2l˙n−2l¨n−2⟶△sln−1l˙n−1l¨n−1
如此,就构成了优化变量x:
x = { l 0 , l 1 , . . . , l n − 1 , l ˙ 0 , l ˙ 1 , . . . , l ˙ n − 1 , l ¨ 0 , l ¨ 1 , . . . , l ¨ n − 1 } x = \{l_0, l_1, ..., l_{n-1},\dot{l}_0, \dot{l}_1, ..., \dot{l}_{n-1},\ddot{l}_0, \ddot{l}_1, ..., \ddot{l}_{n-1}\} x={l0,l1,...,ln−1,l˙0,l˙1,...,l˙n−1,l¨0,l¨1,...,l¨n−1}
定义目标函数
对于目标函数的设计,我们需要明确以下目标:
- 确保安全、礼貌的驾驶,尽可能贴近车道中心线行驶: ∣ l i ∣ ↓ |l_i|\downarrow ∣li∣↓
- 确保舒适的体感,尽可能降低横向速度/加速度/加加速度: ∣ l i ∣ ↓ , ∣ l ˙ i ∣ ↓ , ∣ l ¨ i ∣ ↓ |l_i|\downarrow,|\dot{l}_i|\downarrow,|\ddot{l}_i|\downarrow ∣li∣↓,∣l˙i∣↓,∣l¨i∣↓
- 确保终点接近参考终点(这个往往用在靠边停车场景之): l e n d = l r e f l_{end}=l_{ref} lend=lref
最后会得到以下目标函数:
m i n f = ∑ i = 0 n − 1 ( w r e f ( l i − l i _ r e f ) 2 + w l l i 2 + w d l l ˙ i 2 + w d d l l ¨ i 2 + w d d d l l . . . i 2 + w e n d − l ( l n − 1 − l e n d ) 2 + w e n d − d l ( l ˙ n − 1 − l ˙ e n d ) 2 + w e n d − d d l ( l ¨ n − 1 − l ¨ e n d ) 2 \begin{aligned} min\ f&=\sum_{i=0}^{n-1}(w_{ref}(l_i-l_{i\_ref})^2 + w_l l_i^2 + w_{dl}\dot{l}_i^2 + w_{ddl}\ddot{l}_i^2 +{w}_{dddl}\stackrel{...}{l}_i^2 \\ &+w_{end-l}(l_{n-1}-l_{end})^2 + w_{end-dl}(\dot{l}_{n-1}-\dot{l}_{end})^2 + w_{end-ddl}(\ddot{l}_{n-1}-\ddot{l}_{end})^2\\ \end{aligned} min f=i=0∑n−1(wref(li−li_ref)2+wlli2+wdll˙i2+wddll¨i2+wdddll...i2+wend−l(ln−1−lend)2+wend−dl(l˙n−1−l˙end)2+wend−ddl(l¨n−1−l¨end)2
其中: l . . . i = l ¨ i + 1 − l ¨ i △ s = ( l ¨ i + 1 ) 2 + ( l ¨ i ) 2 − 2 l ¨ i + 1 l ¨ i △ s 2 \stackrel{...}{l}_i=\frac{\ddot{l}_{i+1} - \ddot{l}_{i}}{\triangle s} = \frac{(\ddot{l}_{i+1})^2 + (\ddot{l}_{i})^2-2\ddot{l}_{i+1}\ddot{l}_{i}}{\triangle s^2} l...i=△sl¨i+1−l¨i=△s2(l¨i+1)2+(l¨i)2−2l¨i+1l¨i、 w l , w d l , w d d l , w d d d l 是对优化变量的权重 w_{l},w_{dl},w_{ddl},w_{dddl}是对优化变量的权重 wl,wdl,wddl,wdddl是对优化变量的权重、 w e n d − l , w e n d − d l , w e n d − d d l 是对偏移终点的权重 w_{end-l},w_{end-dl},w_{end-ddl}是对偏移终点的权重 wend−l,wend−dl,wend−ddl是对偏移终点的权重。
为了方便后续矩阵编写,将目标函数按阶次整理如下:
m i n f = ∑ i = 0 n − 1 w l l i + ∑ i = 0 n − 1 w r e f ( l i − l i _ r e f ) 2 + w l e n d ( l n − 1 − l e n d ) + ∑ i = 0 n − 1 w l ˙ l ˙ i + w l ˙ e n d ( l ˙ n − 1 − l ˙ e n d ) + ∑ i = 0 n − 1 w l ¨ l ¨ i + w l ¨ e n d ( d l ˙ n − 1 − l ¨ e n d ) + ∑ i = 0 n − 2 w l . . . i l . . . i 2 \begin{aligned} min\ f&=\sum_{i=0}^{n-1}w_l l_i + \sum_{i=0}^{n-1}w_{ref}(l_i-l_{i\_ref})^2 + w_{l_{end}}({l_{n-1} - l_{end}}) \\ &+\sum_{i=0}^{n-1}w_{\dot{l}}\dot{l}_i + w_{\dot{l}_{end}}({\dot{l}_{n-1} - \dot{l}_{end}})\\ &+\sum_{i=0}^{n-1}w_{\ddot{l}}\ddot{l}_i + w_{\ddot{l}_{end}}({d\dot{l}_{n-1} - \ddot{l}_{end}})\\ &+ \sum_{i=0}^{n-2}{w}_{\stackrel{...}{l}_i}\stackrel{...}{l}_i^2 \\ \end{aligned} min f=i=0∑n−1wlli+i=0∑n−1wref(li−li_ref)2+wlend(ln−1−lend)+i=0∑n−1wl˙l˙i+wl˙end(l˙n−1−l˙end)+i=0∑n−1wl¨l¨i+wl¨end(dl˙n−1−l¨end)+i=0∑n−2wl...il...i2
上式中 ∑ i = 0 n − 2 l . . . i 2 \sum_{i=0}^{n-2}\stackrel{...}{l}_i^2 ∑i=0n−2l...i2展开为:
∑ i = 0 n − 2 l . . . i 2 = ( l ¨ 0 ) 2 △ s 2 + 2 ∑ i = 0 n − 2 ( l ¨ i ) 2 △ s 2 + ( l ¨ n − 1 ) 2 △ s 2 − 2 ∑ i = 0 n − 2 l ¨ i l ¨ i + 1 △ s 2 \sum_{i=0}^{n-2}\stackrel{...}{l}_i^2=\frac{(\ddot{l}_{0})^2}{\triangle s^2}+2\sum_{i=0}^{n-2}\frac{(\ddot{l}_{i})^2}{\triangle s^2}+\frac{(\ddot{l}_{n-1})^2}{\triangle s^2} - 2\sum_{i=0}^{n-2}\frac{\ddot{l}_{i}\ddot{l}_{i+1}}{\triangle s^2} i=0∑n−2l...i2=△s2(l¨0)2+2i=0∑n−2△s2(l¨i)2+△s2(l¨n−1)2−2i=0∑n−2△s2l¨il¨i+1
进一步对目标函数展开合并,且移除常量项可得:
m i n f = ∑ i = 0 n − 1 w l l i 2 + ∑ i = 0 n − 1 w r e f ( l i − l i _ r e f ) 2 + w l e n d ( l n − 1 − l e n d ) 2 + ∑ i = 0 n − 1 w l ˙ l ˙ i 2 + w l ˙ e n d ( l ˙ n − 1 − l ˙ e n d ) + ∑ i = 0 n − 1 w l ¨ l ¨ i + w l ¨ e n d ( l ¨ n − 1 − l ¨ e n d ) + w l . . . [ ( l ¨ 0 ) 2 △ s 2 + 2 ∑ i = 0 n − 2 ( l ¨ i ) 2 △ s 2 + ( l ¨ n − 1 ) 2 △ s 2 − 2 ∑ i = 0 n − 2 l ¨ i l ¨ i + 1 △ s 2 ] \begin{aligned} min\ f&=\sum_{i=0}^{n-1}w_l l^2_i + \sum_{i=0}^{n-1}w_{ref}(l_i-l_{i\_ref})^2 + w_{l_{end}}({l_{n-1} - l_{end}})^2 \\ &+\sum_{i=0}^{n-1}w_{\dot{l}}\dot{l}^2_i + w_{\dot{l}_{end}}({\dot{l}_{n-1} - \dot{l}_{end}})\\ &+\sum_{i=0}^{n-1}w_{\ddot{l}}\ddot{l}_i + w_{\ddot{l}_{end}}({\ddot{l}_{n-1} - \ddot{l}_{end}})\\ &+ w_{\stackrel{...}{l}}[\frac{(\ddot{l}_{0})^2}{\triangle s^2}+2\sum_{i=0}^{n-2}\frac{(\ddot{l}_{i})^2}{\triangle s^2}+\frac{(\ddot{l}_{n-1})^2}{\triangle s^2} - 2\sum_{i=0}^{n-2}\frac{\ddot{l}_{i}\ddot{l}_{i+1}}{\triangle s^2}]\\ \end{aligned} min f=i=0∑n−1wlli2+i=0∑n−1wref(li−li_ref)2+wlend(ln−1−lend)2+i=0∑n−1wl˙l˙i2+wl˙end(l˙n−1−l˙end)+i=0∑n−1wl¨l¨i+wl¨end(l¨n−1−l¨end)+wl...[△s2(l¨0)2+2i=0∑n−2△s2(l¨i)2+△s2(l¨n−1)2−2i=0∑n−2△s2l¨il¨i+1]
要满足的约束条件
主车必须在道路边界内,同时不能和障碍物有碰撞:
l i ∈ ( l m i n i , l m a x i ) l_i\in(l^i_{min},l^i_{max}) li∈(lmini,lmaxi)根据当前状态,主车的横向速度/加速度/加加速度有特定运动学限制:
l ˙ i ∈ ( l ˙ m i n i , l ˙ m a x i ) , l ¨ i ∈ ( l ¨ m i n i , l ¨ m a x i ) , l . . . i ∈ ( l . . . m i n i , l . . . m a x i ) \dot{l}_i\in(\dot{l}^i_{min},\dot{l}^i_{max}), \ddot{l}_i\in(\ddot{l}^i_{min},\ddot{l}^i_{max}), \stackrel{...}{l}_i\in(\stackrel{...}{l}^i_{min},\stackrel{...}{l}^i_{max}) l˙i∈(l˙mini,l˙maxi),l¨i∈(l¨mini,l¨maxi),l...i∈(l...mini,l...maxi)连续性约束:
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 ¨ i → i + 1 d s = l ˙ i + l ¨ i △ s + 1 2 l . . . i → i + 1 △ s 2 l i + 1 = l i + ∫ 0 △ s l ˙ i → i + 1 d s = l i + l ˙ i △ s + 1 2 l ¨ i △ s 2 + 1 6 l . . . i → i + 1 △ s 3 \begin{aligned} \ddot{l}_{i+1} &= \ddot{l}_{i} + \int_{0}^{\triangle s} \stackrel{...}{l}_{i\rightarrow i+1} ds = \ddot{l}_{i} + \stackrel{...}{l}_{i\rightarrow i+1} \triangle s\\ \dot{l}_{i+1} &= \dot{l}_{i} + \int_{0}^{\triangle s} \ddot{l}_{i\rightarrow i+1} ds = \dot{l}_{i} + \ddot{l}_{i}\triangle s + \frac{1}{2}\stackrel{...}{l}_{i\rightarrow i+1} \triangle s^2\\ {l}_{i+1} &= {l}_{i} + \int_{0}^{\triangle s} \dot{l}_{i\rightarrow i+1} ds = l_i + \dot{l}_{i}\triangle s + \frac{1}{2}\ddot{l}_{i} \triangle s^2 + \frac{1}{6} \stackrel{...}{l}_{i\rightarrow i+1} \triangle s^3\\ \end{aligned} l¨i+1l˙i+1li+1=l¨i+∫0△sl...i→i+1ds=l¨i+l...i→i+1△s=l˙i+∫0△sl¨i→i+1ds=l˙i+l¨i△s+21l...i→i+1△s2=li+∫0△sl˙i→i+1ds=li+l˙i△s+21l¨i△s2+61l...i→i+1△s3起点约束:
l 0 = l i n i t , l ˙ 0 = l ˙ i n i t , l ¨ 0 = l ¨ i n i t l_0=l_{init}, \dot{l}_0=\dot{l}_{init}, \ddot{l}_0=\ddot{l}_{init} l0=linit,l˙0=l˙init,l¨0=l¨init