二次規劃(QP)樣條路徑優化

原文鏈接:https://github.com/ApolloAuto/apollo/tree/master/docs/specs

apollo 代碼代碼文檔,轉載從github
apollo文檔
侵刪

二次規劃(QP)樣條路徑優化

二次規劃(QP)+樣條插值

1. 目標函數

1.1 獲得路徑長度

路徑定義在station-lateral座標系中。s的變化區間爲從車輛當前位置點到默認路徑的長度。

1.2 獲得樣條段

將路徑劃分爲n段,每段路徑用一個多項式來表示。

1.3 定義樣條段函數

每個樣條段 i 都有沿着參考線的累加距離did_i。每段的路徑默認用5介多項式表示。
l=fi(s)=ai0+ai1s+ai2s2+ai3s3+ai4s4+ai5s5(0sdi)l = f_i(s) = a_{i0} + a_{i1} \cdot s + a_{i2} \cdot s^2 + a_{i3} \cdot s^3 + a_{i4} \cdot s^4 + a_{i5} \cdot s^5 (0 \leq s \leq d_{i})

1.4 定義每個樣條段優化目標函數

cost=i=1n(w10di(fi)2(s)ds+w20di(fi)2(s)ds+w30di(fi)2(s)ds)cost = \sum_{i=1}^{n} \Big( w_1 \cdot \int\limits_{0}^{d_i} (f_i')^2(s) ds + w_2 \cdot \int\limits_{0}^{d_i} (f_i'')^2(s) ds + w_3 \cdot \int\limits_{0}^{d_i} (f_i^{\prime\prime\prime})^2(s) ds \Big)

1.5 將開銷(cost)函數轉換爲QP公式

QP公式:

minimize12xTHx+fTxs.t.LBxUBAeqx=beqAxb\begin{aligned} minimize & \frac{1}{2} \cdot x^T \cdot H \cdot x + f^T \cdot x \\ s.t. \qquad & LB \leq x \leq UB \\ & A_{eq}x = b_{eq} \\ & Ax \geq b \end{aligned}

下面是將開銷(cost)函數轉換爲QP公式的例子:

$f_i(s) =
\begin{vmatrix} 1 & s & s^2 & s^3 & s^4 & s^5 \end{vmatrix}
\cdot
\begin{vmatrix} a_{i0} \ a_{i1} \ a_{i2} \ a_{i3} \ a_{i4} \ a_{i5} \end{vmatrix} $


$f_i’(s) =
\begin{vmatrix} 0 & 1 & 2s & 3s^2 & 4s^3 & 5s^4 \end{vmatrix}
\cdot
\begin{vmatrix} a_{i0} \ a_{i1} \ a_{i2} \ a_{i3} \ a_{i4} \ a_{i5} \end{vmatrix} $


fi(s)2=ai0ai1ai2ai3ai4ai5012s3s24s35s4012s3s24s35s4ai0ai1ai2ai3ai4ai5f_i'(s)^2 = \begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} \cdot \begin{vmatrix} 0 \\ 1 \\ 2s \\ 3s^2 \\ 4s^3 \\ 5s^4 \end{vmatrix} \cdot \begin{vmatrix} 0 & 1 & 2s & 3s^2 & 4s^3 & 5s^4 \end{vmatrix} \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix}

然後得到,
0difi(s)2ds0diai0ai1ai2ai3ai4ai5012s3s24s35s4012s3s24s35s4ai0ai1ai2ai3ai4ai5ds \int\limits_{0}^{d_i} f_i'(s)^2 ds = \int\limits_{0}^{d_i} \begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} \cdot \begin{vmatrix} 0 \\ 1 \\ 2s \\ 3s^2 \\ 4s^3 \\ 5s^4 \end{vmatrix} \cdot \begin{vmatrix} 0 & 1 & 2s & 3s^2 & 4s^3 & 5s^4 \end{vmatrix} \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} ds

從聚合函數中提取出常量得到,

0dif(s)2dsai0ai1ai2ai3ai4ai50di012s3s24s35s4012s3s24s35s4dsai0ai1ai2ai3ai4ai5 \int\limits_{0}^{d_i} f'(s)^2 ds = \begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} \cdot \int\limits_{0}^{d_i} \begin{vmatrix} 0 \\ 1 \\ 2s \\ 3s^2 \\ 4s^3 \\ 5s^4 \end{vmatrix} \cdot \begin{vmatrix} 0 & 1 & 2s & 3s^2 & 4s^3 & 5s^4 \end{vmatrix} ds \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix}
ai0ai1ai2ai3ai4ai50di000000012s3s24s35s402s4s26s38s410s503s26s39s412s515s604s38s412s516s620s705s410s515s620s725s8dsai0ai1ai2ai3ai4ai5 =\begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} \cdot \int\limits_{0}^{d_i} \begin{vmatrix} 0 & 0 &0&0&0&0\\ 0 & 1 & 2s & 3s^2 & 4s^3 & 5s^4\\ 0 & 2s & 4s^2 & 6s^3 & 8s^4 & 10s^5\\ 0 & 3s^2 & 6s^3 & 9s^4 & 12s^5&15s^6 \\ 0 & 4s^3 & 8s^4 &12s^5 &16s^6&20s^7 \\ 0 & 5s^4 & 10s^5 & 15s^6 & 20s^7 & 25s^8 \end{vmatrix} ds \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix}

最後得到,

0difi(s)2ds=ai0ai1ai2ai3ai4ai50000000didi2di3di4di50di243di364di485di5106di60di364di495di5126di6157di70di485di5126di6167di7208di80di5106di6157di7208di8259di9ai0ai1ai2ai3ai4ai5 \int\limits_{0}^{d_i} f'_i(s)^2 ds =\begin{vmatrix} a_{i0} & a_{i1} & a_{i2} & a_{i3} & a_{i4} & a_{i5} \end{vmatrix} \cdot \begin{vmatrix} 0 & 0 & 0 & 0 &0&0\\ 0 & d_i & d_i^2 & d_i^3 & d_i^4&d_i^5\\ 0& d_i^2 & \frac{4}{3}d_i^3& \frac{6}{4}d_i^4 & \frac{8}{5}d_i^5&\frac{10}{6}d_i^6\\ 0& d_i^3 & \frac{6}{4}d_i^4 & \frac{9}{5}d_i^5 & \frac{12}{6}d_i^6&\frac{15}{7}d_i^7\\ 0& d_i^4 & \frac{8}{5}d_i^5 & \frac{12}{6}d_i^6 & \frac{16}{7}d_i^7&\frac{20}{8}d_i^8\\ 0& d_i^5 & \frac{10}{6}d_i^6 & \frac{15}{7}d_i^7 & \frac{20}{8}d_i^8&\frac{25}{9}d_i^9 \end{vmatrix} \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix}

請注意我們最後得到一個6介的矩陣來表示5介樣條插值的衍生開銷。
應用同樣的推理方法可以得到2介,3介樣條插值的衍生開銷。

2 約束條件

2.1 初始點約束

假設第一個點爲 (s0s_0, l0l_0), (s0s_0, l0l'_0) and (s0s_0, l0l''_0),其中l0l_0 , l0l'_0 and l0l''_0表示橫向的偏移,並且規劃路徑的起始點的第一,第二個點的衍生開銷可以從fi(s)f_i(s), fi(s)f'_i(s), fi(s)f_i(s)''計算得到。

將上述約束轉換爲QP約束等式,使用等式:

$A_{eq}x = b_{eq} $

下面是轉換的具體步驟:

fi(s0)=1s0s02s03s04s05ai0ai1ai2ai3ai4ai5=l0 f_i(s_0) = \begin{vmatrix} 1 & s_0 & s_0^2 & s_0^3 & s_0^4&s_0^5 \end{vmatrix} \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5}\end{vmatrix} = l_0

fi(s0)=012s03s024s035s04ai0ai1ai2ai3ai4ai5=l0f'_i(s_0) = \begin{vmatrix} 0& 1 & 2s_0 & 3s_0^2 & 4s_0^3 &5 s_0^4 \end{vmatrix} \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} = l'_0


fi(s0)=0023×2s04×3s025×4s03ai0ai1ai2ai3ai4ai5=l0f''_i(s_0) = \begin{vmatrix} 0&0& 2 & 3\times2s_0 & 4\times3s_0^2 & 5\times4s_0^3 \end{vmatrix} \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} = l''_0
其中,i是包含s0s_0的樣條段的索引值。

2.2 終點約束

和起始點相同,終點(se,le)(s_e, l_e) 也應當按照起始點的計算方法生成約束條件。

將起始點和終點組合在一起,得出約束等式爲:

1s0s02s03s04s05012s03s024s035s040023×2s04×3s025×4s031sese2se3se4se5012se3se24se35se40023×2se4×3se25×4se3ai0ai1ai2ai3ai4ai5=l0l0l0lelele \begin{vmatrix} 1 & s_0 & s_0^2 & s_0^3 & s_0^4&s_0^5 \\ 0&1 & 2s_0 & 3s_0^2 & 4s_0^3 & 5s_0^4 \\ 0& 0&2 & 3\times2s_0 & 4\times3s_0^2 & 5\times4s_0^3 \\ 1 & s_e & s_e^2 & s_e^3 & s_e^4&s_e^5 \\ 0&1 & 2s_e & 3s_e^2 & 4s_e^3 & 5s_e^4 \\ 0& 0&2 & 3\times2s_e & 4\times3s_e^2 & 5\times4s_e^3 \end{vmatrix} \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} = \begin{vmatrix} l_0\\ l'_0\\ l''_0\\ l_e\\ l'_e\\ l''_e\\ \end{vmatrix}

2.3 平滑節點約束

該約束的目的是使樣條的節點更加平滑。假設兩個段segkseg_ksegk+1seg_{k+1}互相連接,且segkseg_k的累計值s爲sks_k。計算約束的等式爲:

fk(sk)=fk+1(s0)f_k(s_k) = f_{k+1} (s_0)

下面是計算的具體步驟:
1sksk2sk3sk4sk5ak0ak1ak2ak3ak4ak5=1s0s02s03s04s05ak+1,0ak+1,1ak+1,2ak+1,3ak+1,4ak+1,5 \begin{vmatrix} 1 & s_k & s_k^2 & s_k^ 3 & s_k^ 4 & s_k^ 5 \\ \end{vmatrix} \cdot \begin{vmatrix} a_{k0} \\ a_{k1} \\ a_{k2} \\ a_{k3} \\ a_{k4} \\ a_{k5} \end{vmatrix} = \begin{vmatrix} 1 & s_{0} & s_{0}^2 & s_{0}^3 & s_{0}^4&s_{0}^5 \\ \end{vmatrix} \cdot \begin{vmatrix} a_{k+1,0} \\ a_{k+1,1} \\ a_{k+1,2} \\ a_{k+1,3} \\ a_{k+1,4} \\ a_{k+1,5} \end{vmatrix}

然後

1sksk2sk3sk4sk51s0s02s03s04s05ak0ak1ak2ak3ak4ak5ak+1,0ak+1,1ak+1,2ak+1,3ak+1,4ak+1,5=0 \begin{vmatrix} 1 & s_k & s_k^2 & s_k^3 & s_k^4&s_k^5 & -1 & -s_{0} & -s_{0}^2 & -s_{0}^3 & -s_{0}^4&-s_{0}^5\\ \end{vmatrix} \cdot \begin{vmatrix} a_{k0} \\ a_{k1} \\ a_{k2} \\ a_{k3} \\ a_{k4} \\ a_{k5} \\ a_{k+1,0} \\ a_{k+1,1} \\ a_{k+1,2} \\ a_{k+1,3} \\ a_{k+1,4} \\ a_{k+1,5} \end{vmatrix} = 0

s0s_0 = 0代入等式。

同樣地,可以爲下述等式計算約束等式:

fk(sk)=fk+1(s0)fk(sk)=fk+1(s0)fk(sk)=fk+1(s0) f'_k(s_k) = f'_{k+1} (s_0) \\ f''_k(s_k) = f''_{k+1} (s_0) \\ f'''_k(s_k) = f'''_{k+1} (s_0)

2.4 點採樣邊界約束

在路徑上均勻的取樣m個點,檢查這些點上的障礙物邊界。將這些約束轉換爲QP約束不等式,使用不等式:

Axb Ax \geq b

首先基於道路寬度和周圍的障礙物找到點 (sj,lj)(s_j, l_j)的下邊界llb,jl_{lb,j},且j[0,m]j\in[0, m]。計算約束的不等式爲:

1s0s02s03s04s051s1s12s13s14s15..................1smsm2sm3sm4sm5ai0ai1ai2ai3ai4ai5llb,0llb,1...llb,m \begin{vmatrix} 1 & s_0 & s_0^2 & s_0^3 & s_0^4&s_0^5 \\ 1 & s_1 & s_1^2 & s_1^3 & s_1^4&s_1^5 \\ ...&...&...&...&...&... \\ 1 & s_m & s_m^2 & s_m^3 & s_m^4&s_m^5 \\ \end{vmatrix} \cdot \begin{vmatrix}a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} \geq \begin{vmatrix} l_{lb,0}\\ l_{lb,1}\\ ...\\ l_{lb,m}\\ \end{vmatrix}

同樣地,對上邊界lub,jl_{ub,j},計算約束的不等式爲:

1s0s02s03s04s051s1s12s13s14s15..................1smsm2sm3sm4sm5ai0ai1ai2ai3ai4ai51lub,0lub,1...lub,m \begin{vmatrix} -1 & -s_0 & -s_0^2 & -s_0^3 & -s_0^4&-s_0^5 \\ -1 & -s_1 & -s_1^2 & -s_1^3 & -s_1^4&-s_1^5 \\ ...&...-&...&...&...&... \\ -1 & -s_m & -s_m^2 & -s_m^3 & -s_m^4&-s_m^5 \\ \end{vmatrix} \cdot \begin{vmatrix} a_{i0} \\ a_{i1} \\ a_{i2} \\ a_{i3} \\ a_{i4} \\ a_{i5} \end{vmatrix} \geq -1 \cdot \begin{vmatrix} l_{ub,0}\\ l_{ub,1}\\ ...\\ l_{ub,m}\\ \end{vmatrix}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章