在知乎上看过不少大牛写的自动驾驶技术介绍文章,大多谈到的是AI, Deep Learning, Computer Vision等等感知(Perception)层面的。但在各个传感器(雷达、摄像头、激光雷达等)探测到目标信息及周围环境后,车辆该如何做出反应?自动驾驶的大脑该怎样根据感知层的信息对车辆进行控制?
这些其实都是在自动驾驶软件中的功能应用层中实现,那么功能层还需要做些什么呢?本文试图以最简单的语言就以下几方面聊聊自动驾驶中的功能开发。
严格来说,本文并不讨论“自动驾驶”这个主题。考虑量产的情况下,所谓的自动驾驶现阶段只能分为高度自动驾驶(Highly Automated Driving, HAD)和部分自动驾驶(Partially Automated Driving, PAD),所以本文出现的自动驾驶字样代表的是HAD和PAD。
HAD— L3+的功能。Audi A8的交通拥堵引导(Traffic Jam Pilot, TJP)算一个,尽管宣布了很久后依然没有上市。
PAD— L1-L2的功能。比如国外Tesla的Autopilot,Cadillac CT6的Super Cruise,国内吉利博瑞GE的智能领航,长安CS55的IACC,荣威Marvel X等等,均可以归类到此。
刚才HAD或PAD里举例展现出来的系统都是由一个个功能组成的,比如Tesla的Autopilot,其实就包括了以下功能:
当然,这些功能不同的OEM叫法都不一样。可以看出,无论是什么级别,自动驾驶其实是由一个个小功能组成,甚至Super Cruise中的驾驶员Handsoff也可以算作一个功能。再举例,Audi A8中的L3功能,其实也是在包含了LDW/LDP/TJA/ICA等等一系列功能的基础上,再加上TJP。当然,自动驾驶级别越高,单个的功能也会越复杂。
至于这些功能在哪实现,可以在传感器中,在雷达ECU中,在摄像头ECU中,或是在中央控制器ECU中(发展趋势),均是可以的 。
功能基本都在Application Layer中实现,至于其它层的作用,由于相关性不高,这里就不赘述了。参考下图,可以把每个功能理解为一个函数,有输入输出,通过获取传感器和车身CAN的信息,经过分析计算,输出CAN信号对车辆进行控制和显示。

各个传感器识别到的感知信息,比如摄像头识别到的车道线信息,交通灯/路标信息,雷达识别到的车辆信息,周围物体信息等等
分别设计实现以上几个方面,就能相对完善地做出一个功能。这里以车道保持辅助( Lane Keeping Assist, LKA) 功能设计为例,看看要做些什么。
LKA指的是通过摄像头识别车道线,检测本车在自车道中的位置,经过实时计算,连续输出扭矩请求信号至执行器电子助力转向系统EPS,以控制车辆随时保持在车道中间行驶,如下图:
可以看出,其将LKAS分为了OFF和ON两个主状态,ON中又分为了standby和active两个子状态,这样设计是最佳的么?其实不一定,这里展示的仅仅是一个最基本的状态机,根据OEM需求的不一样,对于HMI显示的不同要求,是可以将这个状态机扩展开来的。
比如主状态,其实除了ON和OFF,是否需要额外表示ERROR状态,ERROR又可以分为Permanent Error和Temporary Error,那在这些状态之间,如何切换呢?OFF -> ON:这个比较直观,驾驶员按下开关,软件读取到功能开启的信号后ON -> OFF:同理,驾驶员将功能关闭
那么如果此时功能是OFF,这时候功能出现故障,比如传感器出现故障,或所需要接收的车速等重要信息报文丢失,此时的状态是继续保持OFF还是转为ERROR呢?这些就是状态机里需要定义的了。
此时功能状态是ON,这时候出现故障, 状态应该跳到ERROR,但之后,故障自动消失,比如之前丢失的报文又重新正常发送,那此时功能是回到ON还是回到OFF(让驾驶员手动重新开启)?这里,一样是取决于功能定义策略,没有哪种一定好或一定不好。
那LKA在ON的状态下,有active和standby两种状态。active顾名思义,功能正在激活,方向盘此时依据软件计算发出的请求扭矩进行自动调整,但出现了一定抑制,比如车速过低,一般而言,LKA只在车速60以上才可以使用,那如果功能开启,但车速在60以下,此时就是standby了。那仅仅standby和active两个状态就够了么?其实也不一定。这里需要引出抑制条件的概念,这也是LKA功能设计中比较重要的一环,LKA功能设计的初衷是辅助驾驶员打方向盘,使其开车时更加舒适,那么如果驾驶员想要变道,此时如果还发出扭矩牢牢控制住方向盘把车维持在中间,是不是就有问题了?如果车辆处于一些极端工况下,这时候LKA还在正常激活,是否会对驾驶员的操作进行干扰?同样的,如果激活过程中突然丢失了车道线,LKA也应该进入抑制状态。
由状态机中得知,HMI中最基本的就是我们需要知道这功能什么时候是开启的,什么时候是关闭的,也就是说需要接收该功能的开关信号。可以是驾驶员方向盘边上的硬开关,也可以是中控大屏里的软开关,这个不重要,但重要的是功能需要接收驾驶员是否开启功能的信号。
此外,作为驾驶员,我需要知道功能开启后给我的反馈,该功能是否开启,是否可以工作,是否激活,是否有故障等等。这些输入的基础就是状态机了,功能将自身的状态发出给仪表,作出不同的显示,这部分就是HMI要做的内容。
这一块也是不同OEM区别最大的部分,有的可以做的很酷炫,比如特斯拉,可以将摄像头识别到的车道线信息显示出来,是直道还是弯道,且弯道能随道路半径的不一样而变化,实线还是虚线等等。这些信息就是通过HMI直接输出到CAN上,仪表以此作为输入进行显示的。

开环里的前馈控制,look up table也是使用频率比较高的。但既然用在量产的LKA中,实际车辆上的情况还是非常复杂的,实际应用控制算法会基于这些基础版的开环控制和闭环控制有很多改进,这部分比较涉及核心,就不细说了。
对于一个功能来说,在完成以上几点后,相当于就有了输入输出,有了内部的状态迁移,根据这些状态迁移可以反映出不同的功能状态信息提示驾驶员。对于整车来说,仪表显示交互就完成了,再加上控制算法控制车辆行驶,基本上一个功能就形成了。

汽车测试网-创办于2008年,报道汽车测试技术与产品、趋势、动态等 联系邮箱 marketing#auto-testing.net (把#改成@)
微信扫一扫打赏
支付宝扫一扫打赏
