无人驾驶之路径规划:Dijkstra , A*, D*, D* Lite算法
无人驾驶系统概述
上图为一无人驾驶车辆的简易系统框图。无人车辆首先通过摄像头,雷达之类的传感器来感知外部的信息,借助GPS/IMU等设备来确定自车在地理上的绝对位置以及姿态。紧接着,软件算法层面会将这些收集到的原始数据进行分步地处理。比如通过传统的机器视觉或者深层神经网络等算法来对车道线、障碍物、交通标识等信息进行分类识别以及追踪;当然也有相应的定位算法如卡尔曼滤波来提升从定位设备获取的车辆位姿的可靠性与准确性。目前感知融合比较火热的原因也是在于各个单一信息源给予的数据存在各自的不足,而将这些数据做融合处理,不仅符合我们对系统的冗余要求,更是可以提升其鲁棒性。感知以及定位算法将上述这些来自传感器的数据进行一定处理的过程,本质上就是针对现实时空做了到数学时空的提取及映射。这些经过提炼后的更精细的数据,更方便我们进一步地进行功能开发。虽然目前感知和定位算法方面还存在许多比如精度不高、无法在全场景下适用等的技术瓶颈,但是我觉得无人驾驶的算法核心还是决策规划层面。这部分算法的功能就如字面所述,相当于无人车的大脑,起到居中调度的作用。
路径规划模块会根据高精度地图以及车辆当前位姿规划出一条能抵达目标终点且时空最优的全局道路序列。而在车辆实际行驶过程中,主要发挥作用的就是行为决策以及轨迹规划了。
其中,行为决策需要综合考量来自感知、定位、高精度地图以及全局规划的信息,结合当地的交通法规和当时的实际状况,有针对性地下达无人车在下一周期内应该做出的动作指令。比如当我们的无人车来到十字路口时,检测到信号灯为红灯,那么它应该下达一个停车指令;若是本车察觉到本车道的前车速度较缓而隔壁车道空置时,可以下发一个换道超车的指令;当它发现由于发生突发事故,导致按原先规划出的全局路径无法通行时,可以向路径规划模块请求进行重新规划。而上面提到的具体的变道、超车、停车等动作的实现就要依靠轨迹规划了。这个模块和路径规划最大的区别在于,轨迹实际上是包含了时间信息且满足车辆运动特性的路径。即车辆不仅需要规划出完成对应决策指令所需要的空间上的一系列离散点,更是隐含着自车应在何时刻,抵达哪一个位置的要求。也只有这样才能在预测模块的帮助下,满足无人车辆躲避动态障碍物(行人、其余车辆等)的需求。而在有了实时规划出来的轨迹之后,下游的控制模块便可以将其转化为车辆的控制信号(转向、加减速)下发给底层的执行模块。
路径规划
路径规划的任务是找到一系列最优的动作(actions)使得智能体(agent)能从它的起始状态(state)一步步过渡到它被期望的目标状态。在无人驾驶中,上面提到的智能体就是我们的无人车辆,而它的状态主要指车辆所处的地理位置,航向等信息。车辆在两个相邻状态之间过渡(transitions)采取的动作会伴随着一个由人为设计好的损耗值(cost)。那么我们就可以将规划出来的路径的好坏用数学语言来定量地描述评估,一条好的路径的总损耗值一定是比较低的。如果一个规划算法总能找到一条可行路径(如果存在的话),那么我们称此算法是概率完备的;如果找出来的路径总是最优的,那么我们可以认为这个算法是最优的。
一般来说,规划算法可概括为两大类:确定性(deterministic)的基于启发式(heuristic)算法如A*和随机化(randomized)的基于概率的算法如RRT。当我们需要处理的规划问题维度不高时,确定性的规划算法由于能在有限范围内保证解的质量,因此深受广大人民群众的欢迎。
规划全局导航路径可转换为在一给定地图上进行搜索的问题。多数的图搜索算法具备基于有向权重图,计算最小代价的能力。
A ∗ A^* A∗ 以及 Dijkstra 算法
这两种算法的基本思想是一致的,需要创建OPEN(保存已生成但未访问过的节点)与CLOSE(保存已访问过的节点)两张表。
具体流程可概括如下:
- 将与起始点相邻的可行节点放入open表中
- 选出代价值F最低的节点放入close表,找出该节点所有的相邻可行节点。
- 计算2中找出的所有可行节点的代价F,并把这些节点放入open表中。
- 重复步骤2、3直到找到目标节点(规划出最优可行路径),或者open表为空(找不到可行路径)
伪代码:
两种算法的区别在于代价函数F的计算方式。
Dijkstra是在广度优先搜索算法的基础上引入了从起始点到当前节点的代价。
即: F = g F=g F=g
g g g一般设计成起始点到当前点的距离花费。可以看到本算法实际上还是一种无方向偏向性的遍历,虽然可以保证在有可行解的前提下找到那条最优路径,但是其运行效率不高。
A ∗ A^* A∗算法的代价函数设计充分利用了目标节点相对于当前位置这一关键信息。在Dijkstra的基础上引入了启发式代价的计算。
即: F = g + h F=g+h F=g+h
其中 h h h为当前节点到目标节点的欧式距离。因此,本算法会优先朝着目标节点的方向进行搜索,在多数情况下,会极大地节省计算资源。
D ∗ D^* D∗算法 以及 D ∗ D^* D∗ Lite 算法
上文中提及的 A ∗ A^* A∗ 算法实际上只适用于已经给定了从起始点到终点范围的明确地图或规划空间的情况。然而在很多实际应用场景中,智能体并不完全清楚自己周边的环境信息,或者只拥有一张不完整的地图。那么如果我们基于起始状态的地图进行规划得到的路径大概率是不正确的或是次优的。因此要求智能体具备根据最新状态来实时更新地图以及重规划的能力。一个简单的方法是每次收集到新的信息后就根据更新的地图进行一次上文中的 A ∗ A^* A∗。但是这样对计算资源的损耗与浪费无疑是极大的,尤其是当更新信息不会实际影响到当前求解出的最优路径时。所以更优的方法应该是基于上一个周期的规划路径结合新的更新信息做一定的修复改变。这类算法就叫做增量式的重规划算法, D ∗ D^* D∗(Dynamic A ∗ A^* A∗) 则是其中的代表之作。火星探测器漫游者号上就搭载了基于本算法开发的导航系统,来应对火星上随着机器人移动过程中遇到的动态变化的环境带来的挑战。本节中的重点 D ∗ D^* D∗ Lite可以理解为是继承了 D ∗ D^* D∗思想的简化版算法,但是具有相较于原版而言更高的运行效率。
伪码:
无人驾驶之路径规划:Dijkstra , A*, D*, D* Lite算法相关推荐
- 无人驾驶汽车路径规划概述
无人驾驶汽车路径规划概述 原地址:http://imgtec.eetrend.com/blog/2019/100018447.html 无人驾驶汽车路径规划是指在一定的环境模型基础上,给定无人驾驶汽车 ...
- 无人驾驶常用路径规划
无人驾驶常用路径规划 无人驾驶系统介绍 行为决策 运动轨迹规划 路径规划的不同之处 路径规划的定义 路径规划方法 全局路径规划 Dubins路径方法 Dubins路径改良算法 局部路径规划 模糊逻辑算 ...
- 自动驾驶路径规划:A*(Astar)算法
来源丨古月居 点击进入->3D视觉工坊学习交流群 1. 最佳优先搜索(Best-First Search) 最佳优先搜索(BFS),又称A算法,是一种启发式搜索算法(Heuristic Algo ...
- 【路径规划】基于matlab Hybrid A_Star算法机器人路径规划【含Matlab源码 1390期】
⛄一.A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标 ...
- 无人驾驶车辆路径规划及轨迹跟踪控制学习笔记(2)
目录 汇总 学习笔记 汇总 在关键交通场景中,轨迹规划和轨迹跟踪控制是自动驾驶车辆避免碰撞的两个关键.它不仅需要系统功能,而且需要强大的实时性. 我们集成了自动驾驶汽车的轨迹规划器和跟踪控制器,通过轨 ...
- 自动驾驶路径规划——Dijkstra算法
目录 前言 1. 深度优先(DFS)和广度优先(BFS) 2. 深度优先搜索(DFS) 2.1 算法基本思想 2.2 深度优先搜索算法(C) 3. 广度优先搜索(BFS) 3.1 算法基本思想 3.2 ...
- 【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 1618期】
⛄一.蚁群算法及栅格地图简介 1 蚁群算法 1.1 蚁群算法的提出 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来寻找优化路径的机率型算法.它由Marc ...
- 【配送路径规划】基于matlab蚁群算法求解配送路径最短问题【含Matlab源码 2222期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 119期】
⛄一.简介 路径规划是实现移动机器人自主导航的关键技术,是指在有障碍物的环境中,按照一定的评价标准(如距离.时间.能耗等),寻找到一条从起始点到目标点的无碰撞路径,这里选取最短距离路径规划的评价标准, ...
最新文章
- 你可能没那么了解 JWT
- 吸引:由《你的知识需要管理》编辑过程想到的
- MAC apache配置
- pycharm和vs code的使用体验
- linux服务器系统_利用Zabbix监控系统监测Linux服务器系统时间是否准确完美实现...
- 新冠隔离让你家Wifi变慢?全球网络大塞车AI缓拥堵,边缘计算或成杀手锏
- Xcode 插件失效的临时解决方案
- Matlab实现Taylor展开近似计算、五角星画法
- 亲手制作:超级DOS工具+Vista+加强版WindowsXP Lite5.8集成
- 数据结构--创建并输出二叉树的c语言实现(超详细注释/实验报告)
- 谢惠民,恽自求,易法槐,钱定边编数学分析习题课讲义23.2.3练习题参考解答[来自陶哲轩小弟]...
- Redis-使用和原理
- 异域公主连接iOS怎么修改服务器,公主连结ios账号在电脑端登录方法 模拟器使用技巧分享...
- 在深圳办理计划生育服务证的过程
- 云服务器ECS选购集锦之九云服务器选购常见FAQ
- oracle中replace into,oracle SELECT INTO 和 replace into SELECT 两种表复制语句详解
- 城市间紧急救援 (25 分)
- 天正计算机命令大全,天正建筑T20命令大全
- 大数据时代中的差旅管理
- Java api 操作 kubernetes
热门文章
- SEO没有未来了?浅谈SEO的职业规划道路!
- Linux 主机名被修改成bogon问题的几种解决办法
- b站图片css,纯CSS打造BiliBili样式博客主题
- JS的生成器详细使用、生成器结合迭代器使用
- 激光焊接3系铝合金的工艺分析
- 等值连接、内连接、左连接(左外连接)、右连接(右外连接)、全连接、笛卡尔积
- 蔬菜信息配送系统c语言编程,c语言大作业物流配送系统程序文件.doc
- mongodb MySQL主从_MongoDB实战系列之三:MongoDB的主从部署
- 图片拼接2-基于opencv的stitching
- 高等数学在计算机图学的应用,计算机技术在高数教学中的应用