天天看點

自動駕駛系統-控制子產品PID初探

    從事自動駕駛相關工作兩年多以來,控制子產品是我比較陌生的,最近這段時間剛好有時間學習一下這個子產品具體的工作原理。

1.簡介

    汽車控制如同每個人駕駛自己車輛一樣,當你熟悉前方道路的時候你如何去控制你的車輛?顯然,如果你不是專業的選手的話,你無法做到一步到位的控制,你需要一邊觀察車輛相對于你想要開的路線的相對偏差,一邊調整你的方向盤的角度和油門踏闆的力度,這種基于環境回報的控制我們稱為 回報控制 。回報控制是現代控制理論的基礎,這是回報控制的一般思路:

自動駕駛系統-控制子產品PID初探

    我們希望我們控制的對象(無人車)能夠按照我們希望(規劃好)的路徑行駛,我們會将環境目前給我們的回報(我們目前的位置)和參考線進行比較,得到我們目前偏離參考線的距離(誤差),基于這個誤差,我們設計一定的算法來産生輸出信号,使得這個誤差不斷的變小,這樣的過程就是回報控制的一般過程。那麼我們如何基于這個誤差來産生控制指令呢?我們最直覺的感覺就是要讓誤差在我們的控制下逐漸變小直到為0:

自動駕駛系統-控制子產品PID初探

    控制是驅使車輛前行的政策。對于汽車而言,最基本的控制輸入為轉向、加速和制動。通常,控制器使用一系列路徑點來接收軌迹。控制器的任務是使用控制輸入讓車輛通過這些路徑點。

首先,控制器必須準确,這意味着它應避免偏離目标軌迹。這對于安全來說,尤為重要。即使路面潮濕或者道路比較陡峭,控制器任需要準确地執行軌迹。其次,控制政策對汽車應該具備可行性。例如,如果你的汽車向北行駛,而你希望它立即向東轉。你可以在遊戲中做到這一點,但在現實中無法實作。最後,需要考慮的是平穩度。舒适的駕駛非常重要。如果車輛行駛得不規律,那乘客永遠不會想再次乘坐它了。要使控制順利進行,驅動必須是連續的。這意味着你應避免突然轉向、加速或制動。

總之,我們的目标是使用可行的控制輸入,最大限度地降低與目标軌迹的偏差、最大限度地提供乘客的舒适度。有三種可用于實作這些目标的控制政策:比例積分微分控制(或PID)、線性二次調節器(或LQR)、模型預測控制(或MPC)。

2.控制流程

    控制器預計有兩種輸入:目标軌迹(規劃子產品的輸出)與車輛狀态(定位子產品、方向盤轉角傳感器、CAN車速)。目标軌迹來自規劃子產品,在每個軌迹點,規劃子產品指定一個位置和參考速度。在每個時間戳都對軌迹進行更新。我們還需要了解車輛狀态,車輛狀态包括:通過本地化子產品來計算的車輛位置、從車輛内部傳感器擷取的資料(如速度、轉向和加速度)。我們使用這兩個輸入來計算目标軌迹與實際行進軌迹之間的偏差。

控制器的輸出是控制輸入(轉向、加速和制動)的值。當偏離目标軌迹時,我們希望采取行動來糾正這種偏差。對于普通汽車,我們使用方向盤控制行駛方向(即轉向)、使用油門加速、使用刹車減速(即制動)。這也是無人駕駛汽車所做的。一旦将這三個值傳遞給車輛,汽車實際上已經開始無人駕駛了。之後将介紹不同的控制算法,如何計算這三個輸出-轉向、加速和制動。

3.PID控制

    PID控制器是根據偏差估計計算值(例如方向盤角度)的算法。偏差是指計劃的行車軌迹與實際的軌迹之間的差異。PID控制器是世界上最簡單和最常見的控制器。PID就是指 比例(proportion)、積分(integral)、導數(derivative),這三項表示我們如何使用我們的誤差來産生控制指令,整個流程如下:

自動駕駛系統-控制子產品PID初探

    首先是根據回報和參考值求出誤差,這裡的誤差根據具體的情況可以是各種度量,比如說控制車輛按照指定的路徑形式,那麼就是車輛目前位置和參考線的距離,控制車輛的速度在設定的值,那麼就是目前速度和設定速度的內插補點,求出誤差以後,再根據誤差求比例,積分和微分三項,其中 Kp , Ki , 和 Kd 是三項的系數,它們決定着這三項對最後輸出的影響的比重。将 P,I,D三項求和作為最後的輸出信号。我們分别讨論這三項的意義。

P控制

考慮一個簡單的情況,假設我們希望無人車按照圖中綠線行駛,但是我們的車在如圖所示的位置:

自動駕駛系統-控制子產品PID初探

那麼我們要轉多少度角呢?如果都按照固定的角度轉(如下圖),那麼車的軌迹将如圖中所示:

自動駕駛系統-控制子產品PID初探

那麼顯然坐這樣的車是不舒服的。一個直覺的解決方法就是使用比例控制。如圖所示,當偏差大的時候,我們偏轉更多的角度,當偏差小的時候,則偏轉小一點。

自動駕駛系統-控制子產品PID初探

那麼這就是P control(比例控制)這裡我們使用 CTE(Cross Track Error) 作為偏差度量 ,CTE就是我們到參考線的距離。那麼這個時候轉角就變成了:steering angle=Kp⋅e(t)

其中的 e(t) 就是在t時刻的CTE,在P控制中系數 Kp會直接影響到實際的控制效果,在合理的數值範圍内 Kp越大控制的效果越好(越快速的回到參考線附近),但是,當本身位置和參考線相距很遠且 Kp系數較大的時候,就會出現車輛失去控制的情況:

自動駕駛系統-控制子產品PID初探

是以說,如果 Kp參數設計合理的話,P控制要比固定控制要更好,但是還是不能控制的很好,因為P控制的車輛容易0值的影響,如圖所示:

自動駕駛系統-控制子產品PID初探

此時車輛雖然在參考線上,但是并不是我們希望的狀态(它在下一刻就會偏離),但是對于P控制而言,這是理想狀态,此時控制轉角為0,是以,P控制會一次又一次的超過參考線(overshot),為了矯正這種overshot,我們需要考慮一個額外的誤差項——CTE變化率。

PD控制

    CTE的變化率描述了我們的無人車向着參考線方向移動的有多快,如果我們的無人車一直都完美的在參考線上運動的話,那麼我們的CTE變化率就為0。那麼這一項(描述誤差的變化率)就可以用導數來表示,那麼,現在我們的控制輸出就變成了比例項和導數項求和的形式:steering angle=Kp⋅e+Kdd e(t)dt

    其中的 Kd就是導數項的系數,它的大小決定了CTE變化率對于回報控制的影響。此時我們的控制叫做PD控制,在PD控制中,我們有兩個系數需要調整,直覺上來看,增大 P系數将會增大無人車向着參考線方向運動的傾向;增大 D系數将會增大無人車快速向參考線方向的運動的“抵抗力”進而使得向參考線方向的運動變得更加平滑。使用過大的 P系數,過小的 D系數的系統我們稱之為 欠阻尼的(underdamped),這種情況的無人車将沿着參考線震蕩前進,反之,如果P系數過小,D系數過大,那麼我們稱之為 過阻尼的(overdamped),這将使得無人車要較長的時間才能糾正其誤差。合适地選擇 P,D參數可以使無人車能快速回到參考線上的同時很好的維持在參考線上運動。

PD控制似乎已經能夠勝任良好的回報控制了,但其實還不夠,PD控制器可以保證正常的控制的需求,但是當環境存在擾動的時候,比如說下面這種情況:

自動駕駛系統-控制子產品PID初探

車在受力發生輕微偏移以後,由于PD控制中下 P項傾向于向參考線方向運動,而 D項則嘗試抵消這種傾向,造成無人車始終都無法沿着參考線運動,這個問題叫做 steady state error 為了解決這個問題,我們再引入一項—— 積分項。

PID控制

我們将積分項也就如到我們的控制輸出函數中,這個時候,無人車的轉角就可以表示為:

steering angle=Kp⋅e+Kdd e(t)dt+Ki∫0te(t)dt

其中 Ki就是積分項系數,積分項在我們這個例子中其實很好了解,本質就是車的實際路線到參考線的圖形的面積,加入積分項以後,控制函數會盡可能使車輛路線的積分盡可能小(也就是使車輛路線和實際運動參考線之間形成的形狀的面積盡可能小),那麼也就避免了steady state這種情況了。

同樣的,這裡的積分項系數的大小也會影響我們整個控制系統的穩定性,過大的Ki會使控制系統“震蕩”地運作,過小的 Ki又會使控制的車輛在遇到擾動以後(處于steady state)要很久才能回到參考線上,這在某些情況下勢必會使車輛處于一個危險的境況。

PID控制就是由這三項共同決定的,還有其他應用于無人駕駛汽車的進階控制算法,但是他們都和我們介紹的PID控制的原理相似。我們發現其實PID實作确實不難,但是三個系數的選擇卻很難,我們可以在我們的控制循環中通過一定的算法不斷嘗試,下面我提供給大家一種尋找參數的算法:

自動駕駛系統-控制子產品PID初探

繼續閱讀