最近研究机器人自主路径规划,http://www.slamcn.org/index.php/首页。关注了「泡泡机器人SLAM」专栏平台,上面有很多公开的视频,涵盖多种SLAM技术及其算法的视频、PPT和代码资源,属于公开,转载请注明。

第一期

0.SLAM基础知识 高翔 ppt&video

1.工业相机选型及介绍-刘富强:

链接:http://pan.baidu.com/s/1mi6QTAw 密码:n0q6

2.深度学习-颜沁睿:

链接:http://pan.baidu.com/s/1b8ragA 密码:bg70

3.SVO & LSD_SLAM解析 - 贺一家:

链接:http://pan.baidu.com/s/1i5kCwMp 密码:0n5q

4.caffe_intro-高翔:

链接:http://pan.baidu.com/s/1cJw8LS 密码:mahi

5.双目视觉里程计-谢晓佳:

链接:http://pan.baidu.com/s/1eRIslIq 密码:8hh8

6.bitcoin_intro-李其乐:

链接:http://pan.baidu.com/s/1hswjFnA 密码:c2t5

8.增强现实及其相关概念-陈昊升:

链接:http://pan.baidu.com/s/1skC6h0x 密码:frh1

9.MEMS IMU的入门与应用 - 胡佳兴:

链接:http://pan.baidu.com/s/1o8IYgqe 密码:vdi3

11.双目矫正及视差图的计算-黄耀:

链接:http://pan.baidu.com/s/1gfBKM1H 密码:f6hc

12.IMU+动态背景消除-曾书格:

链接:http://pan.baidu.com/s/1kUSr1ZL 密码:iz22

13.COP-SLAM - 杨俊:

链接:http://pan.baidu.com/s/1gfnyrsR 密码:5f87

14.ORB-LSD-SVO-刘浩敏:

链接:http://pan.baidu.com/s/1nvm6h2x 密码:wgry

15.cuda优化代码 - 张也冬:

链接:http://pan.baidu.com/s/1jIAsP5k 密码:jzx1

16.KinectFusion 和 ElasticFusion 三维重建方法 - 付兴银:

链接:http://pan.baidu.com/s/1pL2Hb8B 密码:5s48

17.视觉SLAM中的矩阵李群基础-王京:

链接:http://pan.baidu.com/s/1slOrDHb 密码:cpan

18.rosbridge的原理和应用-董超:

链接:http://pan.baidu.com/s/1kV2PlCN 密码:9r46

19.优化与求解 by 刘毅:

链接:http://pan.baidu.com/s/1kUUtsNl 密码:p5fl

20. Direct方法的原理与实现 by 高翔:

链接:http://pan.baidu.com/s/1geTf2DX 密码:uc3j

21.图像技术在AR中的实践-张颖:

链接:http://pan.baidu.com/s/1qY5wOES 密码:6yez

22.路径规划-王超群:

链接:http://pan.baidu.com/s/1bpMItK7 密码:z3yi

23.ORB-SLAM简单重构-冯兵:

链接:http://pan.baidu.com/s/1gfwlL79 密码:g3qj

24.LeastSquare_and_gps_fusion-卿李:

链接:http://pan.baidu.com/s/1qX9Qt7u 密码:6vqu

25.Scan Matching in 2D SLAM-张明明:

链接:http://pan.baidu.com/s/1qY4GRF2 密码:j10s

26.LSD-SLAM深度解析-范帝楷:

链接:http://pan.baidu.com/s/1qYbAFr2 密码:o8ls

27.激光SLAM-王龙军:

链接:http://pan.baidu.com/s/1gfPXXcf 密码:0tjv

28.TSL安全网络传输协议简介-侯涛:

链接:http://pan.baidu.com/s/1o7KJJTK 密码:xrgy

下面是路径规划最常用的A*算法的介绍。

1
路径规划定义
路径规划是指的是机器人的最优路径规划问题,即依据某个或某些优化准则(如工作代价最小、行走路径最短、行走时间最短等),在工作空间中找到一个从起始状态到目标状态能避开障碍物的最优路径。

也就是说,应注意以下三点:
  • 明确起始位置及终点
  • 避开障碍物
  • 尽可能做到路径上的优化

机器人的路径规划应用场景极丰富,最常见如游戏中NPC及控制角色的位置移动,百度地图等导航问题,小到家庭扫地机器人、无人机大到各公司正争相开拓的无人驾驶汽车等。

目前路径规划算法分:

这里介绍一下在游戏以及无人机无人机航线规划上最常见的A*算法。

2
A*算法详解
在计算机科学中,A*算法作为Dijkstra算法的扩展,因其高效性而被广泛应用于寻路及图的遍历,如星际争霸等游戏中就大量使用。

在理解算法前,我们需要知道几个概念:

搜索区域(The Search Area):
图中的搜索区域被划分为了简单的二维数组,数组每个元素对应一个小方格,当然我们也可以将区域等分成是五角星,矩形等,通常将一个单位的中心点称之为搜索区域节点(Node),而非方格(Squares)。

开放列表(Open List):
我们将路径规划过程中待检测的节点存放于Open List中,而已检测过的格子则存放于Close List中。

父节点(parent):
在路径规划中用于回溯的节点,开发时可考虑为双向链表结构中的父结点指针。

路径排序(Path Sorting):
具体往哪个节点移动由以下公式确定:
F(n) = G(n) + H(n)
G代表的是从初始位置A沿着已生成的路径到指定待检测格子的移动开销。
H指定待测格子到目标节点B的估计移动开销。

启发函数(Heuristics Function):
H为启发函数,也被认为是一种试探,由于在找到唯一路径前,我们不确定在前面会出现什么障碍物,因此用了一种计算H的算法,具体根据实际场景决定。在我们简化的模型中,H采用的是传统的曼哈顿距离(Manhattan Distance),也就是横纵向走的距离之和。

如图中所示,绿色方块为机器人起始位置A,红色方块为目标位置B,蓝色为障碍物。


现用A*算法寻找出一条自绿色A到红色B的最短路径,经简化,每个方格的边长为10,即垂直水平方向移动开销为10。节点对角线为10,因此斜对角移动开销约等于14。因此具体步骤如下:

1、将A点加入到Open List中,图中所示,上下左右移动一格距离为10,斜对角移动距离为14。环绕绿色方块的就是待检测格子,左下角的值就是G值,右下角为H值,左上角对应的就是F值,找到F值最小的节点作为新的起始位置。


2、绿色格子右侧的节点F为40,选作当前处理节点,并将这个点从Open List删除,增加到Close List中,对这个节点周围的8个格子进行判断,若是不可通过或已经在Close List中,则忽略之。否则执行以下步骤:

  • 若当前处理格子的相邻格子已经在Open List中,那就计算临近节点经当前处理节点到起点的距离G是否比原G值小,若小,则把相邻节点的父节点(parent)设置为当前处理节点。
  • 若当前处理格子的相邻格子不在Open List中,那么把它加入,并将它的父节点设置为该节点。

3、重复1、2步骤,直到终点B加入到了Open List中,再沿着各节点的父节点回溯遍历,将遍历得到的节点坐标保存下来,所得的节点就是最短路径。

最终效果如图所示:


在Github上找到了一个A-star的c++源码:
https://github.com/booirror/data-structures-and-algorithm-in-c供参考。

但也发现,在整个计算过程中,A*算法结合了启发式方法,利用估值函数F(H)来估计途中当前点与终点距离,并由此决定搜索方向,当这条路失败会重新尝试其他路径,但不理想的估值函数会导致整个算法运行很慢,而且,这种算法虽说在时间上最优,但也存在空间增长是指数级别的缺点,因此在往高维状态空间进行运算时,速度会**受到影响,基于A*算法迭代加深的IDA*算法则有效解决了空间增长带来的问题。

3
自动驾驶对路径规划的需求
目前业内对自动驾驶的技术方案观点较为一致,主要可分为四个部分:

因此首先要做的就是对外部环境的实时获取及车辆的动态路径规划。
 
传统机器人路径规划大致可分三种:
  •  静态结构化环境下的路径规划
  •  动态已知环境下的路径规划
  •  动态不确定环境下的路径规划

将其与自动驾驶对应起来,静态的规划就是根据地理信息以及交通规则在已知的全局地图上进行道路循迹,但这个技术对于目前自动驾驶实现来说并没有什么实际应用价值。

自动驾驶需要的是对预先已选择好的最优路径,甚至在未知的环境下,基于实时不确定的场景,进行动态调整的路径规划技术,而这对地图的需求、外部信息采集等就还是要依赖上一篇提及的如摄像头、激光雷达、传感器等硬件的支持。

之前网上有在转载的一篇《从算法上解读自动驾驶是如何实现的》也有所总结,提到目前自动驾驶上应用较广的有Dijkstra、Lee、Floyd、双向搜索算法以及蚁群算法,大家如果感兴趣可以自行搜索学**,这里不再赘述。

现有传统机器人路径规划技术已经发展得较为成熟,而将该技术如何更为符合场景地应用到自动驾驶技术上还有很长的探索阶段,但现已存在的包括A*算法在内的一系列最优路径算法将会越来越由于图论、人工智能、机器人技术、自动驾驶等多学科的融合下得到更大的发展。

附伯乐在线上关于A*算法的详细篇幅介绍:

· 关于寻路算法的一些思考(1):A* 算法介绍

· 关于寻路算法的一些思考(2):Heuristics 函数

· 关于寻路算法的一些思考(3):A* 算法的实现

· 关于寻路算法的一些思考(4):A* 算法的变体

· 关于寻路算法的一些思考(5):处理移动中的障碍物

· 关于寻路算法的一些思考(6):预先计算好的路径的所用空间

· 关于寻路算法的一些思考(7):地图表示

· 关于寻路算法的一些思考(8):长期和短期目标

· 关于寻路算法的一些思考(9):寻路者的移动成本

· 关于寻路算法的一些思考(10):最短路径的用户体验

· 关于寻路算法的一些思考(11):寻路算法的其他应用

· 关于寻路算法的一些思考(12):AI 技术

路径规划A*算法及SLAM自主地图创建导航算法相关推荐

  1. 基于Kinect深度图像采集和SLAM室内地图创建算法的matlab仿真

    目录 一.理论基础 二.核心程序 三.仿真测试结果 一.理论基础 移动机器人的定位和地图创建是机器人领域的热点研究问题,也是导航中重要环节. 对于已知环境中的机器人自主定位和已知机器人位置的地图创建已 ...

  2. 【路径规划】基于拓展随机树(RRT)算法的路径规划问题(Matlab代码实现)

  3. WebGIS空间寻径算法设计(车辆自驾导航算法)

    [size=large][b]一.路网空间模型设计[/b][/size] 采用有向连通图模型对路网建模 [list] [*]A.以道路交叉点作为路网的连通图节点 [*]B.以从A路点到B路点的单向通路 ...

  4. jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现)

    jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现) 本文基于小黎的ally学习资料实现,感谢该博主的无私奉献 三维地图与二维地图的差别 1.二维无高度信息,多用 ...

  5. matlab8邻域搜索算法,一种基于可搜索连续邻域A*算法的路径规划方法与流程

    本发明涉及的是一种UUV全局路径规划方法. 背景技术: 无人水下航行器(Unmanned underwater vehicle,UUV)作为一种高技术手段,在海洋这块未来极具价值的发展空间中起着至关重 ...

  6. 基于人工势场法和果蝇优化算法的路径规划(Matlab代码实现)

    目录 1 概述 2 运行结果 2.1 算例1 2.2 算例2   3 Matlab代码实现  4 参考文献 1 概述 近年来,智能机器人逐渐应用于医疗服务﹑航空等众多领域.路径规划作为机器人实现智能自 ...

  7. 【论文阅读记录】基于视觉SLAM建图的无人机路径规划 作者:王海

    目录 一.论文前瞻问题 二.论文内容概述 1.SLAM建图与路径规划综述 2.关键问题 3.SLAM中前后端设计部分 4.三维路径规划 三.拓展 一.论文前瞻问题 智能体在陌生环境中的一次自主导航任务 ...

  8. 基于强化学习的智能机器人路径规划算法研究(附代码)

    目录 一.摘要 二.路径规划技术的研究进展 1.研究现状 2.算法分类 2.1 全局路径规划算法 2.2 局部路径规划算法 三.本文采用的路径规划算法--强化学习 1. 概念 2. 与其他机器学习方式 ...

  9. 苏宁 11.11:仓库内多 AGV 协作的全局路径规划算法研究

    本文为『InfoQ x 苏宁 2018双十一』技术特别策划系列文章之一. 1. 背景 随着物联网和人工智能的发展,越来越多的任务渐渐的被机器人取代,机器人逐渐在发展中慢慢进入物流领域,"智能 ...

最新文章

  1. pyqt创建窗口没有句柄_Filament 渲染引擎剖析 之 FrameGraph 1 虚拟资源的定义与创建...
  2. 算法---------二叉树的后序遍历
  3. Redis 性能问题分析
  4. Python入门100题 | 第005题
  5. 刷新,开启云信下一个 5 年:专注做技术长跑里,最重要的事
  6. 如何设计日志系统_架构 - 如何设计一个百亿级日志系统
  7. 在你的andorid设备上运行netcore (Linux Deploy)
  8. ps aux grep java_linux命令ps-aux监控java进程
  9. 下载丨Oracle 12c最佳参数实践
  10. oracle监听的动态注册和静态注册
  11. 2748: [HAOI2012]音量调节
  12. QPushButton/QLabel在鼠标悬浮(划过, hover)、选中(单击, pressed)状态下更换图标样式
  13. 从「猜画小歌」,谈企业的「数据困惑」该何去何从?
  14. 巨人网络305亿并购海外棋牌类游戏公司审核遭暂停
  15. 【运动学】基于matlab嫦娥奔月仿真【含Matlab源码 1238期】
  16. 基于汇编语言的贪吃蛇程序
  17. fgo升级经验计算机,命运冠位指定狗粮本每日经验表 fgo国服狗粮本刷取技巧攻略[多图]...
  18. 创业维艰,且行且珍惜
  19. 启动gazebo失败报错[gazebo-1] process has died [pid 10999, exit code 255
  20. 浅谈DNS域名解析的过程

热门文章

  1. c语言完全二叉树原理,C语言判断完全二叉树
  2. UEFI启动模式和传统的Lagency启动模式
  3. SSRF中利用到的协议
  4. 在电脑怎么找到环境变量
  5. Linux systemctl 详解自定义 systemd unit
  6. 做最好的自己(zz)
  7. 计算机桌面帐号的设置,Windows电脑桌面云便签个性账号怎么设置?
  8. nrf52832学习笔记(1)蓝牙心电例程分析
  9. 基于PaddleHub的虚拟粉圈微博生成
  10. android查看屏幕大小,android获取屏幕尺寸的三种代码