1、前言
學習課程:
《Intro to AI》Pieter Abbeel
《Reinforcement Learning》David Silver
《Deep Reinforcement Learning》Sergey Levine
參考論文和書籍:
《TensorFlow實戰》
《Playing Atari with Deep Reinforcement Learning》
《Reinforcement Learning-Based Path Planning for Autonomous Robots》
《Navigation and path planning using reinforcement learning for a Roomba robot》
《Application of Deep Reinforcement Learning in Mobile Robot Path Planning》
從去年開始學習Reinforcement Learning和Deep Reinforcement Learning,我就一直在想,我能不能搭一個小系統,將其與Motion Planning結合起來,我對於end-to-end的自動駕駛很有興趣,我碩士畢業論文為
《基於深度增強學習的多感測器自主無人巡視車的決策規劃研究》
。
2、Q-learning
詳情請參考:
3、Deep Q-Network(DQN)
詳情請參考:
4、基於DQN 的快速避障路徑規劃
4.1、系統框架
總體思路:
獲取image(map)
Agent處理image
Mobile Robot得到向前還是向右的指令
實現了對無人車end-to-end的路徑規劃。
4.2、程式
效果
輸入image:
輸出image:
說明:
影象輸入一個由2個conv層和2個fc層組成的DQN模型,輸出的Q值對應向前和向右的動作。根據Q值大小選擇向前還是向右,並將新位置生成的相應的新影象再次反饋給模型,由此迴圈,直到到達目的地為止。
接下來我將一個一個程式說明。
4.2.1、Data Generation
datageneration。py生成程式碼的任務所需的資料。隨機分配1x1畫素大小的障礙在25x25畫素大小的影象中,那麼這個影象由不同的起始位置產生的625張圖片儲存在一個資料夾trainImages中。變化障礙位置200次,由此總訓練影象達250×625。每一個不同的狀態相關的評分(影象)也產生和儲存在一個pointsNew。txt檔案,當前狀態如果與障礙重合得-100分,當前狀態與終點重合得100分,其餘狀態得0分。
4.2.2、Training
4.2.2.1、InitialisingTarget.py
initialisingtarget。py生成每個訓練影象對應的初始Q值,儲存在TXT檔案targets200_new中,產生的Q值只是隨機初始化模型的輸出。
程式碼詳解請參考:
4.2.2.2、 training2.py
程式碼詳解請參考:
工作站配置:i7-6050,4塊gtx 1080ti顯示卡,64g記憶體,華碩ws-x99主機板,三星nvme pro960 1T固態硬碟,4T機械硬碟。
training2。py開始訓練模型。隨機batch-size的圖片從訓練資料中選出來餵給模型。該模型的權值更新取決於損失函式,即:
預期的
,其中max對應向前和向右兩個動作。在這裡,Q1對應的Q值儲存在targets200_new txt檔案。經過一段時間的訓練,Q1值再次更新並存儲在與訓練模型相同的targets200_new txt檔案中。新Q1值又可以用來訓練模型。重複幾個步驟,直到模型學習所需的特性。
觀察損失函式:
剛開始訓練
訓練結束
4.2.3、Testing
4.2.3.1、testdatacollection.py
就像DataGeneration。py一樣,testdatacollection。py還生成相同格式的20張影象,障礙不同於前面生成的200張影象。
4.2.3.2、testing.py
testing。py輸出對應影象的最終路徑在一個單獨的資料夾中。對於沒有找到路徑是因為與障礙碰撞,則不會生成影象。
4.2.4、實驗驗證
室內實驗採用了crazyfile與optitrack,室外實驗採用了DJI M100,具體的操作在論文中的實驗部分給出了詳細的描述。
(PS:論文被ICIA 2018錄用了,但是好像還沒有上會,目前沒有連結,有需要的可以聯絡我,請大家批評指正。)