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、系統框架

基於DQN的快速避障路徑規劃

基於DQN的快速避障路徑規劃

總體思路:

獲取image(map)

Agent處理image

Mobile Robot得到向前還是向右的指令

實現了對無人車end-to-end的路徑規劃。

4.2、程式

基於DQN的快速避障路徑規劃

效果

輸入image:

基於DQN的快速避障路徑規劃

輸出image:

基於DQN的快速避障路徑規劃

說明:

影象輸入一個由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分。

基於DQN的快速避障路徑規劃

4.2.2、Training

4.2.2.1、InitialisingTarget.py

initialisingtarget。py生成每個訓練影象對應的初始Q值,儲存在TXT檔案targets200_new中,產生的Q值只是隨機初始化模型的輸出。

程式碼詳解請參考:

基於DQN的快速避障路徑規劃

4.2.2.2、 training2.py

程式碼詳解請參考:

工作站配置:i7-6050,4塊gtx 1080ti顯示卡,64g記憶體,華碩ws-x99主機板,三星nvme pro960 1T固態硬碟,4T機械硬碟。

training2。py開始訓練模型。隨機batch-size的圖片從訓練資料中選出來餵給模型。該模型的權值更新取決於損失函式,即:

L\left( \theta \right)=E\left[ \left( TargetQ-Q\left( s,a;\theta \right) \right)^2 \right]

預期的

Q(s,a) = r(s,a) + \gamma * max(Q1(s1,a))

,其中max對應向前和向右兩個動作。在這裡,Q1對應的Q值儲存在targets200_new txt檔案。經過一段時間的訓練,Q1值再次更新並存儲在與訓練模型相同的targets200_new txt檔案中。新Q1值又可以用來訓練模型。重複幾個步驟,直到模型學習所需的特性。

觀察損失函式:

基於DQN的快速避障路徑規劃

剛開始訓練

基於DQN的快速避障路徑規劃

訓練結束

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錄用了,但是好像還沒有上會,目前沒有連結,有需要的可以聯絡我,請大家批評指正。)