【泡泡新闻社】如何成为一名自动驾驶工程师

2019 年 2 月 19 日 泡泡机器人SLAM

作者  |  周艺  

编辑  |  张晨

自动驾驶汽车是我们这个时代的登月之旅。尽管当前汽车无论是从电子架构,还是功能安全,到法律法规,都还跟不上自动驾驶的发展。业内一些积极者把自动驾驶落地的时间点定在了2025年,而悲观者则认为2060年之前都不会有重大突破。但是,眼前的挫折并不会使自动驾驶的发展止步,自动驾驶依然代表着人类出行的未来。为了早日实现这个目标,需要更多有天赋的年轻工程师加入,希望本文能够成为他们的入门指南。

扎实的软件工程知识是基础

安全是汽车企业的生命线。自动驾驶如果想要真正落地的话,必须能在复杂的环境中提供超越人类的驾驶安全,因此运行在汽车上的软件必须安全可靠,仅仅依靠一些demo的脚本和粘合代码不足以提供可靠的产品。同时,自动驾驶系统又比一般的汽车控制器更复杂,使用的芯片一般都是异构多核系统的SoC,同时运行着满足安全需求的实时操作系统和事件驱动的运行算法的操作系统,在安全性和实时性上有着更高的要求。因此,自动驾驶工程师的核心职责之一是确保高水平的软件质量。

而高质量的软件具体可以体现在:

可靠的软件设计:需要有清晰且一致的软件架构;在适用的地方遵循设计模式和编码最佳实践;代码是模块化的、可重用的和简洁的。

高质量的代码:符合编码规范,通过静态代码测试

满足嵌入式需求:内存管理、任务调度、并发性都要小心处理;设计算法时要考虑算力,带宽和实时性要求。

测试覆盖范围:所有产品代码都要达到合理的测试覆盖范围。在上传到持续集成服务器前要进行单元测试、冒烟测试和集成测试从而保持代码库的稳定。

软件开发实践:正确使用版本控制,使用分支管理模型,使用文档生成工具(例如doxygen,Sphinix)

如果你还不是一个熟练的软件开发工程师,那么我建议你可以先看一些经典书籍,比如《effective c++》,《代码整洁之道》,另外多写代码,参与一些项目,在实战中提高自己。

成为某个领域的专家

自动驾驶是一个交叉学科,算法可以分为感知,规划,决策,控制四大模块,如果想全面了解的话,我推荐几个网课:

•Coursera上Toronto大学的Self-driving Car Specialization(强烈推荐)

•EdX上Chalmers大学开设的Emerging Automotive Technologies Micro Master

•Udacity上的自动驾驶Nanodegree

•百度Apollo在北大讲的自动驾驶进阶课程

选一个学就可以,通过这些课程,你能系统地了解自动驾驶的整个技术栈。但是,公司往往需要的是在某个领域的专家,而不是广而不精的通才。如上节所述,要做成一个量产的产品,需要考虑的不仅仅是实现功能,还需要考虑成本,效率,安全性,可靠性等等实际的问题,往往需要一轮轮的迭代优化。如果你精通一到两个具体的方向,并有扎实的软件基础,在自动驾驶行业找到一份工作会很容易。

应用深度学习

≠ 理解深度学习

≠ 成为一个出色的工程师

深度学习在过去的几年里有被过度炒作的嫌疑,实际上它只占建造自动驾驶汽车所需工作的一小部分。在未来,找到有深度学习背景的工程师或许会比找到有扎实嵌入式背景的工程师更容易。实际上,深度学习的门槛正在快速降低:大量的在线课程手把手地教你应用深度学习,预训练模型和公开数据集使得每个人都能做出demo,各种框架使得训练,推理,部署都可以用简单的代码实现,AutoML的发展甚至使调参都变得不那么重要。但是,永远不要轻视深度学习的理论,周志华的西瓜书和Ian Goodfellow的深度学习都是不错的入门教材。

入门仅仅是起点,深度学习算法工程师还需要时刻关注着新算法,可以去https://paperswithcode.com/网站上,去了解更多state-of-the-art的算法和实现。

如果你厌倦了读paper,但又想进入深度学习行业,不妨从数据工程师或者硬件加速方向切入。深度学习作为一种数据驱动的算法,数据的重要性不言而喻。自动驾驶企业会利用300-500PB的数据去训练模型,每天每辆测试车还要采集50-70TB的数据,进而利用这些数据去持续学习。这就涉及到很多大数据的采集,存储,标注的职位。除此之外,由于嵌入式芯片对功耗和体积都有要求,很多企业会选择在FPGA或ASIC上部署深度学习算法,算法的硬件加速也是一个很有挑战的方向。

 如果要成为一名出色的深度学习工程师,仅仅有理论基础也是不够的,还要熟练地掌握Python。Python已经成为了机器学习的专用语言,它具有简洁的语法,并提供大量的库,特别是用于科学计算和机器学习的。但遗憾的是,python经常被仅仅当作一种快速实现想法的工具。有些人错误地认为Python很简单,而不去深入学习,最后写了一大堆无法维护的脚本代码。如果你还只是停留在会用Python的阶段,那么我建议你把Python作为一门编程语言重新学习,努力掌握这门语言并写出漂亮的Python风格的代码,利用面向对象的编程并构建可重用的模块。这里推荐几本书,例如

《he Hitchhiker's Guide to Python》,

《effective python》,

《The Python 3 Standard Library by Example》

熟悉汽车软件开发

尽管初创公司可以在起初相当长的一段时间内,不去考虑汽车软件工程方面的限制,但到了产品落地阶段,终究是绕不开Autosar、ASPICE、功能安全、车辆总线系统、车辆开发周期等问题的。汽车软件开发的背景将会使你成为一个更有竞争力的自动驾驶汽车工程师。

与其他行业对比,汽车软件开发有着以下三个明显的特点:

1)汽车软件开发周期很长

由于其漫长的产品周期(五到十年),汽车工业不一定总是用得上最新的现代软件工程实践。DevOps、Scrum、持续集成、测试驱动开发等等概念,肯定不像在IT企业中那样应用广泛。其原因不一定是汽车公司在适应创新方面的速度慢,而是由于其内部和外部依赖性、长交付周期、向后兼容性、长达十年的遗留代码等等很多历史遗留问题。

2)汽车软件开发依赖于外包

对于汽车制造商来说,软件外包是非常常见的。车厂依赖于供应商金字塔,车厂主要负责架构和集成。一级供应商负责为车厂提供ECU控制器。二级供应商负责给一级供应商提供软硬件模块。通过外包,汽车制造商可以专注于自己擅长的领域,并通过引入供应商的竞争机制降低开发风险和成本。多年来,这种外包模式在汽车行业运作良好。但随着自动驾驶的发展,尤其是像特斯拉这样的创新企业的刺激下,车企也开始重视自己的软硬件独立开发能力。

但在大多数情况下,无论是车厂、供应商、软件公司还是初创企业,都很难获取汽车软件的整个技术栈,尤其是源代码。你可能会遇到黑盒二进制文件,可能无法访问原始传感器数据,可能需要对汽车进行线控改装。

3)软硬件协同开发            

如上节所述,汽车上的复杂的硬件软件产品是由全球供应商、工程服务提供商和车厂按照严格的时间计划开发的。软硬件厂商必须协同一致,从而保证产品进度。而软件研发依赖于硬件样品原型(A-样->B样->C样),但原型阶段的传感器和ECU在使用中可能会出现很多问题。更重要的是,很难精确地规划这些嵌套式地开发;万一错过了期限,就要为延迟交付和未达到预期质量的交付做好准备。因此,需要准备一个足够的时间缓冲区和一个计划B来补偿这一点。

总之,身处汽车行业,你的开发会被各种供应商的问题而拖延。你将不得不在各种奇怪的随机崩溃中寻找Bug。你必须适应各种遗留代码和黑盒软件。你必须去学习各种汽车软件工程标准,并遵守他们。

结语

如果你想成为一名自动驾驶汽车工程师,尽管每家公司都有自己的招聘流程和标准,但上述挑战和软件工程的重要性是普遍存在的。最后强调一下养成终身学习习惯的重要性,我们正处在一个理论和实践都在快速发展的时代,作为一名出色的工程师,你应该不断地学习,努力提高扩展自身的技能。希望本文能够为你的职业发展提供指导。


本文翻译改编自:

https://autonomous-driving.org/2018/08/15/so-you-want-to-be-a-self-driving-car-engineer/


欢迎来到泡泡论坛,这里有大牛为你解答关于SLAM的任何疑惑。

有想问的问题,或者想刷帖回答问题,泡泡论坛欢迎你!

泡泡网站:www.paopaorobot.org

泡泡论坛:http://paopaorobot.org/bbs/


------------------------------------------------------------------

#泡泡机器人新闻社-往期回顾#

【泡泡新闻社】泡泡带你去看CES

【泡泡新闻社】自行朝向阳光移动的半机械植物;可意念控制的机器假肢;Waymo上线商用无人驾驶网约车服务;AI通过光谱预测巨型海浪

【泡泡新闻社】亚马逊推自动驾驶汽车玩具,或将开始无人车领域探索;V2X网络为开发人员提供关键的车载数据


登录查看更多
0

相关内容

自动驾驶汽车,又称为无人驾驶汽车、电脑驾驶汽车或轮式移动机器人,是自动化载具的一种,具有传统汽车的运输能力。作为自动化载具,自动驾驶汽车不需要人为操作即能感测其环境及导航。完全的自动驾驶汽车仍未全面商用化,大多数均为原型机及展示系统,部分可靠技术才下放至商用车型,但有关于自驾车逐渐成为现实,已经引起了很多有关于道德的讨论。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
最新《深度学习自动驾驶》技术综述论文,28页pdf
专知会员服务
152+阅读 · 2020年6月14日
【斯坦福新课】CS234:强化学习,附课程PPT下载
专知会员服务
113+阅读 · 2020年1月15日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
105+阅读 · 2020年1月2日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
172+阅读 · 2020年1月1日
专知会员服务
84+阅读 · 2019年12月13日
深度学习技术在自动驾驶中的应用
智能交通技术
25+阅读 · 2019年10月27日
自动驾驶技术解读——自动驾驶汽车决策控制系统
智能交通技术
29+阅读 · 2019年7月7日
自动驾驶汽车技术路线简介
智能交通技术
14+阅读 · 2019年4月25日
自动驾驶车载激光雷达技术现状分析
智能交通技术
16+阅读 · 2019年4月9日
【全职&实习- 上海】量化岗位招聘公告
量化投资与机器学习
4+阅读 · 2018年7月3日
无人驾驶汽车
劲说
5+阅读 · 2016年8月26日
Directions for Explainable Knowledge-Enabled Systems
Arxiv
26+阅读 · 2020年3月17日
Efficiently Embedding Dynamic Knowledge Graphs
Arxiv
14+阅读 · 2019年10月15日
Embedding Logical Queries on Knowledge Graphs
Arxiv
3+阅读 · 2019年2月19日
VIP会员
相关VIP内容
最新《深度学习自动驾驶》技术综述论文,28页pdf
专知会员服务
152+阅读 · 2020年6月14日
【斯坦福新课】CS234:强化学习,附课程PPT下载
专知会员服务
113+阅读 · 2020年1月15日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
105+阅读 · 2020年1月2日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
172+阅读 · 2020年1月1日
专知会员服务
84+阅读 · 2019年12月13日
相关资讯
深度学习技术在自动驾驶中的应用
智能交通技术
25+阅读 · 2019年10月27日
自动驾驶技术解读——自动驾驶汽车决策控制系统
智能交通技术
29+阅读 · 2019年7月7日
自动驾驶汽车技术路线简介
智能交通技术
14+阅读 · 2019年4月25日
自动驾驶车载激光雷达技术现状分析
智能交通技术
16+阅读 · 2019年4月9日
【全职&实习- 上海】量化岗位招聘公告
量化投资与机器学习
4+阅读 · 2018年7月3日
无人驾驶汽车
劲说
5+阅读 · 2016年8月26日
Top
微信扫码咨询专知VIP会员