自动驾驶-数据平台简介

在自动驾驶领域中, 数据平台是一个很重要的核心平台, 无论是算法的改进,还是 bug 的解决,场景的重现,以及程序的调试都需要数据平台提供的多维度数据来驱动。本文分析了两个比较完整的开源项目:Apollo Dreamview 和 Uber Streetscape,他们的设计思想并不完全相同,各有优缺点,我会通过三篇文章来介绍他们的这些不通点。

数据平台工作流程

自动驾驶汽车每天产生的数据量在 PB 级规模的,这对数据的处理和展示退出了更高的要求。所以数据平台一般来讲有:数据转换,数据上传,数据预处理,数据存储,数据实时解析,数据展示等几个步骤。

  • 数据转换 自动驾驶汽车传感器众多,每时每刻都会产生大量的数据,我们需要实时对数据进行记录存储。这就要求讲传感器这种流式数据转换成结构化的数据,一半已文件存储在车端。
  • 数据上传 但是车辆可存储的数据也是有限的,我们需要将数据上传到云端,这时我们需要对结构化数据进行解码压缩,减少体积,然后通过传输通道传送到云端进行存储和处理。
  • 数据预处理 新上传的数据,如果想要进行下一步的实时解析和回放,还是需要大量的计算,所以我们需要对数据进行预处理。比如这里我们可以把摄像头数据进行视频编码,点云数据进行过滤处理,这些处理后的数据,都讲为数据的实时解析提供帮助。
  • 数据存储 如果每台车每天都会产生 PB 级的数据,那么很快我们的存储空间就会用尽,因为我们会对重点的数据进行转存,放在价格比较便宜的云对象存储中,并定期进行清理。
  • 数据实时解析 对于所有保存的数据,我们的目标就是进行实时的解析使用,这里仿真、算法、测试、开发调试,都需要用数据平台实时解析的技术来协助我们的工作。本文也是重点介绍实时解析阶段的技术脉络。
  • 数据展示 实时的 3D 展示大量的数据,并将数据可视化是个很复杂的工作,需要设计一套高性能,可灵活组合,快速复用的软件框架。方便仿真、HMI、数据平台灵活定制,实时展示数据。

开源方案

从上面的描述可以看出数据平台存在着很多步骤,其中重点的基础技术包括:数据生产,数据实时解析,3D 渲染思路三大块。我选取了 2 个开源的自动驾驶数据展示项目:Apollo Dreamview 和 Uber Streetscape. 他们都有优秀的架构设计,但一些地方的设计理念又大不相同。接下来,我会通过三篇文章来逐步的介绍这两大开源平台的一些技术细节。

这个两个开源项目整体结构如下:

Streetscape

Streetscape structure

  • 数据生产: 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。

Streetscape UI

Dreamview

Streetscape structure

  • 数据生产: 在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高。

Dreamview UI

总结

自动驾驶数据平台作为自动驾驶开发流程中核心和基础的一环,对加速自动驾驶数据闭环驱动和迭代开发有支撑作用。一个好的数据平台系统不仅可以满足各个业务系统的使用,同时也成为一个重要的量化工具,来证明自动驾驶软件系统的迭代改进。接下来我会通过两篇文章具体来分析StreetscapeDreamview的具体实现和优缺点分析,请大家敬请期待。

最近的文章

图解vllm-原理与架构

2024年,我们已经进入大模型全面爆发的时代,作为大模型很重要的工程实践: 推理服务,则成为熟悉和了解大模型工程的关键一环。vLLM是23年开始出现的一款较为优秀的大模型推理框架,很值得学习和研究,我将发布一系列的Blog,针对近期学习vLLM的主要内容,通过图解的方式从工程和算法角度进行总结。本篇文章主要关注于vLLM的原理与整体架构,构建一个全貌,后面的文章会分层逐步细化代码具体实现。1. Transformer架构模型与KVCache目前大模型都是基于Transformer架构进...…

继续阅读
更早的文章

NodeJS观察者模式库(observable-fns)

平时在开发过程中,经常会用到设计模式(Design pattern), 它是前人总结出的宝贵经验和经典实践。常用的设计模式有三类:创建型模式(工厂模式、单例模式、建造者模式)、结构型模式(装饰器模式、适配器模式、代理模式)、行为型模式(监听者模式、观察者模式)。本文介绍一种观察者模式的实现库:Observable-fns, 使用者可以快速在NodeJS环境下使用该模式进行消息分发和订阅。 前言 观察模式整体设计 广播消息 其他消息管理 总结前言Observable-fns是一...…

继续阅读