陈桦 编译自 Voyage官方博客
量子位 报道 | 公众号 QbitAI
打造一辆无人车,究竟需要哪些软件和硬件?
无人车创业公司Voyage今天在官方博客上发文,展示了自家无人驾驶出租车Homer的技术方案,从传感器、计算硬件到算法都有涉及,这是量子位近期见过最详细、最全面的无人车技术解读。
Voyage是从Udacity拆分出来的,而Udacity的创始人Sebastian Thrun曾任教于卡耐基梅隆大学和斯坦福大学,还领导过Google无人车的开发。
以下内容,编译自Voyage官方博客:
感知、规划、行动
自动驾驶汽车遵循的传统范式包括感知、规划和行动。
汽车通过激光雷达、雷达和摄像头来感知周围环境,基于传感器输入和其他环境信息来规划从A点到B点的路线。
随后,汽车将采取行动,通过操控方向盘和油门刹车来执行规划。
为了让汽车具备感知、规划和行动(SPA)能力,我们需要复杂的硬件和软件系统,让软硬件协调工作。
你或许非常熟悉某些表层元件,例如摄像头和激光雷达,但同样重要的是,所有元件需要形成一个整体。这将是本文的核心。
Voyage的架构
下图展示了Voyage无人驾驶出租车的结构,即一种标准化的多传感器无人驾驶汽车架构。其中,每个元件都扮演重要的角色。
今天,我们将介绍计算、动力和电传线控技术。
计算
计算技术服务于SPA范式的“规划”阶段。
Voyage的首辆无人驾驶出租车Homer“大脑”是千兆AORUS主板,搭载了英特尔酷睿i7-7700k“Kaby Lake”四核2.4GHz处理器,以及英伟达Titan X GPU。
为了确保传感器获得足够大的数据通道,这台机器集成了64GB RAM,以及3TB大容量存储。这一存储系统分布在3块固态硬盘上,以提供冗余备份。
这一强大的计算机设备运行Ubuntu Linux,利用Docker容器来管理系统环境,而机器人操作系统(ROS)则可以将所需的感知、运动规划,以及节点控制功能快速原型化。
ROS是一种强大的机器人中间件,将消息传递、计时、数据结构(例如点云、相机帧和障碍物)、线程和数据记录等复杂工作抽象化。
尽管Ubuntu和ROS并不是无人驾驶汽车所需的实时操作系统(RTOS),但这仍提供了非常强大的工具,可以用于算法的原型化,快速实现在现实世界中的测试。将纸面上的概念以最短时间变成上路的汽车,这一点对Voyage非常重要。而这些工具带来了帮助。
ROS节点本质上是小型程序,可以独立运行,但相互之间也有很多连接。
其中一个节点可能负责从以太网接口读取来自Velodyne激光雷达的原始数据,并将其转换为PointCloud2消息。这条消息由三维点阵及其元数据构成,随后将在ROS网络上发布,而其他节点都可以使用这些数据。
作为使用者的一个节点负责将实时输入的点云匹配至现有的本地化地图,而另一个节点可能会运行集群算法,探测并追踪对象。
随后,这些节点会将自身的输出发布至网络,供运动规划算法使用。
从较高的层面来看,这正是Voyage汽车的运行方式。
数据来自原始传感器(激光雷达、雷达、RTK GPS、摄像头,以及CAN总线消息),由大量的小节点进行处理,这些小节点相互通信,最终通过电传线控将实际控制信号输出至油门、刹车和方向盘。
△ Voyage的车在采集数据
在开发过程中,使用ROS最有价值的一个方面是数据的记录和回放。
当节点通信时,利用特定通道,一些“主题”可以被自动记录至磁盘,供进一步分析。实际上,只要Voyage的汽车上路行驶,我们就可以记录每秒的数据。
这些主题有自己的名称空间,从而避免数据冲突的可能性。
这也可以提供详细的运行日志,帮助我们了解汽车的每个部分在任何给定时刻是如何思考的。
我们可以在办公室电脑上重现任何状况,而不必开车上路,期待同样的情况再次发生。于是,我们可以在办公室里测试新算法,而不用坐在车里。这节约了工程师的大量时间。
一般而言,Homer和Voyage其他产品中的计算任务都是在CPU中完成的。
这是因为,大部分任务都是线性的,在解决下一问题之前需要找到当前问题的解决方案。例如,激光雷达数据中出现的这些新点属于什么障碍物?在下次右转之前,我是否应该左转?
多线程技术也是一种选择,并被广泛用于大数据处理。对于某些问题,模拟人类智力的方法或许可以带来更好的解决方案,而这需要大规模并行计算。这里我们就用到了Titan Xp GPU。
Voyage喜欢使用机器学习技术。如果问题可以由神经网络来解决,那么就很可能会用神经网络。
我们已经使用深度学习技术来探测交通灯状态,并获得了很好的准确性。我们可以在激光雷达的大量数据点中识别出障碍物。利用场景分类技术,我们可以将建筑物与道路区分开。我们可以使用来自端到端网络的图像,直接生成方向盘角度。
尽管GPU并不是所有问题的合适解决方案,但确实是一款强大的工具,可以调动我们工程师的力量和创造性。
动力
整个系统由福特Fusion的12V汽车电池来驱动。
该电池将动力提供给“动力分配单元”(PDU),PDU是一款非常智能的继电开关,集成了9个不同的12V接头。它有自己的脚本语言,可以通过编程去打开或关闭单个开关。
作为“大脑”的Linux Box通过110V逆变器连接至PDU的一个开关,从而获得电力。
只有当汽车行驶时,PDU才会打开。在福特Fusion混动车中,如果汽车检测到司机不在座位,那么车身控制模块将会在30分钟非行驶状态后将车辆自动熄火。进而,PDU和Linux Box也将被关闭。
这样的机制给工程师带来了不便。
为了解决自动关闭的问题,我们简单地改变了车辆的出厂配置。我们调整了其中一个模块,让福特Fusion混动车可以无限制行驶。
通过开源工具FORScan和基于FTDI芯片的OBD-II工具,我们将特定的CAN消息发送给车身控制模块,并改变了原始出厂设置,使车辆不会自动熄火。
借助这些工具,我们也禁掉了烦人的“鸣笛”报警。以往,如果车主将钥匙丢在车中就去关车门,那么车辆就会发出这种报警,现在不会了。
电传线控
在获得计算和动力之后,我们要如何通过程序去操控车辆?
在我们的SPA范式中,“行动”是如何实现的?
答案就是电传线控模块。
以最简单的方式来看,电传线控模块就是传感器/计算机与执行器之间的界面。
在获得传感器的输入数据之后,这个模块可以让计算机发出指令(最终是以CAN总线消息的形式),并让这些指令(包括转向和刹车等)在汽车上得到执行。
执行器包括油门踏板、刹车踏板和方向盘,所有这些都通过Dataspeed电传线控套装来连接。
在当代汽车中,大部分执行器已完全脱离了司机的输入。
例如,当你踩下油门踏板时,你只是移动了两个电位计,将原始的0到5V电压信号传送给引擎控制模块(ECM)。在ECM内部,踏板位置信息被转换为对应的引擎扭矩,而这个扭矩可以决定火花定时器的推进,或是通过开启油门来增加气流。
用于驱动加速踏板的电传线控模块连接了踏板总成和ECM。当系统被关闭时,踏板的原始电位计会将0到5V信号发送给ECM。
然而,当电传线控模块启用时,新信号将基于Ubuntu/ROS计算机产生的指令。
无人驾驶汽车是一系列复杂而互联的系统。希望本文能揭示更多关于无人驾驶汽车如何运转的信息。
相关链接
原文:
https://news.voyage.auto/under-the-hood-of-a-self-driving-car-78e8bbce62a6
ROS:
http://www.ros.org/
FORScan:
http://www.forscan.org/
Dataspeed线控套装:
http://dataspeedinc.com/
【完】
一则通知
量子位读者5群开放申请,对人工智能感兴趣的朋友,可以添加量子位小助手的微信qbitbot2,申请入群,一起研讨人工智能。
另外,量子位大咖云集的自动驾驶技术群,仅接纳研究自动驾驶相关领域的在校学生或一线工程师。申请方式:添加qbitbot2为好友,备注“自动驾驶”申请加入~
招聘
量子位正在招募编辑记者、运营、产品等岗位,工作地点在北京中关村。相关细节,请在公众号对话界面,回复:“招聘”。
△ 扫码强行关注『量子位』
追踪人工智能领域最劲内容