技术难点

规划模块所面临的技术难点有三点。

第一,车辆所处的环境复杂度高。因此传感器检测返回的数据复杂,障碍物个数种类多;路况信息复杂,在高速上一秒钟车辆能跑出30米,情况瞬息万变。

第二,系统对规划模块的要求高。规划模块需要覆盖所有的ADAS场景,对模块计算的实时性和稳定性有着很高的要求。

第三,这是一个全新的未知领域,能够从外界获得的信息有限。虽然有过去长期的积累,但是依然有多重难题需要解决。

整体思路

下面来看一下规划模块是如何实现的。

想象一个人在开车,要从A点开到B点;他有多种方式可以完成这一任务,但是不同的方式,成本是不一样的。

那么如何去找一个成本最低的规划曲线呢?开发者面临的是一个三维空间中的优化问题,包括路面的二维平面,也包括时间维度。这是一个N立方难度的问题,Apollo 2.5的解决方法是,把这个N立方级别的问题,分拆成两个N平方级别的问题。也就是在x-y维度上求解,进行路径规划;在路径规划的基础上,以规划出来的路径为s轴,在s-t维度上进行速度规划。

这种降低维度,以退为进的方法,是对规划模块认识上的一个飞跃。通过放弃最优解的追求转而追求较优解,换来系统运算速度、稳定性的极大提高,同时满足无人驾驶系统的整体需求。这一点可以类比机器学习中SGD的思路,放弃对精确梯度方向的寻找,转而寻找近似梯度的方向,从而换来学习速率上的提升。

整体架构

规划模块的架构从整体上来说,可以分为两个部分:一部分负责对数据的监听、获取和预处理;另一部分负责管理各个优化模块。数据进入后,对其综合处理为规划模块的内部数据结构,由任务管理器调度合适的优化器进行各个优化任务。综合优化的结果,经过最终的验证后,输出给控制模块。

在设计上,实现了策略的可插拔,使得各个优化器可以灵活配置不同策略,提升迭代效率。

相对于Apollo 2.0,规划模块在延续了其架构上统一、灵活、快捷的优点上,在保持已开发算法持续更新优化的同时,又新增了局部坐标系以及一种新的速度和路径同时优化的Lattice planner。

规划器

Apollo的规划模块目前有三种类型的规划器:

Apollo 1.0中开始开放的RTK,也就是循迹Planner;Apollo 1.5中开始开放的EM Planner,也就是基于动态规划Dynamic Programming和二次规划Quadratic Programming的路径规划器与速度规划器;以及Apollo 2.5中开始开放的Lattice Planner,一种路径和速度同时规划的规划器。

RTK Planner

RTK Planner是规划预先设置的轨迹,为循即算法使用。

EM Planner

EM Planner可以通过动态规划进行路径和速度规划。比如说,路径规划会在范围内进行机动撒点,离散化解空间进行求解。

要想合理的选择采样点,首先应该直观的感受一下车辆和道路。以最常用的林肯MKZ 2016款车款为例,此车宽度2米1,那么假设道路宽度为3.5米,在当前道路行驶的时候就留下了一共1.4米左右的机动范围。

比如说,采样器在垂直于Lane的方向选择5个点,这种选法每两个点间隔0.35米,对于车辆调节来说是合适的;而在沿着道路方向,点的选取不需要特别密集,过于密集的选择白白浪费了计算资源,并且在下一步使用光滑曲线连接点的时候,造成求解的不稳定。所以,往往会根据当前的车速和路况进行选择,比如每隔15-20米选一组点,共选择4-5组。这样选点,结合了车辆与道路的特点,并且所有参数是可以配置的,具有高度的灵活性。

撒点后,通过Cost Function一层一层的进行动态规划,从而对问题进行了有效的简化。然后再通过平滑的曲线连接各层采样点得到最终的路径。其优势是明显的:

  • 灵活性:采样点从左到右覆盖了整个可行区间,避免陷入局部最优

  • 可靠性:其利用Cost Function 避免无解

  • 可拓展:低速到高速全覆盖

EM Planner中的速度规划,也可以采用和路径规划相似的方法。对解空间进行离散化以后,然后通过动态规划进行求解。从图中可以看到,在将与主车轨迹有重叠的障碍物映射到ST图以后,速度规划可以通过加速减速匀速等操作,从ST图中搜索到一条可通行区间并生成速度规划。从最后生成出来的图里面,可以解读出来相对于每一个障碍物的纵向决策。

比如说,需要避让或者跟随一个障碍物,车辆就从障碍物ST图中下方通过如果需要超越一个障碍物,那么在ST中车辆就从其上方通过。

Lattice Planner

接下来看一下Apollo 2.5中开放的新算法Lattice Planner。

Lattice Planner和EM Planner在设计上最大的区别在于,Lattice是横向纵向综合求解的,而EM是分开求解的。Lattice Planner源于斯坦福大学参加DARPA无人驾驶大赛的规划算法,Apollo 2.5吸收了其精华,并针对原有算法进行了改进和升级。

和EM planner一样,Lattice Planner也将轨迹规划问题分解成横向和纵向两个1维空间的独立的轨迹规划问题, 降低规划难度。横向仍然是SL问题,也就是Station Lateral,纵向上也还是ST,也就是Station Time问题。

Lattice Planner会根据起点和终点的状态,在位置空间和时间上同时进行撒点。撒点的起始状态和终止状态各有6个参数,包括了3个横向参数,即横向位置、横向位置的导数也就是Heading、Heading的导数;3个纵向参数,即纵向位置、纵向位置的一阶导数也就是速度、纵向位置的二阶导数(也就是加速度)。

起点的参数是车辆当时真实的状态,或者Stitch的状态来进行设计,终止状态则是撒点枚举的各个情况。在确定了终点和起点状态以后,再通过五阶或者四阶的多项式连接起始状态和终止状态,从而得到规划的横向和纵向轨迹。

这个步骤是Lattice算法的精髓所在,它直接决定了算法的效率以及解空间。举个例子来说,在撒点的时候可以的加入车辆物理动力学性能的约束,同时根据障碍物进行可行域的预筛选等,有效的裁剪无效空间,从而达到更优的性能。

在生成所有横向和纵向的一维轨迹以后,将其排列组合起来,合成大量的二维轨迹,然后根据损失函数筛选出最好的合成轨迹。和EM Planner类似,Lattice Planner的损失函数也可以分为,安全相关、体感相关以及目标完成度相关三类。

下面来看一下Lattice Planner在模拟器中的效果。

Lattice Planner在Apollo模拟器Azure中场景通过率达到了100%。

Planner 对比

Lattice Planner的优点是很明显的,同时产生轨迹的几何形状与速度分配,直接考虑到车辆的动力学状态,尤其是横向动力学状态,产生更适合高速运动的轨迹,简单可靠,参数少于10个。它利用了撒点算法避免了轨迹陷入局部最优,性能也非常的优秀,生成超过1000轨迹,轨迹的生成加上选择,用时少于100ms,确保了能做到10赫兹的Planning规划。

Planner 轨迹后处理

在轨迹生成以后,往往还可以通过一些后处理,对轨迹进行平滑和验证。可以通过几何的算法或者更加高粒度的采样,对于生成轨迹每个点,进行额外的碰撞检查。也可以同时验证规划的轨迹是否符合车辆的物理学动力特性,比如看其是否有超过车辆加减速度上下界限,以及转弯半径界限的时候。

回退保障机制

秉着安全第一的原则,Apollo 2.5同时提供冗余机制以保证整个系统的稳定性。车辆在路上行驶的过程中,遇到的情况千差万别,如果真的遇到了无论是人工驾驶还是机器驾驶都无法解决的特殊恶劣情况,如何保证Planning不会崩溃,并且输出一条相对最安全的轨迹,以保证生命和财产的安全,就显得尤其的重要了。

因此,无论是使用DP还是QP的EM planner,还是同时进行速度和路径优化的Lattice Planner,Apollo 2.5针对路径规划和速度规划都加入了后备规划。在正常的逻辑并不能在给定假设情况下计算出一条合理的路径的时候,针对当时的情况,对车辆进行合理的减速最后停车,以确保安全。

高效的测试与迭代

如何帮助大家进行能够高效的迭代也是Apollo所关心的一个重要问题。因此,Apollo的Planning有一套推荐的测试迭代流程。即单元测试,单周期的集成测试,模拟器测试,最后再实车测试的流程。让开发者可以在开发迭代的过程中,随时进行回归,保证开发的质量以及效率。

坐标系

Apollo 2.5又为大家打开了另外一扇窗--相对坐标系。此前的绝对坐标系是以世界为背景的一种全局定位,世界上每一个点,都会有一个相应的唯一的坐标。它的好处很明显,因为是全局唯一,所以说表达一个物体的真实位置的时候非常的容易,做多时刻位置对齐的时候也会比较的容易。

车身相对坐标系也是一种常见的坐标系,它是以车辆自身位置坐标原点,以车辆的朝向为x,车辆左方为y的坐标系。其优点也是非常明显的,可以去除开发者们对于地图定位的强依赖,反馈的数值也更加的直观方便开发者的理解。

相对坐标系

助力于相对坐标系这个新feature,在Apollo 2.5中同时推出了L3的高速方案。也就是基于车道线的感知方案和不基于地图和定位的规划方案。可以理解成为是类似于Tesla Autopilot或者Mobileye的方案,利用相对坐标系下的车道线代替全局坐标系的地图与定位,进行L3级别的自动驾驶功能。

《百度apollo》规划一相关推荐

  1. 对标Mobileye!百度Apollo公布L4级自动驾驶纯视觉解决方案Apollo Lite

    美国当地时间6月16日-20日,全球计算机视觉及模式识别领域顶级学术会议CVPR 2019(Conference on Computer Vision and Pattern Recognition) ...

  2. 百度Apollo无人车能力降维释放,打造智能汽车可以像拼乐高

    像搭积木一样在汽车中实现智能驾驶,是一种怎样的体验? 现在,只要你想,就可以试着操作起来了. 因为在第二届百度Apollo生态大会现场,百度Apollo全面展示了其在智能交通.智能汽车和自动驾驶领域的 ...

  3. 一个动作让全球震惊!百度Apollo就这样改写了全球智能驾驶格局

    https://www.toutiao.com/a6644515151858893316/ 2019-01-09 23:12:19 文| 暮四先生 车图腾出品,未经许可,谢绝转载 ● ● ● 五十年前 ...

  4. 百度Apollo发布中国首个自动驾驶安全报告,L3级别产品2020年量产上市

    来源:雷锋网 去年 10 月,全球自动驾驶研发先行者 Waymo 发布了长达 43 页的安全报告,里面详细说明了如何装备和训练自动驾驶车辆,从而避免驾驶过程中一些意外情况的发生. 今年 1 月,美国车 ...

  5. 百度Apollo无人车能力降维释放,打造智能汽车现在可以像拼乐高

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 像搭积木一样在汽车中实现智能驾驶,是一种怎样的体验? 现在,只要你想,就可以试着操作起来了. 因为在第二届百度Apollo生态大会现场,百度 ...

  6. 百度Apollo升级发布15大新品,还要化身无人车基建狂魔 | 一文看尽首届Apollo生态大会...

    郭一璞 发自 长沙梅溪湖畔 量子位 报道 | 公众号 QbitAI 百度Apollo,今天交出了一份亮眼的成绩单. 在首届Apollo生态大会上,百度智能驾驶事业群组总经理李震宇宣布,Apollo目前 ...

  7. 百度Apollo首次披露纯视觉L4无人车方案:10摄像头,对标Mobileye

    李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI 巨头新动作来了,行业风向可能要变. 百度Apollo,中国自动驾驶的最大玩家,刚刚在AI视觉顶会CVPR上,披露了一套纯视觉城市道路闭环解 ...

  8. 打响汽车信息安全战,百度Apollo构建最高等级安全防护盾牌

    当车越来越智能,面对的未知风险也越来越大. 人工智能.大数据.物联网等新技术的应用,汽车逐渐发展成为由芯片.软件以及数据组成的移动智能终端,车与车.终端应用.路侧以及云端之间的信息互联随之大大增强,由 ...

  9. 百度Apollo自动驾驶_百度车载小程序

    一.百度Apollo 百度阿波罗是百度官方发布名为Apollo的自动驾驶开放平台. 百度Apollo已在自动驾驶,智能汽车,智能交通三大领域拥有解决方案. 全球智能驾驶产业领跑者 百度2013年开始布 ...

  10. 01_搭建百度apollo环境实操可用

    搭建百度apollo环境 0-前言 1-目标 2-方法 3-Apollo环境搭建 3.1-CPU版 3.1.1前置依赖硬件条件 3.2-GPU版 前置依赖软件 1.安装 Ubuntu 18.04 2. ...

最新文章

  1. DeprecationWarning: the md5 module is deprecated; use hashlib instead import md5
  2. 八年级计算机网络公开课,计算机网络公开课教案.doc
  3. 在tensorflow2.0下遇到1.x版本中占位符不兼容问题 tf.placeholder() is not compatible with eager execution的解决方法
  4. 从DCGAN到SELF-MOD:GAN的模型架构发展一览
  5. Android-ConvenientBanner轻松实现广告头效果
  6. Spring Boot的Tomcat 启动详解
  7. BlockChain:互联网与区块链之间的那些事(P2P下载、P-CDN、分布式计算、社交媒体、P2P借贷、众筹、区块链、自组织)
  8. AUTOSAR从入门到精通100讲(二十)-AUTOSAR通信篇—CanIf模块
  9. C++ Coding Standard
  10. 为何控件删除不了_NBA开出800万合同,易建联为何却主动解约了?湖人太没诚意了...
  11. 一名计算机专业新生代农民工的五年求学之路,从“低谷”到“山峰”
  12. spark-shell开发wordcount程序
  13. 未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
  14. 华山行-西安生活的小记录
  15. 针对VMware安装Win10需要安装.NET Framework 3.5常见的0x800F0906、0x800F081F错误解决办法
  16. BZOJ 1050 [HAOI2006]旅行comf(并查集)
  17. java控制分屏_java实现arcgis地图分屏(双图)
  18. elsearch mysql实时索引_MySQL和Lucene(Elasticsearch)索引对比分析
  19. nodejs优雅的使用es6语法
  20. Angular 2+ Material Design Admin Template

热门文章

  1. 什么是百度信息流广告?
  2. waves效果器_Waves混音指南:疯狂、混乱、创造性的失真,用Berzerk失真开脑洞!...
  3. Java //PP2.16编写一个applet,画出北斗七星,并在夜空中添加一些其他的星星
  4. java写zip后无法读取
  5. 实验二+163+张玉洁
  6. 基于同态加密体制的安全多方计算
  7. 【艺术评析】陈全胜先生山水画
  8. .NET Framework 类库——C#命名空间大全
  9. 学生护眼台灯哪个牌子最好?高品质的护眼灯推荐
  10. 微信商城基本知识,成都微商城怎么开发,公众号商城