市區內自動駕駛策略開發

2019/04/11

吳明軒副研究員 /工研院機械所

前言

根據台灣警政署統計數據顯示,A1類道路交通事故(係指車輛或動力機械在道路上行駛,致造成人員當場或24小時內死亡之交通事故)中高達9成以上被歸類為駕駛人過失,而其中最嚴重為「未依規定讓車」占一成以上,這當中的原因包含了駕駛人無法理解或是誤判了對方的意圖,會有這樣的問題是因為人類駕駛開車時行為大都仰賴預測,當人類無法預測出其他駕駛人或用路人的行為時就容易發生事故,當然這其中還包含人類駕駛或多或少都會冒著一定程度的風險做決策。而自駕車與人類駕駛目前最大的差異就在於自駕車所仰賴的是絕對精準的規則,只要是規則所規範外的情形自駕車絕對不會去實施,但也因為這點使得自駕車的開發非常困難,倘若自駕車的程式開發者在其程式碼對於路口交通的其中一項處理這樣描述「右轉前必須讓行人先通過」,這段描述看似正確,實際上考慮到台灣市區的路口交通情形,若自駕車在行人還很遠或者是行人已經通過但還沒走出行人穿越區時沒有行駛通過而是繼續在原地等待,恐怕會使後方的駕駛不耐煩的一直按喇叭催促,先不討論在行人還在穿越區時自駕車通不通過的合理性,上述的情況已經存在發生交通事故的風險,因為台灣的駕駛容易「預測」前方的車輛在沒有碰撞行人疑慮時會右轉通過路口,因此可能造成自駕車後方駕駛煞車不及而追撞自駕車,當然當路上全都是自駕車時的路口就不會發生這樣的問題,因為大家都遵守的一樣的規則,不過不遠的未來在台灣最有可能的情形是非常少數的自駕車與多數人類駕駛同時上路的交通環境,事實上這在美國已經發生有一小段的時間了,自駕車公司Waymo在亞利桑那州推出無人自駕車接駁服務[1],並且持續的在累積自駕車的總里程數,如圖1,自駕里程數在2018到2019年間有爆炸性的成長,而相對於里程數快速增加,自駕系統發生例外或程式無法處理的比率卻是緩慢的下降,如圖2,雖然目前只是里程數爆炸性成長的第一年,還需要持續觀察,但這樣的趨勢可能說明自駕車的發展還需要一個除了累積里程數之外的契機。

 

圖1 Waymo 累計自駕里程數

資料來源: Waymo

 

圖2 Waymo Disengagement Rate

資料來源: Waymo

 

在自駕車與人類駕駛混和的環境中,自駕車除了規則之外必須要了解與學習人類駕駛的行為與習慣嗎?首先,「了解」就為包含在「預測」的其中一個非常重要的因素,為了做到更準確的預測,PerceptionRNN[2]使用了深度學習的技術去預測自駕車周圍其他車輛的行駛狀況。當自駕車可以預測人類駕駛的行為時就有辦法做出比較靈活的應對,同樣是在市區內常常發生的場景,若一輛車以低於正常車流的速度緩緩的在路邊行駛,不管其有無以方向燈提示後方,通常我們會嘗試對這輛車的行為開始進行理解與預測,「他在找路」、「他想要路邊臨停」或是給出無法預測的理解「他好慢,不知道想幹嘛」,若是可以預測出屬於前兩種行為時,自駕車便可以在適當的時機與合理的空間下進行超車,倘若自駕車沒有辦法理解與預測又或是程式開發者沒有讓其去理解並預測人類駕駛的行為時,就只能採取原本設計好的被動措施,讓自駕車跟著前車緩緩行駛以避免碰撞,倘若此時前方駕駛慢到停下來並下車買東西,那麼自駕車將可能被卡住並需要隨車測試駕駛或測試工程師接手,這樣的做法與預測並超車的策略相比並非不好或不對,但這的確會變成在人類駕駛環境中全自駕這個願景下必須突破的障礙。

 

讓自駕車可以理解並預測人類駕駛的行為雖然很難,但達成這件事是指日可待的,靠著各家新創自駕車公司的相互競爭成長,不斷堆疊累積的自駕里程數、更多的資料、更加進步的演算法,我們可能比我們想像的接近這個目標,但是,自駕車是否該向人類學習其駕駛行為或習慣? 事實上,當程式開發者是人類時自駕車就注定是向人類(程式開發者)學習駕駛行為,差別在於程式開發者可以將所有的交通規則一條不漏的寫入自駕程式中,然而人類駕駛則是憑著經驗與習慣在開車,經驗與習慣相對於交通規則是學習不完的,這也就是當今交通規則還在一直不斷修訂的原因之一,永遠都會有在規則無法規範外的情形發生,如何有效的學會新的交通情形,另外,應該向誰學習其經驗或應該學習哪些行為都是開發自駕車策略很重要的因素。除了自駕車向人類學習,那麼人類駕駛是不是也需要了解自駕車的行為呢?AXIOS報導[3]統計,從2014年到2018年間在美國加州所發生的自駕車事故,如圖3,共88件中只有7件被歸咎於自駕車的責任,目前調查報告中多半原因為人類駕駛不了解自駕車的行為所造成,報導中引用人工智慧專家Andrew Ng的話,行人需要改善他們的行為習慣並去熟悉如何安全的在自駕車周圍行走,雖然最終自駕車應該要盡可能的完美到解決當今馬路上的各種交通狀況,但以目前的發展進度來說,這或許是加速推動對自駕車上路的其中一種方法。

 

圖3 加州自駕車事故統計,2014-2018年

來源: State of California Department of Motor Vehicles, Guilhem/The Noun Project, Andrew Witherspoon/Axios

 

自駕車策略開發

看過電影I, Robot(台譯:機械公敵)的人是否記得,電影開頭便以科幻小說家Isaac Asimov著名的機器人三大法則(Three Laws of Robotics)來做為引言:

1.機器人不得傷害人類,或看到人類受到傷害而袖手旁觀

2.除非違背第一法則,機器人必須服從人類的命令

3.在不違背第一及第二法則下,機器人必須保護自己

 

以這三項圍繞著道德的準則為核心,電影裡可以看到各式各樣不同的機器人,但對於目前的自駕車發展情形,在探討道德層面之前,必須先解決核心技術問題,在自駕車的策略開發上我們也可以借用這個概念,訂定幾個核心技術的準則,如:1.自駕車不能主動去撞擊其他物體,2.在不違背第一法則下,自駕車應避免被其他車輛追撞等等,再透過這些準則,向下延伸出細項的規範,讓自駕車軟體可以遵循著這些訂好的規範行駛。

 

1. 行為準則策略開發

California Partners for Advanced Transportation Technology提出20餘項自駕車應具備的行為能力[4],而自駕車公司Waymo則在其安全報告[5]中更基於此將行為能力延伸至40餘項,這其中大致圍繞著幾個大方向展開,分別為:能夠針對交通標誌、燈號、暫時性的交通標示(如交通錐)做出反應;能夠遵守交通規則;能夠不主動與其他物體發生碰撞;能夠處理不同的道路型態(如匯流、分岔或非結構性道路的施工區),而在台灣的市區內,首要解決最複雜的問題就是路口,如圖4,光是一個十字路口就足以包含前面所列的大項目,雖然這幾個項目互相之間看似沒有矛盾存在,但如果我們真的照著這些項目分開設計自駕策略的話馬上就會遇到一堆的問題。

 

圖4 路口交通

資料來源: Altaplanning

 

試想,在剛轉為綠燈時前方有一排等待的車輛,因為人類反應時間延遲的關係,越後面的車就只能越晚起步,因此自駕車決策若是認為綠燈應該馬上起步,就會直接撞上前方車輛,對於這種條例式的行為準則,必須使用優先權區分執行的先後順序,才能夠避免條件同時滿足時的決策衝突發生,然而在同樣的場景內同時可能發生的決策種類越多,那麼設置優先權反而會限制了決策架構發展的彈性,再舉一個在市區內很常見的交通場景,當一輛車行駛在中間車道並於下個路口要進行右轉,此時要想辦法切換到外側車道以便右轉,同時還要注意前方燈號狀態、右側車道障礙物、前方障礙物、對向待左轉車輛以及右側行人穿越區上的人,其中,變換外側車道時到底要先減速待右方車輛通過後再執行,又或者是加速切入車道,同時還得考慮前方車輛的速度與距離以免碰撞,這部份決策的優先權是很難釐清的,此外,也由於市區交通的複雜,一套決策行為的優先順序不會是絕對的,若是在右轉之前已經處在外側車道,需要做的決策只有判斷前方車輛與紅綠燈狀,以及開始右轉時右側行人的動向與位置,已不適用於先前起始為非外側車道的案例了,而在台灣,鑒於畸形的車道設計,右轉途中可能還要注意車輛右側的直行機車,如圖5。

 

圖5 右轉車道在機車道專用道左側

來源: Google Map

 

條例行為準則對於自駕車的決策或許因需解決複雜的相互關係而不易設計,但條例式的列表卻非常適合拿來當作自駕車決策的測試,自駕車公司Voyage就提供了一個開源的自駕車安全測試框架Open Autonomous Safety[7],將一條條的行為準則的實施細節與預期結果寫入程式,並訂定測試標準格式,執行後便會自動判斷程式開發者所寫的自駕車決策軟體是否通過Voyage所提供的安全測試,圖6為其測試條例中的一項關於前方車輛緊急煞車的描述,在這個測試中自駕車決策軟體必須要先經過流程A,然後B,在測試程式判斷A與B的預期結果都滿足以後才會結束(流程C)並通過測試,若未來這樣的測試有一個標準化的規範與項目,透過一定數量的測試,便可以保證自駕車的決策符合一定程度的預期,幫助推動自駕車上路。

 

圖6 自駕車決策測試情境:前車緊急停止

來源:https://oas.voyage.auto/scenarios/car-following.html

 

2.機器學習策略

有別於傳統以條例式的行為準則開發決策,另一派的研究則利用機器學習的方法,直接將原始感測器資料處理成油門、煞車與方向盤這些控制命令,我對於2017年參加NVIDIA於台北舉辦的GTC大會時一個演講所播放的影片印象深刻,一台小型的遙控車透過相機鏡頭接收的影像穿梭在沒有道路並且充滿雜物的院子裡,影片內遙控車的系統架完全依靠一個深度學習神經網路接收影像作為輸入,並且輸出給遙控車的控制命令,起初遙控車不太能夠順利行走,常常撞到障礙物或卡在障礙物前不知道怎麼辦,但是透過持續的訓練網路,遙控車就可以順暢地閃避障礙物並且自己尋找可以行駛的地方,可惜的是之後未能看到相似的場景應用在真實尺寸的自駕車上,事實上,這樣的做法也難以在真實尺寸的自駕車上實現,最直接的原因在於我們無法對真實尺寸的車子做實際嘗試運作結果並改進的增強式學習(reinforcement learning),因為那必須承擔車子無數次毀壞的結果,再者,誰也無法知道這種端對端深度學習神經網路做決策的依據為何,他有可能是看到障礙物而進行避障,但也有可能是看到被障礙物壓到導致彎曲的雜草做閃避,在這樣的情況下一但自駕系統發生問題除了重新蒐集更多的資料進行訓練之外,難以對系統用任何具邏輯性的方法改善。

 

然而,機器學習的方法並非不適用於自駕車的決策,我們可以將端對端的深度學習網路進行拆解,讓這些網路分為人類可以理解,具有邏輯性的單元,在決策網路部分,將感知單元所處理後的障礙物與環境資料取代感測器的原始資料作為輸入端,而對於輸出端也將單純的油門、煞車與轉向命令取代為避障、跟隨前車與車道變換等等較高階層的邏輯決策判斷,如此一來在網路出錯也能針對其加以分析並改善,例如當前方沒有障礙物輸入時網路卻給出了一個避障的決策,就可以調整跟障礙物有關的神經元,並補足特定的情境資料加以訓練,而這樣的拆解也會帶來另外一個好處,藉由搭配專家系統的決策執行單元,即使決策錯誤也不會造成立即性的危險,因為執行單元會自我判斷執行的條件是否充足,若無障礙物卻得到避障指令的話,避障執行單元便會丟出警告通知,防止錯誤發生。

 

3.特定任務策略開發

相較於Waymo、GM Cruise、Uber等較知名的自駕車公司都在測試時,一家歐洲公司EasyMile已經在各大校園試營運他們的小型無人自駕接駁車EZ10,如圖7,在2017年也與台大合作在其水源校區提供民眾試乘活動[8],並將EZ10作為台大自駕車團隊研發用的平台測試車,雖然當時的試乘活動上能以平穩的速度行駛在校園中,但是並沒有展示自駕車全部的功能,實際上觀察發現EasyMile的技術不比那些新創自駕車公司好,其能夠快速上路營運的關鍵在於他們不同於自駕車公司的策略設計,對於接駁任務來說,自駕車只需要穿梭在一條特定的路線,相較於一般自駕車公司想要提供市區內的接送服務要來的簡單,這樣的一條路線雖然有行人也有其他車輛,但是大部分都是可預期的,大家可以回想一下上下班的路線,是否對每個路口的交通都瞭若指掌,甚至可以熟記每個紅綠燈的秒數、狀態呢,對於自駕車來說,在一個特定路線上可以將其策略對於每個路口、每個路段或每個特殊地點做最佳化,像是紅綠燈與紅綠燈之間的配速就不一定要定在速限上,考慮到秒數之間的差異,可以在某些路段提升或減少車速,達到每個路口都可以是綠燈通過的狀態,由於每個路口的形狀與交通特性也都不同,有些路口處在交通幹道上,在上下班時間要注意大量的車流與人潮,因此對障礙物偵測的權重就要提高,而有些巷子附近的無交通燈號路口,此時就要先減速並注意從巷弄死角衝出來的物體,只要在這條特定路線上大量測試並累積里程數,大概只要花一般自駕車不到一半的開發時程就可以達到一樣好的功效。另外,這樣的特定路線策略也不代表不能適用於其他不同的特定路線,因為市區內的任何一條交通路線都可能是相似的,若自駕車軟體可以適用於一條很困難的路線,那要修改此路線的策略到其他路線上也不會是一件困難的事。

 

圖7 無人自駕接駁車

來源: EasyMile

 

關於自駕車人類應該了解的事

身為非自駕車程式軟體開發人員,一般駕駛人不可能深入的了解自駕車的運作,但是透過一些基本的認識,還是可以在路上跟自駕車和平共處,首先,一般駕駛必須先知道自駕車的運行仰賴幾個基本的感測器:雷達、雷射雷達與相機鏡頭,自駕車對環境的認知上無法直接利用這些感測器獲得,這些感測器只提供環境的原始資料而已,如顏色、距離,然後這些資料才經由演算法處理成人類可以理解物件種類、形狀、方向、動向等等供後續決策端參考,然而,目前沒有演算法可以百分之百正確的給出結果,甚至也還沒能達到一般情況下人類的水準,也就是比較容易有誤判產生,當自駕車平穩的行駛在路上時,有可能會因為誤判了前方空無一物的環境為突然出現的障礙物而緊急煞車減速,一般而言,若是後方的人類駕駛有保持安全距離的話不會發生什麼問題,但一般人類駕駛都會因為前車的前方沒有物體而預測前車不會緊急煞車,導致實際上保持的車間距離太短,在設計時為了避免誤判障礙物而導致自駕車急煞,程式開發者通常會對這種狀況做一些雜訊訊號處理,然而,雜訊的濾除帶來的壞處就是可能真的濾掉了實際上存在的物體,也就是說,我們應該讓自己看起來不像雜訊,對於相機鏡頭來說,我們應該處在光線良好的地方避免偵測效果變差,對於雷達來說,應避免與其他物體靠得太近,以免難以被正確的區分出來,對於決策演算法來說,應避免出現在不該出現的地方,2018年3月18號Uber在測試自駕車時發生一起死亡車禍​[6],其中,調查報告指出,在碰撞發生的6秒前雷達與雷射雷達就已經偵測到正在非行人穿越區穿越馬路受害者,但當時受害者並未處可以被路燈光線直接照到的區域,碰撞發生之前不斷的被辨識為未知物體、車子或腳踏車,或許可能是因為不在行人該出現的地方而使演算法判斷為行人的機率減少了,雖然這並未是最後導致碰撞發生的主要原因,但試想若受害者可以被正確判斷為行人的話,可能可以使自駕車有不同的決策選擇來避免碰撞。

由於近年來無論是半自駕或全自駕已經發生過多起的自駕車相關死亡車禍,想必現階段的自駕車都會設計得更加趨近於保守以避免嚴重事故發生對自駕車產業的衝擊,尤其是行人相關的事故,自駕車產業很難再經得起幾起的死亡車禍,因此在事故率最高的路口處,自駕車都會等到確定現在環境非常安全之後才會行駛,也就造成了其他駕駛人覺得自駕車很慢或是為何老是走走停停的情況,若是在了解這些的基礎上一般駕駛人可以對自駕車隨時保時相當的安全距離,相信這層面對於減少發生人類追撞自駕車的事故的幫助可能比改善自駕車本身的表現更加有效率。

結論

鑒於現在越來越多開源的自駕車軟體與其策略設計,讓原本複雜的自駕車策略開發有基本的規則可循,對於前幾名的自駕車公司而言,其控制策略早已可以讓自駕車任意穿梭在城市間,即使技術上自駕車發展進度可以達到幾年前大家預期的程度,但是卻未能如預期的普及,其中的關鍵在於至今仍未有一個全球公認的有效測試標準來驗證各家公司發展的自駕車策略,因而未能對其制定對應法規,因此,在這項測試標準出來之前,全球的自駕車競爭應該都還會是以技術特點為主,而最後誰能夠掌握這項測試標準,誰就能成為自駕車競賽的最大贏家。