欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2024/3/12 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 深度强化学习下移动机器人导航避障 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

前言

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

一、运行环境

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

二、配置环境

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

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

  • 创建虚拟环境

    conda create -n tensorflow python=2.7

    • 创建成功如下图

    • 启动虚拟环境:conda activate tensorflow

    • 关闭虚拟环境:conda deactivate

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

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

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

  • 安装tensorflow

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

  • 验证tensorflow是否安装成功
  • ps:在使用Homebrew过程中 我发现一个有趣的现象

    这时会一直卡在update中

    解决方案:不要关闭这个终端 打开新的终端界面 输入相同指令 即可跳过update 正常下载


    三、算法设计

  • 整体结构
  • LSTMLSTMCNNconcat环境信息DRL移动机器人路径规划决策深度学习实时雷达点云信息自身状态信息扫描地图图像信息强化学习路径规划方案测试验证
  • 技术实现
    • 深度强化学习算法整体结构:

    • 神经网络结构:

    • 交互式展示应用核心业务:


    四、具体实现

    • 基础知识
  • DQN算法

  • Double DQN

  • Dueling DQN

  • 经验优先回放

    • 环境信息处理
  • 自身状态信息

    包括自身 速度 角速度 到目标点距离 以及与目标点方向夹角 四维信息

  • 雷达信息

  • 一次探测360维信息

    探测范围360度全视野

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

    • 参数设置
  • 控制运动指令集
  • 指令编号速度角速度
    04m/s-1rad/s
    14m/s-0.5rad/s
    24m/s0.0rad/s
    34m/s0.25rad/s
    44m/s1.0rad/s
    52m/s-1.0rad/s
    62m/s0.0rad/s
    72m/s1.0rad/s
    80m/s-1.0rad/s
    90m/s0.0rad/s
    100m/s1.0rad/s

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

  • 算法参数
  • 参数名大小
    衰减系数0.99
    学习率0.001
    贪婪策略阈值0.1
    记忆池大小5000
    训练步数阈值50000
    训练回合阈值1200
    Q-现实更新步数500
    最小batchsize32
    经验回放终止阈值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 - 1self.done_list = Trueif self.robotstate[0] >= 19.5 or self.robotstate[0] <= -19.5:reward = reward - 1self.done_list = Trueif self.robotstate[1] >= 19.5 or self.robotstate[1] <= -19.5:reward = reward - 1self.done_list = True
  • 移动障碍运动规则
  • 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] +aself.obs_pos[i][1] =self.obs_pos[i][1] +bfor 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] - aself.obs_pos[i+2][1] =self.obs_pos[i+2][1] - bfor 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] - aself.obs_pos[i+4][1] =self.obs_pos[i+4][1] + bfor 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] + aself.obs_pos[i+6][1] =self.obs_pos[i+6][1] - bfor 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] + aself.obs_pos[i+8][1] =self.obs_pos[i+8][1] + b
    • 训练结果

    第一轮训练 无障碍条件下两次训练

    第二轮训练 八个静态障碍条件下训练
    第三轮训练 十个动态障碍条件下训练

    • 交互式三维展示
  • 主要技术及基本原理


  • 脚手架 简化Spring配置

  • 页面效果展示
  • 总结

    以上是生活随笔为你收集整理的深度强化学习下移动机器人导航避障的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。