一种具有轨迹优化的无人驾驶车实时运动规划器 论文阅读

论文题目:A Real-Time Motion Planner with Trajectory Optimization for Autonomous Vehicles

Abstract

本文的实时规划器首先将空间离散化,然后基于一组成本函数搜索出最佳轨迹。迭代优化所得到的轨迹的Path和Speed。post-optimization计算复杂度低,能够在几次迭代内收敛到一个更高质量的解,该框架可以减少52%的规划时间,提高规划质量。

本文主要的创新点就在于post-optimization

I INTRODUCTION

A Background

规划器需要满足严格的实时要求,以便在紧急情况做出足够快的反应。

B Related work

Autonomous driving Systems:对自动驾驶系统的发展做了一些调研。单纯的自适应巡航控制系统和车道辅助系统无法执行复杂的驾驶行为(处理并车、绕开其他汽车、能够智能的对意外的动态障碍物作出反应),这些系统仍需要人类监督执行。
Trajectory generation:道路场景中自动驾驶的轨迹生成需要考虑三个约束:运动学、动力学和道路形状。具体来说,就是曲率和加速度的变化率在轨迹中应该是连续的
[3][4]提出了利用曲率多项式保证曲率变化率连续的逆路径生成方法。
(1)基于[3][4]的方法,[5][6]提出的规划器首先沿道路采样端点,然后使用曲率多项式连接它们,便于所有的路径符合道路形状;然后给每条路径指定不同的加速度曲线来生成一组轨迹。
(2)[6]中生成的路径可以被车辆很好地跟踪。但是由于加速度曲线不连续,车辆很难准确、平稳地跟随加速度曲线。
(3)[7]使用另一种方法处理这个问题,使用五次多项式生成横向d(t)和纵向轨迹s(t),确保了连续地加速度曲线。此外他们使用道路中心线为参考的Frenet坐标系结合横向和纵向运动。使得轨迹纵向与道路形状一致。然而,每个轨迹上的每个点的曲率需要被计算和验证,计算量大。另外,虽然曲率是连续的,但是曲率的一阶导(和方向盘转角相关)频繁改变,导致方向盘移动不平稳。
Search algorithm:轨迹生成之后,通常应用搜索算法来找到最优结果。state lattice planners通常基于启发式(A和ARA[8])或采样(RRT[9])。
(1)基于启发式的搜索算法,对成本的准确估计从任何一个顶点到目标都是必不可少的。但自动驾驶规划问题很复杂,特别是当存在动态障碍物时,很难找到适合所有场景的适当启发式函数。
(2)一些增量重规划算法(D*Lite[10])广泛应用于机器人导航,但它们仅适用于具有一个固定目标的典型规划问题,但是在道路场景下,目标会一直变化。
(3)基于采样的方法(RRT[9]),规划结果通常不够平滑,无法让汽车执行。另外,==由于动态障碍物的存在,需要在搜索状态空间中加入时间作为额外的维度。==使得搜索空间呈指数增长,导致基于搜索的算法效率低下。因此,本文应用状态空间的离散化,然后应用简单而快速的穷举搜索。
Optimization method for planning:[11]提出了一种共轭梯度法来平滑路径。然而,车辆的速度没有规划或优化。因此,该算法在道路环境中不能很好地工作,速度对于驾驶非常重要,特别是处理动态障碍物。[12]提出了用于运动规划的梯度优化方法,能够更好地避免静态障碍物。但是,他们的方法也没有考虑时间维度或者速度。

C Contribution

在related work的基础上,提出了一种实时的运动规划器。该Planner具有以下特点:(1)由规划器生成的轨迹是平滑且连续的,在运动学上可以被车辆执行(2)通过有效路径和速度离散化加速最优轨迹搜索(3)通过post-optimization补偿离散化牺牲的性能(4)通过在路径和速度空间中迭代优化来提高实时性能。

II Algorithm Framework

在这里插入图片描述
实时运动规划器如上图所示,由轨迹规划和轨迹优化两部分组成,第一步,使用[3]中描述的方法生成路径边缘;然后为每个路径边生成速度集;将一组成本函数应用在每个轨迹上,并选择最佳轨迹。然后将生成的最佳轨迹传递到优化模块,在优化模块中,使用随机-定向单纯形优化算法迭代优化路径和速度[13]。

A Trajectory generation

Path Set和Speed Set分别生成,然后通过将Path Set和Speed Set相结合获得轨迹集。
(1)路径生成:通过使用不同种类的曲率多项式连接采样端点来生成路径。规划器中的抽样方法与[5]中的相同。然而,代替三次,四次曲率多项式用于确保每个规划周期的起始点处的曲率变化率是连续的。
(a)端点采样:执行了采样机制为了生成每条路径的顶点(端点),道路中心线的函数如下:
在这里插入图片描述
使用类似Frenet的方式去定义一个空间的点:
在这里插入图片描述
对于每一层,对垂直于中心线的 N p a t h N_{path} Npath进行采样
(b)路径模型:通过连接以下各项来生成路径
1)成对的采样端点
2)端点和当前车辆姿态
该运动规划器采用三次和四次曲率多项式构建路径模型。对于三次曲率多项式,路径的曲率是弧长的三次多项式
在这里插入图片描述
因此,问题变成找到满足端点约束的参数。函数中有4个参数: r 0 , r 1 , r 2 , r 3 r_0,r_1,r_2,r_3 r0,r1,r2,r3,s不算,论文这边感觉有错误,其中有五个约束项对应x,y的移动,起点到终点的方向,起点的曲率和终点的曲率。
在以前的工作[5]中,只有三次曲率多项式用于常见场景。该方法适用于任何单一规划周期,==然而在两个规划周期的接合点处可能发生不连续性。==运动规划器以非常高的频率重新规划,结果,实际规划结果远远达不到平滑的效果。下图显示了使用四次曲率多项式(红色实线)的典型结果,比使用三次多项式(蓝色虚线)平滑地多。
在这里插入图片描述
因此,需要对当前车辆姿态和端点之间的路径添加新的约束,即,当前车辆姿态点处曲率的一阶导数。为了满足这个额外的约束,多项式需要是四次而不是三次。当我们频繁地重新规划这种改进可以让路径变得平滑。如下图所示,红色路径表示四次曲率多项式,而绿色路径是三次曲率多项式,然而,四次多项式需要更多的时间来生成,因此,为了限制计算时间,四次多项式仅用于从当前车辆姿态开始的轨迹段
在这里插入图片描述
(2)速度生成:在生成路径集之后,为每个单独的路径构建候选速度曲线,与[5][14]做的工作不同,他们使用正向方法生成速度曲线。本文使用逆向方法。首先将速度空间离散化,然后生成多项式满足顶点约束。本文的方法也不同于[15]和[7]中提出的逆方法,后者使用时间的多项式函数来生成速度曲线。本文使用弧长的多项式函数与本文的路径方程更加一致。多项式方程如下:
在这里插入图片描述
速度状态: Q = ( s , v , a ) Q=(s,v,a) Q=(s,v,a),对于每条路径,从路径的起点选择起始速度状态 Q i n i t = ( s 0 , v 0 , a 0 ) Q_{init}=(s_0,v_0,a_0) Qinit=(s0,v0,a0),从路径的终点选择终止速度状态 Q g o a l = ( s 1 , v 1 , a 1 ) Q_{goal}=(s_1,v_1,a_1) Qgoal=(s1,v1,a1)。在上式,有四个未知参数,对应的四个约束是: v 0 , a 0 , v 1 , a 1 v_0,a_0,v_1,a_1 v0,a0,v1,a1。对于所有顶点,v0和v1来自相应的离散化顶点,a0和a1设置为0。车辆当前状态 ( v 0 , a 0 ) (v_0,a_0) (v0,a0)的特殊之处:他们是从真实的车辆传感器上获得的。将最大速度和最小速度分别表示为 v m a x v_{max} vmax v m i n v_{min} vmin,并且将离散化速度的数量表示为 N s p e e d N_{speed} Nspeed,离散化速度如下:

在这里插入图片描述
通过设置 s 0 = 0 s_0=0 s0=0,可以获得参数:
在这里插入图片描述
速度和候选速度曲线的离散化如下图所示,其中绿色点是采样速度,红色曲线超出加速度限制,灰色曲线是有效曲线。这种速度生成方法确保了持续的加速。
在这里插入图片描述

B Cost function set

对于每条轨迹,定义了静态成本和动态成本,用来评估安全性、舒适性、效率、能耗和行为。从每一条轨迹中提取n个点来表示成本。如下表所示静态和动态成本的计算公式。
在这里插入图片描述
静态成本:
(1)路径长度->效率
(2)曲率->舒适性
(3)曲率一阶导->舒适性
(4)与最近中心线的横向偏移->行为
(5)到静态障碍物的转换距离
动态成本:
(1)时间->效率
(2)速度->能量
(3)加速度->舒适性
(4)jerk->舒适性
(5)到动态障碍物的转换距离->安全性

静态成本 c o b s s c^s_{obs} cobss和动态成本 c o b s d c^d_{obs} cobsd用于对每个候选轨迹的碰撞检查。基于[16]提出的方法,使用 M c i r M_{cir} Mcir圆来覆盖车辆的区域。如果圆到障碍物的距离小于阈值 d m i n A l l o w e d d_{minAllowed} dminAllowed,则成本是无限的。否则用下式计算成本。

在这里插入图片描述
其中 λ o b s s λ^s_{obs} λobss λ o b s d λ^d_{obs} λobsd分别是静态和动态障碍物的指数成本函数的带宽, g j g_j gj是障碍物与覆盖汽车的第 j j j个圆之间的距离

一个轨迹的总成本是所有项的加权和:
在这里插入图片描述

C Trajectory optimization

对于大多数Lattice planner,适当的离散化是必要的,用来确保实时性。然而适当的离散化影响了规划结果的最优性。post-optimize轨迹提高性能非常重要。

一个直接的方法就是同时优化轨迹路径和速度。然后,对于实时性来说是十分耗时的。计算开销为 O ( o p t ( M + N ) ) O(opt(M+N)) O(opt(M+N)),其中M为路径参数个数,N为速度参数个数, o p t ( ) opt() opt()为优化算法的计算复杂度,通常为 O ( N 2 ) O(N^2) O(N2)。随着维数的增加,优化器也更难找到全局最优解。
因此,本文提出了一种迭代轨迹优化机制。计算复杂度是 O ( o p t ( M ) ) + O ( o p t ( N ) ) O(opt(M)) +O(opt(N)) O(opt(M))+O(opt(N))。如果在规划阶段找到的轨迹接近真实的最优,则使用该机制允许在几次迭代中收敛到真实的最优
(1)路径优化:路径离散化限制了路径的最优性,例如,采样端点的横向偏移、航向和曲率是固定的,并且与中心线有一定的关系。因此,放松这些约束,如下图,并在新端点之间生成新路径可以提高轨迹质量。
在这里插入图片描述
因为成本与横向偏移和航向的梯度很难计算,因此使用非导数优化算法(单纯形算法[17])进行路径优化。如下图所示,路径优化后的路径(红线)更加平滑
在这里插入图片描述
(2)速度优化:速度离散化和端点处的加速度约束也限制了速度曲线的最优性。与路径优化类似,优化速度剖面节点的参数。对于生成当前最低成本的速度曲线的节点,优化速度和加速度的值。因此连接新节点能让速度曲线保持平滑。
在此优化中,节点处的速度变化将影响轨迹上每个点的时间,这改变了轨迹上动态障碍物的位置,并阻止了梯度方法的使用。因此,非导数单纯形算法也用于速度优化。速度优化结果如下图所示,由于放松了对端点加速度的约束,速度变化更加平滑,端点处的速度幅值不再离散
在这里插入图片描述

D Optimization performance evaluation

实验表明提出的规划与迭代优化框架是非常有前途的。与替代规划机制或配置相比,它能够在更短的时间内生成更高质量的轨迹。与非优化结果相比,时间减少52%并且质量提高10%。

III System Implementation

A Interfacing with Autonomous Vehicle

配备了高保真定位系统。它还使用激光雷达和雷达来感知实时周围环境。飞行器的下层控制被设计成执行高精度轨迹跟踪。因此,运动规划器仅需要生成具有路径和速度轮廓的可执行轨迹。
规划器和下游的控制器之间的接口被构建为使得在每个规划周期期间,发送轨迹的第一部分,其取决于车辆速度为8-50米。这给予下游的控制器足够的前瞻性来执行预测控制算法。增加了系统的可靠性,因为较低级别的控制器总是有一个相对较长的轨迹来执行,即使较高级别的计算机停止工作几个周期。

B Robust replan mechanism

为了对真实的世界中动态变化的环境做出反应,运动规划器需要不断地重新规划。如果规划器从当前车辆状态开始规划,那么当规划完成时,通常在100毫秒左右,车辆将处于不同的位置,原来的规划不再有效。为了解决这个问题,[18]提出了PMP(部分运动规划)方案。简而言之,他们的做法是从未来状态开始规划。当规划器运行时,车辆执行上一个规划周期的轨迹。

规划起点问题

基于[18],实现了弧长升序的队列,以保留上一个计划周期的轨迹。对于每个周期,首先在队列中找到最接近车辆位置的具有弧长 s c s_c sc的点 P c l o s e P_{close} Pclose。然后,规划器在队列中寻找具有弧长 s f s_f sf的点 P f u t u r e P_{future} Pfuture,该点与 P c l o s e P_{close} Pclose相比处于较晚的位置。计算 s f s_f sf的公式为:
在这里插入图片描述其中 V c u r r V_{curr} Vcurr是车辆的当前速度, a m a x a_{max} amax是车辆可以达到的最大加速度,而 t s p a n t_{span} tspan是当前时间和下一次重新计划的开始时间之间的基本时间跨度,其应该长于重新计划间隔。该等式确保在需要其结果之前完成规划。最后,规划器从 P f u t u r e P_{future} Pfuture重传,并使用最新规划的轨迹更新轨迹队列。
有一种特殊情况,当车辆处于手动驾驶模式时,不是从未来位置规划,而是从其当前状态(位置和速度)重新规划。这确保了车辆在从手动模式切换到自动模式时始终具有可行的轨迹来执行,即使车辆正在移动。

IV EXPERIMENTAL RESULTS

本文测试了三个不同的场景:车道驾驶,静态障碍物和动态障碍物。
A:Lane driving
车道驾驶测试在S形弯曲道路上进行。人类驾驶员通常能够选择更短更平滑的路线。结果如下图所示:
在这里插入图片描述
自动驾驶汽车在道路的内部移动,以获得更短的路径长度,并且在进入时减速,在退出曲线时加速。自动驾驶汽车能够跟踪规划器生成的轨迹,平均交叉轨迹误差小于10厘米,最大跟踪误差约为40厘米,平均速度误差约为0.5米/秒。规划器生成的轨迹对小车执行是可行的。
B:Static obstacles
在道路环境中,自动驾驶员需要处理多个静态障碍物,包括路缘、停放的汽车和道路堵塞。在这个规划器中,道路上的不可驾驶区域,例如破碎的路面,也被建模为静态障碍物。测试的规划器的性能处理弯曲的道路和多个静态障碍物在一起。结果如下图所示,红点为静态障碍物。
在这里插入图片描述
为了避开静态障碍物,自动驾驶汽车没有在弯道上走捷径,而是选择了一条更长但仍然平滑的路径。
C:Dynamic obstacles
对于自动驾驶车辆,动态障碍物通常是移动障碍物,例如汽车、行人、骑自行车的人或骑摩托车的人。如下图所示,在该测试中,车辆在其首选(上)车道上遇到较慢的汽车。
在这里插入图片描述
由于前面速度较慢的车辆限制了自动驾驶汽车的前进,规划者选择一条变道轨迹来绕过它。自动驾驶汽车在通过开始时加速,然后在通过速度较慢的车辆时保持近似匀速,并在通过后加速。由于横向距离成本的存在,在超车慢车时,它也倾向于保持在绕行车道的中心,这是合理的。

V Conclusion

本文提出并实现了一种实用的具有轨迹优化的实时自主驾驶运动规划器。由规划器生成的轨迹是平滑和连续的,使得自主车辆能够以非常小的路径和速度跟踪误差执行。对速度和路径空间进行了适当的离散化,使得搜索最优轨迹的速度更快。为了进一步提高轨迹的质量,设计并实现了速度和路径状态空间的迭代优化。实验结果表明,采用迭代优化框架后,生成轨迹的性能提高了10%,规划时间减少了50%以上。该规划器已在模拟和真实的车辆在三种情况下进行了测试。它能够处理带有急转弯的弯曲道路,避免多个道路上的静态障碍物,并执行变道和规避较慢的汽车。
未来的工作,需要做更多的道路上的实验,以验证规划器的性能,在处理复杂的真实的交通场景。规划器的性能也可以通过在速度和路径空间中应用更有效的修剪来提高。虽然成本函数确定最终轨迹的选择,但是手动找到成本函数的适当形式和权重是困难和主观的。因此,未来的研究也将集中在从人类驾驶员演示中学习成本函数。

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

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

相关文章

vivado编译设置、执行设置、bit流生成设置

合成设置 使用“合成设置”可以指定约束集、合成策略、合成选项,以及要生成的报告。选项由选定的定义综合策略或综合报告策略,但您可以用自己的策略覆盖这些策略设置。您可以选择一个选项来查看对话框底部的描述。了解更多有关“合成设置”的信息&#…

《GreenPlum系列》GreenPlum初级教程-03GreenPlum系统管理

文章目录 第三章 GreenPlum系统管理1.关于GreenPlum数据库发布版本号2.启动和停止GreenPlum数据库2.1 启动数据库2.2 重启数据库2.3 仅重新载入配置文件更改2.4 停止GreenPlum数据库2.5 停止客户端进程 3.GreenPlum数据库状态查询4.访问GreenPlum数据库4.1 数据库会话参数4.2 支…

MFC结合GDI+

MFC结合GDI 创建一个空的MFC界面,在确定按钮函数里进行画图: 1、包含头文件与库 在stdafx.h中加入以下三行代码: #include "gdiplus.h" using namespace Gdiplus; #pragma comment(lib, "gdiplus.lib")2、安装GDI 在…

内 存 取 证

1.用户密码 从内存中获取到用户admin的密码并且破解密码,以Flag{admin,password}形式提交(密码为6位); 1)查看帮助 -h ./volatility_2.6_lin64_standalone -h 2)获取内存镜像文件的信息 imageinfo ./volatility_2.6_lin64_stand…

一阶低通滤波器

一阶低通滤波器 X为输入,Y为滤波后得到的输出值;本次的输出结果主要取决于上次的滤波输出值,其中a是和滤波效果有关的一个参数,称为滤波系数;它决定新采样值在本次滤波结果中所占的权重; 滤波系数a越小&a…

学习C指针

指针基本介绍 计算机中的每个内存都有地址 整型分配4字节,字符分配1字节 ,浮点数分配4字节 指针是一个变量,它存放着另外一个变量的地址 int a; int *p; p &a;// a 5; printf(p) //get a address print &a //get a address …

高性价比CRM系统哪家好?靠谱的CRM系统推荐

对于中小企业来说,选型CRM管理系统的重点便是性价比。中小企业预算有限,要在满足需求的前提下选择符合预算的CRM系统。那么,有没有性价比高的CRM系统?下面我们从什么是CRM系统、CRM系统的作用、CRM系统的注册和试用来深入聊聊。 …

代码随想录算法训练营第三天| LeetCode203.移除链表元素、707.设计链表、206.反转链表

文章目录 一、203. 移除链表元素感受代码二、707.设计链表感受代码206.反转链表感受总结一、203. 移除链表元素 感受 我对这道题。从理论上来说太熟悉了。咸鱼讲数据结构常用的方法他都会讲。但是我没上机没写过。到后面上机还是写不出来。giao。 代码 第一次写,想说一下,…

2024年前端面试中JavaScript的30个高频面试题之中级知识

基础知识 高级知识 13. 什么是闭包?闭包的用例有哪些? 闭包是一个功能,它允许函数捕获定义该函数的环境(或保留对作用域中变量的访问)即使在该作用域已经关闭后。 我们可以说闭包是函数和词法环境的组合,其中定义了该函数。 换句话说,闭包为函数提供了访问自己的作用域、…

linux创建文件并分配权限

linux中对文件的定义 在Linux中,文件是一个具有符号名字的一组相关联元素的有序序列。文件可以包含的内容十分广泛,操作系统和用户都可以将具有一定独立功能的一个程序模块、一组数据或一组文字命名为一个文件。文件名是数据有序序列集合(文…

Vulnhub-HACKSUDO: PROXIMACENTAURI渗透

文章目录 一、前言1、靶机ip配置2、渗透目标3、渗透概括 开始实战一、信息获取二、端口敲门三、web密码爆破四、getShell五、获取新用户六、提权 一、前言 由于在做靶机的时候,涉及到的渗透思路是非常的广泛,所以在写文章的时候都是挑重点来写&#xff0…

代码随想录 516. 最长回文子序列

题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例 1: 输入:s “bbbab” 输出&…