# 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 | 沒錯,這週要講的就是 Sensing 跟 Perception。 >下週是 Planning (跟 Decision) 跟 Control >Actuation 不是這門課會 cover 的部分 ## Sensing Sensing 是指一個物理的 Sensor,搭配一些晶片或軟體,將偵測倒的資料做「Sensor fusion / 整合」或是「preprocessing / 預處理」的動作。 >預處理例如 Lidar 的數據轉成點雲 Point Cloud 除了上面列的 4 種,下面會介紹更多種。 ## Perception 有了觀察到的資料後,Perception 就是要賦予其意義,例如拍到的圖片,你可以做圖片辨識、物件偵測等等,產生出「觀察」。 不過有時候這部分會跟 Sensing fusion 整合在一起。 ## Planning and Decision 有了觀察後,就是開始「決定計劃」,例如決定最短路徑,或是待會要怎麼移動等等。 這部分是最軟體的。 原始常用的方法有: - Optimization 最佳化 - Search-based 搜尋樹等方法 - Discrete Decision-making 狀態機 而隨著最近 AI 的潮流,也有: - Reinforce Learning - Deep Learning ## Control 有了計劃後,要先可以「控制」,才可以做出「動作 Actuation」。 這部分很早期就有了,不過以前大多是透過機械來達成,現在則是晶片+電線。 >例如以前透過液壓系統來控制車子 不過現在的 Data 也很多,有時候不一定需要透過電線來傳遞訊號進行控制,可以直接透過各個部位蒐集到的 Data 做控制。 --- # Sensor - Radar - Lidar - Ultrasonic - Camera - Global Position System - Inertial Measurement Unit - more and more ## Sensor Selection 在介紹之前,先介紹如何選擇;下面是選擇時要考量的性質。 - Accuracy - Resolution - 單位可以到多細 - Sensitivity - 在該單位下,多少變化可以被偵測到 - Sensing range - 例如你是前方 120 度相機,還是 360 度相機 - Data range - 例如你溫度是 0 到 100 度,還是 -90 到 1000 度 :) - Frequency and responsiveness - Sensor 傳信號的頻率,或者是反應的時間 - Interface - Sensor 的介面好不好用,跟使用者比較有關 # Radar 原理:Doppler effect。 - Unmodulated continuous-wave 可調控波 - 因為不能調控,所以只能算出「速度」 - Modulated continuous-wave 不可調控 - 因為可以調控,所以可以算出「速度」跟「距離」 - 例如調控波的頻率 Frequency-modulated ## 特色 - 在極端情況下,例如 dusty、rainy、跟 foggy,依舊可以有不錯的效果。 - 便宜 - 相較其他 Camera 跟 Lidar,解析度較低 # Lidar Lidar = Light Detection and Ranging 他會對各個角度,打出光束,然後計算出光碰到物體後距離有多遠。 >要接收光碰到物體後反射的光 >這叫做 Ray-Casting 真的到的物體,就可以根據距離,用「點雲 point cloud」的方式來表示。 而相隔多少角度就要打出一條光,就是解析度;並且要做很多計算來得到距離,特別貴;但是得到的距離(深度)數值可以非常的精確。 ## 很貴 google 早期自駕車用的 Velodyne HDL-64E,「當時價格」要 75000 美金。 範圍是水平 360,垂直 26.9,水平解析度 0.08,垂直解析 0.4。 偵測範圍 120 公尺。 # Ultrasonic 一樣是透過反射來測量距離。 通常能夠測量的距離比較近,解析度也沒有很高,但是可用於停車等用途。 ## Ultrasonic Range Finder -XL-MaxSonar-EZ4 範圍 0 到 765 公分,解析度 1 公分。 # Camera 便宜(發展很久),高解析度,但是對於深度的資訊沒辦法很準確,並且極端天氣得效果也不好。 深度資訊的話要嘛透過一些數學,要嘛直接搭配光達或雷達。 # Global Position System 提供「時間」跟「經緯度」。 大多車子的時間就是透過 GPS 提供;但是距離誤差通常大約是 2 公尺左右,所以是無法用於定位的,往往需要搭配其他 Sensor,例如下面的 IMU。 # Inertial Measurement Unit Inertial Navigation System 的一部分。 透過「Accelerometers 加速度儀」跟「gyroscopes 陀螺儀」偵測直線以及角度在三個軸上的加速度。 >有些可能只有加速度儀或是陀螺儀 有分為「Stable-platform IMUs」跟「Strapdown IMUs」,前者不會隨整體系統移動,只會在固定的平面上,後者則會隨著系統移動。 # Comparison 請見講義的圖。 Proximity Detection 是指近距離的測量數據。 ## Sensor fusion 結合眾人的力量,就可以做得很好 --- # Perception 接下來介紹 Perception 的部分。 # Data Representation of Lidar 雷達跟超音波因為數值就直接是距離,不用過多的處理,可能頂多轉換單位之類的。 光達有三種常見的資料表示法: - Point-Cloud-based - Feature-based - Grid-based ## Point-Cloud-based 也就是原始數據,優點是非常精細,缺點是數據量太大了。 >有一種解法是轉成 Voxel-based,voxel 就是三維空間的 pixel ## Feature-based 從原始資料抓出特定的資料,例如判斷出某個地方有一條線,然後就改成以「線」或「面」紀錄。 優點是可以減少數據量,缺點是精細的資訊,或是「其他意義的資訊」就會不見。 ## Grid-based 如果一整份資料太大,那就切成很多小份一點的吧;每一份裡面都完整的保留了原始點雲資訊。 但是要切成多小為一個 grid,就是使用這方法的難題,可能切太細,就把一台車的點雲資訊切成了好多小塊。 # Segmentation Algorithm 將點分成一些 group。 - Edge-based - 簡單來說就是判斷出哪些點屬於一條線 - 適用於有人造的線的資訊,例如馬路上的線 - Region-based - 將點根據某個 Criterion 分成一個 region - Model-based - 根據「預先設定的形狀」,對點做歸類 - Attribute-based - 透過某個算法,對點算出一些值,然後判斷哪些點是不式同個類 - 也就是 Clustering 的範疇 - Graph-based - 就是將點雲透過 Graph 來表示,哪些 node,然後有哪些 Edge - Deep-learning-based - 當紅炸子雞 ## Random sample and consensus / RANSAC 想要將點歸類成某個線、面或是等等形狀。 例如想要將點歸類在某條線上。 - 首先隨便選取 n 個點,透過這 n 個點算出某個最佳的線 - 然後再瞰這條線「周圍」有多少點 - 如果數量大於 K,那就認定真的有這條線 從上面可以知道,這個算法需要 heuristic 的設置 n、範圍跟 K。 ## Hough Transform 上面比較像是亂槍打鳥。 Hough Transform 一樣是可以用於歸類出線、面等類別, 一樣以線做舉例: - 首先制定好你的「model」,例如 $y=mx+c$,此時該 model 叫做「m、c 的 space」 - 如果遇到 m 是無限大的情況,可以改成用 $r$ 跟 $\theta$ 的空間 model - 然後將點「映射」到「m、c 的 space」 - 例如 $(0,2)$ 就會映射到 $2=c$,$(1,1)$ 就會映射到 $1=m+c$ - 可以發現點會映射出一條線 - 然後從映射出的線找交點,這個交點映射回「x、y 的 space」就是一條「x、y space」的線 - 但是可能「m、c 的 space」交點不只一個 - 此時可以進行投票,或者說看該交點有多少線以上通過,就蒐集起來 - 優點 - 概念上很簡單,容易實作 - 因為根據投票得出結果,所以比較 Robust - 只要有定義的新空間,就可以使用 - 容易處理缺失的資訊 - 缺點 - 如果要處理的類別很多,還是會需要較大的計算量 - 對於位於相同線上,但是其實是不同的分割的情況較難處理 - 例如虛線,會被判定成一種線 # Object Detection Algorithm - 如果是光達點雲的資料 - 那麼可以先用上面 Segmentation 算法求得一些 shape 的資訊 - 然後使用傳統的 ML 中的 SVM,或是 Gaussian Mixture Models 等等 - 如果是 Camera 的資料 - 那麼可能要先做一些處理 - 例如移除障礙物,減弱陰影,調整曝光度,限制圖片的範圍等等 下面對 Camera 的三種偵測做介紹。 ## Lane-marking detection 跟道路有關的 ADAS 一定會用到。 雖然這領域的研究有很常一段時間,但是因為有很多的問題,所以一直沒有完整的解決。 >例如陰影、有損壞的路面標示、行人擋住等等 ### Common Subtask - 萃取 Feature - 將 pixel 歸類到一個 model,例如線、拋物線等等 - 估計車子現在的姿態跟 model 之間的關係 - 要善用時間的連續性 - 轉換成真實世界的座標 ## Drivable path detection 要知道哪些地方可以開。 Deep-Learning-based 目前以較有效。 ## On-road object detection 一樣是 Deep-Learning-based 目前以較有效。 # Localization GPS 其實會因為各種因素導致非常不精準,所以會需要各種輔助。 下面介紹由 Map 輔助的 SLAM ## Simultaneously Localization And Mapping / SLAM SLAM 由三個 model 跟一個 estimator 組成。 - Motion model - 隨時捕捉車子的動作 - Inverse observation model - 如果偵測到某個物件,但是不在地圖上,那麼就加到地圖中 - Direct observation model - 如果地圖有某個物件,那麼就可以夠過偵測該物件來推導自己的位置