百度Apollo7.0 规划算法框架解析(干货)

发布者:EnchantingEyes最新更新时间:2022-02-07 来源: 智车科技 关键字:百度Apollo  算法 手机看文章 扫描二维码
随时随地手机看文章

本篇文章想和大家分享一下Apollo7.0最新的规划算法。由于Apollo的planning整体代码都相当庞大,一开始还是理清其框架,再分算法块逐个击破这样效果更好。

 

这篇文章希望能带领读者理清planning的整体框架,梳理数据流,以主要场景为例,一直分析到task (apollo planning 的主要算法所在处)逻辑前的准备工作、输入如何构造的,之后再深入看task内部的细节也更容易理解。

 

特别注意,本文中的流程图均为作者花费了大量时间梳理而来,以便读者能够更易理解planning的整体框架,抓住重点不被细节带跑偏。


planning 的输入输出


读懂一个模块,首先必然是了解其的上下游,即输入输出是什么。熟悉Apollo CyberRT框架的小伙伴都知道在该框架下,输入输出由Reader和Writer构成,并定义在每个模块的component文件中。除此之外,CyberRT框架定义了两种模式,分别为消息触发和时间触发,而planning中采用的为消息触发,因此必须接到特定的上游消息后,才会进入内部主逻辑,而消息触发的上游消息,定义为component中Process()函数的入参。

 

 

 

因此总结来看,planning的上下游关系总结为下图:

 

 

这里再重复一下,planning的输入分为Reader和Process()入参的原因在于,planning依赖于Process()的三个上游输入,只有同时接到这三个输入,才会触发planning的主逻辑,即是planning正常启动的必要条件。而Reader则不是,其中部分上游还依赖于配置参数是否打开,具体可以查看Apollo的源码。planning的输出就比较简单了,主要是给控制的ADCTrajectory数据,包含了一条带时间、速度的轨迹点集,具体的格式定义可以查看对应的proto文件。


planning 整体框架

 

 

 

上面两张流程图是我整理的Apollo规划算法的框架,整体框架和之前并无太大变化。主框架分为两个线程,子线程ReferenceLineProvider以20HZ的频率运行,用于计算planning中最重要的数据结构reference_line;主线程上还是基于场景划分的思路,多数场景下还是采用基于ReferenceLine的规划算法,对于泊车相关场景,则利用open space算法。目前Apollo的场景划分为了16种,在proto文件中可以查看到。在Apollo 7.0中,新增了deadend_turnaround场景,用于无人车遇到断头路时,采用openspace的方法进行调头的轨迹规划,后续我会详细看一下里面的算法实现细节。

 


planning中的场景管理

 

Apollo中的规划里的一个重要思想就是基于场景划分来调用不同的task处理,而其中如何进行场景分配便是实现该思想的核心。从上面的配置参数可以看到目前Apollo设定了16种场景,而场景下的具体切换逻辑也比较复杂,scenario_manager的具体流程逻辑如下图所示:

 


在上图红框中的场景判断中,我只画了第一步的场景判断,红框内的5种场景为大类,剩余的场景在这5大类中再细分做出判断。另外需要注意的是,红框内的5种场景是有优先级顺序的,即如果判断为某种场景后,后续的场景也就不再判断。

 

下面从这5种场景出发,介绍一下Apollo中的场景判断条件,以及每个大类场景下包含哪些细分的场景小类。

 

1. ParkAndGo

 

 

该场景的判断条件为车辆是否静止,并且距离终点10m以上,并且当前车辆已经off_lane或者不在城市道路上,在该场景下采用的是open_space相关的算法。个人感觉该场景在驶离目标车道并正常规划失败导致的停车时会触发,利用open_space方法使其重新回到正常道路上,因此也是场景判断中首先需要check的。

 

 

2. Intersection在该场景下,又可细分四个场景。

 

首先,根据先前计算的地图中第一个遇到的overlap来确定大类型,是包含交通标识的交叉口,还是其他交叉口。其次,若是包含交通标识的交叉口,还细分为stop_sign、traffic_light以及yield_sign,具体结构图如下所示。

 

 

3. PullOverPullOver场景即靠边停车,需要满足以下条件才可切换到该场景:

 

不在change_line的时候,即reference_line只有一条


当前位置距离终点在一定范围内并且满足pullover可以执行的最短距离


地图中能够找到pullover的位置


终点的位置不在交叉路口附近


能查找到最右边车道的lane_type,并且该车道允许pullover


只有从lane_follow场景下才能切换到pullover

     

    大体逻辑如上述所示,具体的参数设置可以查看代码。

     

    4. ValetParkingValetParking场景即代客泊车,判断逻辑如下:

     

    从routing中得到target_parking_spot_id


    从地图中搜索是否存在path能够抵达该parking_spot


    查询当前位置至parking_spot的距离,满足条件即可切换至该场景

       

      5. DeadEndApollo 7.0中新增的断头路场景,增加了"三点掉头"功能,增加了驶入驶出的能力,扩展了城市路网运营边界。"三点掉头"功能基于open space planner框架,包含以下几个部分:断头路场景转换、开放空间ROI构建、掉头轨迹规划。下列图片展现了从进入DeadEnd到驶离DeadEnd的整个过程,后续我也会详细了解该算法实现逻辑。

       

       

      上面就是Apollo中的场景切换及管理逻辑。在每个场景scenario下,还分为一个或多个stage,而每个stage下面,又划分了多个task来完成相应的规划任务。以用到最多的lane_follow场景为例,它就包含了一个stage——lane_follow_default_stage,而在这个stage下包含了多个task,如下图所示:

       

       

      仔细查看lane_follow场景下的task,我们可以看出Apollo的规划思路也是横纵向解耦,先规划path,再规划speed。具体的,对于path来说,先做出是否需要lane_change或者lane_borrow的决策,再根据决策状态来生成凸空间,最终基于reference_line及凸空间求解一个二次优化问题,从而得到优化后的path。对于speed来说,是基于ST图进行DP+QP的优化方法,先利用DP来找到一个cost值最小的可行解,再利用QP对可行解进行平滑,得到最终平滑后的ST图点集。最终,基于s值对path和speed进行融合,得到一条平滑的轨迹。


      总结

       

      至此,Apollo 7.0 planning的核心框架及核心算法的输入都已经解释清楚了,总体来看Apollo规划的整体思路非常清晰,但是细节部分真的需要花费大量时间来理解,我觉得如果没能将这套算法部署到实车上跑过的话,很多算法可能真的无法很好地理解。

       

      我个人也陆陆续续看这套代码有两年多了,始终觉得很多细节都没有深入理解透,代码光看是肯定不行的,如果没有条件在实车,或者是仿真里实际运行,解决相应场景下遇到的问题的话,是始终不能转变为自己的知识的,希望与大家共勉,也欢迎大家有任何疑问在评论区留言交流。


      关键字:百度Apollo  算法 引用地址:百度Apollo7.0 规划算法框架解析(干货)

      上一篇:中国自动驾驶载人场景商业化之路——得天独厚、道阻且长
      下一篇:有望2024年投产 大陆/Volterio共研无线充电方案

      推荐阅读最新更新时间:2024-11-13 09:48

      Waymo合作DeepMind 将自动驾驶AI算法开发速度提升1至2倍
      据外媒报道,谷歌母公司Alphabet 旗下 自动驾驶 子公司 Waymo 的自动驾驶汽车与引导普通汽车的“大脑”有一些共同之处:其智能都由进化推动发展。目前,Waymo的工程师就正与DeepMind(也是Alphabet旗下子公司,专注于AI)的研究人员合作,寻找一种更加高效的方法,培训和调整Waymo的自动驾驶算法。 (图片来源:Waymo官网) 研究人员们采用了一种称为“基于群体进行训练”(PBT)的技术,此前DeepMind研发了该技术,以提升视频游戏的算法。PBT技术的灵感来自于生物进化,通过让候选代码从算法群中抽取“最合适”的样本(最有效执行给定任务的样本),加速选出特定任务中用到的机器学习算法和参数。 以
      [汽车电子]
      Waymo合作DeepMind 将自动驾驶AI<font color='red'>算法</font>开发速度提升1至2倍
      一种FFT插值正弦波快速频率估计算法
      对被噪声污染的正弦波信号进行频率估计是信号参数估计中的经典问题,目前国内外已提出不少方法。文献给出了在高斯白噪声中对正弦波信号频率进行最大似然估计算法,该算法能够达到卡拉美-罗限(CRB),但计算量大,实现困难。FFT频率估计方法具有速度快、便于实时处理的特性而得到了广泛应用。但FFT频率估计方法得到的是离散频率值,当信号频率与FFT离散频率不重合时,由于FFT的“栅栏”效应,信号的实际频率应位于两条谱线之间。显然仅仅利用FFT幅度最大值估计信号频率难以满足精度要求,因此各种插值算法应运而生。文献给出了Rife算法,在对输入信号进行一次FFT运算后,利用最大谱线及其相邻的一根次大谱线进行插值来确定真实频率位置。当信号的真实频率处于
      [嵌入式]
      一种FFT插值正弦波快速频率估计<font color='red'>算法</font>
      基于计算机视觉的自动驾驶算法研究综述
        近年来,随着人工智能技术的迅速发展,传统汽车行业与信息技术结合,在汽车自动驾驶技术方面的研究取得了长足进步,业内很多大公司都在此领域投入巨资进行研发,如国外的谷歌、丰田,国内的百度、比亚迪等公司都推出了 自动驾驶 汽车,且实验结果令人满意:   谷歌的自动驾驶汽车已经安全行驶超过 14 万英里;   丰田则宣布旗下自动驾驶系统将于 2020 正式量产;   百度在 2015 年底宣布,其自动驾驶汽车计划三年商用五年量产,比亚迪已与百度深化合作,共同研发 无人驾驶 汽车。   可以预见,在不远的将来,随着技术不断发展完善,自动驾驶技术将进入实用阶段,普及到千家万户,人们可以自由出行而无需担心人为驾驶事故,如无证驾驶、超速、疲
      [嵌入式]
      人工智能时代 机器学习和AI算法将改变“二八定律”
        哈佛商业评论网站发表麦克·施拉格(Michael Schrage)的文章,称 机器学习 和AI算法的进展正在改变我们熟悉的80/20规则。下面就随网络同喜内销部一起来了解一下相关内容吧。   以下是编译整理的文章概要:    意大利工程师和经济学家维尔弗雷多·帕累托   很多业绩出色的公司,都对意大利工程师和经济学家维尔弗雷多·帕累托(Vilfredo Pareto)推崇备至,因为他提出的80/20规则产生了非常大的影响。   这个规则指出,80%的效果(销售额、营收等)都来自于20%的贡献者(产品、员工等)。 人工智能时代 机器学习和AI算法将改变“二八定律”   现在, 机器学习 和AI算法创新正在改变帕累
      [汽车电子]
      先别急着吹捧,自动驾驶最大挑战居然是“横行”的小车?
      配备“千里眼”和“最强大脑”, 自动驾驶 汽车毫无疑问已经初具无障碍行驶的能力了。   据了解,目前,主流自动驾驶汽车对车辆、行人或是动物的识别准确率日渐提升,这得益于它们装备的不同的 传感设备 和 算法 系统。但多数人没想到的是,道路上那些最轻、最安静、最灵活的小车,可能成为自动驾驶在未来的最大挑战。   背景:“小”麻烦 “自行车可能成为自动驾驶系统面临的,最艰难的检测难题”,来自加州大学伯克利分校的研究工程师Steven Shladover如是说。   加州大学的视觉计算专家Nuno Vasconcelos也表达了类似的观点,他认为自行车正因相对小巧、灵活并且结构特殊,可能会使自动驾驶汽车面临一种复杂的计算难题。“汽车就像一
      [嵌入式]
      清研智行刘继达:围绕车载UWB应用,构建以算法为核心的技术壁垒
      除了数字钥匙,UWB技术落地汽车还有更多的潜力应用。 2年前,小米发布了一项名为“一指连”的黑科技。在展示视频中,演示者只是将手机在方向上对准了某一设备,相应的控制卡片就在手机界面上弹出,方便用户进行下一步动作。 彼时,小米方面也曾表示,未来用户甚至不需要从口袋中掏出手机,即可实现无感打开智能门锁。 如今2年过去,UWB技术虽然还未实现以上智能家居畅想,但却先行一步落地汽车,成为数字钥匙的一种方式。 UWB汽车数字钥匙的首位“尝鲜者”是宝马。去年1月份,宝马宣布将为旗下2022款车型引入“增强版数字车钥匙”,而该功能正是基于UWB技术实现的。 但是,“直到去年7月份,UWB技术作为数字钥匙的相关标准才公布,所以
      [汽车电子]
      清研智行刘继达:围绕车载UWB应用,构建以<font color='red'>算法</font>为核心的技术壁垒
      揭秘OPPO首款芯片背后:影像专用NPU,从IP算法到流片自研
      江湖传闻OPPO 造芯已久,今天它终于来了! 2021年12月14日,OPPO2021年度未来科技大会正式开幕,OPPO首款自研NPU芯片马里亚纳®️ MariSilicon X也在大会上正式发布。 作为一家终端公司,OPPO涉足上游芯片备受业界关注。业界也有太多疑问,比如:为什么不是SOC芯片?OPPO造芯从何时开始?投入如此之大,是真自研吗? 就在发布会前,集微网也专访了OPPO芯片产品高级总监姜波,他详细介绍了这颗芯片背后的故事…… 6nm先进制程,定位影像专用NPU “这是OPPO第一颗自主设计、自主研发的影像专用NPU芯片,也是全球第一颗为影像而生的专用NPU芯片,用AI技术解决传统手机影像难题。”发布会上姜波宣布,
      [手机便携]
      云计算、大数据、芯片、算法等技术如何解决准确率不高
      智慧 安防 的主要目的是实现安防业务从“看得清”到“看得懂”升级。在 云计算 、大数据、芯片、算法等技术助推下,智慧安防应用早已开始落地。如今安防监控领域已进入数据爆发时代。 随着安防行业数据量快速增长,为进一步提高数据处理效果,越来越多的智能算法从后端转向在前端完成。前端智能不仅能够为后端提供高质量、初步结构化的图像数据,还能大大节省带宽和后端计算资源。目前已经有很多智能算法可以在前端实时运行,如人脸检测、进入/离开区域、越界、徘徊、停车、人员聚集等。 然而,一直以来安防业界大部分 智能前端 还停留在把简单视频分析算法集成到前端设备的阶段,这样的智能前端由于硬件性能限制,且在实际使用上智能分析结果易受环境干扰,准确率不高
      [嵌入式]
      小广播
      最新汽车电子文章
      换一换 更多 相关热搜器件
      更多往期活动
      随便看看

       
      EEWorld订阅号

       
      EEWorld服务号

       
      汽车开发圈

      电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved