当前位置:   article > 正文

td宽度自适应_一文详解基于深度强化学习的无人车自适应路径规划方法

自适应变宽度路径

fb5c8a16f3a37b1e99357fad299c641e.gifdcb8c6f8fc7e14c213dde6aa295a96e1.png

来源 | 知乎

知圈 | 进“高精度地图社群”,请加微信15221054164,备注地图

f8bcf675e654b003ab0a61477af4ffec.png

导读:本文选自知乎,作者详细介绍了基于深度强化学习(Deep Reinforcement Learning, DRL)的无人车自适应路径规划方法,并在无障碍环境、静态障碍环境、动态障碍环境下都取得了不错的效果。

目录

1. 前言

2. 主要研究内容

3. D3QN PER算法

----3.1 DQN算法

----3.2 Double DQN算法

----3.3 Dueling DQN算法

----3.4 优先经验回放

4. 环境特征融合方案

----4.1 自身状态信息处理方法

----4.2 激光雷达点云信息处理方法 ----4.3 视觉图像信息处理方法

----4.4 环境特征融合方案

5. 实验环境

----5.1 仿真实验环境的搭建 ----5.2 小车的动作空间划分 ----5.3 算法参数设置 ----5.4 奖励函数的设置

6. 效果展示

----6.1 无障碍环境

----6.2 静态障碍环境

----6.3 5个静态障碍+5个动态障碍环境

----6.4 10个动态障碍环境

7. 完整代码

----7.1 Software

----7.2 Installation

--------7.2.1 解决pointgrey_camera_driver编译不过的问题

21a37d8a6e5c18d5afc239a29b985b94.png

前言

bb09ab281c690140937d00443c70dd70.png

初衷是,在环境不是完全已知的情况下,希望行星车具备一定的自适应能力,应对环境发生的变化。所以,基于深度强化学习(Deep Reinforcement Learning, DRL)理论提出了端到端的路径规划方法,直接从传感器信息映射出动作指令再发布给行星车。同时采用不同的神经网络结构分别处理不同的传感器信息,最后将环境特征融合在一起,构成基于D3QN PER的多传感器行星车路径规划方法。

389ad7bdfea48fa23f7554ae8a3db650.png

主要研究内容

主要研究内容如图:
c874b8a164ea52c3645ac063c9fda12b.png

技术途径:

ea13d0ca75fefa0cc02ce0d6e12174e5.png

a3f769fa03acef2f187d2324b0a4f216.png

D3QN PER算法 关于强化学习的一些基础知识,推荐大家去看专栏中关于David Silver课程的笔记:

搬砖的旺财:David Silver 增强学习——笔记合集(持续更新)

https://zhuanlan.zhihu.com/p/50478310

3.1 DQN算法
6e54b74c5c676cbe708a98ee15c41784.png
直接来看DQN的损失函数: 1cd03665-e12b-eb11-8da9-e4434bdf6706.svg 其中,  21d03665-e12b-eb11-8da9-e4434bdf6706.svg  是目标Q网络,参数为  26d03665-e12b-eb11-8da9-e4434bdf6706.svg  ,负责生成训练过程中的目标,即目标Q值  2ed03665-e12b-eb11-8da9-e4434bdf6706.svg  ;  36d03665-e12b-eb11-8da9-e4434bdf6706.svg  是当前Q网络,参数为  3bd03665-e12b-eb11-8da9-e4434bdf6706.svg  ;值得注意的是,  21d03665-e12b-eb11-8da9-e4434bdf6706.svg  和  36d03665-e12b-eb11-8da9-e4434bdf6706.svg  的网络结构完全一致。 每训练C步,将当前Q网络的参数完全复制给目标Q网络,那么,接下来C步参数更新的目标将由更新后的目标Q网络负责提供。 具体的实施步骤请参见上图~ 3.2 Double DQN算法
72e5d6ff1b3f85f2fc0f218bbb23a255.png
Double DQN算法主要是为了解决DQN算法中严重的过估计问题,它将目标Q值中动作的选择和动作的评估分开,让它们使用不同的Q网络。 先看Double-DQN中的目标Q值:  52d03665-e12b-eb11-8da9-e4434bdf6706.svg   当前Q网络负责选择动作,而带有“延迟效应”的目标Q网络用来计目标Q值,具体的实施步骤请参见上图

3.3 Dueling DQN算法

f5154ee5f2cda423989c79ac2baa59d4.png

Dueling DQN相比于DQN在网络结构上做出了改进,在得到中间特征后“兵分两路”,一路预测状态值函数,另一路预测相对优势函数,两个相加才是最终的动作值函数。

3.4 优先经验回放 在DQN中使用经验回放的动机是:作为有监督学习模型,深度神经网络要求数据满足独立同分布假设;但样本来源于连续帧,这与简单的RL问题相比样本的关联性增大了不少。假如没有经验回放,算法在连续一段时间内基本朝着同一个方向做梯度下降,那么在同样的步长下这样直接计算梯度就有可能不收敛。所以经验回放的主要作用是: 克服经验数据的相关性,减少参数更新的方差;
克服非平稳分布问题。 经验回放的做法是从以往的状态转移(经验)中随机采样进行训练,如下图所示,这样操作使得数据利用率高,可以理解为同一个样本被多次使用。
c090f3c9a909c2f9574fd53029393639.png
优先经验回放(Prioritized Experience Replay, PER)的思路来源于优先清理(Prioritized sweeping),它以更高的频率回放对学习过程更有用的样本,这里使用TD-error来衡量作用的大小。TD-error的含义是某个动作的估计价值与当前值函数输出的价值之差。TD-error越大,则说明当前值函数的输出越不准确,换而言之,能从该样本中“学到更多”。为了保证TD-error暂时未知的新样本至少被回放一次,将它放在首位,此后,每次都回放TD-error最大的样本。 不过,单独使用TD-error进行PER也存在许多问题。首先,只有被重放样本的TD-error被更新,那么,TD-error较小的样本在第一次被回放后,由于不更新, 它的TD-error会一直被认为很小(其实参数更新后该样本的TD-error可能会变大), 所以该样本很久都不会再重新被回放。再者,对噪声敏感,bootstrapping会进一步加剧这个问题。最后,PER的样本会集中在一个小范围内,多样性的缺失容易导致过拟合。 为了解决上述问题,结合纯粹的贪婪优先和均匀随机采样。确保样本的优先级正比于TD-error,与此同时,确保最低优先级的概率也是非零的。 首先,定义采样经验  2ed13665-e12b-eb11-8da9-e4434bdf6706.svg  的概率为: 46d13665-e12b-eb11-8da9-e4434bdf6706.svg 其中,  4dd13665-e12b-eb11-8da9-e4434bdf6706.svg  是第  2ed13665-e12b-eb11-8da9-e4434bdf6706.svg  个经验的优先级;指数  57d13665-e12b-eb11-8da9-e4434bdf6706.svg  决定使用优先级的多少,当  77d13665-e12b-eb11-8da9-e4434bdf6706.svg  时是均匀随机采样的情况。 具体的,采用成比例的优先(Proportional prioritization),即 82d13665-e12b-eb11-8da9-e4434bdf6706.svg 其中,  89d13665-e12b-eb11-8da9-e4434bdf6706.svg  为 TD-error;  8dd13665-e12b-eb11-8da9-e4434bdf6706.svg  是为了防止经验的TD-error为0后不再被回放。在实现时采用二叉树(Sum tree)结构,它的每个叶子节点保存了经验的优先级,父节点存储了叶子节点值的和。这样,头节点的值就是所有叶子结点的总和。采样一个大小为  92d13665-e12b-eb11-8da9-e4434bdf6706.svg  的minibatch时,范围  96d13665-e12b-eb11-8da9-e4434bdf6706.svg  被均分为  92d13665-e12b-eb11-8da9-e4434bdf6706.svg  个小范围,每个小范围均匀采样,这样,各种经验都有可能被采样到。 为了消除由采样带来的偏差,加入重要性采样(Importance-sampling)。重要性采样权重为  a0d13665-e12b-eb11-8da9-e4434bdf6706.svg  。其中,  a6d13665-e12b-eb11-8da9-e4434bdf6706.svg  用于调节偏差程度,因为在学习的初始阶段有偏差是无所谓的,但在后期就要消除偏差。为了归一化重要性采样权重,使  abd13665-e12b-eb11-8da9-e4434bdf6706.svg  。 来看一下PER和Double DQN结合后的伪代码:
a74eb8b712cc22529b5246bbd94b3d38.png

ede410d317438cce4509bb897fde3e91.png

环境特征融合方案

 4.1 自身状态信息处理方法

26e15a04e4df57091d74a841364d4c70.png

自身状态信息的表示方法请参见上图,它可以表示为一个数组  dbd13665-e12b-eb11-8da9-e4434bdf6706.svg  ,其中,  dfd13665-e12b-eb11-8da9-e4434bdf6706.svg  和  e5d13665-e12b-eb11-8da9-e4434bdf6706.svg 为  ead13665-e12b-eb11-8da9-e4434bdf6706.svg  时刻小车的速度和角速度信息,  eed13665-e12b-eb11-8da9-e4434bdf6706.svg  和  f2d13665-e12b-eb11-8da9-e4434bdf6706.svg  为  ead13665-e12b-eb11-8da9-e4434bdf6706.svg  时刻小车相对终点的距离和角度信息。自身状态信息时刻指引着小车向终点移动。 4.2 激光雷达点云信息处理方法

LIDAR产生的点云属于长序列信息,比较难直接拆分成一个个独立的样本来通过CNN进行训练。所以采用LSTM网络来处理LIDAR点云信息,其中cell单元为512个,具体的网络结构如下图所示:

2657d995c539e343846ceb6cf0638313.png

为了方便,控制LIDAR输出的点云信息为360维,更新频率是50赫兹,探测范围为  fad13665-e12b-eb11-8da9-e4434bdf6706.svg  ,探测距离为  fdd13665-e12b-eb11-8da9-e4434bdf6706.svg  ,单位是米,如下图所示:
d8751c88b872e7e5e08e256503a318d4.png

4.3 视觉图像信息处理方法

尽管LIDAR擅长测量障碍物的距离和形状,但它实际上并不能用于确定障碍物的类型。计算机视觉可通过分类来完成这项任务, 即给定相机的图像,可以标记图像中的对象。

本文采用CNN处视觉图像信息。输入图像 04d23665-e12b-eb11-8da9-e4434bdf6706.svg 经过预处理和叠帧(4 帧)后变为 06d23665-e12b-eb11-8da9-e4434bdf6706.svg 的单通道灰色图。

1e9ed51d4500772c659fb45a19ac8873.png

原始图像和经过预处理后的图像

这里共采用了三个卷积层,它们分别是 conv1、conv2 和 conv3,具体参数如下:

8d2b71eea36ebbff9cd232cdd3c4ca02.png

卷积层的输入输出示意图如下:
53be81a63563df0007722bf40368ad6b.png
4.4 环境特征融合方案
51826a38c759b24d9abca436e7b6f3e2.png

7e4f8e4d1e6f87b5200bab794331506b.png

b718f88ec9bbb9701a5d20ee57a4ee32.png

环境实验

5.1 仿真实验环境的搭建

基于ROS及Gazebo搭建的仿真实验环境的框架如图所示:

58516bcfde301af511e0cdf8573ea7b6.png

基于此,可以改变Gazebo中的仿真环境,例如加入不同的障碍,也可以改变小车搭载的传感器。

关于如何使Gazebo的仿真速度加快 10 倍,请参考:

搬砖的旺财:将Gazebo的仿真速度加快10倍!!!

https://zhuanlan.zhihu.com/p/59702590

5.2 小车的动作空间划分

127d822048e78bc7a0304ebac7632f87.png

5.3 算法参数设置
7d083f7587d11fdad3bf487ffeb0af1d.png

2bd23665-e12b-eb11-8da9-e4434bdf6706.svg-贪婪法的2bd23665-e12b-eb11-8da9-e4434bdf6706.svg参数从初始值1.0开始按照训练步数线性下降 30d23665-e12b-eb11-8da9-e4434bdf6706.svg 。

很有意思的一件事情,经过测试发现,记忆池的大小和训练步数保持10倍的关系是最好的~

17d7588ca2c39e510a418c28b498c12c.png

a6d13665-e12b-eb11-8da9-e4434bdf6706.svg 参数按照训练步数线性下降: 36d23665-e12b-eb11-8da9-e4434bdf6706.svg 。

5.4 奖励函数的设置

c4653653302c625f9b5811710b5cd86e.png

4e2b4e5f8f81007e78bcd36915d2c13a.png

效果展示

 6.1 无障碍环境

6.2 静态障碍环境

6.3 5个静态障碍+5个动态障碍环境

6.4 10个动态障碍环境

视频1:

https://v.qq.com/x/page/g3104n5ortq.html

视频2:

https://v.qq.com/x/page/q3104y6cdjz.html

完整代码

请点击:CoderWangcai/DRL_Path_Planning

https://github.com/CoderWangcai/DRL_Path_Planning

1、Software

Ubuntu 16.04
ROS Kinect
Python 2.7.12
Tensorflow 1.12.0

2、Installation

git clone github.com/CoderWangcai

(PS:这一步请耐心等待,训练好的model比较大~)

cd DRL_Path_Planning
catkin_make
source devel/setup.bash roslaunch-multi_jackal_tutorials ten_jackal_laser_add_apriltag.launch 出现的便是下面的场景:

ac1bf4a34f7b03877f4bda98d3e3e3f2.png

DRL_Path_Planning/src/tf_pkg/scripts/D3QN_PER_image_add_sensor_dynamic_10obstacle_world_30m_test.py中的路径补充完整: # 静态障碍下训练好的模型
self.load_path = '.../jackal/src/tf_pkg/scripts/saved_networks/10_D3QN_PER_image_add_sensor_obstacle_world_30m_2_2019_06_02' (PS:如果需要运行其他python文件,也请将其中的路径补充完整~) 另起一个终端: python D3QN_PER_image_add_sensor_dynamic_10obstacle_world_30m_test.py 搞定啦,出现的便是训练好的10个动态障碍环境~ 3、解决pointgrey_camera_driver编译不过的问题 catkin_make可能会遇到关于pointgrey_camera_driver的问题 解决方法如下: cd src/
git clone github.com/ros-drivers/cd ..
catkin_make 编译到上面这里的时候卡住了,没关系,ctrl+c,然后把刚刚Download的pointgrey_camera_driver文件夹删除,因为现在已经生成相关的消息了,它不起作用了。

catkin_make

没问题啦,整个文件夹都编译过了~如有问题请提issue~

说明:文章观点仅供分享交流,不代表焉知自动驾驶的立场,转载请注明出处,如涉及版权等问题,请您告知(小老虎13636581676微信同),我们将及时沟通处理。本文已获权,转载请联系作者 380b81608a957f40031d3b3a9483ac64.png 32edb1356cf98729ca131d2d00915474.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/293041
推荐阅读
相关标签
  

闽ICP备14008679号