1、前言

学习课程:

参考论文和书籍:

从去年开始学习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录用了,但是好像还没有上会,目前没有链接,有需要的可以联系我,请大家批评指正。)