
自动驾驶规划入门(已完结)
文章平均质量分 97
一起学习,一起进步!让我们一起走进自主移动机器人与自动驾驶的世界。示例完整python代码github地址 https://github.com/meikobay/PlanningAlgorithms
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
windSeS
消失一段时间。
展开
-
《自动驾驶规划入门》专栏结语
写书是一种又累又不讨好的活,没有一点名气的人作者更是如此,我完全没有坚持下去的理由了。自信是很宝贵的东西,它能让我在人云亦云中坚持自己的观点,让我更加大胆的探索未知。在基于图搜索的规划算法中,我们着重对算法的最优性进行了讨论,贯穿前后十一篇相关的博客。一般理论很复杂,验证的示例就需要简单一些,否则观众会抓不住重点,简单的示例也有益于对复杂理论的理解。结束是为了更好的开始。而我在面对类人学习/终生学习领域时却不是如此,我敢于有自己的理解并且坚持、敢于蚍蜉撼大树,敢于考量领航巨擘的言论的理论与现实意义。原创 2023-02-20 15:27:49 · 2236 阅读 · 9 评论 -
运动基元(三):多项式曲线
我们在前面的基于连续优化的规划算法:以二次规划为例中用于规划的曲线就是一个五阶的多项式曲线。本章将更加详细介绍多项式曲线,先介绍最原始的多项式曲线形式y(x)y(x),也即曲线的自由维度间是相互耦合的,其中以某一维度作为函数值,其他维度都作为函数变量。这种各维度之间相互耦合的作法得到的多项式曲线不具有几何不变性。更通用的方式是以中间变量tt作为y(t)y(t)与x(t)x(t)的共有变量,分别构造多项式函数,。。。不最后给出一个将自由度解耦多项式曲线应用于轨迹规划的完整Python示例。原创 2023-02-17 22:53:36 · 1245 阅读 · 0 评论 -
运动基元(二):贝塞尔曲线
贝塞尔曲线是我第一个深入接触并使用于路径规划的运动基元。N阶贝塞尔曲线具有很多优良的特性,例如端点性、N阶可导性、对称性、曲率连续性、凸包性、几何不变性、仿射不变性以及变差缩减性。本章主要介绍贝塞尔曲线用于运动基元时几个特别有用的特性。最后,在离散优化框架下实现了一个基于三阶贝塞尔曲线的路径规划方法——一个简单且有效的中低速轨迹规划方法。原创 2023-02-10 20:57:40 · 1619 阅读 · 2 评论 -
运动基元(一):Dubin‘s曲线【part3】
RLR的第一段圆弧的曲率k1=−kmax原创 2023-01-26 17:20:22 · 912 阅读 · 0 评论 -
运动基元(一):Dubin‘s曲线【part2】
LSL的第一段圆弧的曲率k1=kmax>0→sign(k1)=1k_1=k_{max}>0\rightarrow sign(k_1)=1k1=kmax>0→sign(k1)=1,第二段圆弧的曲率k2=kmax>0→sign(k2)=1k_2=k_{max}>0\rightarrow sign(k_2)=1k2=kmax>0→sign(k2)=1。我们计算三段轨迹的长度,分别标记为LC1L_{C1}LC1、LSL_{S}LS、LC2L_{C2}LC2。对于LSL,切线段的长度与两圆弧圆心间原创 2023-01-26 17:19:16 · 1185 阅读 · 0 评论 -
运动基元(一):Dubin‘s曲线【part1】
无人车系统(一):运动学模型及其线性化给出现有汽车的运动学模型,也即阿克曼转向几何模型,由阿克曼转向模型可得进一步简化为自行车模型。该模型中的控制变量为期望速度vvv与方向盘转角δ\deltaδ。从方向盘转角到车辆的运动轨迹并不是那么直接。介于曲率kkk与角速度ω\omegaω、速度vvv有等式:θ˙=ω=vk\dot{\theta}=\omega = vkθ˙=ω=vk,我们将控制变量中的方向盘转角δ\deltaδ替换为更加直接的曲率kkk。{x˙=vcos(θ)y˙=vsin(θ)θ˙=vk(1)\l原创 2023-01-24 23:52:57 · 1031 阅读 · 0 评论 -
基于连续优化的规划算法:以二次规划为例
本章的场景虽简单,但我们把二次规划求解最优轨迹的步骤介绍的非常详细。对于优化(离散优化也好,本章介绍的连续优化也好),重点在于将规划问题建模成对应的优化问题,也即构建:1)解的空间;2)解的约束;3)解的评价。另外也需要注意,我们常见到的连续优化工具都是针对凸优化问题的,所以,如果我们想要采用该方法或工具来解决,无论原问题是不是凸的,都要把他转成凸的。本章目的在于介绍一个常规的连续优化问题构建与求解过程。更多的优化方法的例子会出现在马上要见面的运动基元系列。原创 2023-01-14 22:07:42 · 1647 阅读 · 2 评论 -
基于采样的规划算法之动态窗口法(DWA)
我在ROS1(机器人操作系统,Robot Operating System)中初次认识DWA2 3,它是ROS中一个典型的局部规划器。DWA在每个决策周期内对动作空间(主要包括线速度与角速度构成的二维动作空间)进行采样得到当前状态下的候选轨迹簇,最后根据设定的成本函数评价出最优的轨迹,基本步骤如下图所示。上图也被我(=v=)称为离散优化框架。与连续优化方法不同,离散优化方法通过采样获得候选解,可以对非凸的优化问题进行求解。不同的采样候选轨迹簇方式,构成不同的离散优化方法。DWA之所以为动态窗口方法,是因为原创 2023-01-08 22:09:52 · 2204 阅读 · 5 评论 -
基于采样的规划算法之动态规划方法
本章以标准直道场景下的无人驾驶路径规划问题为例,介绍了基于动态规划的路径规划方法。动态规划的求解过程是简单清晰的——就是用贝尔曼方程。它的难点在于我们要对所要求解规划问题有一个很好的把控程度,也就是将复杂的多步决策问题建模成满足1)最优子结构;2)无后效性;的多个单步决策问题。动态规划应用的领域很多,除了最优化,它也属于强化学习领域比较重要的基础理论之一。本章不打算对它做太多扩展,感兴趣的同学有空可以看看强化学习引言(简略版)PPT。原创 2023-01-02 20:28:15 · 1150 阅读 · 0 评论 -
基于采样的规划算法之RRT家族(六):总结
从RRT到时空RRT,我们介绍了总共5种RRT家族算法。RRT-Connect、RRT* 、Informed RRT* 都是为了让原始RRT算法。最后一个时空RRT算法则是为了将RRT算法从空间拓展到时空。原创 2022-12-24 15:50:36 · 1443 阅读 · 2 评论 -
基于采样的规划算法之RRT家族(五):时空 RRT
在介绍 A* 家族算法时,我们以时空 A* 算法结尾。现在,RRT家族也以时空RRT结束。与时空 A* 算法一样,时空RRT也是为了能够应对动态场景而提出的。本章只为说明如何将RRT拓展到时空RRT,不涉及算法应用于实际机器人任务时需要做的与算法核心思想不太相关的内容(例如得到满足运动学与动力学约束的轨迹)。原创 2022-12-17 00:52:42 · 1187 阅读 · 2 评论 -
基于采样的规划算法之RRT家族(四):Informed RRT*
Informed RRT* 是在 RRT* 算法的基础上,通过设计基于起点、终点以及当前最优路径长度c_best构造椭圆采样区域,来替代 RRT* 中一直在完整状态空间的作法,从而提高了采样出更短路径节点的概率。但是,值得注意的是,在同样的迭代次数下,Informed RRT* 比 RRT*具有更高的概率得到更优的路径,而非一定。这也是基于概率采样方法的共同特性,每次找到的路径解都不同。原创 2022-12-10 21:48:35 · 2267 阅读 · 0 评论 -
基于采样的规划算法之RRT家族(三):RRT*
RRT* 算法在原始RRT算法的基础上增加了两个重新检测的步骤,这两个步骤分别用来:1)从附近节点中找到那个使新产生节点到起点最近的父节点;2)判断附近节点是否以新产生节点作为父节点时会有离起点更新的路线。原创 2022-12-02 22:21:18 · 1263 阅读 · 4 评论 -
基于采样的规划算法之RRT家族(二):RRT-Connect
原始的RRT算法以起点作为根结点拓展一棵路径树,双向RRT算法则同时以起点与终点作为根结点拓展两棵树,RRT-Connect算法是在双向RRT算法的基础上,增加了贪婪拓展策略,也即:某一子树上最新节点往另一子树最近的节点不断延伸拓展节点,直到遇到障碍物。原创 2022-11-23 19:17:52 · 2769 阅读 · 0 评论 -
基于采样的规划算法之RRT家族(一):快速探索随机树(RRT)
本章介绍了RRT算法,一种通过对空间进行随机采样在线生成一棵逐渐趋近目标点的路径树。其它博客在介绍RRT算法时采用栅格地图环境来作为RRT应用的背景。其实,栅格地图并没有充分展示出RRT的优点。RRT算法,也可以说是采样类算法的一个优点是很方便在连续的空间进行采样。本章则直接采用这种连续空间的例子。本章介绍的RRT算法是最原始的版本,相对来说还是比较简陋,后续会介绍一些改进版本的RRT算法。原创 2022-11-09 23:01:06 · 1092 阅读 · 0 评论 -
基于采样的规划算法之概率路图(PRM)法
本章介绍了一种不用动脑子的节点生成法——随机采样。我们改变需要节点的个数N=20N=20N=20时,得到的概率路图如下图所示。从中我们基本可推断,采样点个数越多,最终生路径的质量越高。并且每次运行程序,产生的图都是不一样的,这源自随机采样。存在这样一条无碰撞路径,但无法保证一定能找到。后面我们将用几章来不断阐述这个结论,不断使这个结论形象化。原创 2022-11-03 23:30:48 · 1245 阅读 · 0 评论 -
基于图搜索的规划算法之Voronoi图法
与可视图法一样,Voronoi(维诺)图也是一种基于感知结果构造规划问题图(graphVoronoi图,又被称为泰森多边形或Dirichlet图,它是由一组连接两邻点直线的垂直平分线组成的连续多边形组成。如下图所示,每个多边形内有一个点,每两个邻近多边形之间有一条共边,而这个边就是就是由这两个多边形中的点唯一确定,也即:边经过两点的垂直平分线。基于Voronoi图搜索到的路径都是图中的边,多边形中的点可看作障碍物,那么路径在两障碍物正中间,所以理论上能够得到比可视图法更安全的路径。构造Voronoi原创 2022-11-01 21:23:09 · 2848 阅读 · 4 评论 -
基于图搜索的规划算法之可视图法
本博客一改前面章节的背景-原理-伪代码的严肃排布,以code notebook的形式介绍了可视图法,只是希望大家能从众多的规划算法以及繁杂的原理中跳脱出来,回归到一种轻松呼吸、自由游戏的状态。希望大家能在这种状态能被前面的规划算法擦出更成熟、更全局的理解。本章详细介绍了可视图方法的构建与应用,同时给出每一步的python代码。最后基于python库——networkx作为构建graph的工具,并利用其内嵌的图搜索算法得到可视图下的最短路径。大家有空可以尝试将内嵌的图搜索算法替换成前面章节中介绍过的算法。原创 2022-10-20 23:47:46 · 2137 阅读 · 4 评论 -
基于图搜索的规划算法之 A* 家族(十一):总结
A* 家族算法在此就告一段落了。本专栏无法(也没必要)囊括所有的A* 家族算法,但是尽可能的从浩如烟海的算法库中挑选出有代表性的算法,意欲将 A* 类规划算法讲通透。学习到现在,如果你知道什么影响 A* 家族算法的最优性,A* 类算法的本质是什么(一个可以抽象成对图(graph)进行搜索的问题),那么这十篇博客的目的就已经达到了。下面,基于图搜索的规划算法还剩下两篇要介绍。原创 2022-10-15 12:11:37 · 1075 阅读 · 0 评论 -
基于图搜索的规划算法之 A* 家族(十):时空 A* 算法
我们假定这样一个场景,无人车(ego)需要保持本车道(也就是下面车道)行驶,但是ego前方有一辆龟速行驶的车(v1)。按照正常的决策,我们需要借旁边车道超过v1,最终轨迹应该如下图所示。该场景虽然简单,但场景中存在动态障碍物v1,正好可以用来测试时空 A* 算法。如上图所示,我们假定该场景为直道,沿车道方向定为X轴,与车道垂直的方向定为Y轴(与原论文中的设定不同)。本文基于论文1介绍了一种时空 A* 算法,该算法通过增加时间维度使之能够完成轨迹规划的任务。论文2。原创 2022-10-10 22:57:48 · 3079 阅读 · 7 评论 -
基于图搜索的规划算法之 A* 家族(九):Hybrid A* 算法
如下图所示,红色路径为前面章节介绍的路径规划算法能够得到的最短路径。如果没有开过车,大家应该都坐过车。我们应该没有见过路上的汽车能开红色所示的路径,真实的路径应该如下图绿色曲线所示。无人车系统(一):运动学模型及其线性化给出了我们常见阿克曼转向底盘的运动学模型(如下图所示)。由以上阿克曼转向模型可得进一步简化为单车模型如下图。采用单车模型的好处是它简化了无人车前轮转向角与曲率之间的几何关系:tan(δ)=LR\tan(\delta)=\frac{L}{R}tan(δ)=RL。其中,δ\deltaδ原创 2022-10-05 12:31:26 · 1546 阅读 · 6 评论 -
基于图搜索的规划算法之 A* 家族(八):Theta* 算法
本章的背景与基于图搜索的规划算法之A* 家族(七):Field D* 算法中的背景一致,都是为了解决这一问题:栅格意义下的最短路径并不是连续空间上的最短路径。Thorpe针对这个问题,在1984年提出了带后平滑的A* 算法1,该算法先用标准的A* 算法得到路径,然后对该路径进行平滑后处理。平滑后处理函数从起点开始检查路径上当前状态sts_tst的下一个状态st−1s_{t-1}st−1是否与sts_tst的父节点用一条无碰撞的直线相连,若存在这样的无碰撞直线,则将sts_tst的父节点作为s原创 2022-09-25 14:13:35 · 2244 阅读 · 0 评论 -
基于图搜索的规划算法之A*家族(七):Field D*算法
行到此处,我们一起来看看口中嘀咕很久的自主移动机器人倒底长啥样。下面给出几个有名有姓的地面移动机器人:当这些移动机器人伴随着它应用的环境出现在我们面前时,我们或许理解不了前几章介绍的那些格子算法如何应用于自主移动机器人规划任务。截止到现在,我们介绍的基于图搜索的规划算法绝大部分算法与示例都是基于栅格地图(除了Dijkstra算法的第一个示例,它是基于原始graph数据结构)。一个典型的栅格地图如下图所示:栅格地图利用不同颜色来可视化栅格的状态,一般用黑色表示被障碍物占据状态,白色表示自由可通行状态。原创 2022-09-14 14:49:42 · 1035 阅读 · 0 评论 -
基于图搜索的规划算法之A*家族(六):D* Lite算法
通过前面几章讲解的改进算法,基于图搜索的寻路算法在工作方式上越来越贴近实际应用。但是,也仅仅是在工作方式上。由于采用的基于栅格地图,采用上、下、左、右、左上、左下、右上、右下等作为状态迁移的八个离散动作。机器人若按这种路径行驶,会出现频繁地原地转向,先不说频繁转向会导致行驶效率低下,就说现有图搜索算法的最优性仅仅是在栅格意义下的最优性,也即:机器人只能往周围八个邻近的栅格迁移。此后,我们会从实际应用中的路径最优性方面,以原始 A* 算法为起点另开一条支线循序向前。原创 2022-09-01 22:18:06 · 1337 阅读 · 1 评论 -
基于图搜索的规划算法之A*家族(五):D* 算法
《概率机器人》1一书开篇就刻画了机器人在现实世界中的工作图景,uncertainty是作者 Sebastian Thrun 给这幅真实图景加上的主要底色。书中描述的五个不确定性分别关于:环境、传感器、执行器、模型、计算。对应到最短路径搜索问题,相关的有环境本身的不确定性和用于感知环境的传感器的不确定性。环境与传感器直接造成了环境模型(在图搜索算法中表述为图G\mathbb{G}G)具有时间与空间维度上的部分可观测特性。若G\..................原创 2022-08-28 23:47:34 · 663 阅读 · 2 评论 -
基于图搜索的规划算法之A*家族(四):Lifelong Planning A*算法
Lifelong Planning A* 算法能够应对环境的变化,并基于历史探索信息,得到应对新环境的新知识,避免计算资源不必要的浪费。此外,本文基于定理一与定理二以及原文伪代码中的BUG提出新的伪代码,基于新伪代码的实现使算法变得更加智能,对于那些不会影响最短路径的状态变化,算法选择Lazy的方式,不进入搜索主循环去浪费计算资源。环境不会在我执行任务的途中变化,环境的改变是上一个任务执行完成后到新任务开始执行前的间隙,就像政府会把修路的情况提前一天告知大家,避免延误大家的出行。............原创 2022-08-20 18:31:00 · 1062 阅读 · 6 评论 -
基于图搜索的规划算法之A*家族(三):Anytime A*算法
本文从Anytime算法的思想开始,介绍了Anytime A* 算法本质上想要解决的问题以及其适配的应用场景。其中,改进版加权 A* 算法作为Anytime A* 算法的核心,可以利用历史探索信息,加速下一次迭代的求解过程(迭代权值大,理论上需要更多的探索,但是由于可以利用前面迭代的探索结果),从而得到:越往后,所需的时间成本越小,且能找到更优的路径解。另外,在实现过程中,本文发现原始论文中的伪代码存在一些问题和一些可以优化的地方,本文也对其进行了修正。思考可能不是太完全,有有失偏颇,欢迎留言讨论。....原创 2022-08-15 01:41:45 · 1149 阅读 · 0 评论 -
基于图搜索的规划算法之A*家族(二):双向A*算法
本篇介绍了双向 A* 算法,双向 A* 算法等价于在起点与终点分别安放一个 A* 算法,各自受到启发式函数的引导直到彼此的已探索曲域重叠,然后就返回找到的路径。再次强调,双向 A* 不能保证一定能找到最优解,但是实际应用中,找到的解不会比最优解差很多。双向 A* 以损失一点点的最优性换得了更加均衡的计算成本(更换起点与终点所引起的计算成本的差别)。但是,双向 A* 算法对时间的把控度还不够强,不同的问题(G\mathbb{G}G不同、xIx_IxI不同、xGx_GxG。.........原创 2022-08-06 15:55:16 · 2717 阅读 · 3 评论 -
基于图搜索的规划算法之A*家族(一):A*算法
启发式函数的加入,使A*算法在求解指定起点到指定终点的最短路径问题上比Dijkstra算法(Dijkstra算法也可以有)更快。但是,一定一定要记得,A*算法是否最优依赖你怎么定义启发式函数。所以,如果有人不加前提的问你A*算法一定能保证找到最优解吗?你就要小心的回答了。还记得基于图搜索的规划算法之Dijkstra思考中留下的第一个问题吗?如何在对Dijkstra算法稍加修改,使其变成针对特定起点到特定终点的最短路径问题?G\mathbb{G}G上的xI→xGxI→xG。.................原创 2022-07-31 13:42:47 · 1269 阅读 · 8 评论 -
基于图搜索的规划算法之Dijkstra
Dijkstra算法1作为最典型的图搜索寻路算法,用于在非负权边图(graph)中求解从起始状态节点到其他所有状态节点的最短路径——也被称为单源非负权边图最短路径问题。在很多专业课程中都能看到它的身影,如数据结构、图论、运筹学等等 。下图显示了一个非负权边图的例子:Dijkstra算法是由荷兰计算机科学家Edsger W. Dijkstra于1959年提出,并以其发明者的名字为名2。Dijkstra早在1956年时就发明了这个算法,直到1959年才等到合适的学术期刊出现并得以发表。在Web of Scie原创 2022-07-22 20:43:55 · 1587 阅读 · 0 评论 -
规划(计划):以智慧为音符在空间上写就的与时间相关的乐章
“他们利用各种办法包围成群的野马,逼迫马群向山顶上跑,野马跑到悬崖边收不住脚,就成群地跌下悬崖,跌得血肉狼藉,这样,人们就获得了大量的野马。”上面这段文字描述了原始人打猎的场景。我们只需要稍加思索便能发现以上描述背后藏着原始人精妙的计划。智能体(人类或某些其他生物)从空间的变化中抽象出“时间”,有了时间观念后,便同时拥有了前瞻(计划未来)后瞩(回忆过去)的能力,其中,回忆过去也是为了更好的预测与计划未来。.............................................原创 2022-07-17 23:20:30 · 991 阅读 · 2 评论