Udacity自動駕駛模擬器試玩

前段時間偶然看到一篇交通標誌識別的文章,順藤摸瓜發現了Udacity的《無人駕駛車工程師》的課程。自動駕駛這個啊,一顆賽艇。Udacity的github 上有開源的課程project資料,方便我們站在巨人的肩膀上前進。 這次我們就來玩其中一個比較好玩的--模擬駕駛遊戲。

在項目主頁 udacity/self-driving-car-sim 我們可以了解到,這個模擬器其實就是一個用unity開發的小遊戲。既然開放了項目原始文件,我的第一反應就是可以自己動手改造它了,嘿嘿。

安裝好unity打開項目之後,密密麻麻各種菜單,看得我一臉懵逼,不知從何下手。

所以還是先下載build好的exe試玩再說吧。

Instructions: Download the zip file, extract it and run the exectution file.

Version 2, 2/07/17

Linux Mac Windows

Version 1, 12/09/16

Linux Mac Windows 32 Windows 64

用滑鼠或者鍵盤都可以控制方向。用鍵盤加速和剎車。反正控制起來還是挺不順手的。各種靈敏度沒有調教好。最好還是用鍵盤,相對比較好操作一點。

另外就是中間這輛灰頭土臉的是什麼鬼?還要開著這輛破東西好多圈生成訓練數據呢。

開這個simulator,並使用autonomous模式之後,啟動drive.py就能控制車輛了。

我使用的環境是win弱雞筆記本+帶GTX 1060 GPU的入門深度學習devbox。得搞清楚simulator和agent怎麼通訊的,最好讓drive.py跑在devbox。隨便看一看drive.py的源碼,是典型的C/S架構,通過http介面交互。那簡單改一下ip地址就能實現simulator和控制駕駛的agent在兩台不同機器上運行了。

那就定兩個小目標,然後開搞:

  1. 替換破車。
  2. 修改ip支持drive.py跑在另外的devbox機器上。

Unity官方的入門視頻教程比如Unity - Roll-a-ball tutorial還是不錯的。隨便看幾集,了解基本的概念然後開搞就可以了。畢竟兩個小目標應該還是比較簡單的。

可以發現原來的破車叫SkyCar.fbx。那為了偷梁換柱,最好找一個豪車.fbx

我在這裡free3d.com/3d-model/aud 找到一輛免費的audi r8(沒收廣告費啊)

拖到原來的SkyCar裡面。然後把skycar的外殼縮小(避免代碼里被引用到啥的),把奧迪重疊到破車上面。

剛拖動進去,發現新車也是灰頭土臉的。後來亂設一通,終於找到該設置哪個part和mesh renderer。

比如車身是Plane_MeshPart1,雖然其他part的高亮看起來好像也是車身。最主要還是設置兩個貼圖:車牌和尾燈,下載的模型包裡面已經有對應的圖片了。

換好車,接下來就是改埠了。grep了一把代碼,找到這個Assets/SocketIO/Scripts/SocketIO/SocketIOComponent.cs

namespace SocketIOn{ntpublic class SocketIOComponent : MonoBehaviournt{ntt#region Public Propertiesnnttpublic string url = "ws://127.0.0.1:4567/socket.io/?EIO=4&transport=websocket";nttpublic bool autoConnect = true;n

發現改了沒用!??開始懷疑人生,以為是build配置或者visual studio哪裡設置不對。搞了大半天,還是不行。

不死心,又grep了一把,發現有一個meta文件也有,應該是unity的配置。才想起來在視頻里看到過的,界面裡面可以覆蓋變數值。

終於改好了。只是為了學習可以這麼改ip。但如果devbox的無線網卡ip變了就得重新build。更好的方法,還是直接做一個埠轉發。後來看gluon的教程,剛好發現裡面提到ssh直接就可以埠轉發。不用費勁安裝配置其他軟體,所以我趕緊打開git bash試了下。

ssh -L 4567:localhost:4567 qunheadmin@10.1.10.4n

也是可以的。

熟悉一下unity還是有好處,如果有其他idea比如增加其他車輛構造複雜路況也需要使用unity進行開發。

加上Audi之後的項目源碼 dinosoft/self-driving-car-sim

Win環境build好的exe pan.baidu.com/s/1mhTW6b


環境搞好,來訓練自動駕駛的agent吧。用的是NVIDIA的 End-to-End Deep Learning for Self-Driving Cars這篇paper提到的方法。

官方的博客的介紹 End-to-End Deep Learning for Self-Driving Cars,基本就是論文的內容+一些視頻演示。

輸入是左中右三個攝像頭的圖像,輸出是轉向的角度。模擬器記錄的也是這樣的圖片

網路結構這裡有一份寫好的 naokishibuya/car-behavioral-cloning

我手動跑了4、5圈,記錄了4w+圖,訓練了60個epochs,可以開一圈不翻車。不過多開幾圈還是會掉湖裡。

End-to-End用起來是挺爽,省體力。但是這樣簡單跑出來的東西還是不夠可靠,論文里提到模型的評估是 human interventions多少次。

下面這個是我的devbox開的車。

https://www.zhihu.com/video/908052069250895872

還是有優化的地方的,這裡先拋磚引玉, 希望大家玩得開心。


Udacity 無人駕駛車工程師 其他筆記

推薦閱讀:

未來汽車的發展方向是什麼?
700行Python代碼做一輛無人駕駛車,感興趣么?
與法規障礙相比,無人駕駛汽車技術問題更突出 | 陳經
技術乾貨|從FMEA角度來分析如何在開發過程中降低自動駕駛的風險
無人駕駛汽車出現事故應由誰負責?

TAG:深度学习DeepLearning | 无人驾驶车 | 机器学习 |