深度强化学习下移动机器人导航避障

前言

  • 这篇博客不是试图去创造轮子,而是运用现有的技术更好的解决问题,或者说仅仅是解决问题,同时也是对自己现阶段工作记录,以便日后查看。

一、运行环境

深度强化学习下移动机器人导航避障_第1张图片

  • macOS High Sierra 10.13.6
  • Python 2.7.17 :: Anaconda, Inc.
  • tensorflow-1.8.0-cp27-cp27m-macosx_10_13_x86_64

二、配置环境

  1. 官网下载Anaconda https://www.anaconda.com
  2. 为了方便下载资源,推荐更换清华conda镜像

    conda config --prepend channels
    https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free

  3. 创建虚拟环境

    conda create -n tensorflow python=2.7

  • 创建成功如下图
    深度强化学习下移动机器人导航避障_第2张图片

  • 启动虚拟环境:conda activate tensorflow

  • 关闭虚拟环境:conda deactivate

  1. 下载基于macOS CPU优化的tensorflow框架

    https://github.com/lakshayg/tensorflow-build

    选择对应版本下载.whl文件

  2. 安装tensorflow

    pip install --ignore-installed --upgrade /path/to/binary.whl —user

  3. 验证tensorflow是否安装成功

深度强化学习下移动机器人导航避障_第3张图片

ps:在使用Homebrew过程中 我发现一个有趣的现象
在这里插入图片描述
这时会一直卡在update中

解决方案:不要关闭这个终端 打开新的终端界面 输入相同指令 即可跳过update 正常下载
深度强化学习下移动机器人导航避障_第4张图片


三、算法设计

  1. 整体结构
LSTM
LSTM
CNN
concat环境信息
DRL移动机器人路径规划决策
深度学习
实时雷达点云信息
自身状态信息
扫描地图图像信息
强化学习
路径规划方案
测试验证
  1. 技术实现
  • 深度强化学习算法整体结构:
    深度强化学习下移动机器人导航避障_第5张图片

  • 神经网络结构:
    深度强化学习下移动机器人导航避障_第6张图片

  • 交互式展示应用核心业务:
    深度强化学习下移动机器人导航避障_第7张图片


四、具体实现

  • 基础知识
  1. DQN算法
    深度强化学习下移动机器人导航避障_第8张图片
    深度强化学习下移动机器人导航避障_第9张图片

  2. Double DQN
    深度强化学习下移动机器人导航避障_第10张图片

  3. Dueling DQN
    深度强化学习下移动机器人导航避障_第11张图片

  4. 经验优先回放

  • 环境信息处理
  1. 自身状态信息
    深度强化学习下移动机器人导航避障_第12张图片
    包括自身 速度 角速度 到目标点距离 以及与目标点方向夹角 四维信息

  2. 雷达信息
    深度强化学习下移动机器人导航避障_第13张图片

一次探测360维信息

探测范围360度全视野

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

深度强化学习下移动机器人导航避障_第14张图片

  • 参数设置
  1. 控制运动指令集
指令编号 速度 角速度
0 4m/s -1rad/s
1 4m/s -0.5rad/s
2 4m/s 0.0rad/s
3 4m/s 0.25rad/s
4 4m/s 1.0rad/s
5 2m/s -1.0rad/s
6 2m/s 0.0rad/s
7 2m/s 1.0rad/s
8 0m/s -1.0rad/s
9 0m/s 0.0rad/s
10 0m/s 1.0rad/s

[注: 以上参数仅作为参考 根据实际情况可以成比例修改]

  1. 算法参数
参数名 大小
衰减系数 0.99
学习率 0.001
贪婪策略阈值 0.1
记忆池大小 5000
训练步数阈值 50000
训练回合阈值 1200
Q-现实更新步数 500
最小batchsize 32
经验回放终止阈值 0.00001

在这里插入图片描述
3. 奖励参数

        # 假如上一时刻到目标的距离<这一时刻到目标的距离就会有负的奖励
        if self.d_last < self.d:
            reward = reward - 0.1 * (self.d - self.d_last)

        if self.d_last >= self.d:
            reward = reward + 0.1 * (self.d_last - self.d)

        # 速度发生变化就会有负的奖励
        reward = reward - 0.01 * (abs(self.w_last - self.cmd[1]) + abs(self.v_last - self.cmd[0]))
        # 到达目标点有正的奖励
        if self.d < self.dis:
            reward = reward + 20

        # 碰撞障碍物以及边界有负的奖励
        for i in range(len(self.obs_pos)):
            if math.sqrt((self.robotstate[0] - self.obs_pos[i][0]) ** 2 + (self.robotstate[1] - self.obs_pos[i][1]) ** 2) < 2:
                reward = reward - 1
                self.done_list = True

        if self.robotstate[0] >= 19.5 or self.robotstate[0] <= -19.5:
            reward = reward - 1
            self.done_list = True

        if self.robotstate[1] >= 19.5 or self.robotstate[1] <= -19.5:
            reward = reward - 1
            self.done_list = True
  1. 移动障碍运动规则
        for i in range(2):
            a=random.uniform(0,0.2)
            b=random.uniform(0,0.2)
            for h in range(1,6):    
            self.obs_pos[i][0] =self.obs_pos[i][0] +a
            self.obs_pos[i][1] =self.obs_pos[i][1] +b

        for i in range(2):
            a=random.uniform(0,0.2)
            b=random.uniform(0,0.2)
            self.obs_pos[i+2][0] =self.obs_pos[i+2][0] - a
            self.obs_pos[i+2][1] =self.obs_pos[i+2][1] - b

        for i in range(2):
            a=random.uniform(0,0.1)
            b=random.uniform(0,0.1)
            self.obs_pos[i+4][0] =self.obs_pos[i+4][0] - a
            self.obs_pos[i+4][1] =self.obs_pos[i+4][1] + b

        for i in range(2):
            a=random.uniform(0,0.2)
            b=random.uniform(0,0.2)
            self.obs_pos[i+6][0] =self.obs_pos[i+6][0] + a
            self.obs_pos[i+6][1] =self.obs_pos[i+6][1] - b

        for i in range(2):
            a=random.uniform(-0.1,0.2)
            b=random.uniform(-0.1,0.2)
            self.obs_pos[i+8][0] =self.obs_pos[i+8][0] + a
            self.obs_pos[i+8][1] =self.obs_pos[i+8][1] + b
  • 训练结果

第一轮训练 无障碍条件下两次训练
深度强化学习下移动机器人导航避障_第15张图片
深度强化学习下移动机器人导航避障_第16张图片

第二轮训练 八个静态障碍条件下训练深度强化学习下移动机器人导航避障_第17张图片
第三轮训练 十个动态障碍条件下训练
深度强化学习下移动机器人导航避障_第18张图片

  • 交互式三维展示
  1. 主要技术及基本原理
    在这里插入图片描述
    深度强化学习下移动机器人导航避障_第19张图片

深度强化学习下移动机器人导航避障_第20张图片

脚手架 简化Spring配置

  1. 页面效果展示

深度强化学习下移动机器人导航避障_第21张图片

深度强化学习下移动机器人导航避障_第22张图片

深度强化学习下移动机器人导航避障_第23张图片

深度强化学习下移动机器人导航避障_第24张图片

深度强化学习下移动机器人导航避障_第25张图片

深度强化学习下移动机器人导航避障_第26张图片

深度强化学习下移动机器人导航避障_第27张图片

你可能感兴趣的:(深度学习,神经网络,深度学习,自动驾驶,tensorflow,后端)