运动规划是自动驾驶技术栈中的关键一步,负责把上游的孤立、异构、模糊的多方面信息整合成自洽的运动轨迹(trajectory);好的轨迹需要满足多方面的要求,其中最重要的方面包括安全性(safety)和舒适性(comfort)。对于车辆自动驾驶来说,车辆的控制是限制在地面这个二维世界里。但轨迹并不在这个空间中,因为轨迹并不仅是简单的一个瞬时的状态,也需要考虑时间这一维度。因此,它是一条在二维空间和一维时间组成的三维空间中的曲线。轨迹的时间跨度,称为时域(horizon),通常要达到8-10秒这个范围(这个时间也跟算法的优化结果相关),才能满足公开道路产品级自动驾驶的需求。

大方:「QBlog 03」运动轨迹仅仅是2D的?——论运动规划的维度​zhuanlan.zhihu.com

为什么要在比较长的时间跨度上规划完整的运动,而不能只是简单地规划当前瞬间的动作(油门、刹车、转向)呢?目前很多基于端到端学习的规划方法都是这么做的,毕竟人类司机驾驶时,很多时候也只考虑眼前需要的动作而已。进行长时程的完整规划主要是为了保证未来的规划问题仍然可解。车辆从动力学上来说,惯性很大;从运动学上来说,又属于非完整系统(non-holonomic,即车辆不能瞬间改变朝向),所以如果只考虑当前位姿,是不能作出有前瞻性的驾驶动作的。缺乏前瞻性的驾驶动作虽然目前看来不错,但很容易把自己开进死胡同,造成一段时间之后无解。如果观察到路口的红灯,无人车必须根据当前速度提前刹车才能保证不闯红灯;如果只考虑眼前,会发现在到达路口之前都没有刹车的必要(不会立刻违反交通规则),而到了路口,再刹车就来不及了。这就是为什么模块的名字叫做运动规划(motion planning)——规划就是计划未来。端到端学习的方法只输出当前驾驶动作,实际上相当于把控制(control)也囊括在内了,但通常模型内部还是需要通过辅助损失函数(auxiliary loss)等方式对未来有一个预测和考量的(比如Waymo的ChauffeurNet)。在时空的三维空间中的轨迹,可以完整地描述未来一段时间之内的运动的全貌。因此,对这个完整运动的最优解算就可以实现有前瞻性的运动规划。这就是为什么我们要在运动规划的时候考虑未来时间这个维度。

为什么自动驾驶运动规划的更新周期那么短,却要规划出那么长的一段轨迹?​www.zhihu.com

总结如下:

  • 驾驶感受:驾驶员的大脑在时刻的运转,我们每看一次道路其实就是重新做了一次规划Replan,我们看的足够远我们的规划才足够稳定。如果我们的视线只盯着车前2m,车开的大概率是左冲右撞的,因为只有到跟前了我们才知道前边有个障碍物,慌忙打方向或紧急刹车。
  • 算法优化:在简单静态环境中,运动规划完全可以使用初始时刻规划好未来的一段路径和对应的速度,直到到达规划的终点再重新规划Replan。但现实环境是,1)场景很可能复杂,只使用一次规划耗时长,导致计算效率低;2)由于其他交通参与者的存在导致周围环境是随着时间变化的。所以在这样的场景下,为了是规划的路径质量更高,需要不断迭代来适应环境,规划的路径越长,则越好地避免陷入局部最优解,不影响规划的整体质量。
  • 规划的轨迹长
  1. 是为了保证轨迹(位姿、速度)在较长的时空内尽可能稳定+最优;
  2. 对于横向轨迹和纵向速度的跟随控制而言,证明跟踪的这一段是“正确的轨迹”。
  • 更新的周期短
  1. 是为了保证将环境变化(位姿、速度)实时地更新到轨迹结果中,尽快用新的测量信息来修正之前的误差。
  2. 对于控制而言,的确只用了dt的这一段信息

不考虑误差的话,多周期规划的轨迹在大地坐标下应是一致的。满足这个一致性条件,就可以定周期规划,更短周期去跟踪,最终行驶出一条符合预期的轨迹(位置和速度)。


运动规划考虑空间和未来时间这三个维度,就够了吗?要回答这个问题,绕不开体感这个话题。体感也就是物理舒适度(physical comfort),是驾驶舒适度的一个重要方面,反映了车辆运动的不平滑性。体感与舒适度的其他方面一样,比较主观,评估需要从多种指标考虑。常用的指标包括横向和纵向(lateral and longitudinal)的加速度(acceleration)和加加速度(jerk)等。从这些指标可以看出,对于体感来说,运动轨迹对时间的导数是非常重要的,理想的运动轨迹在时间上必须足够平滑。

图:平滑的速度(v-t)曲线。轨迹的平滑性是舒适体感的核心。
上面说到,在运动规划给出的轨迹(对未来运动的规划)里,可以清楚地评估和优化未来运动的平滑性,但过去的运动轨迹则是另一番景象。过去是不可改写的,更重要的是,过去的轨迹是在过去每一个时间点的未来轨迹的初始段积累而成的,类似于控制中的滚动时域优化(receding horizon control)。过去某时刻对当时的未来的规划,也可以因时间推移,感知预测等信息的更新而更改;比如,两秒钟之前规划的轨迹中预计行驶两秒后到达的位置,可以不同于一秒前规划的轨迹中预计行驶一秒后到达的位置,而二者又皆可不同于当前实际所在位置。因此过去这个时间维度不仅仅是未来时间向相反方向的延伸。尤其是这两个时间维度的接合处,也就是当前时刻,是需要额外细致处理的。体感的效果,必须这些地方每一处都精心优化,才能得以保证。

就纵向的速度规划而言,时间维度是平衡横纵向控制的关键因素。针对不同场景规划出的轨迹线需要与之匹配出最优的速度和加速度。例如,对于前方静止障碍物,无人车需要实时地根据不同的当前车速,规划出减速曲线。其中,安全上能保证任何速度下,都能在障碍物前方几米内稳定刹停或者跟停;舒适上开始切入减速的冲击度连续;另外最好不触发AEB紧急制动,这是在感知融合后识别前方静止物后。

那么实际在纵向的速度规划中,时间维度和速度位置维度需要进行反复优化,相关的问题如:

ACC自适应巡航为什么不能识别静止物体?​www.zhihu.com

实现运动轨迹_【自动驾驶】运动规划丨速度规划丨时间维度相关推荐

  1. python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)

    Hybird A*算法保证生成的路径是车辆可实际行驶的,但它仍然包含很多不必要的车辆转向操作,我们可以对其进行进一步的平滑和优化. Objective Function 对于Hybird A*生成的车 ...

  2. 实时障碍更新 局部路径寻优算法 矢量地图数据 局部路径规划解集_自动驾驶近期行为预测和规划的一些文章介绍(下)...

    继续介绍最近公开的文章. "Driving with Style: Inverse Reinforcement Learning in General-Purpose Planning fo ...

  3. Apollo自动驾驶入门课程第⑧讲 — 规划(下)

    目录 1. 路径-速度解耦规划 2. 路径生成与选择 3. ST图 4. 速度规划 5. 优化 6. 路径-速度规划的轨迹生成 7. Lattice规划 8. ST轨迹的终止状态 9. SL轨迹的终止 ...

  4. 多相机坐标转换_自动驾驶视觉融合 | 相机校准与激光点云投影

    点击上方"AI算法修炼营",选择"星标"公众号 精选作品,第一时间送达 作者:william链接:https://zhuanlan.zhihu.com/p/13 ...

  5. 小鹏 肖志光_自动驾驶:小鹏在展翅,蔚来有未来

    自动驾驶是智能汽车的重中之重,本文将简单讲讲几家新势力造车企业的自动驾驶状况和未来. 过去两三年,小鹏的自动驾驶软硬架构要比理想和蔚来做的好,从即将发布的NGP,已经可以看出端倪来了,未来一两年会看出 ...

  6. 自动驾驶场景要求(速度方面和检测速度方面)

    自动驾驶场景要求(速度方面和检测速度方面) 汽车从运动到静止状态需要一个制动距离,为了安全起见,根据国际标准中制动距离的要求,一辆满载的小车在正常泊油路上以30K m/h的速度行驶,制动距离不得大于9 ...

  7. 路径规划算法_自动驾驶汽车路径规划算法浅析

    自动驾驶汽车的路径规划算法最早源于机器人的路径规划研究,但是就工况而言却比机器人的路径规划复杂得多,自动驾驶车辆需要考虑车速.道路的附着情况.车辆最小转弯半径.外界天气环境等因素. 本文将为大家介绍四 ...

  8. 知荐 | 自动驾驶的“大脑”:决策规划篇

    决策规划技术概述 决策规划是自动驾驶的关键部分之一,它首先融合多传感信息,然后根据驾驶需求进行任务决策,接着在能避开可能存在的障碍物前提下,通过一些特定的约束条件,规划出两点间多条可选安全路径,并在这 ...

  9. d-s 多传感器信息融合 matlab实现_自动驾驶中的多传感器融合

    一.多传感器融合多传感器信息融合(Multi-sensor Information Fusion,MSIF),就是利用计算机技术将来自多传感器或多源的信息和数据,在一定的准则下加以自动分析和综合,以完 ...

最新文章

  1. App icon和启动图的尺寸需求(没有iPad)
  2. 一般入职体检都有哪些项目_单位常规体检一般都需要检查哪些项目?
  3. 资源不关闭,会导致什么最坏的结果
  4. 单片机原理及其应用——单片机控制按键依次点亮8只发光二极管
  5. JAVA中返回值为字母时_LeetCode#524通过删除字母匹配到字典里最长单词-java中CompareTo方法用法以及Comparator中Compare方法返回值...
  6. oracle 查出所有空表,Oracle查看某个用户上的所有空表
  7. C++数据结构与算法 动态规划
  8. P1550 [USACO08OCT]打井Watering Hole
  9. c语言getchar在哪个头文件_c语言入门(一)
  10. pytorch加载模型报错RuntimeError: Error(s) in loading state_dict for ResNet:Missing key(s) in stat
  11. 追求--MarsCoara
  12. Python 实现定时任务
  13. 视频教程-CoreIDraw 2019零基础到精通-CorelDraw
  14. w3c html验证服务,W3C验证和Vue的HTML绑定语法(W3C Validation and Vue's HTML binding syntax)...
  15. python怎么解矩阵方程_基于python解线性矩阵方程(numpy中的matrix类)
  16. python将excel数据合并_Python语言之Python合并多个Excel数据
  17. java获取图片相对路径_相对路径和绝对路径的区别,java获取项目访问路径的方法...
  18. 问题 C: Cly的三角形
  19. 大厂必备!springboot入门菜鸟教程,面试资料分享
  20. 智能车改舵机中值步骤_速度,舵机测试,专为舵机调中值

热门文章

  1. cad直线和圆弧倒角不相切_曲线操作-直线,圆弧,圆,倒斜角
  2. mysql pid_mysql pid文件是什么用途
  3. 使用junit+mockito进行mock测试实例
  4. cisco服务器维修,面向终端的AMP控制台的思科维护的排除列表更改
  5. 活体检测python_活体检测很复杂?仅使用opencv就能实现!(附源码)!
  6. A5D2 GPIO测试
  7. c语言局限性,C语言陷阱与缺陷.pdf
  8. c mysql安装教程视频_MySQL安装教程 - Windows安装MySQL教程 - 小白式安装MySQL教程 - 青衫慧博客...
  9. 【转】TCP和UDP的区别
  10. 【转】C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁