咨询电话
0512-777777
联系我们
0512-
QQ:
777777
地址:
湖南省长沙市
经典案例
一种基于Frenet坐标系的优化轨迹动作规划方法

发布时间:2019-03-03

  动作规划动作在无人车规划模块的最底层,它负责根据当前配置和目标配置生成一序列的动作。本文介绍一种基于Frenet坐标系的优化轨迹动作规划方法,该方法在高速情况下的高级车道保持和

  基于 Frenet 坐标系的动作规划方法由于是由 BMW 的 Moritz Werling 提出的,为了简便,我们在后文中也会使用 Werling 方法简称。在讨论基于Frenet 坐标系的动作规划方法之前,我们首先得定义什么是最优的动作序列:对于横向控制而言,假定由于车辆因为之前躲避障碍物或者变道或者其他制动原因而偏离了期望的车道线,那么此时最优的动作序列(或者说轨迹)是在车辆制动能力的限制下,相对最安全,舒适,简单和高效的轨迹。

  同样的,纵向的最优轨迹也可以这么定义:如果车辆此时过快,或者太接近前方车辆,那么就必须做减速,具体什么是“舒适而又简单的”减速呢?我们可以使用 Jerk 这个物理量来描述,Jerk 即加速度的变化率,也即加速度,通常来说,过高的加速度会引起乘坐者的不适,所以,从乘坐舒适性而言,应当优化 Jerk 这个量,同时,引入轨迹的制动周期 T, 即一个制动的操作时间:

  在 Frenet 坐标系中,我们使用道路的中心线作为参考线,使用参考线的切线向量 t 和法线向量 n 建立一个坐标系,如下图的右图所示,这个坐标系即为Frenet 坐标系,它以车辆自身为原点,坐标轴相互垂直,分为 s 方向(即沿着参考线的方向,通常被称为纵向,Longitudinal)和 d 方向(即参考线当前的法向,被称为横向,Laral),相比于笛卡尔坐标系(下图的作图),Frenet 坐标系明显地简化了问题,因为在公路行驶中,我们总是能够简单的找到道路的参考线(即道路的中心线),那么基于参考线的位置的表示就可以简单的使用纵向距离(即沿着道路方向的距离)和横向距离(即偏离参考线的距离)来描述,同样的,两个方向的速度(

  那么现在我们的动作规划问题中的配置空间就一共有三个维度:(s,d,t) , t 是我们规划出来的每一个动作的时间点,轨迹和路径的本质区别就是轨迹考虑了时间这一维度。

  Werling 的动作规划方法一个很关键的理念就是将动作规划这一高维度的优化问题分割成横向和纵向两个方向上的彼此独立的优化问题,具体来看下面的图:

  假设我们的上层(行为规划层)要求当前车辆在 t8 越过虚线完成一次变道,即车辆在横向上需要完成一个 Δd 以及纵向上完成一个 Δs 的移动,则可以将 s 和 d 分别表示为关于 t 的函数: s(t) 和 d(t) (上图右图),那么  d,s 关于时间 tt的最优轨迹应该选择哪一条呢?通过这种转换原来的动作规划问题被分割成了两个独立的优化问题,对于横向和纵向的轨迹优化,我们选取损失函数 C,将使得 C 最小的轨迹作为最终规划的动作序列。而Werling方法中损失函数的定义,则与我们前面提到的加速度 Jerk 相关。

  由于我们将轨迹优化问题分割成了 s 和 d 两个方向,所以 Jerk 最小化可以分别从横向和纵向进行,令 p 为我们考量的配置(即 s 或 d),加速度Jt 关于配置 p 在时间段 t1−t0 内累计的 Jerk 的表达式为:

  要解这个方程组需要一些初始配置和目标配置,以横向路径规划为例,初始配置为

  的 Numpy 中的 np.linalg.solve 简单求得。至此,我们在给定任意的初始配置

  以及制动时间 T 的情况下,可以求的对应的 d 方向关于时间 t 的五次多项式的系数,同理,可以使用相同的方法来求解纵向(即 s 方向)的五次多项式系数。

  那么问题来了,我们如何去确定最优的轨迹呢? Werling 方法的思路是通过一组目标配置来求得轨迹的备选集合,然后在备选集合中基于 Jerk 最小化的原则选择最优轨迹 ,我们仍然以 d 方向的优化轨迹为例讲解:

  对于优化问题而言,我们实际上希望车辆最终沿着参考线(道路中心线)平行的方向行驶,所以我们令

  ,那么目标配置只涉及 didi 和 TjTj 两个变量的组合,而这两个变量在无人驾驶的应用场景中实际上是受限的,我们可以通过定义(dmin,x) 和 (Tmin,Tmax) 来约束目标配置的取值范围,通过 Δd 和 ΔT 来限制采样密度,从而在每一个制动周期获得一个有限的备选轨迹集合,如下图所示:

  要在备选集合中选择最优轨迹(即上图中的绿色轨迹),我们需要设计损失函数,对于不同的场景,损失函数也不相同,以横向轨迹为例,在较高速度的情况下,损失函数为:

  其中 kj,kt 和 kd 是这三个惩罚项的系数,它们的比值大小决定了我们的损失函数更加注重哪一个方面的优化,由此我们可以算出所有备选轨迹的损失,取损失最小的备选轨迹作为我们最终的横向轨迹。

  值得注意的是,以上的损失函数仅适用于相对高速度的场景,在极端低速的情况下,车辆的制动能力是不完整的,我们不再将d表示为关于时间t的五次多项式,损失函数也会略有不同,但是这种基于有限采样轨迹,通过优化损失函数搜索最优轨迹的方法仍然是一样的,在此不再赘述。

  讨论完横向的轨迹优化问题,我们再来看看纵向的轨迹优化,在不同的场景下纵向轨迹的优化的损失函数也各不相同,Werling方法中将纵向轨迹的优化场景大致分成如下三类:

  在本文中我们详细了解车速保持场景下的纵向轨迹优化,在高速公路等应用场景中,目标配置中并不需要考虑目标位置(即 s1),所以在该场景下,目标配置仍然是

  是我们想要保持的纵向速度,第三个惩罚项的引入实际上是为了让目标配置中的纵向速度尽可能接近设定速度,该情景下的目标配置集为:

  其中,绿线即为纵向最优轨迹。以上我们分别讨论了横向和纵向的最优轨迹搜索方法,在应用中,我们将两个方向的损失函数合并为一个,即:

  得到优化轨迹集合(我们不能得到“最优”的轨迹多项式参数,还可以得到“次优”,“次次优”轨迹等等)。

  显然,我们上面的轨迹优化损失函数中并没有包含关于障碍物躲避的相关惩罚,并且我们的损失函数中也没有包含最大速度,最大加速度和最大曲率等制动限制,也就是说我们的优化轨迹集合并没有考虑障碍物规避和制动限制因素,不将障碍物避免加入到损失函数中的一个重要的原因在于碰撞惩罚项的引入将代入大量需要人工调整的参数(即权重),是的损失函数的设计变得复杂 ,Werling 方法将这些因素的考量独立出来,在完成优化轨迹以后进行。

  具体来说,我们会在完成所有备选轨迹的损失计算以后进行一次轨迹检查,过滤掉不符合制动限制的,可能碰撞障碍物的轨迹,检查内容包括:

  通常来说,障碍物规避又和目标行为预测等有关联,本身即使一个复杂的课题,高级自动驾驶系统通常具备对目标行为的预测能力,从而确定轨迹是否会发生事故。在本节中,我们关注的重点是无人车的动作规划,故后面的实例仅涉及静态障碍物的规避和动作规划。

  由于 planner 的代码篇幅过长,本实例完整代码请见文末链接,在此仅讲解算法核心代码内容。和之前一样,我们仍然使用 Python 来实现该动作规划算法。

  首先,我们生成要追踪的参考线以及静态障碍物,参考线的生成只要使用了我们上一节提到的立方样条插值,代码如下:

  使用基于 Frenet 的优化轨迹方法生成一系列横向和纵向的轨迹,并且计算每条轨迹对应的损失:

  这里的五次多项式的系数的求解过程和我们前面的理论讲解是一样的,只不过我们使用Numpy中的 np.linalg.solve(A, b) 方法将矩阵解了出来。最后,我们来看一下障碍物规避是如何实现的:

  由于我们将障碍物规避问题都简化为静态了,所以在这里我们只简单地计算了所有规划点到障碍物的距离,一句距离预计是否会发生碰撞,来看看完整的优化轨迹检查函数:

  由此可以看出,最终的优化轨迹的选择并不单纯基于最小损失函数,轨迹检查还会过滤掉一些轨迹,所以使用基于 Frenet 的优化轨迹来做无人车的动作规划,通常能够找到有限集的最优解,当最优解无法通过检查是,自会采用“次优解”甚至更加“次优的”解。

  原文标题:无人驾驶汽车系统入门——基于Frenet优化轨迹的无人车动作规划方法

  文章出处:【微信号:rgznai100,微信公众号:AI科技大本营】欢迎添加关注!文章转载请注明出处。

  AntBot机器人重量仅为2.3千克,共有六条腿,每条腿有三个自由度,并且是完全由3D打印,可以达到....

  据2月12日报道,日产和雷诺确定了在自动驾驶方面加入谷歌阵营的方针。各方将联合研发无人驾驶出租车,实....

  本文档详细介绍的是Visual C++教程之C++的语言资料概述免费下载主要内容包括了:1 从C到C....

  本文档的主要内容详细介绍的是Visual C++教程之C++的基础知识介绍主要内容包括了:1 类和对....

  在5G业务与模式创新方面,开展了5G+天翼高清(IPTV)、5G+VR直播应用示范,在深圳探索5G+....

  从上面的结论可以看出,作100次伯努利实验,出现positive、1及head的数目是53个,相应的....

  大家好,我真的不知道从哪里开始这一个,所以我会尽量给予尽可能多的相关信息。随意问更多的上下文。我使用和谐2.03b并编译1.43。...

  当不再需要动态定时器时,可以将其删除,执行如下函数之后系统会把这个定时器从 rt_timer_lis....

  C程序设计中使用指针可以: 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态分配内存

  在实际的应用中,需求分析要结合现有的资源和客户的需求,以便根据需求分析的结果设计出合理的系统结构。 ....

  无人驾驶的拖拉机,带有高精度定位导航的播种机,现在越来越多的卫星应用走进了传统农业生产,为新疆带来了....

  自动驾驶是博世的研发重点之一。为实现“零事故”交通愿景,博世集团的自动驾驶实行双元战略。一方面专注于....

  如果有一辆未经特殊训练的无人车,在通常的数据集上进行训练后可能无法区分白色的箱式小货车和闪着警报呼啸....

  自动驾驶车遭受了人类的“攻击”,人类面对科技新事物的态度也不是十分友好。不过,我们应该看得更远一些。....

  在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便。内部函数....

  Arduino 的程序可以划分为三个主要部分: 结构、变量(变量与常量)、 函数 。

  去年在美国亚利桑那州发生的Uber自动驾驶车人员事故和加利福尼亚州发生的特斯拉自动驾驶故障导致人们对....

  日前,卡拉什尼科夫集团现任总裁弗拉基米尔·德米特里耶夫向外界透露,为俄罗斯军方生产的首批正式版“Ur....

  由于深色吸收光线,无人驾驶汽车的导航激光碰到黑色不会反射,导致无法检测黑色汽车。世界最大的汽车涂料生....

  有悖于创业公司传统的融资方式,大疆不会标榜商业模式,也不会向投资者讲故事。分析师弗若斯特沙利文曾如此....

  乔治梅森大学的管理人员称,机器人不会取代人类的工作。他们指出,对外卖机器人的需求已经在校园里创造了全....

  感应充电道路:回到2017年,高通在法国建造了一条32英尺长,能给时速61迈的电动车以20kw充电的....

  lag括号里理由两个参数,第一个是字段名,第二个是数量N,这里的意思是,取分组排序之后比该条记录序号....

  传统的车辆路径问题只考虑物品装载的质量属性约束,而忽略其他装载属性约束。针对这种情况,研究了三维装载....

  双馈风力发电机设计可以根据经验值进行最初设计,但是由于电机设计的变量多,约束条件复杂,要寻求一个最优....

  不幸的是,对于参与这个项目的员工来说,这是个不足为奇的决定。早在3年前,苹果就曾对泰坦计划进行过重大....

  王淞用三个关键词来描述这张「行业新面孔」:新零售、人工智能、无人驾驶。这家初创型科技企业会否掀起新零....

  有人说不管你愿不愿意,不管你喜不喜欢,机器狂欢时代即将开启。伴随着人工智能不断发展,“无人XX”产品....

  上周,有外媒报道,根据投资研究公司Lynx Equity Strategies的股票策略分析师贾哈拉....

  汽车业正来到一个转折点,即将从先进驾驶辅助进入到真正的无人驾驶汽车阶段。要提升自动能力,直到不久前的....

  无人驾驶逐渐成为整车厂和互联网企业重点投入的战略制高点,传统车企与互联网之间不单是竞争,也是相互融合....

  “这些测试标志着网络运营的开始,这是第一个为多用户商业应用部署的地方。”Theisen说。“这是在我....

  为了解决这个问题,设备制造商Case IH已经推出了一台自动拖拉机,而Abundant Roboti....

  1月24日,由中国兵器工业集团有限公司所属的内蒙古北方重工业集团北方股份公司研制的国内首台无人驾驶电....

  外媒报道,英国牛津郡议会(Oxfordshire County Council)将推出智能汽车,以帮....

  当你在代码合并请求中评论代码时,你可以使用「更改建议」(Suggested Changes)功能给出....

  函数的递归算法 1.范例:求组合数, 一、实验目的1. 学会解决简单的递归算法。2. 掌握函数的....

  近日,华为发布全球首款基于云的Cloud VR连接服务,包括底层开发者套件、华为云Cloud VR连....

  一是立法方向上,在限制打击“黑飞”的同时,应当将重点转向引导与保护无人机产业的发展。无人机产业的发展....

  无人机每立方米捕获c.900数据点,获得令人印象深刻的2cm的整体准确度。这与使用传统方法在整个场地....

  Waymo世界上第一家100%大规模生产L4自动驾驶汽车的工厂即将诞生

  在美国,汽车行业是密歇根州的代名词。汽车制造业在该州创造了数十万个就业机会,并成为推动整个国家发展的....

  本文档的主要内容详细介绍的是复变函数第四版课后答案资料免费下载。以复数作为自变量和因变量的函数就叫做....

  与真正的百科(例如维基百科)不同的是,《小时物理百科》系列更偏向于教材而不仅仅是一本供专业人士查阅的....

  我们 再进行网络关断时常会使用一个函数:“=ioctl(PNIO-CTRL,50,par1)”是....

  近日据了解,首台覆盖5G的巴士正式进行测试阶段,通过依靠5G网络的传输让巴士具备了高可靠性和低延时性....

  就在上周,美国当地时间2019年1月8日至1月11日,一年一度的CES如期在拉斯维加斯举办。AI与自....

  目前市面上还没有任何商用化的电动飞行车,甚至连油电混和飞行车也没有。飞行需要耗费非常多的能量,但是目....

  程序设计的概念,程序设计就是用计算机语言来编写程序的过程。什么是程序?著名计算机科学家沃思提出有名....

  Undefined symbol RCC_GetClocksFreq (referr...怎么解决?

  跟着教程创建库函数模板,但是创建后总会产生这个错误。 但是打开给的历程就没有任何错误。。。请问各位大佬怎么解决? ...

  如何在__delay_ms()和__delay_us()函数中传递参数而不是数字?

  我想在这个函数中传递这个论点。有可能吗? 以上来自于百度翻译 以下为原文 &nbs...

  有人说,传感器是人类五官的延长,又称之为电五官。人们为了从外界获取信息,必须借助于感觉器官。而单靠人们自身...

  使用的是STM32L0系列,发现HAL_UART_RxCpltCallback这类中断中的回调函数和普通函数没什么区别呢,回调函数定义是...

  请问 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); InitFl...

  我是直接记住这个函数的功能呢,还是去看这个函数的代码(即实现过程呢),小白,在这里请求大家指点...