最簡單詳細的無人車運作原理

無人車這個概念在 2023 年早就已經不新了,想必大家都一定有聽過無人車這個概念,甚至看過無人車在道路上行駛。最有名的無人車公司想必就是 Tesla 吧!但無人車技術不僅僅只能被應用在家庭商務車,還有比如說 Robotaxi,或是長途貨櫃車等等。隨著電腦運算能力不斷地提升,雲端技術更加穩定成熟等等,無人車的願景正在慢慢的被實現。

但是,無人車到底是怎麼運作的呢?它是怎麼知道它現在在高速公路上的內車道還是外車道?它是怎麼知道它周遭有哪些物體?它是怎麼知道要如何從 A 點到達 B 點?當面對一個未知的物體,或是看不見的物體時,它又該如何面對並進行決策呢?

想必這些問題大家都很好奇,所以這篇文章就是要來用最淺白並且最少專業術語的方式,讓不是這個領域的大家都可以了解無人車的運作原理!

無人車技術有哪些領域呢?

要想讓車子自己動起來,並且做到合理的決策,肯定需要涵蓋到不止一方面的領域。那麼這些領域又如何和彼此互動呢?首先,我們先來將無人車的技術領域大致分為以下:

  1. 視覺 Vision
  2. 地圖與定位 Mapping and Localization
  3. 規劃與決策 Planning and Decision Making
  4. 控制 Control

以上的領域是無人車的主要技術領域。但在開發無人車的過程中,我們還會需要用到其他領域比如說:

  1. 模擬 Simulation
  2. 雲端計算 Cloud Computation

了解到主要領域後,讓我們來看看這些領域間彼此的關係。

由上面的關係圖我們可以知道領域之間的關係。其實,我們可以將無人車比喻為人類,並更好地理解這個關係圖。比方說,今天我想要去浴室刷牙,那麼第一件事,我要先知道我現在在哪裡,是在客廳還是在書房?而這就是地圖與定位的功能。接下來就要透過我的眼睛,也就是視覺,來查看我的周遭有沒有障礙物,以確保我可以平安的移動到浴室。接下來,就是用大腦將書房到浴室的路徑給規劃出來。

有了路徑後,我們可能會在這個路徑上做一些其他事情,比方說先去廚房喝水,開浴室燈,或是關書房門等等,這些動作被叫做行為 Behaviors。有些行為是必須的,比如說開浴室燈,而有些行為則沒有必要,端看當下的情況。比如說我真的口很渴一定要先喝水,那這個行為就變成了必須,但這個行為在下次時可能就因為我口不渴所以就變成非必需了。而這也是無人車之所以很困難的原因之一,因為即使你的目的相同,但卻因為周遭環境或是自身車子的不穩定因素,而要執行不同的行為。到了最後,就是控制了,也就是用大腦發送指令給手腳,實際從房間走到浴室並刷牙。

接下來,我們就要來一個一個深度解析每一個領域是如何運作的吧!

視覺

如同上面的例子,人需要透過眼睛觀察周圍,讓我們知道所處的環境以及可能的障礙物。無人車當然也需要有「眼睛」,這些「眼睛」在無人駕駛領域被稱作傳感器 sensor。不同的傳感器應用的場景以及優缺點不盡相同,價格也可能差到百倍。但是這些傳感器的最終目的都是幫助車子觀察周圍環境。以下是常見的傳感器:

  • 光達 Lidar
  • 相機 Camera
  • 雷達 Radar
  • 超音波 Ultrasound

接下來讓我們一個一個介紹這些傳感器。

光達 Lidar

想像一下如果我們是一個盲人並被丟到一個陌生的房子,我們可以利用導盲杖來確認自己與周圍物體的距離。如果我們有夠多時間,並且我們記憶力足夠好的話,我們就可以大致摸索出這個房子的走道大概長什麼樣子。那今天假設我們的導盲杖足夠長,我們可以將導盲杖向四面八方延伸,那麼我們也可以知道這個房子的大致立體模型,包括天花板有多高,牆壁哪裡有掛物品等等。

光達的全名叫做光學雷達,運作原理是藉由發射與接受雷射光來計算與物體的距離。而導盲杖就是這裡的雷射光。一組發射接收器每秒可以收發幾萬筆資料,也就是手上有幾萬個導盲杖。而一個光達上可能又會有幾十組這樣的發射接收器。然而,就算有幾十萬個導盲杖,仍然不足以涵蓋到全方位環境。理想上來說,我們應該在光達上安裝幾百組發射接收器來涵蓋整個範圍,但實際上,安裝越多的發射接收器,價格也呈指數攀升。因此,現行的方法都是旋轉光達並達到 360 度的全方位掃描。

有了這些資料後,我們就可以把每個資料點畫出來,而這個結果就叫做點雲 Point Cloud,如下圖左。我們也可以根據距離給上不同的顏色。因為無人車每秒都在行進,並且光達每秒都在更新收到的資料,所以實際上無人車上接收到的點雲會是不段更新的,如下圖右。

相機 Camera

相機應該是一般人最熟悉的傳感器了。在無人車領域中,相機大致上其實分為兩種,一種是 2D RGB 相機,另一種是 3D 相機。差別在於後者利用可以紅外線來偵測物體深度,因此比普通的 2D 相機可以多獲得一個很重要的環境資料。但紅外線因為波長較長,比較容易受環境雜訊比如說太陽光影響,因此在大白天時,深度資料的準確度相較於光達來說差得多。

在無人車領域中,相機主要的目的包括偵測行人、周圍運輸工具、紅綠燈、號誌牌以及道路上的白黃線等等。技術上我們可以使用傳統的影像處理技術,針對相片中的每個像素中的 RGB 值做處理,以達到模糊、切割、截取、或是提取特定形狀顏色等等。或是現在主流的深度學習技術,通過大量的圖片讓電腦學習到特定物品的特徵。最近 Meta 所發布新的影像處理模型Segment Anything,就是透過深度學習方式,將物體一個一個切割開來,以達到更好的分辨率。

雷達 Radar

其實雷達的全名叫做毫米波雷達,跟前面提到的光學雷達我們可以發現它們都要做雷達。可見運作原理非常相似,差別在於光達是發射雷射光,而毫米波雷達則是發射電磁波。雷射光的波長屬於奈米等級 (10^-9),而毫米波顧名思義則在毫米等級 (10^-3)。雖然兩者所發出的射線不同,但是運作原理都是藉由發射訊號,打到目標後並接收反射訊號,經過處理器計算後得到目標的形狀、大小、運動速度等等資訊。

那這時候聰明的讀者可能就會問了,那既然獲取到的資訊是一樣的,那為什麼我們需要兩種不同的雷達呢?主要有幾個原因,第一是因為相較於光達,雷達的售價非常便宜。目前車用光達大概是 1000 美金,而雷達則大約為 50 美金,兩者的價格差到 25 倍,而且 1000 美金的光達還不能算是品質好的!第二是因為電磁波的波長較長,因此受周圍環境因素的影響較小,能發射的距離也比較遠。而雷射光則因為波長很短,因此對環境非常敏感,距離也較短。因此在暴雨、下雪、沙塵暴等等極端環境下,雷達的表現能力遠高於光達。但也因為這樣,光達具有較高的精度,也就是說在天氣良好的情況下,收到的資訊較為精準。

超音波 Ultrasound

理解完雷達後,超音波也就非常好理解了。超音波也是透過發射訊號來得知物體的相對位置,只是這個訊號是聲波。超音波是在我們目前介紹的視覺感測器中最便宜的,因為最便宜,我們也大概可以知道他的解析度、精度、以及測量範圍並不會很好。這是因為聲波的物理特性所造成的,因為聲波具有擴散性,所以取樣的範圍會非常大,訊號之間也容易相互影響。因此,超音波通常被用來偵測靠車子本身非常近的物體,或是用來彌補其他感測器沒有偵測到的近距離偵測盲區。一個常見的應用就是停車或倒車的輔助系統。

地圖與定位

想像一下我們今天在一個陌生的城市,當我們想要去一個地點時,我們大概會先拿出手機打開 Google 地圖,看一下我們在哪一條街、附近有什麼地標等等。為了讓車子能夠自己駕駛,我們當然也需要提供車子位置以及地圖的資訊。那麼這些資訊是從哪裡來的呢?

全球定位系統 GPS

有沒有想過為什麼每次打開 Google 地圖時,他都會知道你在世界上的哪一個位置呢?這是因為在你的手機裡,有安裝一個 GPS 接收器。這個接收器會負責接收來自太空中的衛星訊號。並利用三角定位原理來做到全球定位。

什麼是三角定位?這個原理聽起來很難但其實非常簡單!會叫做三角是因為我們需要三顆衛星來做到定位。在 GPS 接收器收到來自衛星發射的訊號後,我們可以得到我們與衛星的距離(訊號速度 x 時間),我們把這個距離當作 R。接著我們來看下圖,為了能夠簡單理解我們利用 2D 情景(現實為 3D)。我們利用 R 當作半徑並以衛星當作中心畫一個圓。當只有一個圓的時候,我們可能會在圓上的任何一個點上。但是當有兩個圓時,兩個圓就會產生兩個交點,而我們的位置就會從先前的任意一個點上縮減到兩個點的其中一點。而當我們有三個圓時,理想上我們就只會有一個交點,而那一個交點就是我們的位置!

雖然三顆衛星就能夠做到全球定位,但是在現實中我們其實使用了四顆衛星。這是因為環境會干擾訊號,第四顆衛星是用來提高定位準確率。

但其實在無人車上的 GPS 和在一般手機上的 GPS 並不一樣。無人車上的 GPS 的定位誤差必須落在公分等級,手機上的則可以落在公尺等級。舉例來說當我們用 Google 地圖時,手機認為我們在的位置和我們實際上的位置如果差到 5 公尺左右其實影響並不大,因為我們人類仍然可以知道自己在哪裡。但是試想一下如果無人車上認為它在高速公路上的最左道但其實它是在最右道呢?那就很恐怖了吧!

gps

紅點為三角定位結果

高精度地圖

有了位置的資訊後,我們當然還需要地圖,才能知道我們所處的地點資訊以及周圍地標。沒有地圖資訊就好像 GPS 告訴我們現在正在東經 139 度,北緯 35 度,我想正常人會覺得我有這個資訊跟沒有是一樣的吧?有了地圖資訊後,我們就可以知道我們所處位置是在日本東京了!所以無人車也需要這種地圖資訊,只是無人車的地圖和我們平常看到的 Google 地圖是完全不一樣的!

無人車所使用的地圖叫做高精度地圖。什麼叫做高精度地圖呢?顧名思義這個地圖涵括了非常多的資訊。比如説高速公路有幾個車道、每個車道的曲率以及坡道的上升或下降程度、每條路的行駛方向、十字路口的每個交通號誌等等。我們平常看到的 Google 地圖並不會涵蓋這些資訊,因為我們平常開車時知道這些資訊並不會有什麼幫助,我們只需要知道我們周圍的大致情況以及在正確的道路上就好。但是對於無人車來說,他必須知道這些資訊才能進行預測及規劃,以達到更安全的駕駛。

由於繪製高精度地圖的程序非常困難且複雜,因此有很多公司專門在做這種給無人車用的高精度地圖,比如說 HEREtomtom,或是像 nvidia 一樣直接併購相關公司 deepmap.ai

即時定位與地圖構建 SLAM

想必大家都經歷過 GPS 訊號斷掉吧?比如說在經過隧道時,Google 地圖沒辦法顯示自己在哪裡。平常我們人在使用的時候短暫的沒有位置資訊可能沒關係,但是在無人車上可萬萬不行啊!那麼當無人車失去 GPS 訊號時該怎麼辦呢?這就要來提到 SLAM(Simultaneous Localization and Mapping)技術了。從名字我們可以知道,這個技術可以讓無人車“同時”且“即時”進行定位以及地圖建構。

那麼我們要怎麼樣來實現 SLAM 呢?雖然我們沒有了 GPS,但是還記得我們還有很多其他的感測器嗎?比如前面提到的相機、Lidar 和輪式編碼器 (odometer) 等。這些感測器會收集有關無人車周環繞環境和行駛的數據,然後由 SLAM 算法處理這些數據,創建環境地圖並同時計算機器人的位置。SLAM 的基礎理論是使用感測器的數據來確定無人車在環境中的位置和方向,並同時利使用這些數據來創造環境地圖。這需要無人車在移動過程中不斷更新地圖和位置的資訊。

看完上面的理論介紹還是不懂嗎?我們來提一個簡單的例子,想像一下你在一個黑暗的房間裡,拿著手電筒。你在房間裡移動,用手電筒照亮不同的方向來查看周圍的情況。當你移動時,你也用記憶來追蹤你在房間裡的位置。最後,你基於用手電筒所看到並收集的資訊在腦袋裡建立了房間的地圖,並知道自己在該地圖中的位置。SLAM 其實就是差不多這樣的概念,但是使用的是相機器和 Lidar 等感測器收集來的有關周圍環境的信息。然後,無人車並使用這些資訊建立環境地圖,並得知自己在該地圖中的位置。

這個影片很清楚的示範了 SLAM 的運行場景。

規劃與決策

有了地圖以及知道我們在哪裡後,我們就可以做規劃與決策了!什麼是規劃與決策呢?其實規劃與決策的全名叫做路徑規劃與行為決策。路徑規劃就是給定起點與終點,演算法會規劃出一條可以行駛的路徑,讓無人車可以避開一切障礙物並安全的行駛到終點。行為決策就是決定當前無人車應該執行的行為,比方說打方向燈、變換車道、按喇叭等等。

接下來,我們來更深入地講解路徑規劃與行為決策的底層邏輯。

路徑規劃

如前面所提到的,路徑規劃就是給定起點與終點,並規劃出一條可以行駛的路徑。其實更正確的來說,是找尋成本最低的路徑。什麼是成本呢?比方說時間、油耗、撞到障礙物的機率等等。在做路徑規劃時,我們會設計一個函數叫做 Cost Function 成本函數。這個成本函數會給予每一條路徑一個分數,這個分數越低代表成本越低。因此數學上來說,路徑規劃其實是一個尋找最佳解的過程。

這邊我們來講些無人車常用的路徑規劃方法:

  1. 狀態空間搜索(search based):這種方法將車子的狀態和環境表示為圖形或網格結構。 A*、D* 、 Dijkstra 或常見的 DFS、BFS 等算法用於搜索此圖並找到從起點到終點的最佳路徑。使用這種方法的話,每一個網格可以包括位置、方向、速度和時間等變量。
  2. 採樣搜索(sampling based):利用採樣的路徑規划算法,例如快速探索隨機樹 RRT、或是他的進階版 RRT*,隨機探索車輛的配置空間來生成可行的路徑。這些方法通過將節點從起點擴展到終點來迭代構建樹結構,搜索出不會碰撞到障礙物的路徑。採樣的方法相比於前一個方法,這種方法計算效率比較高,對於處理高維空間會更快速。但是缺點在於,這種方法只會保證搜索出不會碰撞到障礙物的路徑,並不能保證是一條最有效的路徑
  3. 強化學習(reinforcement learning):強化學習可應用於路徑及運動規劃。機器人需要通過上千萬次與模擬環境交互作用並接收獎勵或懲罰形式的反饋,並學習能夠獲得最多獎勵的行動模式。強化學習可用於學習複雜和動態環境中的運動規劃策略。但是這種方法非常先進,以現在來說這種方法大多存在於實驗室或模擬環境中,並還無法運行在真實世界。題外話,現在最大的公開強化學習模擬器是 Openai Gym。咦有沒有很耳熟呢?沒錯跟開發 ChatGPT 就是同一個實驗室!有沒有瞬間覺得這個實驗室真的很厲害!

下面這幾個影片展示了上述所提到的路徑規劃方法,想要更具象化的了解的話非常推薦觀看!

  • 影片 1:各種狀態空間搜索演算法
  • 影片 2:狀態空間搜索 v.s. 採樣搜索
  • 影片 3:利用強化學習訓練機器人走路,和訓練無人車開車是一樣的道理

路徑規劃演算法產生出一條可行路徑後,便會產生下圖最左邊類似藍色線的路徑。但其實藍色的路徑是由一個一個小點點組成的,我們叫做 waypoint,waypoint 就是無人車要嘗試追蹤的小點點。每個小點點的間距依照每一個無人車上搭載的硬體的處理速度不同而不同,硬體越好代表小點點間距可以越小,也代表規劃出來的路徑更為詳細。每一個 waypoint 可以涵蓋非常多資訊,包括位置 xyz、路的彎曲程度 curvature、無人車在那個點的目標行使方向 heading 、方向盤的轉向 steering 或是速度的上下限等等。這些資訊都會被路徑規劃演算法產生出來,並一併傳遞給下一層,也就是「控制」,控制器便會盡量讓無人車達到每個 waypoint 所設立的目標,最後才會看到無人車安全的行駛在道路上。

路徑與 waypoint

行為決策

行為決策是指根據周環境所做出的高級決策,用以確定無人車的行為和行動。根據當下情況選擇合適的駕駛策略和動作,比如說打方向燈、變換車道、加速、踩剎車等等。當無人車決定要執行變換車道這個行為後,便會交由前一段所提到的路徑規劃演算法來計算出最合適的路徑。

行為決策的演算法有非常多,其中包括決策樹 Decision Tree、有限狀態機 FSM、馬可夫決策過程 MDPs,甚至是利用深度學習的預測模型。這邊我們來講一個最常見也是最簡單的方法:有限狀態機 Finite State Machine

想像一下有一台無人車,它可以做不同的事情,比如開直線、避障和超車。有限狀態機就像一本規則書或一套指示,告訴無人車在不同情況下應該做什麼。當無人車處於不同狀態時,就像不同的模式或行為。例如,它可以處於「開直線」狀態、「避障」狀態或「超車」狀態。每個狀態代表無人車可以執行的具體行為。這些所謂的「狀態」,都是工程師們手把手定義的,因為不可能定義出無限個狀態,所以才叫有限狀態機。

我們知道無人車上有許多感測器。這些感應器可以告訴無人車是否有人靠近或是否有障礙物在它的路徑上。這些就是無人車接收到的輸入或事件。

根據這些輸入和當前無人車所處的狀態,我們可以根據一定的規則或條件來決定下一步該做什麼。這些規則決定了不同狀態之間的轉換。例如,如果無人車處於「開直線」狀態並且檢測到障礙物,它就會轉換到「避障」狀態。當無人車從一個狀態轉換到另一個狀態時,它就會執行與該狀態相關的具體行為。例如,如果它轉換到「開直線」狀態,它就只會開直線,如果轉換到「超車」狀態,它就嘗試超越前面的車子。

最簡單的有限狀態機,也是最常見的,就是紅綠燈了!紅綠燈的有限狀態機只有三個狀態:「紅」「黃」「綠」。而且規則簡單明瞭,比如說當在「紅」狀態時,執行的動作可能是「維持紅燈 30 秒」,並且之後也只會轉換到「綠」狀態。當然無人車的有限狀態機比紅綠燈要複雜得多,狀態的數量可能也達到幾時甚至上百。

簡單來說,有限狀態機就像一本小小的規則書,告訴無人車在不同情況下應該做什麼,使其以一種具有結構和可預測的方式運作。

紅綠燈的有限狀態機

控制

前面介紹了無人車如何觀察周圍環境,觀察完環境之後如何建立地圖並產生出最終路徑與 waypoint,控制器會根據 waypoint 所提供的資訊,盡量讓無人車達到每個 waypoint 所設立的目標,讓無人車最終可以跟蹤演算法所算出來的路徑。

這裡所說的控制包括油門、煞車、方向盤。這些控制器會發送連續的訊號並試圖讓無人車遵循路徑規劃演算法所計算出來的路徑。並且也能夠依照當下情況作出即時反應。一個好的控制器能夠準確遵循甚至完善規劃出來的路徑。那麼現在就要來看看,控制無人車的控制器到底有哪些種類呢?

常見的控制方法包括:

  1. PIDProportional-Integral-DerivativePID 控制是一種通過不斷測量實際值與目標值之間的差異,讓系統自動調整和維持目標值的方法。我們可以把它想象成家中的恆溫器。假設我們將恆溫器的目標值設定為一定的溫度。恆溫器會不斷測量房間的溫度,並將測量到的溫度與我們設定的目標溫度進行比較。如果房間變得太冷,恆溫器就會打開加熱器。如果房間變得太熱,它就會打開冷氣。恆溫器根據目標溫度和實際溫度之間的差異不斷調整。
  2. MPCModel Predictive ControlMPC 控制簡單來說,是一種對系統未來行為的預測和規劃來做出決策的方法。讓我們繼續以恆溫器作為例子來理解 MPC。想像一下,你家裡有一個智能恆溫器。智能恆溫器不僅僅像一般的恆溫器一樣維持固定的溫度。它可以考慮當前的溫度、天氣條件、有人是否在家,甚至你的日常作息,以優化能源使用並確保你的舒適度。通過分析這些信息,恒溫器可以智能地決定如何以最高效的方式加熱或冷卻你的家。例如,假設是炎熱的夏天,假如下班時間是下午 6 點回家,它可以知道可以在你到家之前稍微提前開始冷卻,以在你到到家時達到目標溫度。這和前面的 PID 相比,最大的差別就是在於這個控制器考慮了未來的資訊。但當然,其所需要的運算能力與複雜程度就會比 PID 高出很多。
  3. 適應性控制(Adaptive Control):適應性控制根據當下的反饋和環境條件自動調整控制參數。它允許無人車根據車輛的動力變化、道路條件或感測器精度的變化調整輸出的控制訊號。適應性控制有助於在不同的駕駛場景中保持穩定性和性能,比如說在溼滑或是積雪的地面,適應性控制能夠獲得這些道路資訊,並達到合理的控制結果。就好比人類能夠知道在溼滑的地面上轉彎時車速不能太快、煞車不能過急一樣。

結尾

講到這邊就大致講完自駕車的基本領域啦!這篇真的花了我好多時間研究和撰寫,雖然本身從事自駕車領域,但要從頭寫到尾真的還是有點困難。這篇介紹了非常基本的自駕車運作原理,以及涵蓋到的技術領域,雖然探討的技術沒有非常深入,但是希望能夠讓大家不再對自駕車的技術以及運作流程感到陌生!

以我個人對自駕車的見解,我認為要落實自駕車甚至到商業化還有非常長一段路要走。自駕車在技術上仍有許多的邊角/極端案例仍無法解決,比如說如果有一個人在路邊那著一個警告標示惡作劇,那自駕車該如何判斷真假?或這是路上突然出現馬車,並且以很慢的速度行駛,那麼到底該不該超車?在接觸到沒看過的物體時,該如何反應?

自駕車不只在技術上要有突破,法律以及道德上該如何劃清界線也是非常重要而且需要解決的議題。經典的問題比如說無人車眼看要撞上一個小朋友了,但車上乘載著 10 名乘客,撞上去可以拯救 10 個人的生命,反之則有高機率會犧牲 10 條生命。或是自駕車發生車禍了那是誰的責任?想必自駕車會在未來面臨到類似的議題。

我認為在思考相關法律道德問題前,得先把技術瓶頸給突破才是!雖然技術上仍有許多的難題,但我相信未來仍然會是自駕車的天下的!希望在不遠的未來就可以看到完全不需要人操作的車子上路!