前言
目前,汽车发展的趋势是智能化、电动化以及共享化。随着对自动驾驶汽车的需求不断增加,越来越多的大型企业以及一些创业公司,投入了大量的人力和资源到自动驾驶这个产业中。作为未来自动驾驶的心脏,自动驾驶芯片的设计必然成为最重要的核心技术,得到充分投入和快速发展。我从2012年开始接触汽车辅助驾驶项目,主要从事辅助驾驶、影像处理、计算机视觉算法和芯片设计的相关工作,对这个行业的发展有一定的理解。这些年来的芯片行业经验告诉我们,芯片的设计涉及对算法的深入理解、严格的硬件开发流程、相对成熟的软件架构设计,以及对工程流程的严格执行和管理。
本书共13章。第1章主要介绍自动驾驶目前遇到的挑战和研究方向。第2~6章主要介绍自动驾驶的算法设计部分。要开发一款自动驾驶芯片,首先应该对自动驾驶的算法,如物体检测、多传感器融合等进行充分的调研,做大量的仿真实验,用来覆盖更多的场景。其中第2~4章主要介绍自动驾驶方面的几个算法。当然,涉及自动驾驶的算法有很多,远远不止这些,本书只能起到抛砖引玉的作用,希望读者能阅读更多的最新技术文章,做大量的实验,用来确保自己开发的算法具有可靠性、鲁棒性和准确性。第5章主要介绍高清地图的开发,目前很多创业公司的业务主要集中在高清地图的生成上。自动驾驶的技术水平还处于“按图索骥”的状态,如何快速、准确地生成高清地图也是目前的一个商机。开发出了自动驾驶算法,那么如何测试这些算法呢?第6章主要介绍一些开源的仿真器,用来测试、评估自动驾驶算法。
第7~10章是关于芯片设计方面的内容。有了成熟、相对稳定的算法,如何将其部署到汽车里面?一种方法是利用现成的商用芯片。目前一些大型半导体芯片企业,比如德州仪器、英伟达及高通等公司,都提供了商业级别的SoC芯片,用来支撑汽车辅助驾驶或者自动驾驶的应用。其中,第7章重点介绍一些商用芯片如何支撑自动驾驶的算法实现。目前很多自动驾驶算法都是基于深度学习开发的,因此模型优化是一个非常重要的课题。第8章介绍目前存在的一些模型压缩算法。第9章和第10章重点介绍如何开发深度学习的专用加速芯片,介绍如何开发SoC的自动驾驶芯片。同时,我认为,适用于自动驾驶的图像传感器处理芯片和自动驾驶专用的深度学习加速器芯片,是目前存在的机会。本书也将介绍一些硬件的开源代码,比如NVDLA,有兴趣的读者可以参考。
第11章和第12章是关于自动驾驶软件架构设计的内容。要开发一款芯片,必须配备成熟的软件架构以及一些开发工具,以使开发人员更好地使用芯片。其中第11章主要介绍目前在自动驾驶领域涌现出来的一些操作系统。第12章主要介绍一些基于安全功能的软件开发架构和流程。
第13章简要介绍如何将5G用于车联网来提高自动驾驶的体验。
对于每个部分,有兴趣的读者也可以从本书中挖掘潜在的科研项目和产品。比如,对算法感兴趣的读者,可以开发多传感器的融合算法(第2章和第3章);对高清地图感兴趣的读者,可以了解高清地图是如何建立的(第5章),目前硅谷很多创业公司都在开发定制高清地图;如果有了很好的自动驾驶算法,则也可以利用模型压缩的软件方法(第8章),直接在英伟达、高通、德州仪器的自动驾驶平台上实现其产品的原型(第7章)。对硬件开发感兴趣的读者,可以参考深度学习芯片的设计(第9章)以及自动驾驶SoC芯片的设计(第10章)。特别要提的是开源NVDLA,做硬件设计的读者,可以参考此开源代码来设计定制的ASIC芯片。关于自动驾驶芯片的ASIC,我认为,开发数字影像处理芯片以及自动驾驶专用的深度学习芯片是一个不错的方向。特别是数字影像处理芯片的设计,如何满足HDR以及快速运动的物体是一个很大的挑战,但也是一个机遇。对软件开发有兴趣的读者,可以参考软件架构设计(第12章),如何在开源代码的基础上开发属于自己的自动驾驶软件产品,这和以前的软件开发不同,需要考虑安全性能。当然,本书参考了大量的开源代码和文献,历时半年完成,其中耗费了作者大量的时间和精力。后续希望有兴趣的投资人给予一些赞助,利用作者多年的半导体开发管理经验,招聘几个工程师,把这些开源代码串起来,形成一本更具实战性的教科书,或者开发出一些更具适用性的产品。
本书的一个重要特点是,结合最新发表的学术论文和开源代码,详细论述了自动驾驶芯片设计的大致过程。不但有理论基础,还有很多开源代码,为读者提供大量的实战经验,锻炼动手能力。另外,芯片设计涉及多个不同部门、不同领域的人才的合作和交流,因此,严格的流程管理、规范的代码管理、合格的文档输出,还有有效的部门沟通,在项目实施过程中都非常重要。但是,比较遗憾的是,我没有办法把这些多年的半导体开发经验写到本书里。
编写本书,旨在期望大学本科生、研究生甚至博士生能够从本书中获得一点启发,能够以严谨的学术态度充分论证每一个算法,脚踏实地地设计自动驾驶芯片,为中国的自动驾驶芯片的开发做出一点贡献。
编写本书,要感谢我的老师,西北工业大学计算机学院的蒋立源教授,没有他的鼓励和审稿,这本书是不可能写出来的。我利用工作之余,历时很长时间才完成本书的初稿,其中蒋老师也花费了大量的精力帮我通篇修改。他现在虽是耄耋老人,比我年长四十多岁,但这并不妨碍我们之间的友谊,从2002年上了蒋老师的一门“计算的数学理论”课后,我们就成了“忘年交”。从西北工业大学校园长凳上的长谈,到西北工业大学“巴国布衣”餐厅,我们亦师亦友,讨论生活、学业,蒋老师鼓励我留学美国。自从我来美国后,我们的联系中断了十四年,这里要向蒋老师说声对不起,恳请您原谅。自从2019年恢复联系以来,我们就成了无话不说的知心朋友,蒋老师一直鼓励我为母校做些贡献,但我自知愚笨,才疏学浅,只能期望和老师合作编写一本书,见证我们的师生情谊。如果本书对读者有一点帮助,我将颇感欣慰。
由于水平有限,书中谬误及不当之处在所难免,希望大家给予批评指正。
说明:本书中提及的“链接1”“链接2”等相关信息,读者可以从本书配套资料“参考资料.pdf”文件中查询。
任建峰
写于美国圣地亚哥
2021年7月4日