---
# System prepended metadata

title: 第九週 Sensing and Perception
tags: [智慧型汽車導論]

---

# 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
    - 如果地圖有某個物件，那麼就可以夠過偵測該物件來推導自己的位置