樹莓派上利用 Tensorflow 實現小車的自動駕駛

  • 2019 年 10 月 29 日
  • 筆記

來源:http://t.cn/E2w8Ysr

  • 整體流程
  • 注意事項:
  • 具體製作流程:
  • 正在進行一些改進:

先拋出大家最關心的——代碼地址:

github傳送門:https://github.com/Timthony/self_drive

碼雲傳送門:https://gitee.com/tiantianhang/self_drive

基於樹莓派的人工智能自動駕駛小車

整體流程

電機控制 攝像頭調試 道路數據採集 搭建深度學習模型,參數調試 自動駕駛真實道路模擬 參數最終調試

使用方法:

  1. 先將樹莓派小車硬件組裝好
  2. 使用zth_car_control.py來控制小車的前後左右移動,配合zth_collect_data.py來人工操作,使小車在自己製作的跑道進行數據採集。(該過程在樹莓派進行)
  3. 數據採集完成以後使用zth_process_img.py來對採集的數據進行處理,之前當前先完成一些數據清洗的工作。(電腦上執行)
  4. 使用神經網絡模型對數據進行訓練zth_train.py,得到訓練好的模型。(電腦上執行)
  5. 在樹莓派小車上使用zth_drive和訓練好的模型,載入模型,即可實現在原先跑道的自動駕駛。(樹莓派上執行) 注意:只需要使用上述提到的代碼即可,別的都是一些初始版本或者正在增加的一些新模塊。

img

注意事項:

  1. 賽道需要自己製作,很重要,決定了數據質量。(我是在地板上,貼的有色膠帶,然後貼成了跑道的形狀)。
  2. 賽道的寬度大約是車身的兩倍。
  3. 大約採集了五六萬張圖像,然後篩選出三四萬張。
  4. 攝像頭角度問題

具體製作流程:

  1. 小車原始模型,某寶購買玩具車即可,比如:有電機,有自帶電池盒(給電機供電)
  2. 樹莓派,攝像頭,蓄電電池組(用於樹莓派供電)
  3. 使用一些螺栓,螺柱,亞克力板將樹莓派,蓄電電池固定在小車上(具體方法,看手頭的工具吧)
  4. 組裝好以後,樹莓派通過VNC連接電腦,登陸樹莓派,在樹莓派安裝keras環境,以便最後調用訓練好的模型。
  5. 關於小車的控制(電機控制,攝像頭採集數據),都在源文件,有注釋,大致思路就是通過方向鍵AWSD來控制方向,使用了pygame的工具包。
  6. 通過電腦端的wasd方向鍵手動控制小車(已經VNC連接好)在製作好的賽道上進行圖像採集,直線部分按w,左拐彎按a,右拐彎按d等,建議採集50000張以上。 (採集的圖像命名要求為,0_xxxx,1_xxxx,其中首位字母就代表了你按下的是哪個鍵,比如圖像是0開頭,那麼這張圖像就是直行,按下的是w鍵,這些0,1,2,3,4 數字就相當於數據的標籤值)
  7. 將圖片從樹莓派拷貝下來,進行數據清洗,使用電腦端的深度學習環境進行模型訓練,使用的模型可以自行定義。
  8. 將訓練好的模型文件.h5拷貝到樹莓派,然後通過樹莓派調用載入模型,即可處理實時的圖像,並且根據圖像預測出是0,1,2,3,4等數字,也就表示了樹莓派該怎麼移動,通過樹莓派控制電機即可。

正在進行一些改進:

1.使用遷移學習進行fine-tuning是否可以提高精度 2.處理光照問題 3.處理數據類別不平衡的問題 歡迎交流討論