在整个自动驾驶中,我们之前讨论了很多软件算法,很少涉及到硬件领域,今天结合我接触的一些硬件知识做一个总结,整理硬件在整个自动驾驶中的作用和市面上常见的几种硬件。
1. 软硬件架构
软硬件架构也是三部分组成:硬件平台,操作系统,软件算法。
硬件平台具体是指计算平台,目前主流的自动驾驶芯片解决方案主要包括GPU、FPGA、DSP和ASIC四种。其作用主要包含三个方面:
- 提供传感器数据的接口,把传感器的数据导入计算平台。
- 分析传感器传入的数据,结合车辆自身情况进行计算,主要是计算车辆的控制信号。
- 提供对外的输出接口,把计算的控制信号,通过接口输出到车身总线上。
2. 常见硬件平台
- 英伟达基于GPU的计算解决方案——DRIVE PX2,由于特殊的硬件设计,其在图像处理和深度学习方面有独特的优势。
- 德州仪器基于DSP的解决方案——TDA4,其具有专用的深度学习加速器和内部开发的矩阵乘法加速器(MMA),SoC可以处理高达8MP的前置摄像头的视频流,也可以处理四到六个3-MP摄像头以及雷达,LiDAR和超声传感器的组合。
- Altera基于FPGA的解决方案——CycloneV SoC,集成了基于ARM处理器的硬件处理器系统(HPS),具有更有效的逻辑综合功能。
- 恩智浦NXP自动驾驶汽车的计算平台BlueBox,S32V芯片包含有不同的图形处理引擎,特制的高性能图形处理加速器,高性能ARM内核,高级APEX图形处理和传感器融合。它的功能包括了传感器/执行器管理和故障检验。
- 寒武纪的芯片,寒武纪1M,采用台积电7nm工艺制造,能耗比达到5Tops/W,即每瓦特5万亿次运算,并提供2Tops、4Tops、8Tops三种规模的处理器核,满足不同场景、不同量级的AI处理需求,并支持多核互联。
- 高通骁龙SA8155平台,高通的性能和整合5g的能力吊打市面上一众厂商,目前还没有太多厂商使用,但是潜力很大。
- 谷歌TPU,第四代TPU芯片性能也首次披露,得益于硬件创新及软件优化,TPU v4的性能较TPU v3平均提升2.7倍,此外基于TPU v3的谷歌最强ML训练超算峰值性能超430 PFLOPs。
3. 操作系统
在上面总结的硬件平台中,首先运行一套操作系统,我总结了5中车载的操作系统:
- WinCE:微软起了个大早,干了个晚集,随着Linux和Android的冲击,已经放弃对WinCE的维护,一种分层的架构,分别由内核模式层和用户模式层组成。
- Linux:Linux支持多用户、多任务、支持多线程和多CPU,是一个性能稳定的多用户网络操作系统。
- Android: 不用多介绍,包含一套文件系统,多媒体构架,SQLite数据库、图形处理、网络开发的库文件等等。
- QNX: QNX采用微内核结构,大部分的子系统,包括用户应用软件,互相通信都是通过kernel call的方式。
-
iOS:苹果对汽车的开发还处于保密阶段,我们只能翘首以待未来的结果。
4. 软件算法编译
之前我们讨论的所以软件算法,都是在以上操作系统上运行,即编译出对应的可执行文件运行,下面总结一下对应的常用编译方法:
- SCons:脚本可以用python书写,不过距离构建还有一些差距,自动配置功能很弱 ,跨平台构建能力不足。
- Waf:用 Python语言作为构建脚本,可读性、可维护性和便利性。
- CMake:目前比较成熟,但是采用的是一个自定义的格式,劣势也十分明显。
- premake:业界口碑最好,采用代码简单优美的lua语言:灵活、优美、知识复用好。
5. 总结
有了硬件,接入传感器数据,在操作系统中,运行编译好的可执行文件,就能实时计算控制信号,并通过总线接口发出信号,这就是整个自动驾驶软硬件流程。
作为一个软件工程师,必须要掌握硬件知识,打通自动驾驶上下游,具有宏观的视野,重点关注与自己的领域,深耕细作,才能利于不败之地。