聊聊自动驾驶
身处汽车行业,深感汽车行业的技术革新是迅速的,这次只拿自动驾驶聊聊个人的一些想法和观点,因自动驾驶作为当前热点及未来汽车发展的方向,我们有必要拿出来整理分析一波。
目前自动驾驶的很多技术其实在机器人领域很早就已出现和应用,比如导航定位、机器视觉等,因此自动驾驶可以算是机器人领域应用的一块分支,所以我们也不必过分夸大它有多牛掰。因自动驾驶系统的实验最早可追溯到1920年,而真正意义上的第一辆自动驾驶汽车也在1977年由日本的Tsukuba Mechanical Engineering Laboratory开发出来。随着时代的变化,该技术也得到了快速的发展和推广,Waymo在2018年10月份曾透漏其在自动驾驶的测试里程已超过16000000km并以每月1600000km的速度增长,在12月Waymo成为了美国第一家商业化自动驾驶出行服务的公司,这样的技术进步和取得的成果是着实不易的,当然我也对自动驾驶真正的商业化持保守态度,但在这个AI、机器学习、大数据、车联网盛起的年代(个人认为这些虽是未来方向,但过去几年都有被过度炒作的嫌疑),其是未来出行方式的必然选择是不争的事实,很多零部件供应商和传统OEM都在自动驾驶领域积极部署以期抢占先机,前段时间看到Tier1的零部件供应商“BOSCH豪掷10亿欧元在德建立半导体工厂从而掌握自动驾驶芯片化的核心竞争力”的消息,个人对该消息其实是不Care的,因BOSCH在自动驾驶解决方案的研究其实很早就开始并测试验证,如果哪个零部件供应商或OEM不在自动驾驶领域方面进行规划和部署反而是一种不正常。
一. 自动驾驶的分级
对自动驾驶的分级,全球汽车行业公认两个组织提出的:美国高速公路安全管理局(NHTSA)和美国机动车工程师学会(SAE),但在这两者中又以按SAE的分级标准居多,SAE将自动驾驶层级划分为6级,如下:
对于各个等级的详细介绍,网上有很多,我这里不再详细赘述。
二. 自动驾驶的相关技术
无人驾驶技术涉及多技术集成和多学科交叉,一无人驾驶系统包含多个传感器:激光雷达、RGB和深度摄像头、GPS、长距雷达、短距雷达、IMU等,同时又需整合多个软件模块(包括路径规划、避障、定位、图像识别和环境建模等),此外还需要强大的硬件基于软件功能实时处理海量的传感器信息并实现对车辆的控制,因此对系统设计和软硬件资源都提出了更高的要求。
无人驾驶系统首先获取并处理所处环境信息,基于数据和算法确定当前所处位置,并根据所设定的目标规划一条合理最优的运动路径,从而驱动车辆向目标移动并规避移动过程中的障碍物或对紧急情况采取必要的安全措施,因此所涉及的技术包括:导航定位、路径规划、图像识别、机器学习和传感器融合等相关技术。
下面选三个方面大体聊聊
1. 导航定位技术
导航定位技术是自动驾驶系统的关键和基础,它能反映车辆自主性和智能性,在自动驾驶领域, 导航定位主要采用SLAM技术。SLAM技术的实现途径有视觉SLAM(VSLAM)和激光雷达SLAM(Ladar-SLAM),激光雷达SLAM是目前最稳定、最可靠且性能最高的SLAM方式,在无人驾驶领域大都采用基于激光雷达的SLAM技术。SLAM当前实现的方式大致有两类:基于概率模型和非概率模型的方法,其中基于概率的方法是当前研究的重点,基于概率模型的算法主要有基于卡尔曼滤波的SLAM、基于粒子滤波的FastSLAM等。
2. 路径规划技术
路径规划主要有全局和局部路径规划两种,全局路径规划需要依赖已建立的环境地图(即先验地图),其作用就是建立一条从起点到目标点的全局路线;而局部路径规划则是根据全局路径基于动态环境所进行的一种路径规划技术,从而适应存在未知障碍物或障碍物存在变化的环境。
3. 传感器融合技术
自动驾驶车会载有激光雷达、RGB-D深度摄像头、超声波等不同位置的多个同类或不同类的传感器。而为了对各个传感器所获取的局部环境信息加以综合,形成对环境完整准确的描述,必须采用多传感器融合技术来克服单个传感器所具有的局限性。多传感器融合技术主要有基于参数推理的贝叶斯推理、基于模糊集理论的方法、基于神经网络法及卡尔曼滤波法等,其中应用最为广泛的多传感器融合技术是卡尔曼滤波法。
三. 所需技能Get
从上所述可知自动驾驶所涉及的学科和技术很多,但作为个人应该在哪些方面进行个人技能的提升,从而能够成为一名自动驾驶工程师呢?我这里只列出四个方面的技能要求:
1. 扎实的数学功底
当你一脚踏入机器人和无人驾驶领域,你会经常接触到诸如贝叶斯滤波、卡尔曼滤波、粒子滤波、高斯分布等一系列让你怀疑人生的专业术语,而这些原理的推导往往需要扎实的线性代数和概率统计功底,此外强大的数学基础是进行算法设计和优化的基础,越来越发觉线性代数、概率统计、数值计算在当前AI、机器学习和大数据盛行时代下的重要性,因为当前很多问题最终都可通过概率统计和线性代数进行建模和求解,曾看到某位大神这么说过“优秀的工程师和科学家在职业生涯中要学至少五次线性代数”,看到这,我等后辈是不是心凉了很多,但大家莫慌,让我们撸起袖子就是干!!!
2. 过硬的编程技术
首先,发表个人观点:在可预见的未来,C是最好的语言,Linux是最好的操作系统。当然这不是说让大家有选择性的选择自己应学习哪种编程语言,因为具体到工作则需要兼备多种编程语言或跨平台的开发能力,每个人需要根据自己的实际情况去学习,例如嵌入式开发毫无疑问优先选择C,而算法开发则可能会使用C++、Python或Matlab/Simulink,而不同的应用又可能依赖于不同的平台才能运行,例如很多自动驾驶项目都基于ROS做的算法和应用开发,而ROS作为中间件则依赖于Linux,因此具体情况具体分析,但多种编程语言的掌握是必须的。
3. 软硬件开发能力
掌握编程语言是进行软件功能开发的基础,同时也会为我们查问题提供了保障,而软件功能则是需求的实现,如何将一复杂的系统需求通过编程的手段实现则是一种能力。此外,软件功能的实现最终需依赖于硬件,对于硬件的设计及工作原理的掌握也是不可或缺的。
4. 熟悉汽车电子的开发流程
IT行业的软件开发不同于汽车软件的开发,汽车行业有诸多的标准要遵循且还有诸多的测试验证要求,在可靠性和安全性方面有着更高的要求。汽车行业需要可靠的软件设计同时还需要满足嵌入式的需求,而这些要求的实现需要高质量的代码、充分的测试覆盖度和丰富的批产经验等方面来支撑。
因此自动驾驶作为一门交叉学科,其涉及的方面很多,每个人不可能包揽每项的冠军,而应选择成为某一领域的专家。
四. 普及依然漫长
关于自动驾驶,正如英国 Millbrook 试验场首席自动驾驶汽车工程师 Peter Stoker所说:“如今,有关自动驾驶的炒作从来没有停止,但我们必须明确告诉大家,自动驾驶汽车并不会在未来几年中大量出现在人们的生活中。而且,即使自动驾驶汽车最终真正到来,也一定是先在有限区域中进行有选择性的逐步推广,比如“货物运输”和“最后一英里通勤”等行驶路线较为固定的行驶场景。”因此技术的普及依然需要很长的时间,至于原因,我这里只摘三个方面进行说明:
1. 系统的可靠性
这一点应该是最重要的一点,因安全是汽车行业的生命线,自动驾驶要想走向实际应用,其最终必须能在复杂的环境中保证系统的稳定性并提供足够的驾驶安全,而在这方面我认为很多自动驾驶公司其实都还没做到这种地步。
2. 成本限制
自动驾驶汽车功能的实现需要依赖于不同或相同的多个传感器支持和强大的硬件实现,以必不可少的激光雷达为例,车用激光雷达行业先导公司Velodyne推出的激光雷达具有测量精度高、性能优越的特点,同时具有丰富的产品线,包括16线、32线及64线等产品,但同样价格也是高昂的。
因此可想而知,单单激光雷达的成本就已很高,如果再加上长短距雷达、摄像头等传感器和硬件,整车的成本无疑是高昂的。
3. 充分的实验验证
自动驾驶汽车功能的测试验证需要足够且丰富的样本数据,样本数据的采集及算法的训练需要耗费长期且大量的时间积累,如下是2016年几大零部件供应商和OEM在该方面测试的里程数汇总。
最后分享BOSCH有关自动驾驶两个短视频
The First:
The Second: