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

原文链接:进阶课程㉔丨Apollo 规划技术详解——Motion Planning Environment 

自动驾驶汽车核心技术包括环境感知行为决策运动规划控制等方面。其中,行为决策系统、运动规划与控制系统作为无人驾驶汽车的“大脑”,决定了其在不同交通驾驶场景中行驶的合理性与安全性。

运动规划根据环境的变化在算法和处理方法上有很大的不同。

上周阿波君为大家详细介绍了「进阶课程㉓ Apollo 规划技术详解——Motion Planning with Environment」。其中详细讲解了如何建立 Vehicle Model,另外还介绍了曲线坐标系 SL 、SL 坐标系到 XY 坐标系的投影、XY 坐标系到 SL 坐标系的投影等。

本周阿波君将继续与大家分享 Apollo 规划技术详解——Motion Planning Environment的相关课程。下面,我们一起进入进阶课程第24期。

目录

1.多项式

2.Bezier Spline


在自动驾驶中,我们将环境抽象成 SL 坐标系,在此坐标系下的曲线光滑度是有要求的。首先,曲线本身要平滑。其次,其曲率也要满足平滑的特性。因此需要对轨迹线进行平滑处理。那么能不能先生成一条线,然后再进行平滑,能不能对 Curvature 进行一个后期的平滑?不可以。因为 XY 坐标本身与 Curvature 是有联系的,不能单独平滑曲率,也不能单独平滑 X 或者 Y,今天的课程将为大家介绍平滑的方法。

1.多项式

首先,可以在轨迹上以等距离的方式随机选择一些点,然后用高阶多项插值的方式来近似表示轨迹,对多项式进行优化。但是高阶多项式不能用于平滑,因为高阶的多项式抖动太大,没有办法控制幅度,这就是常说的龙格现象,如下图所示。

                                                                                                        龙格现象


2.Bezier Spline

Bezier Spline 曲线是由一系列控制点定义的,例如P_0P_n,其中n代表曲线的阶数。如下图所示,分别给1阶、2阶、3阶Bezier Spline曲线的表示形式。通过对它们做平滑,得到平滑的曲线,例如二阶平滑保证曲线的曲率平滑。但是这种方法的缺点是,除了起始点和终点,其它控制点不能保证会被得到的曲线经过。

                                                                                                n 阶 Bezier Spline 曲线表达形式

生成一条光滑的曲线,涉及到两方面,一方面是目标,另一方面是工具。怎么定义平滑呢?最简单的方法就是最短路径,但是路径最短还不能保证平滑性,因此会对其不同阶导数进行 Minimize 求解,保证导数空间的连续,这就是 Smoothing Spline 最初的思想。那么,问题的目标就明确了,定义一个函数,能够最小化它的类似三阶导平滑性。

                                                                                                一维平滑度定义

Smoothing Spline 具有一些特殊的性质,在给定边界的条件下,它是一个多项式,可以找到最优解。但是它的 Boundary Constraint 只考虑了起点和终点,如果中间有障碍物就不是最优解。这种情况下可以使用 Piecewise Polynomial(分段多项式)来处理。

一个 Piecewise Polynomial 是一维的函数,描述二维曲线是不够的,这时候就有一个 Spline 2D,假设我们把曲线分成 N 截,每节曲线段它的 X 坐标是一个 Polynomial ,Y 坐标也是一个 Polynomial 。如下图所示,用 5 阶多项式来表示 X 和Y,称之为 Quintic Spline(五次样条),每一节都是这样的函数。这种表示有一个很好的特性,就是目标函数具有旋转不变性。怎么让曲线足够平滑?我们让它在 X 坐标上的变化率,也就是三阶导的平方是最小的,Y 上的变化率三阶导也是最小的,代价函数就是这两个变化率的和。代价函数的求解就是一个二次规划问题,我把这种 Loss Function 定义成这种形式是因为平方的积分能够给计算带来便利。

                                                                                                        二维样条

前面说的是用一节一节的线段来保证曲线是光滑的,在线段内部用一个二维的 Polynomial 表示,在内部是 N 阶可导的,但是如何保证节点处是平滑的呢?这个叫做端点约束条件,需要保证 X 和 Y 方向的倒数是相等的,一般要求到三阶导都是相等的,包括它的 X,Y 点的值也完全相等,此时就能保证三阶导连续。

还有一种方式叫做螺旋曲线,它通过一个极坐标形式定义,比如说沿着一条曲线,如果一个点 S 的曲率是知道的,假设它的原点在 (0,0)的位置,可以唯一定义出一条经过 S 的曲线,也就是 Spiral Path 。那么可以让 Spiral Path 满足起点、终点约束条件生成一条螺旋曲线。

                                                                                                        螺旋曲线   

Spiral Path 和 Spline 2D 有什么区别呢?任何的曲线在足够密的时候都可以用Piecewise Spiral path 或者是 Piecewise Polynomial 表示。但是它们的出发点不一样,Polynomial 计算很快很简单,Spline 2D 是一个凸空间里面生成一个 Spline 曲线。Spiral Path 是从 Configuration Space 出发。理论上来讲,螺旋曲线生成的线是要比 Spline 更好处理,对一些极端情况处理更好。

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

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

相关文章

JAVA类 与类文件

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

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

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

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

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

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

题干: 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 处理器微架构之流水线简介

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

【2019icpc南京站网络赛 - F】Greedy Sequence(思维,贪心构造,STLset)

题干: Youre given a permutation aa of length nn (1 \le n \le 10^51≤n≤105). For each i \in [1,n]i∈[1,n], construct a sequence s_isi​ by the following rules: s_i[1]isi​[1]i;The length of s_isi​ is nn, and for each j \in [2, n]j∈[2,n], s_…

一步步编写操作系统 28 cpu乱序执行

乱序执行(乱序执行译作异步执行更贴切),是指在cpu中运行的指令并不按照代码中的顺序执行,而是按照一定的策略打乱顺序执行,也许后面的指令先执行,当然,得保证指令之间不具备相关性。 举个简单的例子,比如如…

【POJ - 1741】Tree(树分治,容斥,点分治,模板题)

题干: Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v)The min distance between node u and v. Give an integer k,for every pair (u,v) of vertices is called valid if and only if dist(u,v) not e…

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

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

一步步编写操作系统 29 cpu缓存简介

缓存是20世纪最大的发明,其原理用一些存取速度较快的存储设备做为数据缓冲区,避免频繁访问速度较慢的低速存储设备,归根结底的原因是,低速存储设备是整个系统的瓶颈,缓存用来缓解“瓶颈设备”的压力。 之前介绍实模式…

【CodeForces - 1096D】Easy Problem(dp,思维)

题目大意: 现在有一个由小写字母组成的字符串,去掉这个字符串的第i个位置的字符会有ai的代价。你的任务是去掉这个字符串中的一些字符使得该字符串中不包含子序列hard,且去掉字符的代价之和尽可能小。 输入 第一行一个整数n表示字符串的长…

一步步编写操作系统 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.…

【EOlymp - 2908】SumThem All(数位统计,tricks)

题干: Find the sum of all the digits in all the integers between lowerBound and upperBound inclusive. Input Each line contains two integers lowerBound and upperBound (0 ≤ lowerBound ≤ upperBound ≤ 2109). Output For each test case print i…

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

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

Java 10 常用集合继承关系图

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

【CodeForces - 673D】Bear and Two Paths(构造,tricks)

题干: Bearland has n cities, numbered 1 through n. Cities are connected via bidirectional roads. Each road connects two distinct cities. No two roads connect the same pair of cities. Bear Limak was once in a city a and he wanted to go to a cit…

Apoll进阶课程㉞丨Apollo ROS原理—3

原文链接:进阶课程㉞丨Apollo ROS原理—3 机器人操作系统(ROS)是一个成熟而灵活的机器人编程框架。ROS提供了所需的工具,可以轻松访问传感器数据,处理数据,并为机器人的电机和其它执行器生成适当的响应。整个ROS系统被设计为在计…