1.决策技术解析与实现

本文章为Apollo星火计划PNC专项课程笔记,所有内容为百度所有。

星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2
星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12

本节课所要实现的场景

自动驾驶车辆在十字路口处理红绿灯的场景 。

整个apollo规划模块是一个双层状态机的架构,整个架构里包含场景,stage,task任务

那使用红绿灯的场景去分析,怎样可以看到这个架构呢?

apollo规划模块的核心思想,就是双层状态机的机制,在该机制之下,有三个核心的概念,场景,步骤,任务。

task中包含

第一种Onlane planning(默认规划模式,车道线规划)主要在城区, 高速公路场景的处理。

第二种是open space,主要针对一些没有车道线的路况,比如自主泊车,或者狭窄路况的调头。

每个stage都包含了路径决策,路径规划,速度决策,速度规划。

本节课重点关注这之中的决策技术是如何实现的。

决策部分的基本作用:

首先要保障无人车的驾驶安全,第二是要遵守交通规则。

然后要为路径和速度的平滑提供限制信息。

为了实现这个目的,决策的模块为无人车提供了各种各样的限制信息:

为了确保这些信息的准确度,决策模块几乎是利用了所有和无人车相关的环境信息,比如routing的信息,道路的结构,交通信号灯,障碍物的状态,包括预测的信息,这一切都可以为决策模块提供一个输入,从而保证决策模块的准确输出。

apollo的决策模块主要实现了以下五个功能:

接下来分别介绍这五个部分:

一、参考路径

参考路径是根据车辆的起始点和重点规划的一条没有障碍物的默认的行驶路径,交规决策、路径决策和速度决策都是基于参考线去实现的。

同时参考线也用于表达换道的需求。

参考路径实现的方法是有很多的,apollo目前是根据routing的输出去找到对应道路的中心线。

二、交通决策

有了参考路径之后结合高精地图以及信号灯状态的输入,主车会沿着参考线遍历这条路上所有的交通灯,遍历之后,根据交规的决策去判断车辆是不是需要在路口处生成停止墙。如果需要会生成停止墙,如果不需要会处理对应的决策信息,这块就是交规决策的处理方法。

三、路径决策

首先到达路径后,需要去判断是不是需要进行换道的操作,如果有很多参考路径,并且车辆不是在优先级比较高的参看路径上,就表明有换道的需求。有了这样的需求后需要去判断,当前路况是不是可以换道,如果可以换道的话,路径决策就会产生一个换道的路径边界,否则会产生一个道内的边界;如果确定当前没有一个换道的需求,那么路径决策会去判断,是否需要一个借道的避让,做避让的条件有两个:主车在当前行驶道路上的宽度是否足够,让车辆做换道,第二个,前方如果有障碍物的话,是否是静态障碍物,如果确定要去做换道的话,还会产生两个决策.

在路径决策时大部分只考虑静止的障碍物,关于动态障碍物,是在速度规划的时候需要去考虑的一个点。

边界问题:

二和三的区别在于默认优先级路径进行了更换。

四、速度决策

行驶中很多情况是为了遵守交规,保证安全,所以需要对速度做很多限制,比如在行驶过程中,路边有人的情况下,去做减速行驶;做借道绕行的时候,车速也要降低,这些环节都需要使用到速度决策。

速度决策是如何实现的呢?

当从上一部分路径决策处拿到路径边界后,就会调用路径优化器,去得到一个平滑的路径,有了这个平滑的路径之后,就可以进行速度的决策,速度决策的大体流程就是上图所画内容。

首先对当前路径上去产生一个或多个速度限制的边界,然后把这些速度限制的边界最终做一个集成,得到一个最终路径上的速度的行驶边界,得到该边界之后,再利用ST图(在PNC monitor中可以看到),去得到时间上位置的限制边界,通过速度边界和位置边界,最终去得到平滑的一个速度规划。

完成速度规划后,就可以生成规划的轨迹了。

以下是planning模块的运行流程:

这个图也是值得深入研究的,可以结合之前的材料将上图梳理一遍。

apollo的planning模块实际上是决策和规划一块做的。

接下来来了解场景的概念。

场景的概念是从apollo 3.5提出的:

场景的定义和划分是没有特别的规定的,只要合理即可。

大体可以把场景分为两类,第一类是lane follow的场景,第二类是lane breaking,其分为路口,临时借道,换道,这就是场景大概的思路,根据场景去划分,有两个优点:每个场景是互不干扰的,有利于去做并行的开发和独立的调参,同时功能上也能实现相互的解耦,有利于开发者去开发自己的场景,有了场景的设计后,二次开发就会相对容易一点。

以下介绍交规决策场景的实现机制。

交规在系统中总共定义了九种交规的类型:

apollo对交规的处理是通过for循环遍历一个交规的配置文件

这个配置文件中就存储了所有跟交规相关的配置,比如车辆在行驶到红绿灯场景的时候停止在停止线多少m的范围之内,其停止距离,停止时间都需要在交规配置里面去做配置,当配置完成之后,其处理信息就会存储到

之中,作为一个输入提供给后续的模块。

上述的reference_line_info作为输入,除了刚才的配置以外,还包含了很多其他的信息:车道信息、障碍物ID、地图重合信息….

当车辆靠近交叉路口的时候,场景管理器就会去判断是不是有车道线和交通信号有重合,有重合会去选择进入场景,当选择场景的时候需要根据以上的信息去判断应该进入哪个场景,然后再生成对应的stage(Approach、Cruise),每个stage又会对应很对task。其他交规也是大体这样的形式。

第一步:场景的进入

首先判断车道线跟交通信号是否有重合,有重合就表示进入交叉路口的场景

然后再根据车道线和交通信号具体的情况,比如高精地图上红绿灯的状态信息,如果有,就进入有保护的场景。

所以进入场景就由以上两部分代码完成,第一部分:判断是否是进入交叉路口的场景,第二部分,根据详细的信息去判断场景是有保护的场景还是有保护的场景,所以这是场景进入的大概的方法。

当进入场景之后,需要执行对应的stage文件。

可以通过配置文件查看,traffic_light中实际上对应了两个场景:靠近阶段、进入交叉路口阶段

同时,这两个stage都定义了不同的优先级:

可以看到,Approach的优先级是高于cruise的,所以场景是先去执行靠近阶段,再去执行进入交叉路口阶段。

可以在上述代码中看到各阶段的执行流程(上述代码展示了这两个阶段的注册流程)。

那么以上两个阶段是如何进行切换的呢?

首先做一个判断:主车离停止线的距离小于一个值之后就会进入Traffic_light的场景,这个值的配置就在交通灯的配置文件中

当满足这个值之后就会关注交通信号灯的一个状态,根据状态去触发不同的行为,比如红灯对应停。

进入交叉路口之后,就会进入cruise阶段,首先做一个判断,当车辆完全通过交叉路口之后,cruise阶段就会结束,再恢复lane follow阶段。

在这两个阶段中间,会进行交通灯的检测,即车辆在碰到红灯或黄灯后需要停车等待,假设车辆遇到红灯后会生成停止墙,停止墙到停止线的距离,也是通过刚才的配置文件进行设置。

其实现方法:

这个函数的入口参数,stop_distance()就是通过配置文件实现的。

交规这块的大致流程就是:

当车辆行驶到红绿灯路口之后,会进入到approach阶段,进入之后,系统会根据红绿灯状态去判断,是不是需要在当前形成一个停止墙(如果红灯就生成,如果是绿灯就同行),然后进入下一阶段。当整个阶段完成之后,再恢复到默认的阶段。

可以通过上述一个场景的分析掌握交规的处理流程,掌握之后可以依次分析一下其他的交规场景,看看它们的决策流程是什么样的,分析完成之后,可以进一步的去分析路径决策包括速度决策里边是怎么实现的。

(上述流程并没有讲解task阶段,每个stage都要去经历路径决策,路径优化,速度决策,速度优化,整个的过程,这些task会在后面的课程中会讲到)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值