
路径规划算法
文章平均质量分 93
一叶执念
这个作者很懒,什么都没留下…
展开
-
LPA*算法图文详解
之前我们看过了A* 算法,知道了A* 算法的基本原理,但是A* 算法的缺陷也很明显:它是离线的路径规划算法,只能一次规划出路径,但是后面路径被改变的话就无法生效了。针对这个问题,人们研究出了D* 算法。D* 算法相对于A* 也好还是Dijkstra算法也好它最大的优点就是再于它在运动过程中是实时的:在原先规划的路径上如果出现障碍物的话,会对当前路径进行新的规划,通过较短的迭代即可找到新的路径。但是它比较大的问题在于它只能处理空白路径上出现障碍物的情况,而不能处理本来是障碍物但是变成空白区域的情况。原创 2023-09-25 16:49:07 · 2809 阅读 · 4 评论 -
D*算法图文详解
前面学习了Dijkstra以及A* 算法的基本原理,对于这两种算法而言,我们都能在有解的情况下找到一条沿着起点到达终点的路径。然而,这两个算法本身都是基于静态地图的,也就是说:当机器人找到路径后开始沿着起点向终点运动的过程中,默认地图是不会发生变化的,但是实际上大部分时候我们知道地图是动态的,随时存在一个突然出现的障碍物挡在原有的路径上,那么这时候原有的路径就失效了。原创 2023-09-18 16:13:45 · 3487 阅读 · 0 评论 -
LRTA*(Learning-RTA*)
例如从 s 节点到 s’ 节点,假设路程g(s, s’) = 1,已知 h(s’) = 2(这个初始的时候就是已知的,代表了从该节点到目标节点的距离),那么从 s 节点访问 s’ 节点后,是对s节点的h(s)进行更新的,h(s) = g(s) + h(s’) = 1 + 2 = 3。h(s) 的设计,是为了防止之前A* 算法在搜索时陷入局部最小值,在LRTA* 搜索中,如果陷入了局部最小值,算法会根据访问附近节点的次数增加h(s),即增加总成本f(s),从而经过h(s)的多次叠加后,跳出局部最小值。原创 2023-09-11 11:00:06 · 705 阅读 · 0 评论 -
ARA*(Anytime A* with Provable Bounds on Sub-Optimality)代码详解
在此之前我们看完了A* 与双向A* 算法,随后我们继续看A* 的另外一种改进版本:ARA*。首先,在此之前我们先了解两个概念:WA* 与AA*。原创 2023-09-04 13:38:54 · 1083 阅读 · 4 评论 -
双向A*算法
前面看最佳路径优先搜索算法的时候顺便研究了一下它的改进算法:双向最佳路径优先搜索算法。那既然有双向最佳路径优先搜索算法自然也可以有双向A* 算法。这篇文章简单看一下双向A*算法的基本原理以及代码实现。原创 2023-08-29 13:12:21 · 2434 阅读 · 1 评论 -
A*算法图文详解
A*算法最早于1964年在IEEE Transactions on Systems Science and Cybernetics中的论文《A Formal Basis for the Heuristic Determination of Minimum Cost Paths》中首次提出。其属于一种经典的启发式搜索方法,所谓启发式搜索,就在于当前搜索结点往下选择下一步结点时,可以通过一个启发函数来进行选择,选择代价最少的结点作为下一步搜索结点而跳转其上。原创 2023-08-21 11:39:27 · 7597 阅读 · 3 评论 -
双向最佳路径优先搜索算法
双向最佳路径优先搜索算法最大的优点就在于它极大程度的降低了搜索的深度,可以很快的完成迭代。前一章我们讲述了最佳路径优先搜索算法,为了查看它的迭代次数,在while里面设置一个打印输出count,每迭代一次就自加一。双向最佳优先搜索相较于传统的单向搜索算法,可以大幅减少搜索范围,提高搜索效率。由于每次扩展都是在两个方向上进行,搜索空间的大小可以被双向同时扩展的方式削减一半。如下图,左侧是直接进行次搜索产生的搜索树,右侧是双向搜索的两棵搜索树,避免了层数过深时分支数量的大规模增长。即当前点到终点的代价值。原创 2023-08-14 15:16:33 · 578 阅读 · 0 评论 -
最佳路径优先搜索算法
本来想直接写A的,不过看完最佳路径优先搜索算法后觉得还是要先理解一下这个算法后才能更好的理解A算法,所以把这篇文章放到A*前面。最佳优先搜索算法(Best-first-searching)是一种启发式搜索算法(Heuristic Algorithm),其基于广度优先搜索算法,不同点是其依赖于估价函数对将要遍历的节点进行估价,选择代价小的节点进行遍历,直到找到目标点为止。BFS算法不能保证找到的路径是一条最短路径,但是其计算过程相对于Dijkstra算法会快很多。原创 2023-08-07 13:04:40 · 2569 阅读 · 0 评论 -
TEB算法详解 参数详解
teb算法的基本思路之前已经看完了,今天主要看一下teb算法的参数配置文件,分析一下每个配置参数的作用:teb的参数主要可以包含以下几个部分:Trajectory的参数顾名思义,就是对路径生效的一些参数,仔细看一下每个参数的作用:teb_autosize参数用于是否自动更新/插入或是删除路径中的点(初始化后的路径) trajectory.teb_autosize函数使用。teb的优化是基于g2o的,而g2o本身需要点与边的概念,这里的点就是局部路径规划的位姿点,为了保证优化的稳定性需要保证两个位姿之间距离原创 2023-04-21 15:16:53 · 8380 阅读 · 0 评论 -
TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(3))
第一章主要分析了teb算法的准备条件,包括获取当前位姿与速度、对全局路径的裁减以获取局部路径等以及局部地图的获取等。第二章主要讲述了在获取前置条件后,如何根据前置条件进行位姿优化,teb的路径优化主要是调用了g2o优化算法,以全局路径的点以及理论上点与点之间的运动时间作为g2o的优化顶点,以距离障碍物的距离、机器人最大运动速度、点与点之间的最短路径等约束条件作为g2o的边对局部路径规划的姿态进行了优化。这一章则是主要看一下算法怎么从优化后的点位到运动输出之间的关系。原创 2023-04-16 23:08:50 · 3077 阅读 · 0 评论 -
TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(2))
上一章主要研究了一下teb算法中局部路径规划之前的处理,包括了局部地图的处理、初始位姿、机器人当前速度以及从全局路径中如何提取出局部路径等内容。这一章继续看一下teb算法中对于局部路径规划的运动部分处理,看一下在已知上述先验的条件下算法是如何计算出一个合适的轨迹的。原创 2023-04-13 18:05:45 · 3338 阅读 · 7 评论 -
TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(1))
TebLocalPlannerROS::computeVelocityCommands作为teb算法与move_base算法的接口函数,是作为teb算法的重点部分去分析的,这一节先看该算法的前半部分,也就是局部路径规划前的数据处理部分,这部分算法的基本思路如下:原创 2023-04-04 15:20:12 · 15715 阅读 · 0 评论 -
ROS navigation调试基础(实现真实机器人导航)
最近使用了一下ROS中非常经典的导航包navigation。并通过自己的激光雷达以及相机里程计驱动了自己的小车在室内进行简单的定位以及导航。在此记录一下以免后期忘记。1、导航包安装ROS中navigation导航包可以通过GitHub上下载:https://github.com/ros-planning/navigationhttps://github.com/ros-planning/navigation_msgs这里要下载两个文件,前面一个是导航包后面一个是move_base中使用的一些消息原创 2022-01-07 20:04:15 · 10929 阅读 · 7 评论 -
Dijkstra算法图文详解
Dijkstra算法算是贪心思想实现的,首先把起点到所有点的距离存下来找个最短的,然后松弛一次再找出最短的,所谓的松弛操作就是,遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近,如果更近了就更新距离,这样把所有的点找遍之后就存下了起点到其他所有点的最短距离。迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。这样一个有权图,Dijkstra算法可以计算任意节点到其他节点的最短原创 2021-12-31 09:15:34 · 49092 阅读 · 7 评论 -
贪心算法详解
顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。基本思路:⒈ 建立数学模型来描述问题。⒉ 把求解的问题分成若干个子问题。⒊ 对每一子问题求解,得到子问题的局部最优解。⒋ 把子问题的原创 2021-12-30 20:50:25 · 2478 阅读 · 0 评论 -
深度优先搜索(DFS)和广度优先搜索(BFS)
1.深度优先搜索深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文原创 2021-12-29 09:50:21 · 2437 阅读 · 0 评论