前言:

自动驾驶技术是一个庞大的工程体系,软件架构、功能算法、控制规划、感知识别、建图定位、电气架构、车载控制器、验证体系等等,有太多的角度可以去切入。对于自动驾驶功能与算法开发,自动驾驶功能的分级是很重要的,自动驾驶的功能衍变就是随着自动驾驶功能的分级推进而不断发展。而随着自动驾驶等级的不断提高,对应的功能使用场景以及软件架构也发生相应的调整。

想系统学习自动驾驶算法的小伙伴,可以关注订阅以下专栏:

决策规划算法系统解析:https://blog.csdn.net/nn243823163/category_11685852.html

Apollo仿真与调试:https://blog.csdn.net/nn243823163/category_11807746.html

智能驾驶算法解析与仿真:https://blog.csdn.net/nn243823163/category_11935534.html

一、自动驾驶系统分级

国内与国际对于自动驾驶系统都划分为0~5级,每一级对应的功能如下:

0级:前向碰撞预警 FCW算法、车道偏离预警 LDW Lane Departure Warning、侧向报警BSD、开门预警DOW、倒车辅助预警RCTA、泊车辅助PA、驾驶员疲劳检测DMS;

1级:定速巡航系统 CC算法、自适应巡航系统 ACC算法 Adaptive Cruise Contro、车道纠偏辅助 LDP Lane Departure Prevention、车道居中辅助 LKA Lane Keep Assist、自动紧急制动 AEB算法、行人保护 PDS

2级:自动泊车算法 APA、交通拥堵辅助TJA、自动变道功能 LCS;

2.5级:高速公路导航辅助NOP、城区导航辅助

3级:高速公路单车道自动驾驶TJP、高速公路多车道自动驾驶HWP

4级:代客泊车AVP、港口园区无人驾驶

5级:完全自动驾驶

国内自动驾驶分级如下图所示:

国际标准如下:

比较形象与直观的理解可以参考下图:

二、系统架构

自动驾驶系统的架构可以如下图表示。最下层是硬件层,传感器、执行器、V2X设备等硬件都属于这一层;中间层是控制器,由MCU或者SOC加各种接口构成,接口包括CAN、以太网、LVDS等接口与硬件层相连接;在控制器的芯片中还要运行操作系统以及中间件,中间件提供了软件接口以及调度管理工具,来进行上层各个软件模块之间的管理与通信。在软件层进行功能模块的实现,感知、预测、决策规划、控制、数据储存等功能,都在软件层进行实现。

对于自动驾驶软件,之前的L2系统从架构上通常按照以下3个模块进行划分:感知、决策规划、控制;通常认为感知相当于人类的眼睛,与传感器连接,将传感器识别到的原始信号识别为目标以及道路的各个属性;决策规划相当于人类的大脑,处理感知或得的信息,并做出决策;控制层相当于人类的四肢,接受决策规划模块的控制,操纵执行器进行横向与纵向的控制。

接下来这个框架图将感知、决策规划、控制这3个模块更加细致的展现。

感知模块的输入可以是各种传感器:摄像头、激光雷达、毫米波雷达等,同时感知也会接受车身传感器的信息来对感知结果进行修正。决策规划模型又分为行为决策、轨迹规划、轨迹生成等模块。控制模块主要分为横向控制与纵向控制,横向控制主要是控制转向系统,纵向控制涉及油门与刹车的控制。

软件架构的另外一种表述如下:

以上的软件架构图是目前主流L2功能的架构图,随着自动驾驶功能向着L3迈进以及NOP等L2.5 功能的出现,自动驾驶软件架构也出现了进一步的发现,目前主流的NOP架构可以参考下图。可以看到,与L2的架构相比,NOP的架构中多了MAP、定位、Routing 模块。

其中HDMAP模块提供了高精地图数据,与感知提供的车道线数据相比,高精地图提供的车道线数据更准确、可视距离更远、而且可以反映出道路的拓扑结构。

定位模块则给出当前车辆所在的位置,结合HDMAP的数据给出局部地图。

Routing则给出全局的路径规划结果,作为局部路径规划的参考。

NOP架构更详细的描述可以参考下图:

以上介绍了L2以及L2.5功能的自动驾驶算法架构,后续会继续深入介绍各个模块,欢迎大家持续关注