自動駕駛計程車(一)─Uber成功的背後…
 
2018/10/10
 
卓建興 | 國立中山大學資訊工程學系
黃英哲 | 國立中山大學資訊工程學系
 
 
你是否曾經在路邊招手許久也招不來一台計程車呢?又或者你打了叫車專線,但接線員卻告訴你你所在的位置目前沒有計程車,請你稍後再撥呢?這些窘境確實是讓人苦惱呢!而「Uber」的出現不僅緩解了上述窘境的發生率,也著實帶給乘客許多的便利性,因為你只需要利用手機下載Uber的APP就可以透過APP叫到車了,抵達目的地時你也不需要使用到現金,因為你只需事先於APP中設定欲付款的信用卡,系統就會直接付款了。如此的便利,進而讓Uber快速竄紅。而Uber究竟是靠著什麼樣的技術,使車子的調度如此的快速及準確呢?
 
其實主要原因為:Uber使用了一款自製的調度系統─「DISCO」,這個系統包含:Google S2地理函數庫、MySQL資料庫、Node.js(一種跨平台JavaScript執行環境)、一致性哈西環(ringpop)…等技術,方能讓車子派遣的速度快又正確。後續文章將會針對Uber的:派遣系統、地圖索引、路線選擇、大量派遣,以及完全系統故障如何解決,為讀者作介紹。
 
 
派遣系統
 
即為了解決每個城市都有不同的供給需求,因此創造了供給服務(Supply Service)及需求服務(Demand Service),而為了符合上述兩種服務,促使了Uber創造了DISCO。「供給服務」主要為追蹤目前有哪些可用的車輛。「需求服務」則在於紀錄乘客的需求,例如:是否介意跟他人共乘,甚至假如當「乘客」換成是一件物品時,那「需求服務」就必須要去檢查座位是否能放的下該物品。因此,所謂的派遣,即為瞭解供給及需求後,將整體「預計抵達時間(Estimate to Arrival)」中最好的供給選擇提供給乘客,簡單來說就是將離你最近的車輛派遣給你,讓司機跟乘客都能擁有最佳的乘車品質,並且減少等待的時間。
 
 
地圖索引
 
該系統設立的目的是希望能夠在一秒內處理上百萬筆的寫入速度(即為你可以在自己的手機上得知你所叫的車目前離你的所在位置還有多遠);至於讀取資料的速度則是越快越好,因為每個人一開啟Uber即是在讀取資料。而關於APP中所使用的地圖,Uber則是利用Google S2地理函數庫將地球切割成許多微小的單元,而每一個單元都是個別獨立的,使得程式的搜尋範圍不會過於廣泛,並藉著單元的劃分,DISCO可以透過使用者的目前位置,迅速的去搜尋車輛給乘客。
 
路線選擇
 
路線的選擇上也有設定幾個高優先度的選擇條件,如:「減少司機額外的開車時間」、「減少乘客等待時間」、「預計抵達時間(Estimate to Arrival)」最佳化等。此外,Uber同時也能讓正在進行的行程,加進選擇之中,進而減少司機的空車時間以及乘客的等車時間。
 
大量派遣
 
為了要能夠隨時掌握目前所擁有的供給量,以及需求量,以利做最有效率的調度與分配,Uber運用了自制的技術,這不僅讓回覆乘客的速度可以更加快速且即時外,同時能夠在當叫車者臨時取消搭乘的情況下,系統立刻重新作需求的搜尋並派遣該司機前往他處接送其他乘客,該技術讓「乘客」及「司機」形成雙贏的局面,乘客可以即時得到回覆,減少等待時間,而司機也不用因為突如其來的「跑單」導致不知道該去何處尋找下一位乘客的困境。
 
完全系統故障
 
為了避免系統完全故障,Uber會使用合作夥伴(司機)的手機與資料中心保持聯繫,DISCO會週期性的傳送加密的行程資料到合作夥伴(司機)的手機上,因此,當資料中心發生突發狀況或故障而導致資料遺失的時候,DISCO就可藉由合作夥伴(司機)的手機重新上傳目前的行程資訊,以保障司機及乘客的權益,讓行程不受影響且仍可以照常進行。
 

Uber的出現成功的改變了以往搭乘計程車的叫車模式,因為我們不再需要站在路邊招手攔車以及面臨目前該區域附近沒有計程車可以接載等窘境的機率。你只需要於手機內安裝Uber的APP,所有的相關資訊你都可以即時掌握在手,整趟行程結束時,你也不需要透過金錢交易,事先於APP中設定欲付款之信用卡,系統即會於目的地抵達時自動作扣款。上述的種種確實都替生活忙碌的現代人提供了不少的便利性,即便使用Uber叫車的過程已相當簡單、便利,但Uber仍不忘它的終極目標─將所有的車輛都改成自動駕駛,如此一來,日後則不再需要依靠人類作為司機了!而該目標是否能夠成功呢,就讓我們拭目以待。

 

總編輯:國立中山大學資訊工程學系 黃英哲教授

(本文由科技部補助「新媒體科普傳播實作計畫」執行團隊撰稿)
 
瀏覽人次:44