在自动驾驶领域中, 数据平台是一个很重要的核心平台, 无论是算法的改进,还是 bug 的解决,场景的重现,以及程序的调试都需要数据平台提供的多维度数据来驱动。本文分析了两个比较完整的开源项目:Apollo Dreamview 和 Uber Streetscape,他们的设计思想并不完全相同,各有优缺点,我会通过三篇文章来介绍他们的这些不通点。
数据平台工作流程
自动驾驶汽车每天产生的数据量在 PB 级规模的,这对数据的处理和展示退出了更高的要求。所以数据平台一般来讲有:数据转换,数据上传,数据预处理,数据存储,数据实时解析,数据展示等几个步骤。
- 数据转换 自动驾驶汽车传感器众多,每时每刻都会产生大量的数据,我们需要实时对数据进行记录存储。这就要求讲传感器这种流式数据转换成结构化的数据,一半已文件存储在车端。
- 数据上传 但是车辆可存储的数据也是有限的,我们需要将数据上传到云端,这时我们需要对结构化数据进行解码压缩,减少体积,然后通过传输通道传送到云端进行存储和处理。
- 数据预处理 新上传的数据,如果想要进行下一步的实时解析和回放,还是需要大量的计算,所以我们需要对数据进行预处理。比如这里我们可以把摄像头数据进行视频编码,点云数据进行过滤处理,这些处理后的数据,都讲为数据的实时解析提供帮助。
- 数据存储 如果每台车每天都会产生 PB 级的数据,那么很快我们的存储空间就会用尽,因为我们会对重点的数据进行转存,放在价格比较便宜的云对象存储中,并定期进行清理。
- 数据实时解析 对于所有保存的数据,我们的目标就是进行实时的解析使用,这里仿真、算法、测试、开发调试,都需要用数据平台实时解析的技术来协助我们的工作。本文也是重点介绍实时解析阶段的技术脉络。
- 数据展示 实时的 3D 展示大量的数据,并将数据可视化是个很复杂的工作,需要设计一套高性能,可灵活组合,快速复用的软件框架。方便仿真、HMI、数据平台灵活定制,实时展示数据。
开源方案
从上面的描述可以看出数据平台存在着很多步骤,其中重点的基础技术包括:数据生产,数据实时解析,3D 渲染思路三大块。我选取了 2 个开源的自动驾驶数据展示项目:Apollo Dreamview 和 Uber Streetscape. 他们都有优秀的架构设计,但一些地方的设计理念又大不相同。接下来,我会通过三篇文章来逐步的介绍这两大开源平台的一些技术细节。
这个两个开源项目整体结构如下:
Streetscape
-
数据生产:
Xviz Converters
主要负责讲传感器数据转换为数据平台后端可解析的数据格式,已文件存储在硬盘上。 -
数据实时解析: Streetscape 的后端是一个
xviz server
,他负责为前端提供实时的数据流,同时通过xviz provider
将 xviz 数据文件进行解析和相应的逻辑处理。当收到前端数据请求后,xvize server
会维护请求的web socket并,以响应式编程的方式推送所需的数据给前端系统渲染。 -
3D 渲染: Streetscape 底层使用了一个 WebGL 的渲染库deck.gl来渲染 3D 场景,
deck.gl
主要思想是把数据分层,可分别动态更新没一层的数据,从而提高灵活性和性能。Streetscape 主要实现了 xviz 数据层属性到 layer 属性的转换,并实现了 3D 渲染的 React UI。
Dreamview
-
数据生产: 在Apollo中,有一个通用计算框架Cyber, 这是个计算调度和数据分发系统,底层是根据eProsima公司的开源项目Fast-DDS进行开发。其中数据生产的工具就在cyber其中,使用record工具可以将cyber所收集的所有硬件与软件数据记录到文件当中,文件内的数据proto的二进制内容,可存储在硬盘上进行回放。
-
数据实时解析: 当使用cyber的reader工具来读取record数据文件后,数据就会解析成原始数据,并通过Cyber计算框架分发到订阅的channel中,其中
simulation world service
订阅了它所关心的topic,然后将所有实时接收的数据处理转换到一个world
的数据结构中,次结构用于前端请求查询来使用。 -
3D渲染: Dreamview使用了轮询的方式向
Dreamview backend
请求数据,获取到的数据会使用React
状态管理组件Store
存储起来,然后各个UI组件通过观察绑定的方式更新组件页面。对于3D渲染部分各个UI组件都是引用three.js进行渲染,在渲染效率和整体性能上并不如Deck.gl高。
总结
自动驾驶数据平台作为自动驾驶开发流程中核心和基础的一环,对加速自动驾驶数据闭环驱动和迭代开发有支撑作用。一个好的数据平台系统不仅可以满足各个业务系统的使用,同时也成为一个重要的量化工具,来证明自动驾驶软件系统的迭代改进。接下来我会通过两篇文章具体来分析Streetscape
和Dreamview
的具体实现和优缺点分析,请大家敬请期待。