Skip to content

Commit

Permalink
✍🏻 post: eli5-how-does-self-driving-work
Browse files Browse the repository at this point in the history
  • Loading branch information
tomy0000000 committed Sep 6, 2024
1 parent 909ed7a commit 51afde9
Showing 1 changed file with 86 additions and 0 deletions.
86 changes: 86 additions & 0 deletions content/posts/eli5-how-does-self-driving-work/index.zh-tw.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
title: "ELI5: 如何在自家後院打造一台自駕車"
date: 2024-09-05T02:44:53-04:00
lastmod: 2024-09-05T02:44:53-04:00
description: "不就是放大一點的遙控車嗎,應該不難吧 (?)"
categories: ["📱 科技"]
series: ["🙋🏻 ELI5"]
tags: ["🛞 自駕車"]
---

實習最後幾天有幸跟做自駕車核心演算法的同事聊了一下,學到不少。

這篇文就把大家當 5 歲小孩,簡單教大家如果在自己家的後院造一台自駕車吧!

## 🛠️ 給西

如果你要蓋一間小木屋,你可以去 Home Depot 或特力屋買到所有你需要的材料和工具。但絕大部分需要用來打造自駕車系統的工具,都是各家公司自己打造的 [^1],所以你需要各種工具,也都需要自己打造。比方說 Cruise 打造了這個叫 [Worldview](https://medium.com/cruise/introducing-worldview-749aaf98112d) 的套件。好不好用......我也不知道,但看看他們放在部落格上的圖片,簡直酷斃了。

## 🚙 造車

大部分自駕車公司會選擇跟現有的車廠買車,然後拖回家爆改,或是像現在在舊金山市區跑的 Waymo 是 Jaguar 為他們客製化的。也有些公司,對於自駕車有不同的想像,那可能就會選擇自己從頭把車子造起來,比方說 [Zoox](https://zoox.com/vehicle)

---

接下來是核心的自駕車演算法。

用一個人開車來比喻的話,一般駕駛的流程大概是:

1. 駕駛觀察周圍環境
2. 預測周圍的車、行人、環境接下來的變化
3. 做出相對反應的操作

自駕車的運作邏輯也差不多,就一個一個按順序介紹:

## 👀 Perception

第一步對應的步驟叫做 <abbr title="感知">Perception</abbr>,車子會透過 <abbr title="光學雷達">Lidar</abbr>、鏡頭、或是其他感測器來偵測周圍的環境。

這些訊號進到系統之後,還要經過一系列的程序,把訊號轉換成有用的資訊,比方說:

- 前面的這個寬 3 公尺的方塊正在向前移動,他可能是台車子,不可撞。
- 路邊有一塊半透明的不明物體漸漸往路中間移動,可能是塑膠袋,可以嚕過去。

一個著名的路線之爭就是

> 自駕車要不要用 Lidar?
開車經驗稍微豐富的人就會知道,有時候在高速公路上,即便我們正前方的車沒有減速,但我們可能會透過看到更前面的路況,因此預先踩煞車。一般來說,現在的攝影鏡頭能感知到的範圍很有限,一方面受限於鏡頭解析度 (拍攝畫面清不清楚),另一方面也受限於系統資源 (電腦沒辦法即時處理大量的影像畫面)。Lidar 的訊號則可以輕鬆的收集更遠的環境資訊,準確度也較高,缺點就是裝在車上非常突兀,不符合 Elon Musk 對車子的審美觀。

[Tesla](https://www.tesla.com/support/transitioning-tesla-vision) 主張他們不會採用 Lidar 車子也可以開的好好的,未來能不能跟 Lidar 派平起平坐,還有待觀察。

除了即時偵測環境,有些自駕車公司也會收集某些特定的區域的[高精準度地圖](https://waymo.com/blog/2020/09/the-waymo-driver-handbook-mapping/),比方說一條路上哪裡有標線、路樹、停車格、消防栓、紅綠燈。預先知道這些物件,可以降低不穩定性、提前決策。但收集這種地圖的資訊也非常耗費時間、人力成本,另外,如果車子開到的這條路今天剛好在施工,跟預期的道路長的不一樣的時候,應該要相信偵測到的訊號,還是懷疑下水道的煙霧阻擋了相機?

## 🧠 Prediction

車子不只要能夠看到右前方有一個人,在做出決策前,還要知道他接下來會不會走到車子前面。換句話說,還要能夠預測每個周圍物件的下一步。

而且預測的範圍是:車子周圍的每一個物件。假設這個行人即將走到車子前面,車子應該煞車,左轉,還是右轉呢?這可能也取決於左右兩邊,甚至後面的車子。

另外,演算法對於預測的結果有多少把握?有沒有可能失準?決策要怎麼跟預測結果配合?都會是很複雜的問題。

對於 L3、L4 的自駕車演算法,有時甚至還得產生多種不同的情境,來應付可能的複雜場景。

## 📢 Decision

現在車子的腦海裡有接下來幾秒可能會發生的事,下一步就是生成對應的決策,比方說要煞車還是轉彎?

這個步驟其實就跟[《超急快遞》中的一個片段](https://youtu.be/UMQwFhYMlqY?si=Dr4yIfF4nI2V7dUL&t=114)非常相似,先產生很多決策,然後從中間選擇一個最合理的來執行。

這一步考慮的不只是安全,也可能會考量乘客的舒適度等其他更複雜,難以想像的因素。比方說,前面突然有障礙物 (所以為了減少「突然」的機率,又會回到是否要採用 Lidar 的問題),雖然車子覺得煞得住,但可能會對乘客產生強大的後座力,那轉向右邊的空地會不會更好一點?

## 🛞 Motion & Control

現在車子知道要在接下來的 2 秒內從 40km/hr 減速到停止,那煞車要採多少,怎麼踩?踩太用力,乘客不舒服,踩太慢,可能會煞不住。

不同廠牌的車子可能也有不一樣的機械參數,沒辦法用同一套標準來執行,有些車打一圈是轉 90°,有些車得打兩圈。

要怎麼真的踩煞車、打方向盤,硬體、機械控制組件要怎麼配合又是另外一回事了......

最後一個問題,行車電腦當機了怎麼辦?

[^1]: 顯然這是一個重複造輪子的概念(?

---

當你成功解決上述所有的難題之後,一輛自駕車就誕生囉!

0 comments on commit 51afde9

Please sign in to comment.