Apollo进阶课程㉒丨Apollo规划技术详解——Motion Planning with Autonomous Driving

原文链接:进阶课程㉒丨Apollo规划技术详解——Motion Planning with Autonomous Driving

自动驾驶车辆的规划决策模块负责生成车辆的行驶行为,是体现车辆智慧水平的关键。规划决策模块中的运动规划环节负责生成车辆的局部运动轨迹,是决定车辆行驶质量的直接因素。

在大多数情况下,运动规划问题的精确解决方案在计算上是难以处理的。 因此,数值近似方法通常在实践中使用。在最流行的数值方法中,变分方法将问题视为函数空间中的非线性优化,图形搜索方法构建车辆状态空间的图形离散化并使用图形搜索测量方法搜索最短路径,此外基于树的增量方法,从车辆的初始状态逐步构造可到达状态的树,然后选择这种树的最佳分支。

上周阿波君为大家详细介绍了「进阶课程㉑Apollo规划技术详解——Basic Motion Planning and Overview」。

通过介绍了基本的运动规划概述,其中详细的介绍了如何构建汽车的运动规划问题,其中包括路径查找问题路径优化,可以通过A-Star算法、D-Star算法对路径搜索进行优化,通过曲线平滑的方式来优化折线。除此之外,还简单的介绍了无人驾驶的硬件系统和系统软件。

本周阿波君将与大家分享Apollo规划技术详解——Motion Planning with Autonomous Driving。下面,我们一起进入进阶课程第22期。


目录

1 - 运动规划基本方法

2 - 运动规划框架

2-1 RRT(基于快速扩展随机树算法)

2 - 2 Lattice网格方法

2 - 3 Polynomial方法

2 - 4 Functional Optimization方法


1 - 运动规划基本方法

本节主要介绍运动规划的一些基本方法,重点从robotics的角度阐释。这些方法主要有RRTLatticeSpiraPolynomialFunctional Optimization等,如下图所示。

                                                                                                        运动规划方法

前面讲到决策规划问题,都是从质点模型出发考虑。质点模型将运动轨迹当成一个点,这个点和无人车是不一样的。假设把一个无人车看成一个点,这个点和另一个点不相撞,在数学定义上是点和点没有交集,但是在实际生活中一个车和一个车可是会相撞。下面介绍解决这些问题的一些方法:Configuration Space (构造空间),也就是说能够控制什么变量。对于刚体而言,不仅是XY坐标,还要有heading信息才能研究跟障碍物之间的关系。对于无人车来说有更多的变量。其复杂性主要体现在两个方面,一个是Space Dimensionality(空间维度),另一个Geometric Complexity(几何复杂性)。例如bounding box跟bounding box之间怎么相交,一个多面体跟一个多面体之间怎么检测出路径,以避免跟另一个障碍物相交。

                                                                                                ​​​​​​​        构造空间方法

规划问题中涉及到一些约束条件,Constraints(约束)大概分为三类:一个是Local Constraint,例如避免和障碍物碰撞。第二是Differential Constraint,比如边界曲率。最后是Global Constraint。比如最短路径。


2 - 运动规划框架

运动规划是在连续空间的一种优化,对于连续空间过程的优化往往比较难。因此,通常先将连续空间问题离散化表示,然后寻找对应的解决方案。如下图所示,可以使用图搜索的方法对离散空间问题进行求解。

那么,如何去离散化连续空间呢?有种方法叫做Roadmap,这个方法使用简单的连通图表示配置空间,类似于城市如何用地铁图表示。其中Visibility Graph是一种常用的Roadmap方法,如下图所示。Visibility Graph将起始节点,所有障碍物的顶点和目标节点相互连接来构建路线图。我们会发现,从红点到绿点的最短路径一定会通过靠近障碍物边界的折线。

                                                                                                        图搜索方法

除了Roadmap之外,还有Cell decomposition(网格分解方法)Potential field(势场法)等路径规划方法。Cell decomposition将整个空间分割成一个个cell,通过cell的连接图表示自由空间的连接属性。Potential field就是直接用微分方法处理。

                                                                                                        路径规划方法

一种常用的抽象连续空间的方法叫做PRM。它在整个配置空间随机采样一些点,如果点在障碍物上则去掉,然后将这些点连接起来,如下图所示的紫色点。从点s到g的最短路径就可以利用A-Star算法进行求解。但是该方法要求是对全局感知,而无人车是一个部分感知的应用场景,因此有RRT的改进方法。

                                                                                                        PRM 方法


2-1 RRT(基于快速扩展随机树算法)

如下图所示,它构造一个根结点为起始点的配置空间树,通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条由从初始点到目标点的路径。如果叶子节点和目标节点之间的连接被障碍物阻挡,则需要重新采样。

                                                                                                        基于快速扩展随机树算法

通过这种方式离散化的线是不适合无人车行驶的,因为这些线的curvature不连续,甚至curvature都没有。针对这一问题MIT提出使用平滑曲线进行连接的方法,如下图所示。但是该方法得到的路径可能还是不够平滑,另外对动态障碍物的处理也存在问题。

                                                                                                        平滑曲线进行连接的方法


2 - 2 Lattice网格方法

针对上述问题,就有人提出了Lattice网格方法

                                                                                                        Lattice网络方法

如上图所示,最原始的Lattice网格方法非常简单,它在XY世界坐标系中,以1米为单位进行网格划分,然后用无人车可以行进的、曲率连续的曲线将起始点和目标点连接起来。但是这种方法还是不能满足需求。对于道路来说,这种抽象方式并不合适。Lattice Sampling撒点不能在规则化坐标系下去撒点,因为道路并不是一个完全XY的坐标系。因此提出了在sl坐标系下进行离散的方法Lattice in Frenet Frame


2 - 3 Polynomial方法

当抽象出这些点之后,如何使用平化曲线连接呢? 有一种使用螺旋曲线的方法,即Splines方法。此外,还可以使用路径-速度迭代优化的方法对Lattice方法进行优化,也就是Polynomial方法。它将问题降维,分成了path 和 speed两个维度逐渐优化,这是一种iterative的处理方式。

                                                                                                        Polynomial方法


2 - 4 Functional Optimization方法

还可以用Functional Optimization方法对运动规划进行处理,对整个问题建模,设计相应的代价函数。二次规划就是其中一种常用的方法。

                                                                                                        Functional Optimization方法​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM核心之JVM运行和类加载全过程

为什么研究类加载全过程? 有助于连接JVM运行过程更深入了解java动态性(解热部署,动态加载),提高程序的灵活性类加载机制 JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成J…

【2018icpc宁夏邀请赛现场赛】【Gym - 102222A】Maximum Element In A Stack(动态的栈中查找最大元素)

https://nanti.jisuanke.com/t/41285 题干: As an ACM-ICPC newbie, Aishah is learning data structures in computer science. She has already known that a stack, as a data structure, can serve as a collection of elements with two operations: push, …

动手学PaddlePaddle(2):房价预测

通过这个练习可以了解到: 机器学习的典型过程: 获取数据 数据预处理 -训练模型 -应用模型 fluid训练模型的基本步骤: 配置网络结构: 定义成本函数avg_cost 定义优化器optimizer 获取训练数据 定义运算场所(place)和执行器(exe) 提供数…

JAVA 堆栈 堆 方法区 解析

基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。 方法的引用…

【2018icpc宁夏邀请赛现场赛】【Gym - 102222H】Fight Against Monsters(贪心排序)

题干: It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Egbert Felix Gaspar Humbert Ignatius Jayden Kasper Leroy Maximilian. As a storyteller, today I decide to tell you and others a story about t…

动手学PaddlePaddle(3):猫脸识别

你将学会: 预处理图片数据 利用PaddlePaddle框架实现Logistic回归模型: 在开始练习之前,简单介绍一下图片处理的相关知识: 图片处理 由于识别猫问题涉及到图片处理知识,这里对计算机如何保存图片做一个简单的介绍。在…

Java对象分配原理

Java对象模型: OOP-Klass模型 在正式探讨JVM对象的创建前,先简单地介绍一下hotspot中实现的Java的对象模型。在JVM中,并没有直接将Java对象映射成C对象,而是采用了oop-klass模型,主要是不希望每个对象中都包含有一份虚函数表&…

【HihoCoder - 1831】80 Days(尺取 或 线段树)

题干: 80 Days is an interesting game based on Jules Vernes science fiction "Around the World in Eighty Days". In this game, you have to manage the limited money and time. Now we simplified the game as below: There are n cities on a …

动手学PaddlePaddle(4):MNIST(手写数字识别)

本次练习将使用 PaddlePaddle 来实现三种不同的分类器,用于识别手写数字。三种分类器所实现的模型分别为 Softmax 回归、多层感知器、卷积神经网络。 您将学会 实现一个基于Softmax回归的分类器,用于识别手写数字 实现一个基于多层感知器的分类器&#…

深入探究JVM | klass-oop对象模型研究

├─agent Serviceability Agent的客户端实现 ├─make 用来build出HotSpot的各种配置文件 ├─src HotSpot VM的源代码 │ ├─cpu CPU相关代码&#xff0…

动手学PaddlePaddle(5):迁移学习

本次练习,用迁移学习思想,结合paddle框架,来实现图像的分类。 相关理论: 1. 原有模型作为一个特征提取器: 使用一个用ImageNet数据集提前训练(pre-trained)好的CNN,再除去最后一层全连接层(fully-connecte…

Apollo进阶课程㉓丨Apollo规划技术详解——Motion Planning with Environment

原文链接:进阶课程㉓丨Apollo规划技术详解——Motion Planning with Environment 当行为层决定要在当前环境中执行的驾驶行为时,其可以是例如巡航-车道,改变车道或右转,所选择的行为必须被转换成路径或轨迹,可由低级反…

Java对象模型-oop和klass

oop-klass模型 Hotspot 虚拟机在内部使用两组类来表示Java的对象和类。 oop(ordinary object pointer),用来描述对象实例信息。klass,用来描述 Java 类,是虚拟机内部Java类型结构的对等体 。 JVM内部定义了各种oop-klass,在JV…

【2019南昌邀请赛现场赛 - J】Prefix(STLmap,思维)

题干&#xff1a; yah has n strings <s1​,⋯,sn​>, and he generates a sequence P by two steps: P<s1​,⋯,sn​> Replace each si​ with all prefixes of itself. An example is: the n strings are < aab,ab > first, P < aab,ab > then, P…

Apollo进阶课程㉔丨Apollo 规划技术详解——Motion Planning Environment

原文链接&#xff1a;进阶课程㉔丨Apollo 规划技术详解——Motion Planning Environment 自动驾驶汽车核心技术包括环境感知、行为决策、运动规划与控制等方面。其中&#xff0c;行为决策系统、运动规划与控制系统作为无人驾驶汽车的“大脑”&#xff0c;决定了其在不同交通驾…

JAVA类 与类文件

在一个.java文件中可以有多个同级类, 其修饰符只可以public&#xff0f;abstract&#xff0f;final&#xff0f;和无修饰符1.public修饰的只能有一个,且必须要与文件名相同: 因为jvm虚拟机为了提高查找类的速度&#xff0c;使用import语句导入的时候&#xff0c;只会导入对应空…

【2019南昌邀请赛现场赛 - G】Winner(建图,tarjan缩点 或 贪心)

题目大意&#xff1a; n个人参加竞技比赛。比赛由三种模式a,b,c&#xff0c;每个人在每种模式下有对应的权值a[i]b[i]c[i]。举行n−1场比赛&#xff0c;每场比赛主办方可以选择两个人决斗&#xff0c;能力值低的人淘汰。这样保证n-1场比赛过后&#xff0c;只会有一个winner。q…

一步步编写操作系统 26 打开A20地址线

打开A20地址线 还记得实模式下的wrap-around吗&#xff1f;也就是地址回绕。咱们一起来复习一下。实模式下内存访问是采取“段基址:段内偏移地址”的形式&#xff0c;段基址要乘以16后再加上段内偏移地址。实模式下寄存器都是16位的&#xff0c;如果段基址和段内偏移地址都为1…

【HDU - 6567】Cotree(树形dp,思维)

题干&#xff1a; Avin has two trees which are not connected. He asks you to add an edge between them to make them connected while minimizing the function ∑ni1∑nji1dis(i,j)∑i1n∑ji1ndis(i,j), where dis(i,j)dis(i,j) represents the number of edges of the …

一步步编写操作系统 27 处理器微架构之流水线简介

了解处理器内部硬件架构&#xff0c;有助于理解软件运行原理&#xff0c;因为这两者本身相辅相成&#xff0c;相互依存。就像枪和狙击手&#xff0c;枪的操作和外形设计都是要根据人体工学&#xff0c;让人不仅操作容易&#xff0c;而且携带也要轻便&#xff0c;做到能随时射出…