安全舒適兩不誤:探討優化算法在規劃控制中的應用

導讀:自動駕駛技術研發對於“安全第一”的追求是毋庸置疑的,但是這中間可能就忽視了舒適性。

因此,今天我想給大家分享的是,自動駕駛研發如何在兼顧安全性的同時,保證乘客體驗的舒適。往細一點說,就是如何通過優化算法在規劃和控制模塊中找到安全性和舒適性的平衡點。

01 安全性和舒適性的定義

安全性的定義其實比較好理解,一般包括不發生碰撞和遵守交通規則(交通燈、停車標誌、限速)。

而舒適性則受下面兩個指標影響:

  • Jerk,即加速度的變化率。當加速度的變化越小,乘客體感越舒適。
  • Curvature rate,即曲率變化率。當曲率的變化率越小,乘客體感越舒適。

在二者的定義基礎上,“安全舒適兩不誤”也就意味着在遵守交規且不發生碰撞的基礎上,控制好行駛時的加加速度和行進路線的曲率變化率

02 規劃和控制的定義

規劃(Planning)和控制(Control)是自動駕駛最底層的部分,決定了車在路上如何行使

一般來說,規劃所需要的輸入(Input)信息包括:地圖信息,起點終點,障礙物預判,交通標誌以及感知信息,即周圍的物體位置、大小、速度、方向等。

藉助這些輸入信息,規劃模塊可以輸出(Output)一段時間的行駛軌跡(Trajectory),即某一個時間無人車行駛到到某個位置的函數(Xt~Yt)。

而規劃輸出的軌跡正好是控制(Control)模塊的兩項輸入之一,另一項輸入是車輛自身的狀態,包括車的位置、heading(行駛朝向)、速度、加速度、角速度等信息。

而控制模塊會輸出以下兩類信息:

  • Brake/throttle pedal,剎車和油門
  • Steering angle,轉向角

簡單來說,控制的目的是讓自動駕駛車能夠精準實現規劃模塊給出的行駛指令。

上面就是規劃和控制的簡單定義。當然,這裏我也留下一個思考(上圖標灰的地方):對於規劃模塊而言,是否必須知道車輛的實時位置信息?

答案是,有無都是可以。規劃和控制模塊都能有相對應的做法和方案。

03 規劃上,如何實現安全性和舒適性?

安全性

前面已經說到,規劃(Planning)爲的是輸出一個trajectory(時間到位置的函數):X(t)=(x(t),y(t))T,而這個行駛路徑需要同時保證安全性和舒適性。

實際上,規劃(Planning)是一個優化問題。對於一個優化問題來說,我們需要通過設計 constraints (約束條件) 來保證行駛安全。

上圖裏列舉了一些最基本的約束條件。

首先,規劃模塊不能忽略車的物理特性,比如方向盤的最大角度,對應的就是曲率的最大值、最小值等。

其次,明確車輛剎車和油門的極限,這對應的就是加速度的極限。

第三,當自動駕駛車在道路上行駛時,爲了不出現壓線的情況,車到左右boundary(車道線)的距離也需要納入規劃中。

第四,自動駕駛肯定不希望車輛發生任何碰撞。我們可以通過取車軸上一系列等半徑的圓來覆蓋車身,並採用若干個凸的多邊形表示車身周圍的物體,那麼,當車軸上所有的圓心到凸多邊形的距離大於半徑時,自動駕駛車就不會與凸多邊形(障礙物)發生碰撞。

舒適性

介紹完安全性,下面介紹規劃模塊是如何實現駕駛的舒適性。前面提到過,舒適性越高,意味着加速度變化率越小,以及曲率的變化率越小。那麼對應的cost function(代價函數)就比較好設定了,即加速度+加速度變化率+曲率+曲率的變化率。

雖然整個模型設計起來比較簡單,但是constraints(約束條件)和cost function(代價函數)的求解卻比較複雜(如上圖),尤其是系統實時求解k(t)和k(t)’的耗時會比較長,解起來也比較難。這時候我們可以換個思路,把問題轉換下。

前面也提過,規劃問題其實是爲了解出一個時間到位置的函數,而L4級自動駕駛車一般會行駛在結構化的道路上,這也意味着規劃模塊具備地圖的信息,那麼問題就可以進行轉化——把(x,y)座標系轉化爲下圖的(l,s)座標系。

s沿着道路中線(reference line)的方向,l則是垂直於道路中線的方向。於是,問題就轉化成了求解s(t)和l(s)的問題,我們希望得出,自動駕駛車在t時刻應該走到s上的哪個位置;以及走在這個位置時,該車距離s的左右偏離是多大。

最終,一個複雜問題就轉化成三個子優化問題:一個橫向優化、縱向優化以及中線問題(s方向是車輛的縱向規劃,l方向爲橫向規劃)

接下來我想仔細說一說這三個子問題。

子問題一:橫向優化

上圖中右側展示了一條路,中間的線是reference line(參考線),其中“0”點就是車當前所在的位置,“-1”,“-2”是車之前的座標位置,接下來的“1,2,3,4”……就是規劃模塊的輸出結果,也就是車未來的位置。

這條路的左右兩邊是boundary(道路邊界/車道線),圖中的半圓對應着路面上的障礙物。橫向規劃求解的是正是每一點的l座標,也就是到中心線的偏離量。

對於橫向優化問題,我們同樣可以從安全性和舒適性兩方面考慮。

安全性方面,取決於橫向優化問題的constraints(約束條件),一般要求l不能太小,也不能太大,即不能壓左邊線,也不能壓右邊線,同時不能碰到左右兩邊的障礙物。

舒適性方面,我們則設計成cost function(代價函數),一般要求路線的曲率越小越好,曲率變化率越小越好。如果我們的參考線是一條完美的參考線,那麼曲率就可以用一個相對曲率來表示。

對於一個優化問題來說,cost function(代價函數)變成了標準的二次函數,同時,所有的constraints(約束條件)都是一次的。

那麼,這就成了一個標準的QP(Quadratic programming,二次規劃)問題,不僅如此,這還是一個box constraint(閉箱約束)的QP問題,我們就能夠非常快速求出優化的結果。

子問題二:縱向優化

縱向優化求解的則是t到s的函數。

對於縱向規劃的來說,安全性要求我們保證車輛不能發生前後方向上的碰撞。以上圖右側爲例,此時有個行人正在過馬路,規劃模塊會將行人的行爲可以轉換成(t,s)座標,展示在座標圖裏(上圖)是一個平行四邊形。

此時,面對這個行人,如果自動駕駛車選擇讓路,縱向規劃解出來的曲線就應該在平行四邊形的下方;如果選擇超過這個行人,那麼這條曲線應該從上面繞過去。

在縱向規劃上,舒適性體現在加速度越小越好,以及加速度的導數越小越好。可見,縱向和橫向規劃涉及的constraints(約束條件)和 cost function(代價函數)都非常相似。

子問題三:中線生成

同樣,中線的生成也是一個優化問題,自然也會涉及到constraints(約束條件)和cost function(代價函數)。

中線設定的約束條件首先是不能壓邊界(車道線),同時要符合曲率的限制。對於cost function(代價函數)來說,希望達到的目標是中線的曲率越小越好,曲率的變化率越小越好。這樣來看,中線問題也是求解k(t)和k(t)’的函數問題。

問題似乎又繞回去了,爲了舒適性,我們還是需要求解非常複雜的方程嗎?

並不是。由於中線是可以離線生成的,所以不需要在線計算,這些問題能放在服務器中進行並行的計算。

這裏,我想增加一個值得思考的問題。前面提到,生成中線的前提是具備道路的信息,即道路左右的boundary(車道線邊界)。然而當自動駕駛車處在一個路口內,路面並沒有車道線,這種環境下應該如何處理參考線呢?歡迎大家留言探討。

04 控制上,如何實現安全性和舒適性

畢竟自動駕駛控制的是一輛車,而不是一個點,所以在詳細介紹自動駕駛控制模塊之前,我想先介紹一個模型。

Bicycle model (自行車模型)

控制的模型有很多,而且非常複雜,需要考慮車輛的很多因素,包括引擎,變速箱,輪胎,懸架等等。爲了講好這個問題,我先給大家介紹一個最簡單的模型Bicycle model(自行車模型)。

首先,假設自動駕駛車輛的車寬爲0,可以想象成是兩個前輪靠在一起,兩個後輪靠在一起(上圖)。

這個假設就意味着前輪的轉角和轉速都是一致的,當然現實中車輛的四個輪子的轉角和轉速都是不一樣的,所以這個模型只是在做一個最簡單的假設。基於這個假設,當得知前輪轉角轉了δ時,我們也可以通過幾何關係算出後軸的轉彎半徑是多大。

前面把車假設成了“自行車”,下圖展示了它的行駛軌跡,那麼,哪一條是前輪的,哪一條是後輪的?車是往左邊行駛還是右邊行駛?

首先,基於自行車模型的假設,後輪的側向速度爲0,所以後輪永遠都是朝向前輪行駛的,在紅線上畫一條切線,會發現它沒有穿過藍線,所以它不是後輪。在藍線畫一條切線,它穿越了紅線,因此藍線是後輪的軌跡。

車往那邊走呢?我們繼續在藍線上畫一條切線,這條切線和這條紅線還是有兩個交點。實際上,交點和切點的距離就是車的軸距,並且由於軸距是固定的,所以這輛行駛的車就如圖中黑線所示。這個問題的答案是:紅線代表前輪,藍線代表後輪,以及它是向右行駛的。

總結來說,對於只有兩個軸並且通過前輪轉向的車輛,一般可以轉換成Bicycle model(自行車模型)。但在真實路上行駛的往往不只是小汽車,比如還有貨車,而貨車可以分爲兩個部分,車頭與後掛。

對於貨車的控制,如果還是採用自行車模型進行假設(上圖),則A1是車頭,A2是掛車,F1爲車頭的前軸,R2認爲是掛車的後軸。在這個模型中,我們認爲掛車的前軸和車頭的後軸是同一個點R1=F2,車頭的軸距是L1,掛車的軸距是L2,當得知車頭的前軸轉了ϕ角度時,控制模塊可以得到車頭後軸的轉彎半徑。

那麼,掛車的後軸軌跡會呈現出一條什麼樣的曲線?這個問題也歡迎大家留言討論,畢竟現實生活中,路面上不止有一種車,自動駕駛從業者可以多思考下,各類車型的運動行爲應該是什麼樣的。

橫向控制(Lateral Control)

上圖中紫色曲線是Planning(規劃模塊)輸出的目標軌跡,圖中的藍點是自動駕駛車此刻的位置,藍色的箭頭是車現在的行駛方向。

可以看到,自動駕駛車輛與規劃軌跡存在一個側向的偏差,因此橫向控制的目標就是使車輛實際軌跡和目標軌跡的側向偏差越小越好,同時車在某個時刻的heading(朝向)與規劃軌跡曲線對應點朝向的誤差越小越好。

預瞄算法就是橫向規劃中常用的一種:首先會選定一個預瞄點,橫向控制的目標就是到預瞄點時,側向誤差和heading(朝向)的與目標軌跡的誤差越小越好。這裏的控制變量就是剛纔說的曲率,所以橫向控制又轉化爲了一個優化問題。

縱向控制(Longitudinal Control)

同樣的,在縱向控制上,我們也可以選一個預瞄點,希望達到的目標是自動駕駛車速(v)與規劃軌跡的誤差越小越好,位移(s)與規劃軌跡的誤差越小越好,於是縱向控制也可轉爲優化問題。

總結來看,不管是對於Planning(規劃)還是Control(控制),最終都可以轉化爲優化問題。

自動駕駛規劃模塊對舒適性和安全性的探索,重點就在於設計優化問題中的constraints(約束條件)和cost function(代價函數)。

而控制模塊則在於預瞄點的選擇,控制模塊最終的目標就是自動駕駛車更精準地跟隨規劃軌跡,當預瞄距離越近,控制就越精準,當預瞄距離越遠,控制量更加smooth(平滑),體感可能更加舒適,但誤差可能越大。

最終,我們都能坐上既安全又舒適的自動駕駛車。今天的分享就到這裏,謝謝大家。

作者介紹

孫浩文

Pony.ai | Tech Lead

本文來自 DataFun 社區

原文鏈接

https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247495130&idx=1&sn=3f9d73b7b617fcf7b283c08bc5af424f&chksm=fbd75fb6cca0d6a056f5fa51e9685ef867018578c08fd590f4f6b2d1f97a02b04ac73fd126eb&scene=27#wechat_redirect

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