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来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。 方法的引用…

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

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

Java对象分配原理

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

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

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

动手学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…

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

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

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

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

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

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

Apollo进阶课程㉚丨Apollo ROS背景介绍

原文链接:进阶课程㉚丨Apollo ROS背景介绍 ROS是机器人学习和无人车学习最好Linux平台软件,资源丰厚。无人车的规划、控制算法通常运行在Linux系统上,各个模块通常使用ROS进行连接。 上周阿波君为大家详细介绍了「进阶课程㉙Apollo控制技术详…

一步步编写操作系统 30 cpu的分支预测简介

人在道路的分岔口时要预测哪条路能够到达目的地,面对众多选择时,计算机也一样要抉择,毕竟计算机的运行方式是以人的思路来设计的,计算机中的抉择其实就是人在抉择。 cpu中的指令是在流水线上执行。分支预测,是指当处理…

【HDU - 5492】Find a path(dp,tricks)

题干: Frog fell into a maze. This maze is a rectangle containing NN rows and MM columns. Each grid in this maze contains a number, which is called the magic value. Frog now stays at grid (1, 1), and he wants to go to grid (N, M). For each step,…

Apollo进阶课程㉜丨Apollo ROS原理—1

原文链接:进阶课程㉜丨Apollo ROS原理—1 ROS在开发过程中,基于功能把整个自动驾驶系统分成多个模块,每个模块负责自己消息的接收、处理、发布。当模块需要联调时,通过框架可以把各个模块快速的集成到一起。 上周阿波君为大家详细…

Ubuntu下安装Chrome浏览器的两个方法

一、通过直接下载安装Google Chrome浏览器deb包。 打开Ubuntu终端,以下为32位版本,使用下面的命令。 wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb 以下为64位版本,使用下面的命令。 wget https://dl.…

Apollo进阶课程㉝丨Apollo ROS原理—2

原文链接:进阶课程㉝丨Apollo ROS原理—2 在ROS系统中,从数据的发布到订阅节点之间需要进行数据的拷贝。在数据量很大的情况下,很显然这会影响数据的传输效率。所以Apollo项目对于ROS第一个改造就是通过共享内存来减少数据拷贝,以…

Java 10 常用集合继承关系图

概述 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用。 类图如下: 1、Iterable与Iterator接口之间的区别 我看到好多网上的文章类图里面Collection 是继承Iterator接口&a…