Voyage Auto 是硅谷一家自动驾驶出租车初创公司,由专注机器学习、人工智能等方面的在线培训机构 Udacity 于 2017 年 4 月成立,在无人驾驶领域,Voyage 将与谷歌、特斯拉、Uber 展开竞争。目前,Voyage 已完成首轮种子融资和测试车辆外观研发。
自动驾驶汽车有自己的行动范式,它会先进行通过激光雷达、雷达和摄像头等传感器进行感应,随后利用传感器信息和其他情境信息完成路径规划并按规划控制车速和方向完成任务。
在业内,这一过程被称之为 SPA (Sense,Plan & Act)。当然,想顺利完成一整套 SPA 可不容易,它需要复杂且能协同工作的软硬件系统支持。
经过媒体连续的报道,外界对自动驾驶汽车的零部件(如激光雷达和视觉摄像头)已经相当熟悉,但将这些零部件进行完美的整合也同样重要。而这也是本文章要着力解读的。
上图是 Voyage 自动驾驶出租车的“解剖图”,与其他的多传感器自动驾驶汽车一样,Voyage 的架构属于标准化设计,每一个零部件都扮演着自己相应的角色。
今天,我们就来详细剖析 Voyage 自动驾驶出租车的算力、动力和线控驾驶套件。
在整个 SPA 过程中,计算是规划(P)的主要驱动力。执行该任务的是来自技嘉的 AORUS 主板,它搭载了英特尔酷睿 i7–7700K 8核处理器(主频 2.4GHz),GPU 则为英伟达 Titan X。作为 Homer(Voyage 首台自动驾驶汽车)的大脑,它为传感器搭建了一个顺畅的数据管道。为了获得一定的冗余度,它还配上了 64GB RAM和 3块 1TB 的固态硬盘。
这个强大的大脑运行了 Ubuntu 系统,并利用 Docker containers 来管理系统环境。在这里,ROS 操作系统则负责进行快速的原型感知、运动规划和节点操纵。
ROS 是一套多用途机器人中间件,它可以将复杂的信息传递、时间、数据结构(如点云等)、线程和数据记录抽象化。
不过,Ubuntu 并不是一个专为量产版自动驾驶汽车而生的实时操作系统,它更擅长于设计原型算法并在真实环境中快速完成算法的测试。有了这些工具,研究人员在白板上记下的灵感才能更快的出现在道路上。
独立运行的 ROS 节点实质上是一个个小型程序,不过它们通常会有许多联系。
举例来说,一个节点可能会负责通过以太网接口读取来自激光雷达的原始数据,随后它会将其转化为 PointCloud2 信息。这条信息包含一组三维点和它们的元数据,它可以通过 ROS 网络“分发”出去,其他节点都可进行调用。
而调用这条信息的节点,可能会负责将得到的点云数据插入现有地图来完成定位,其他节点则可能会担负起运行算法来探测或追踪物体的任务。完成了各自的任务后,这些节点就会将相关信息公布在 ROS 网络上供动作规划算法等大型程序调用。
从整体来看,这就是 Voyage 自动驾驶出租车的运行方式。传感器(激光雷达、雷达、RTK GPS、摄像头、CAN 总线)负责采集原始数据,随后一系列小型节点对数据进行处理并输出控制信号,方便线控驾驶套件对油门、刹车和转向系统进行控制。
需要指出的是,在开发阶段使用 ROS 最有价值的部分是数据记录和回放。
当节点相互交流时,它会使用特殊的通道,而这些交流时的数据会被自动记录下来供后续分析。事实上,只要 Voyage 的自动驾驶出租车上路,它们行驶时每一秒的数据都会被记录下来。由于节点交流时使用了特殊的通道,因此就不会发生数据混乱,同时研究人员还能轻松对车辆进行分块分析。
有了这一利器,Voyage 就能在办公室重新模拟任何路况,原来那种驾驶汽车在路上“闲逛”、期待特定情况出现的测试方法一去不复返了。此外,研究人员还可直接在办公室测试新算法,因此节省了大量时间。
通常来说,执行车辆计算任务的都是 CPU,这是因为此类任务大多是单一的,目的是在遇到下一个问题前找到一个解决方案。同时,CPU 的多线程能力较强,它可以处理大量的数据。不过,有些问题还需要人工智能技术来处理,因此就不得不提到英伟达的 Titan X GPU。
只要你关注过自动驾驶汽车,肯定听说过人工智能在其中的应用。
Voyage 也十分青睐机器学习,如果一个问题能用神经网络来解决,它的团队肯定会钻研出突破口。眼下,Voyage 就在使用深度学习探测交通信号灯的变化情况,准确度已经相当高。
同时,分辨障碍物、区分建筑物和道路、确定转向角度等工作也由深度学习技术担纲。虽然 GPU 并不适用于所有工作,但它确实是工程师的得力助手。
为 Voyage 整套系统提供动力的是搭载在福特蒙迪欧上的原版 12V 车载电池。这块电池会将电力输送到配电装置上去(PDU,拥有 9 个 12V 连接器的继电器开关)。
这套系统有自己的编程语言,每个开关都可以独立控制。同时,PDU 上还连接着一个 110V 的换流器,它能为 Linux Box 供电。
要想让 PDU 保持工作状态,车辆就不能停。Voyage 用的测试车是蒙迪欧混动版,如果车辆探测到驾驶员不在座位上,车身控制模块就会在 30 分钟后切断点火继电器。这样一来,PDU 和 Linux Box 也无法幸免,这样的设计确实让工程师们挠头。
为了“干掉”这个自动熄火功能,Voyage 的开发人员直接更改了该车的出厂设置。它更换了其中一个模块,以便让车辆能一直保持运行。同时,它还关掉了车门锁住时的报警声。
Voyage 认为,在整个 SPA 流程中,线控驾驶套件代表的是 Act。简单来说,线控驾驶套件就是传感器/计算装置和驱动器的接口。
有了这个套件,计算设备完成数据处理后发送的指令就能得到贯彻执行,而上述所讲的驱动器就是油门、刹车踏板和方向盘等。
在现代车辆上,大多数的驱动器都已经与驾驶员的输入脱钩了。举例来说,当你踩下油门,其实只是动了两个电位器,它会发送 0-5V 的电压信号给引擎控制模块(ECM)。经过 ECM 的处理,驾驶员的意图才会被转换成相关信号发送给引擎并带动车辆完成加速等动作。
线控驾驶套件正处在 ECM 和油门踏板之间,如果这套系统停止工作,踏板上的电位器就会给 ECM 发送信号。
自动驾驶汽车是一个原件互相交织的复杂系统,Voyage 希望通过一系列讲解来提高技术的透明性以便推动此类车辆尽快普及。
(原文发表于Medium ;雷锋网编译)