过完年被派去德国分公司的 Robotic Drive 团队工作学习了三个月,简单聊一聊从这个项目学到的东西,以及大数据是如何支撑自动驾驶研发的。

首先说一说大数据的三个 V: Volume, Variety, Velocity。大数据无非就是要解决这三个 V 的问题,而自动驾驶的研发主要问题在于前两个,所以自动驾驶的落叶深根才 会来的这么晚,才会在大数据和云技术逐渐成熟之后才似乎表露出它在苦苦等待着什么。

那如何理解自动驾驶研发中的这两个 V?在此之前我想先说明一下什么是自动驾驶研发(Research & Development)。谈到自动驾驶,很多人的第一反应就是驾驶员不用碰方向盘,不用踩刹车油门,车辆完全自动地驶向目的地,途中会自动转弯变道,加减速,等红灯,避让障碍物,等等。其实这是自动驾驶的最终应用了,是研发成果,这些可以参照自动驾驶的五个等级,详细说明了车辆自动化驾驶的程度如何定义,在此不赘述了(慕尼黑的宝马博物馆里有五级自动驾驶的介绍,这算赖皮吗?)。我们必须清楚,这个过程不是 R&D,这个时候已经拥有了一套上线的自动驾驶系统了。

那到底什么是 R&D ?就是研发这个系统的过程。跑在路上的不是一辆辆普通家庭的私家车,而是车企的测试车。测试车浑身上下装满了各种摄像头、传感器,不停记录着大量的路况数据,这些数据给算法和数据科学家提供了庞大的研究样本,通过这些样本再利用人工智能和深度学习的技术,最终开发出一套自动驾驶的终端系统。

举个例子,一个最低等级的自动驾驶场景就是,车头有检测物体的传感器, 当发现车体前方30米有物体出现时就自动刹车减速。实现这个功能的系统就非常简单了,只要在车载系统上配置传感器的接口,读取传感器的数据,然后根据是否有障碍物来执行是否刹车就可以了。这就是最简单巡航功能,也许你都不认为这已经是自动驾驶了。

现在你知道自动驾驶的研发需要有一台测试车去收集路况数据,由此也就引出了前两个 V:

  1. Volume - 海量的数据
  2. Variety - 各种不同格式的数据

先来说说第一点。为了使自动驾驶系统能够适应各种不同场景,包括天气、路况、交规等等,车企往往需要在全球各地在不同季节和天气下跑测试车,如此大量地采集数据没多久就会产生 PB 级的数据量。如此海量的数据,如何存储?如何分析?关键是,如何高效?比如,一台测试车跑完一次测试,要将存储在车上的 15TB 的数据导入本地数据库存储以待分析,用 wifi 连接然后复制粘贴吗?如果传输速率是 100MB/s,那就需要 1.74 天,如果每台测试车都需要那么久,这个效率根本无法忍受。

再说说第二点。目前比较流行的车载传感器数据格式有 ROSbag, MDF4 和 ADTF,传统的、现有的分析工具,都是特定的格式有自己的工具和库提供分析,有些仅仅基于 Windows,有些是 C++ 库有些是 python 库,可谓百花齐放。如果数据分析和算法团队要针对每种格式都开发一套深度学习算法,那这个研发复杂度和效率简直无法直视了。

基于以上提到的和许多还没提到的问题和难点,Robotic Drive 项目应运而生了。Robotic Drive 项目提供的是一整套支撑自动驾驶研发的大数据架构解决方案,其组件包括 GDDL,Ingestor,Analyzer,Trainer,Optimizer,Tester,DLM,等等。接下来我们一个个来看。

  1. GDDL 全称 Geographical Distributed Data Lake,是基于 MapR 搭建的一套大数据平台。建立按地理布局的数据湖的目的,就是为了能让数据的上传下载更加快速,研发团队需要处理的是动辄几十 GB 的数据,需要最大限度地降低数据传输消耗,让世界各地的测试车能上传数据到当地的服务器,工程师也能从当地的服务器直接操作数据。GDDL 项目为了实现自动化部署,通过 ansible 配置了完整的云上 ansible 部署脚本,支持在 Azure 和 AWS 上的自动化部署,当然还包括 on-premises 的部署。

  2. Ingestor (RDI, Robotic Drive Ingestor) 如之前例子所说,如何将测试车上大量的数据快速迁移到大数据系统内,是个很棘手的问题,Ingestor 项目就是为了处理这个问题而诞生的。除了提升传输速度,Ingestor 还肩负了简单的数据处理工作,包括杀毒、添加头信息,还有数据传输的监控和日志等。接下来说说 RDI 是如何工作的。

测试车上装有有许多 sensor 并通过车上内网连接在一起,数据保存在车载存储里,RDI 在车载主机(一个或多个)安装一个叫做 CDI(Car Data Ingestor)的客户端程序,通过这个程序来侦测车到 MapR 的连接,然后手动启动数据传送(CDI 主要完成数据传输的工作,多线程)。这里再介绍一下数据迁移的过程:测试车内的存储被设计为可插拔的,当一辆测试车完成测试任务的时候,工作人员可以将车载存储卸下,然后通过物流运送到数据迁移点(测试车也可以直接开到就近的迁移点,卸下并换上新的车载存储)。之后测试车就可以继续新的测试行驶,而数据迁移工作可以独立进行。当车载存储接入 GDDL 的时候,CDI 就被激活了,于是工作人员就可以启动数据迁移了。此外,RID 还提供可视化界面来监控数据传输的过程,状态/性能,等等。

未完待续。。。


参考资料: