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录用了,但是好像还没有上会,目前没有链接,有需要的可以联系我,请大家批评指正。)
评论(2)
您还未登录,请登录后发表或查看评论