2
雷锋网按:作者夹子,汽车行业资深从业者,微信公众号 Roboticists。本文为《手把手教你做无人驾驶汽车》系列第二篇。其他两篇可点击《手把手(一)》、《手把手(三)》。
无人驾驶是一个软件问题
这两年很多车企都开始做自动驾驶,无论是德系三强还是美国通用,亦或是日本两田,以及国内的各家。无一例外的,在车企的传统思维模式里,自动驾驶应该是由ACC、AEB、LKA、PPS、TSR……这一系列的功能组成。由此,车企们会说:因为需要这些功能,我们需要在车上安装一个前置毫米波雷达,需要一个Mobileye摄像头,需要超声波传感器……也就是说,按照车企们的想法,加上了这些传感器和它们的控制器,就可以完成ACC、AEB、LKA、PPS、TSR的功能,就可以完成自动驾驶。
真的如此吗?
我们也看到,另外一边,包括谷歌百度以及一些无人驾驶初创公司,并不强调这些传感器,以及它们对应的功能,而只需要一个视频就解释了一切:视频中驾驶员高高举起双手,告诉所有人,这是一套面向Level4的无人驾驶系统。也就说明这辆车的驾驶智能与人的相似。使用者不会也不需要在意是否它能够ACC,AEB,LKA,PPS,TSR……因为这些功能对于无人驾驶汽车来说都是基础得不能再基础的功能——就像你拿到一部智能手机不会问它是否可以发微信一样。对于Level4的无人驾驶而言,这是一个纯粹的软件问题,硬件的区别微不足道。
面向无人驾驶的软件方案
今年4月3日,George Hotz创立的comma.ai收到了硅谷风投Andreessen Horowitz的310万美元的种子轮投资,用以研发低成本的无人驾驶套件。笔者相信吸引投资人的并不是前文中所写的硬件平台,而是George Hotz的软件。正如Andreessen Horowitz在他的A16z主页上所写的:Software Is Eating the World,软件正吞噬全世界。无人驾驶技术的核心在于软件技术,一个由黑客所搭建的软件系统,自然与众不同。
无人驾驶汽车的开源构架
就像LAMP(Linux, Apache, MySQL, PHP)之于建网站一样,无人驾驶汽车也需要一套软件构架。从笔者了解到的信息,George Hotz使用的应该是自己开发的基于Ubuntu+Python的软件框架。这套框架的好处在于开发灵活,以及与深度学习软件库能很好得进行整合(我们知道Caffe是用python进行开发的,关于这方面后续文章会进行详述)。既然黑客George Hotz的软件神秘又高级,普通人想开发无人驾驶的软件怎么办?好消息是,这套构架有开源的选择,对于普通开发者而言这套系统完全足够做初期的研发:有社区支撑,使用人数众多,有许多开源算法可以调用,而且不需要为昂贵的开发平台支付使用费用。
笔者提供的无人驾驶软件方案也使用Ubuntu作为操作系统,使用ROS(Robot Operating System机器人操作系统)作为软件中间件,并且使用ROS自带的RVIZ进行可视化调试。
我们感受一下调试界面:
ROS的优点
(ROS起初为控制PR2机器人所研发)
ROS拥有一个很强大的社区,学术界很多项目都使用ROS作为平台发布他们算法。有很多有趣的软件包值得我们去尝试。ROS拥有基本上所有我们在《手把手(一)》中提到的传感器驱动,以及调试时用来显示实时数据的RVIZ模块,记录数据log的模块。ROS最大的优点在于它定义了标准的、符合机器人学要求的数据通信格式,这使得各种算法可以顺畅得互相协作。从传感器的驱动、到图像识别、到LiDAR数据的拼接生成地图、到传感器融合、到轨迹生成、到车辆控制。ROS在每个环节都有维护很好且易于配置的开源组件可以选择。当我们熟悉了ROS系统后,我们可以很快搭建出一套简单的无人驾驶系统。
ROS的缺点
当然,ROS有他非常直接的缺点。作为一个控制系统,基于标准Ubuntu的ROS只能说是一套好用的系统,并不是一个可靠的系统。它的通信常有丢包以及延迟不稳定的情况。所以整套系统使用ROS来进行控制,整个控制周期很难提高,且稳定性不足。当然我们也看到很多研究机构如Hitachi和BMW都对ROS在自动驾驶研究的可行性上做了研究。需要对系统进行一定的优化后,以及保证程序的通信以及运行负载不超过阈值的情况下,ROS才能作为控制系统的中间件使用。
为什么选择ROS
正如本文开头所言,自动驾驶是一个软件问题。其核心的问题是一个又一个的算法问题。ROS可以让我们专注于算法,而无需关注太多系统上的“麻烦事”。ROS合适的数据接口以及多对多的通信方式使得模块之间的解耦非常充分,使得我们在系统设计之初就可以充分得将系统拆分为几个独立的模块,并可以对各个模块进行独立的开发。顺便说一下,第一个使用ROS控制无人驾驶汽车的正是参加DARPA挑战赛的斯坦福大学。
总结
文至此,希望有志做无人驾驶汽车的研究人员可以安装一下ROS,浏览一下ROS丰富的软件包,操作一下tutorial里那只小乌龟机器人turtlebot。
不用怀疑,你离无人驾驶汽车的开发又近了一大步。
注:ACC(Adaptive Cruise Control自适应巡航控制)
AEB(Autonomous Emergency Braking 自动紧急制动)
LKA(Lane Keeping Assist 辅助车道保持)
PPS(Pedestrian Protection System 行人保护系统)
TSR(Traffic Sign Recognition交通标志识别)
雷峰网原创文章,未经授权禁止转载。详情见转载须知。