来源 | 知乎
知圈 | 进“高精度地图社群”,请加微信15221054164,备注地图
![f8bcf675e654b003ab0a61477af4ffec.png](https://i-blog.csdnimg.cn/blog_migrate/96904bec62b57e765ba5a218995e0819.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编译不过的问题
前言
![bb09ab281c690140937d00443c70dd70.png](https://i-blog.csdnimg.cn/blog_migrate/5bb165a8a9cec3d9bfe585ada2ea462e.png)
初衷是,在环境不是完全已知的情况下,希望行星车具备一定的自适应能力,应对环境发生的变化。所以,基于深度强化学习(Deep Reinforcement Learning, DRL)理论提出了端到端的路径规划方法,直接从传感器信息映射出动作指令再发布给行星车。同时采用不同的神经网络结构分别处理不同的传感器信息,最后将环境特征融合在一起,构成基于D3QN PER的多传感器行星车路径规划方法。
主要研究内容
主要研究内容如图:![c874b8a164ea52c3645ac063c9fda12b.png](https://i-blog.csdnimg.cn/blog_migrate/0dd271fa86dfe4b5b1b94c8eaa8e0524.jpeg)
技术途径:
3.1 DQN算法搬砖的旺财:David Silver 增强学习——笔记合集(持续更新)
https://zhuanlan.zhihu.com/p/50478310
![6e54b74c5c676cbe708a98ee15c41784.png](https://i-blog.csdnimg.cn/blog_migrate/06542c566d909d7e2422f99010794df1.jpeg)
![72e5d6ff1b3f85f2fc0f218bbb23a255.png](https://i-blog.csdnimg.cn/blog_migrate/ba7e49dd2afdeb438505b0707d0c8f8a.jpeg)
3.3 Dueling DQN算法
![f5154ee5f2cda423989c79ac2baa59d4.png](https://i-blog.csdnimg.cn/blog_migrate/a4cd687318a4d7349d11f0dda275211e.jpeg)
Dueling DQN相比于DQN在网络结构上做出了改进,在得到中间特征后“兵分两路”,一路预测状态值函数,另一路预测相对优势函数,两个相加才是最终的动作值函数。
3.4 优先经验回放 在DQN中使用经验回放的动机是:作为有监督学习模型,深度神经网络要求数据满足独立同分布假设;但样本来源于连续帧,这与简单的RL问题相比样本的关联性增大了不少。假如没有经验回放,算法在连续一段时间内基本朝着同一个方向做梯度下降,那么在同样的步长下这样直接计算梯度就有可能不收敛。所以经验回放的主要作用是: 克服经验数据的相关性,减少参数更新的方差;克服非平稳分布问题。 经验回放的做法是从以往的状态转移(经验)中随机采样进行训练,如下图所示,这样操作使得数据利用率高,可以理解为同一个样本被多次使用。
![c090f3c9a909c2f9574fd53029393639.png](https://i-blog.csdnimg.cn/blog_migrate/9eb5a7e72d3b1c3bbbfaa0926905f17d.jpeg)
![a74eb8b712cc22529b5246bbd94b3d38.png](https://i-blog.csdnimg.cn/blog_migrate/f3453e09cf28da1d779d8e2dbd1dab22.jpeg)
环境特征融合方案
4.1 自身状态信息处理方法
LIDAR产生的点云属于长序列信息,比较难直接拆分成一个个独立的样本来通过CNN进行训练。所以采用LSTM网络来处理LIDAR点云信息,其中cell单元为512个,具体的网络结构如下图所示:
![d8751c88b872e7e5e08e256503a318d4.png](https://i-blog.csdnimg.cn/blog_migrate/281db82b33f282975fae90862b6f70fc.jpeg)
4.3 视觉图像信息处理方法
尽管LIDAR擅长测量障碍物的距离和形状,但它实际上并不能用于确定障碍物的类型。计算机视觉可通过分类来完成这项任务, 即给定相机的图像,可以标记图像中的对象。
本文采用CNN处视觉图像信息。输入图像 经过预处理和叠帧(4 帧)后变为
的单通道灰色图。
![1e9ed51d4500772c659fb45a19ac8873.png](https://i-blog.csdnimg.cn/blog_migrate/d8e1cc87a14475b25741ab4825c01142.jpeg)
原始图像和经过预处理后的图像
这里共采用了三个卷积层,它们分别是 conv1、conv2 和 conv3,具体参数如下:
![53be81a63563df0007722bf40368ad6b.png](https://i-blog.csdnimg.cn/blog_migrate/c5d879fd93fb266846a2042487724abc.jpeg)
![51826a38c759b24d9abca436e7b6f3e2.png](https://i-blog.csdnimg.cn/blog_migrate/9c57acd928799891d1f0d4cb8166795f.jpeg)
环境实验
5.1 仿真实验环境的搭建
基于ROS及Gazebo搭建的仿真实验环境的框架如图所示:
关于如何使Gazebo的仿真速度加快 10 倍,请参考:
搬砖的旺财:将Gazebo的仿真速度加快10倍!!!
https://zhuanlan.zhihu.com/p/59702590
5.2 小车的动作空间划分
![7d083f7587d11fdad3bf487ffeb0af1d.png](https://i-blog.csdnimg.cn/blog_migrate/865a2c1d9aab4710059a08c93d94fd54.jpeg)
-贪婪法的
参数从初始值1.0开始按照训练步数线性下降
。
很有意思的一件事情,经过测试发现,记忆池的大小和训练步数保持10倍的关系是最好的~
![17d7588ca2c39e510a418c28b498c12c.png](https://i-blog.csdnimg.cn/blog_migrate/20d84d1f89855df5308f667b56db4309.jpeg)
参数按照训练步数线性下降:
。
5.4 奖励函数的设置
![c4653653302c625f9b5811710b5cd86e.png](https://i-blog.csdnimg.cn/blog_migrate/0e3407fcc1dc881129a1982c22af7972.jpeg)
效果展示
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
git clone github.com/CoderWangcai
(PS:这一步请耐心等待,训练好的model比较大~)
cd DRL_Path_Planningcatkin_make
source devel/setup.bash roslaunch-multi_jackal_tutorials ten_jackal_laser_add_apriltag.launch 出现的便是下面的场景:
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](https://i-blog.csdnimg.cn/blog_migrate/eceac9eb8eebea0dc4babd0214052d13.jpeg)
![32edb1356cf98729ca131d2d00915474.png](https://i-blog.csdnimg.cn/blog_migrate/c503de6a73326c92bbd1af01742abb0c.jpeg)