Uber AVS 自动驾驶可视化工具 (二)XVIZ之Overview
Overview
Introduction
XVIZ是AVS的数据层。
Main Features
XVIZ提供对于一下内容的描述:
- 视觉元素
- 几何
- 点云
- 图像
- 文本
- 向量
- 样式表
- 可声明的带有数据绑定的UI
- 在@xviz/schema包中提供了一个机器可读的JSON schema
XVIZ Protocol Specification
XVIZ协议涵盖了重要概念及数据类型。
XVIZ Javascript Libraries
XVIZ Js库是一套用于验证,构建和解析XVIZ数据的模块集。这些库文件另XVIZ任务更容易,与此同时,为任何其他语言实现的验证提供支持。
XVIZ Server
XVIZ的设计在于关注分布式系统和团队。这意味着,将数据大小,处理及网络设施间数据传输的优化,皆考虑在内。
XVIZ是XVIZ数据如何被投放到应用的一个简单演示。
参照Quick Start,将XVIZ数据发送至应用。
What’s New
V1.0.0-beta - Jan 2019
Versioning
// TODO
Concepts
这里介绍了,描述XVIZ协议所依赖的一系列概念。
Datum
我们希望去可视化的一个数据对象(尤其来自一个机器人系统)。
Stream
一条数据流是一序列的带有时间戳的同类型数据。不同类型数据被归为不同数据流中。
- Stream Name - 每条数据流必须被指定唯一的名字。由具体应用来指定这些名字,而XVIZ要求命名为类路径结构,被符号‘/’分隔,比如‘/vehicle/velocity’。
- Stream Type - 一条数据流的类型由其包含的数据的类型来定义。
如下数据流类型是由协议预定义,同时XVIZ客户端库提供了解析并显示他们的支持:
- Pose Stream - 一组位置数据,描述一个参与者的位置和朝向及其定义的任何相对坐标系。
- Geometry Types - 原始几何数据
- Variables - 数据数组
- Time series - 一个较大序列的独立样本
- Tree Table - 分级数据结构, 用于表达密度类型记录数据
- Image Stream - 二进制格式图像数据
Source
一个XVIZ数据流的源。它可以是载自URL或一个文件的一个与生成日志,但是同样可能是源自比如一个socket的实时数据。
每一个源包含一个或多个数据流,同时还有一个描述数据流的元文件。
Metadata
一类特别的XVIZ消息,包含关于数据源及其数据流的可描述信息。
Primitive
一个XVIZ原始数据是一类几何对象,比如一个点,一条线,一个多边形等可被可视化的对象。它可被标注并制定特殊样式(颜色等)。
Style
XVIZ支持一个样式表的格式,允许对象属性依数据流和类被具体化。
Object
对象可以通过附加识别符到原始数据,变量和时间序列来被定义。识别符促使跨数据流和时间片的信息链接。
Variable
存在于同一时间的值的序列。比如一辆车在规划好的线路上驶过的速度。每次当你获取了一个变量数据流的更新,全部值的列表随之改变。
Time Series
可被囊入数据流的时间戳值。每次当数据流更新,你会得到一个新的时间戳和值对。
Declarative UI
是一个可映射UI元素的结构化data schema,例如plots,controls,tables,和video panels,连同数据流名和数据绑定。此数据和原数据一起被发送进而保持与数据源的密切关联。
Video
XVIZ可以和提供了适合编码的外部视频资源同步。
Encoding
XVIZ协议规范没有规定任何编码方式,然而XVIZ库支持在JSON下的编码和解析。
Conventions
Stream Naming
数据流的命名需要遵守一些简单的规则。
Use file system-like hierarchical names
Must - 使用路径分隔符
/system/object/bounds
/system/object/velocity
Stream names should not contain ids.
Good - 一个数据流对应一组对象
所有的对象装配到同一个数据流,使用id
字段告知分隔。
/objects
Bad- 一个对象对应一个数据流
这忽略了‘id’对于XVIZ中元素的支持并且未提供跨数据流的对象关联。
/object/123
Stream Structure
可选行或可悲分开显示的数据应该被放入自身数据流中。
Good - 每片数据的独立拆分
/raw_points
/object/bounds
/object/velocity
/object/points
Bad - 单独数据流对应整个复杂的系统
/object
ROS Comparison
XVIZ和ROS有何关联,这问题经常被提起。ROS是最流行的开源机器人开发平台,它有其基于可视化栈的RViz。然而XVIZ是一种协议,并最终成为一个用于可视化机器人系统的生态系统。
XVIZ的目标较ROS而言更明确。它被设计用来创造一个标准化协议,使得创建更富创新性的客户端,卸去服务器的高额数据转换负载,并最小化到客户端的数据传输。像HTML和MP4服务视频与多媒体一样,服务机器人。
在我们的线路图中,通过更新范例XVIZ服务器来桥接这些环境世界;进而支持ROS包日志格式和常规ROS数据类型的实时转换,是我们的计划之一。
Simularties
ROS和RViz及XVIZ之间存在合宜数量的重叠,介于空间的特性和XVIZ启发自RViz。他们皆:
- 将世界拆分为原始数据的数据流
- 支持几何特性,图像和时间序列数据流
- 可以在实时系统下观测数据
- 可以将原始数据绑定到对象
- 具有二进制和文本协议
Advantages
XVIZ
XVIZ的优势在于它完全关注于来自数据格式和服务器实现的客户端解耦。与此同时,它具有:
- 只可配置的UI系统 - Declarative UI
- 综合性的样式系统
- 可简易数据自省的原数据系统
- 远程日志预览协议,无需拷贝日志
- 聚焦Web,例如标准的JSON
- 支持Protobuf(在 alpha)
ROS
ROS的优势来自其长期开发和使用,同时还有操纵机器人的基础:
- ROS 1.0 具有10年的稳定开发
- 更多的数据源 - 方块,球和尖头
- 带有插件的RViz本地客户端
- 支持动力学转换
Disadvantages
接下来便是每个平台的唯独缺点,并不只是以上优点的对立面。
XVIZ
XVIZ的短板源自其年限短以及开正在被修复的开源代码的缺点。
- 二进制协议并未支持所有数据类型的布局优化
- 无开源的C++或Python实现
- 无成熟的开源服务器,不如Node.js 版本
ROS
除了因近些年来的在开发支持方面,平台和架构选择方面的削弱,ROS是一个相当完善的系统。
- 无首要类 空泛/非密切的客户端情节 【NG】
- 序列化无向前兼容
- ROS1.0到2.0的变迁过于缓慢并分散了开发任务
Checkbox Comparision
Platform Comparision
XVIZ | ROS | |
Web App Support | First Class | Community |
Native App Support | None (Uber Internal) | First Class |
C++ Support | None (Uber Internal) | First Class |
Python Support | None | First Class |
JavaScript Support | First Class | Community |
Serialization Format | JSON or Custom | Custom or DDS |
Protobuf | Alpha | None |
Feature Comparision
XVIZ | ROS | Comments | |
Styling | Comprehensive | None | Reduces data size, make easier to understand, and more pleasing visualizations |
Metadata | Comprehensive | Partial (ROS bag type info) | Introspect on data before you read it |
Live streaming | Yes | Yes | View data from a currently running system |
Remote log protocol | Yes | None | Look with bringing any of a log to the client |
Codeless UI | Yes | None | Store UI with data, reduce dev time through less coupling |
Point clouds | Yes | Yes | |
Time series | Yes | Yes | |
2D Image display | Yes | Yes | Show an image in the UI |
2D Geometry primitives | Yes | Most | Polygons, Polylines, cricles, stadium |
3D Image Display | Planned | Community | Display an image in the 3D world |
3D Geometry primitives | None | Yes | Sphere, Cube, Cylinder, Arrow |
Roadmap
Performance
- 优化数据
- 异步处理
Specification
- 点云压缩
- 持续的数据
- 数据生命周期管理
- 支持高级映射
- 模型支持
Features
- 高级的XVIZ服务器
- 支持多日志
- 至此ROSBAG
- 可替代的语言实现
Related Projects
// TODO