手把手自己造無人駕駛車,是什麼樣的體驗?
文:江浩
9月中旬有幸參加了優達學城、pix 和 Autoware 聯合舉辦的線下無人駕駛實訓,收穫頗豐。這篇文章的目的,一方面是我對這次線下實訓的覆盤總結,另一方面,感興趣的同學也可以藉此瞭解實訓的具體內容。
本次參加實訓的同學都很厲害,有來自上汽、NEVS 等主機廠的工程師,有來自滴滴的軟體工程師,有來自創業公司 CEO,還有來自上海交大、同濟和東北大學等知名高校的學霸。而導師們分別來自優達學城、pix 和 Autoware 3個主辦方。
實訓基地實訓內容
實訓的最終目的是實現紅綠燈的啟停。具體來說,車輛在進入無人駕駛模式後,沿著錄製的軌跡自動行駛,當行駛到紅綠燈前方時,對其進行識別。如果是綠燈則繼續行駛,是紅燈則需要在規定的範圍內停車。當綠燈亮起時,車輛再次啟動。
說起來容易做起來難,無人駕駛是一個系統工程,想用實現這個看似簡單的功能,需要的知識著實不少。下面就來說說我們小隊是如何做的。順便說一句,我們的隊名是“紅鯉魚與綠鯉魚與驢”,考慮到我是南方人實在分不清“l”和“n”的發言,簡稱“鯉魚隊”。
首先,在名古屋大學教授 Alex 和優達學城導師 Aaron 的指導下,我們學習了 Autoware 的基礎知識,完成了 GPU 版 Tensorflow、ROS 和 Autoware 的安裝。Autoware 是一款連線程式碼和硬體的軟體,類似於百度的 Apollo.
Autoware 介面Autoware 介面
然後,把鐳射雷達和攝像頭連線到 Autoware,通過攝像頭採集試驗場地的環境資料,用來訓練紅綠燈檢測器。
接下來是製作高清地圖。開車繞行試驗場地,通過車載鐳射雷達(Velodyne 提供)生成點雲,再通過 Autoware 製作成高清地圖。
鐳射雷達檢車到的試驗場地 高精地圖製作好高清地圖後,就可以實現車輛的尋跡功能了,也就是通過 Autoware,讓車輛在設定好的軌道上行駛(無需人工控制),類似於火車沿著軌道行駛,只不過車輛沿著的不是金屬的軌道,而是 Autoware 中的“路點”。
要實現最終目的,還需要編寫一個紅綠燈檢測器。檢測器對攝像頭拍攝到的影象進行識別,識別的結果輸出給 Autoware,再由 Autoware 控制車輛行駛或者停止。
最初,我們打算使用深度學習演算法訓練紅綠燈檢測器,但是檢測效果並不好,後來改用傳統的計算機視覺,影象識別的準確率能達到 87%,優化引數後,準確率接近 95%.
這一切都準備完畢後,就可以對車輛進行檢測和優化了。由於前期進度較慢,一直到晚上 8、9 點我們才有時間去試驗場。檢測效果不錯,優化引數後,車輛能夠準確識別紅綠燈,並且在規定範圍內實現啟停。
夜間測試雖然晚上檢測的效果不錯,但是並不代表白天也是如此。第二天,也就是比賽當天,我們隊的表現並不如人意。原因其實很簡單,白天拍攝到的影象背景太複雜,紅色的地面,綠色的樹木,甚至彩色的衣服(攝影師小妹妹快走開,你的衣服上怎麼紅綠黃三色都有!),都會對紅綠燈的檢測造成影響。而在夜晚,背景一片黑色,紅綠燈的檢測要容易得多。
三色毛衣是鯉魚隊的噩夢讓我難以理解的是,我編寫的識別紅綠燈的程式碼,使用白天拍攝的影象進行檢測,正確率接近 95%,但是兩天後在試驗場上卻識別不出來了。想必還有許多影響因素沒有考慮到,在無人駕駛領域,我還需要多多研究,提高自己。
實訓收穫
雖然最終結果不是太理想,但是在在 5 天的實訓中,我們收穫太多。
1 實車測試
作為優達學城《無人駕駛工程師》的學員,我們都具備一定的相關知識,但是幾乎沒有在真車上做過測試,執行自己的程式碼。這次實訓,讓我們在短短5天的時間裡,實現了從0到1的跨越。我們不但掌握了Autoware的基本操作,編寫了相關程式碼,學習了線控知識,還親手生成了點雲和高精地圖,親眼看到自己編寫的程式碼在車輛上執行,親身體驗了測試車輛的整個過程...
2 實踐學過的知識
知識不是用來學的,而是用來實踐的。只有實踐過的知識才能顯示其價值。在完成《高階車道線識別》專案的過程中,為了消除影象失真,需要對攝像頭進行校準。校準很簡單,只需要幾行程式碼。不過,能在實踐中應用這幾行程式碼,仍然讓我有點激動。
圍棋棋盤校準攝像頭3 體會到模擬和試驗的差距
我是《無人駕駛入門》的助教、《無人駕駛工程師》的學員,完成過紅綠燈檢測、車道線識別、交通標誌識別等專案,但是它們和實訓專案有很大的區別。
首先,以前的專案使用的都是課程中提供的資料集,而實訓中使用的資料都是我們自己採集的。後者需要考慮更多事情比前者多得多。比如,在使用攝像頭採集紅綠燈資料時,需要對攝像頭對焦,否則採集的影象模糊不清,根本無法使用。我們隊由於缺乏經驗,就犯過這樣的錯誤。再比如,《交通路牌識別》這個專案使用深度學習的方法識別 43 種交通標誌,資料集是課程中提供的。而在實訓中,我們需要自己給採集的影象打上標籤,以區分紅綠燈。
其次,模擬中可行的方案,在實車上未必有用。我們的最終目的是在實車上實現紅綠燈的啟停,所以編寫一個紅綠燈檢測器。我做過一個識別紅綠燈的專案,準確率達到 95%,這樣的準確率完全可以滿足專案的要求,本來想直接用在這裡,結果卻發現不可行。為什麼?因為專案中使用的資料集只包含紅綠燈,沒有其他干擾,識別起來相對容易。
但是攝像頭採集到的影象卻並不是這樣的,影象中還包大量背景資訊,綠色的樹,藍色的天空,紅色的地面,刺眼的陽光,甚至身穿紅綠黃三色毛衣的攝影師小妹妹(曾經的噩夢啊,不過很好奇程式碼會識別成什麼呢?),都會對識別結果造成影響。如何排除這些干擾,也是必須要考慮的。
攝像頭採集的影象最後,在完成實訓專案的過程中,我對學過的知識又有了更深的理解。比如,曾經做過一個小習題,讓我利用給定的yaw rate資料,求出汽車行駛時的角度。在數學上這是一個很簡單的問題,只需要對 yaw rate 求積分就可以了,然而我並不知道這些資料是如何得到的。在這次實訓中,我發現 autoware 匯出的路點資料就包括了這些資料。雖然都是獲得資料,但是自己親手測量資料,和使用別人給的資料,感覺完全不同,這兩者的區別,就好像一個是看別人玩遊戲,另一個則是自己親自參與遊戲。
路點資料4 遇到了不少困難
在實訓過程中,我們也遇到了不少困難。比如,機器部署出現錯誤、作業系統奔潰了、工控機電源燒了、鐳射雷達燒了...多虧了優達學城 Aaron、pix 曾工以及名古屋大學教授 Alex 的幫助,讓我們在第一時間解決了這些問題。遇到困難並不一定是壞事,沒有什麼事情是一帆風順了,如果真的有,那也不值得做。
最後,非常感謝優達學城、pix 和 Autoware 聯合舉辦的這次線下實訓,感謝三位導師 Aaron、曾工和 Alex 對我們的幫助。還得感謝pix的行政人員,每餐都有貴陽美食,每天都有豐富的夜宵,而且還不帶重樣的!回重慶後我稱了下體重,足足重了 5 斤。
如果你想了解線下實訓的更多細節,可以移步閱讀導師 Aaron 的文章:
TBA