Uber AVS 自动驾驶可视化工具(二)XVIZ之Overview

Uber AVS 自动驾驶可视化工具 (二)XVIZ之Overview

    • Overview
      • Introduction
        • Main Features
        • XVIZ Protocol Specification
        • XVIZ Javascript Libraries
        • XVIZ Server
      • What's New
      • Versioning
      • Concepts
        • Datum
        • Stream
        • Source
        • Metadata
        • Primitive
        • Style
        • Object
        • Variable
        • Time Series
        • Declarative UI
        • Video
        • Encoding
      • Conventions
        • Stream Naming
          • Use file system-like hierarchical names
          • Stream names should not contain ids.
        • Stream Structure
      • ROS Comparison
        • Simularties
        • Advantages
        • Disadvantages
        • Checkbox Comparision
      • Roadmap
        • Performance
        • Specification
        • Features
      • Related Projects

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

你可能感兴趣的:(Uber AVS 自动驾驶可视化工具(二)XVIZ之Overview)