Notes for Model Predictive Control


從一開始決定上課後,經過了半年終於來到 Udacity Term2 最後一個 Project 了。只能說盡量讓自己把每一個做的 project 都寫一篇 blog 記錄,但這陣子時間真的不夠用,所以這篇就從 high level 的角度瀏覽一下內容。


目的

我們用上圖來說明目的,MPC 要做的事情,就是給定一個指定的 reference trajectory (黃色的曲線,通常用一個 3rd polynomail 表示),我們經由 motion model 來計算出最佳的控制 ($(\delta,a)$分別表示車子輪子的角度跟加速度),最佳的意思就是這樣的控制會產生出一個 predicted trajectory (綠色的曲線) 使得跟 reference trajectory cost 最小
這就等於將問題轉換成一個 nonlinear constraint optimization problem 了。
另外剛才提到的控制項 $(\delta,a)$,其中的 $\delta$ 為下圖的 Wheel Orientation 角度:

而 $a$ 表示加速度,正值是踩油門,負值是踩煞車。這邊我們當然假設油門和煞車同時只會有一個存在啦,開車技術沒這麼好。


Motion Model

這 6 個 states $(x,y,\psi,v,cte,e\psi)$ 分別表示 (車子x座標, 車子x座標, 車子heading角度, 車子速度, Cross Track Error, Error of 車子角度)
CTE 或稱 XTE 是 reference position 跟 actual position 之間的誤差

同理 $e\psi$ 就是 reference 的角度跟實際角度的差值了,注意到,由於 reference trajectory 可能是一個 3rd polynomail,我們可以算切線來求得 reference 的角度。


Tools of Nonlinear Constraint Opt

兩個主要的 tool:

  1. Ipopt
    Interior Point OPTimization,用來解 nonlinear constraint opt 問題。
  2. CppAD
    在使用 Ipopt 的時候,需要計算 function 的 gradients,而 CppAD 可以幫我們自動計算。

一個很棒的使用兩個 tools 解 opt 問題的範例: link


Consider with Latency

通常下了一道 actuator 命令 (例如加速度要多少、輪子角度要多少),到實際上車子運作會有一個 delay,而 Udacity simulator 設定這個 latency 是 0.1 second。

這個 latency 在車子速度較快的時候,影響會很大,導致車子無法正確開完。一個簡單的解法就是我們利用 motion model 去預測經過 latency 後的車子 states,然後後面所有流程都一模一樣即可。


Results


Reference

my github

目前解鎖成就