# Layered View of Autonomous Vehicles 還記得自駕車的行為可以拆成以下的層級由左往右五個層級嗎: | Sensing | Perception | Planning and Decision | Control | Actuation | |:------------------:|:----------------:|:---------------------:|:-----------------:|:---------:| | Radar | Segmentation | Route Planning | Steering Control | Engine | | Lidar | Object Detection | Behavior Planning | Torque Control | Brake | | Camera | Object Tracking | Motion Planning | Emission Control | Wheel | | GPS | Localization | Prediction | Energy Management | Light | 沒錯,這週要講的就是 Planning(跟 Decision) 跟 Control。 >Actuation 不是這門課會 cover 的部分 ## 大致架構 - Route Planning - 輸入:Road Topology、User-Specified Destination - 輸出:Sequence of Point - 或者說路徑上的各個重要的點 - Behavior Planning - 輸入:Route Planning 得到的 Sequence of Point、Perception output - Perception output 是隨時接收的 - 輸出:Motion Specifiction - Motion and Trajectory Planning - 輸入:Behavior Planning 得到的 Motion Specifiction、Estimated Pose and Free Space - 輸出:Reference Path - Low-level Feedback Control - 輸入:上面得到的 Reference Path、Estimated Vehicle State - 輸出 Low-level Commands # Route Planning 在 ADA (或 DSA) 中學過的圖論演算法,就有提到過搜尋 shortest path 的各種演算法, 例如適用無負權圖的 Dijkstra。 或者是使用 A star,可以詳見我的「[人工智慧導論筆記]()」 Edge 的權重可以是實際距離、耗油量等等。 # Behavior Planning 有了要走的路之後,Behavior Planning 就是要考慮實際開車時遇到的細節部分,例如遇到行人要怎麼辦等等。 常見的方案就是使用 Finite state machine based 的方法,或者更進階一點使用 Game theory,例如使用 minmax tree 等決定手段。 但是有些東西不是固定的,例如車子、腳踏車、行人的行為;所以這時候可以使用一些 model 做一些假設性的預測: - Gaussian mixture models - Switching linear dynamical and stochastic systems - Gaussian Process Regression 或者是使用有機率性質的方法: - Markov Decision Processes - 例如 Partially Observable Markov Decision Processes / POMDPs ## POMDPs - model:6-tuple $(Q,A,O,T,Z,R)$ - $Q$:狀態 states 的集合 - $A$:行為 actions 的集合 - $O$:觀察 observations 的集合 - $T$:狀態轉移函數 - $T(q,a,q')$ 在狀態 $q$,行為 $a$ 之下,會輸出轉移到 狀態 $q'$ 的機率 - $Z$:觀察現象函數 - $Z(q,a,o)$ 在狀態 $q$,行為 $a$ 之下,會輸出看到 觀察 $o$ 的機率 - $R$:獎勵函數 - $R(q,a)$ 在狀態 $q$,行為 $a$ 之下,會輸出得到的獎勵 ## Markov Model 這邊大致複習一下類別: | Markov Models | 能夠控制狀態轉移 | 不能控制狀態轉移 | |:--------------------:|:-------------------:|:-----------------------------:| | 可以完整的觀察到狀態 | Markov Chain | Markov Decision Process (MPD) | | 不能完整的觀察到狀態 | Hidden Markov Chain | POMDP | 有興趣的可以深入了解。 # Motion and Trajectory Planning 決定一個動作要怎麼做,是不是合法的。 常見的方法有: - Variational methods - Graph-search methods - Tree-based methods ## Formulation - $X$ configuration 的集合 - $X_{\text{init}}$:初始 configuration 的集合 - $X_{\text{goal}}$:結束 configuration 的集合 - $X_{\text{free}}(t)$:在特定時間 $t\in [0,T]$ 允許的 configuration 的集合 - $T$ Planning horizon - 一段時間的最後時間點 - $\Pi(X,T)$ 從時間 $[0,T]$ 對 $X$ 的所有連續函數 - $\pi \in \Pi$:連續函數 $\pi$ 就是一個 trajectory - $D(\pi(t)),\pi'(t),\pi''(t),...)$ 可微的限制函數 constraints - $J$:根據 $\pi$ 算出 cost ## 終極目標 $$ \begin{align} &\pi^*=\min J(\pi)\\ s.t.&\ \pi(0)\in X_{\text{init}}\\ &\ \pi(T)\in X_{\text{goal}}\\ &\ \pi(t)\in X_{\text{free}}(t),\ \forall t \in [0,T]\\ &\ D(\pi(t)),\pi'(t),\pi''(t),...) \end{align} $$ ## Variational methos 形式跟上面一樣: $$ \begin{align} &\pi^*=\min J(\pi)\\ s.t.&\ f(\pi(t),\pi'(t),\pi''(t),...)\\ &\ g(\pi(t),\pi'(t),\pi''(t),...)\\ \end{align} $$ 只不過把限制換成一些函數。 想要變成沒有限制的最佳化問題,常用的手法是將限制先對時間積分起來,然後乘上 cost 後加到原本要最小化的函數內。 >我們要最小化的目標,就是要找到一個最佳的時間 $t$,做出動作;所以理論上是要函數對 $t$ 微分 上面這個手段其實跟 lagrange 的方法很像。 ## Graph-search methods 先把連續的 configuration 切成離散的;切的方法可以是: - 人工去切 - 人類手工區分出哪些是合法的 trajectory - Geometric - 透過一種表示方法,來去分出不同類型的 trajectory - 請參見講義的圖 - Sampling-based - 簡單來說就是透過模擬,分辨出哪些操作是可行的,然後記錄下來,以後就可以根據這些紀錄做判斷 ## Tree-based methos 這邊介紹 Rapidly Random Trees 這個方法。 簡單來說就是每次都會有一個隨機的點,然後要根據現有的點,走一定的距離,來最靠近那個隨機點。 # Low-level Feedback Control 一個 Execution 就是給一個初始狀態,然後我們根據輸入的信號(他是一個時間的函數)做出一些動作,同時擁有一些限制。 我們通常會最在意以下性質: - Existence:是否存在一個解,或者說是否存在一個 Execution - Uniqueness:這樣的解是唯一的嗎 - Stability:隨時間得到的解,是否最終會趨向一個穩定的狀態,而不是持續震盪,或是受到干擾後變動很大。 ## Controller Design 希望設計一個控制器,來控制系統可以達到目標。 - Open-Loop (Feed-Forward) Control - 控制器 Controller 只會根據(人類的)輸入做動作,設備 Plant 的輸出沒有影響 - 好處是便宜,壞處就是沒有人類操作的話得到的控制品質會很差 - Closed-Loop (Feedback) Control - Plant 的輸出會回饋給控制器 - 好處就是提升了品質,壞處就是變貴了 ## PID 控制器 這裡我們介紹一種 Closed-Loop (Feedback) Control:PID 控制器。 - Plant 的輸出會算出三種值回饋給 Controller - 首先根據回饋,以及目標值的差距,求得誤差 $e(t)$,然後算出以下三者 - $P=K_pe(t)$:當前的誤差 - $I=K_i\int_{0}^{t} e(s)ds$:歷史的(過去的)誤差 - $D=K_d \frac{d}{dt}e(t)$:未來的誤差 - 算出的三個值會影響各種數值,也影響了下一次 controller 的輸出;例如 - Rise Time:上升所需的時間 - Overshoot:超過目標值得量 - Settling time:抵達目標值的時間 - Steady-state error:變成 stable 狀態時的值跟預期的值差多少 - Stability:穩定度