UBER-AVS-XVIZ-OverView

XVIZ - Autonomy数据的实时传输和可视化协议


	XVIZ是AVS的数据层。

UBER-AVS-XVIZ-OverView

主要特点


XVIZ允许您描述:

  • 视觉元素
    • 几何
    • 点云
    • 图片
    • 文本
    • 指标
  • 样式表
  • 具有数据绑定的声明性用户界面
  • @xviz/schema包中的一个机器可读JSON模式

XVIZ协议规范


  • XVIZ协议涵盖了重要的概念和数据类型。

XVIZ Javascript库


  • XVIZ Javascript库是一组用于验证、构建和解析XVIZ数据的模块。这些库使使用XVIZ变得更容易,并为验证任何其他语言实现提供了支持。

XVIZ服务


  • XVIZ的设计重点是分布式系统和团队。这意味着要考虑数据的大小和处理方法和速度,并优化网络基础设施上的数据传输。
  • XVIZ服务器简单演示了如何将XVIZ数据传递到应用程序。按照快速启动步骤开始向应用程序发送XVIZ数据。

最新动态


v1.0.0发布


  • 我们完成了测试,并于2019年8月发布了v1.0.0。在测试期间,我们增加了额外的模块并且修复了一些问题。最新的文档可以在AVS找到。

新特性

@xviz / io模块

  • 我们最初的beta版提供了构建XVIZ数据的模块和streetscape.gl使用的解析器。在测试期间,我们主要关注于围绕XVIZ添加工具支持。XVIZ支持JSON和基于GLB的格式并且在测试期间我们添加了初始的protobuf支持。为了制作检查和修改XVIZ数据的编写工具,我们创建了@xviz/io模块来处理各种格式的解码。

@xviz /server模块

  • 我们在beta中包含了一个特别的测试服务器,它需要被替换。官方的@xviz/server是可用的,并且支持跨多个数据源的多个并发连接。该服务器还支持数据源的动态XVIZ转换,这可以从我们的ROS示例中看到。

@xviz / ros模块

  • 由于许多人帮助我们建立了对ROS的支持,我们终于能够使用@xviz/ ROS模块。该模块目前仅支持少量消息,但总体结构以及对简单自定义消息处理的支持已经就位,为我们继续扩展支持提供了良好的基础。

常规改进

  • 将数据插入回放缓冲区的性能改进
  • 支持展平阵列,以便更好地向WebGL传输数据
  • 新的state_update模式:COMPLETE_STATE 和 INCREMENTAL

版本控制和支持


XVIZ协议的版本尽可能和版本控制一致。

  • 只要API发生了变化,就会发布主要版本。
  • 当一个变更包含了对API的添加,例如附加原语,或者现有原语的附加字段时,就会发布次要版本。
  • 补丁版本将在不改变的API的情况下发布。

XVIZ概念解释


XVIZ协议的描述基于这里介绍的一些概念

Datum

  • 我们希望可视化的数据对象(通常来自机器人系统)。

Stream

流是datum数据带有时间戳的顺序序列。不同类型的datums组织在不同的流中。

  • Stream Name ——每个流必须有一个唯一的名称。应用程序定义了这些名称,XVIZ要求名称遵循由’/‘分隔的类似路径的结构,如’/vehicle/velocity’。
  • Stream Type ——流的类型由它所包含的数据类型来定义。

协议预定义了以下流类型,XVIZ客户端库支持解析和显示它们:

  • Pose Stream —— 一组描述角色的位置和方向及其定义的任何相关坐标系统的位置。
  • Geometry Types —— 几何原语
  • Variables —— 数据数组
  • Time series —— 较大序列的单个样本
  • Tree Table —— 层次数据结构,用于传递密集的记录类型数据
  • Image Stream —— 二进制格式的图像数据

Source

XVIZ流的一个源。一个源可以是一个从URL或文件加载的预先生成的日志,它也可以是一个通过套接字提供的实时数据。
每个源包含一个或多个流,以及关于流的元数据(metadata)。

Metadata

包含有关数据源及其流的描述性信息的特殊XVIZ消息。

Primitive

XVIZ Primitive 是一个需要可视化的几何对象,例如点、线、多边形等。它可以被标记,并给予特殊的样式(颜色等)。

Style

XVIZ支持允许基于流和类指定对象属性的一种样式表形式。

Object

可以通过将标识符附加到Primitive、变量和时间序列来定义对象。该标识符允许跨流和时间片链接信息。

Variable

A sequences of values the occur at a one time. Like the speed of travel over a planned path for a vehicle. Each time you get an update to a variable stream, the full list of values changes.

Time Series

时间戳值可以包含在流中。每次流更新时,您都会得到一个新的时间戳和值对。

Declarative UI

将映射UI元素(如绘图、控件、表和视频面板)和流名称数据绑定的结构化数据模式。此数据与元数据一起发送,以使其与数据源紧密耦合。

Video

XVIZ可以与外部视频源同步,前提是它们已经以合适的方式进行了编码。

Encoding

XVIZ协议规范没有规定编码方式,但是XVIZ库支持JSON编码和解析。

XVIZ 规则约定


Stream Naming

Streams 的命名遵循一些简单的规则。
使用类似文件系统的层次结构名称。
必须
—— 使用路径分隔符

/system/object/bounds
/system/object/velocity

Stream names 不应该包含 ids.
Good
—— 一个stream对应一组对象

所有对象都在同一个流中,使用 id字段来区分他们。

/object

Bad - 每个对象一个stream
这将忽略XVIZ中元素的“id”支持,并且不提供交叉流对象链接。

/object/123

Stream Structure

可选或可单独显示的数据应放入自己的流中:
Good - 每一块数据都是分开的

/raw_points
/object/bounds
/object/velocity
/object/points

Bad - 整个系统只有复杂的单一流

/object

RoadMap


性能

  • 数据优化
  • 异步处理

详述

  • 点云压缩
  • 持久性数据
  • 数据生命周期管理
  • 先进的映射支持
  • 模块化支持

特性

  • 高级XVIZ服务器
    • 支持多日志
  • 支持ROSBAG
  • 多语言支持

相关链接


XVIZ是解决自主系统(机器人,车辆)相关于时间、地理空间和度量的数据可视化的问题。重点是系统的语义视图,其目标是与底层平台解耦。
有一些相关的项目与XVIZ有一些相似之处,但通常针对更通用的问题或与特定的平台耦合。跟踪这些工作以及这些项目的发展是很有价值的,可以从中学习并在XVIZ发展的过程中帮助制定路线图。

可视化工具

  • rviz - ROS 3D 机器人可视化工具
  • webviz - 基于Web的ROS包可视化工具
  • x3dom - WebGL内置的声明式3D内容格式。
  • A-Frame - 3D VR应用的声明式DOM样式系统。
  • VRML 2.0 - 1990’s format for full 3D scene description, in the spirit of a 3D HTML.

数据格式

  • rosbag - ROSBAG 支持 Javascript 解析
  • glTF 2.0 - “JPEG for 3D”, 是3D场景交换的标准格式,针对快速加载和Web进行了优化,具有广泛的导入和导出支持。
  • USD/USDZ - 用于在生产流水线中存储任意3D场景、动画和场景图的可移植格式,由Pixar公司使用和开发。
UBER-AVS-XVIZ-OverViewUBER-AVS-XVIZ-OverView Goto_404 发布了11 篇原创文章 · 获赞 5 · 访问量 6955 私信 关注
上一篇:System 11-1: Linking Overview


下一篇:Python并发编程04 /多线程、生产消费者模型、线程进程对比、线程的方法、线程join、守护线程、线程互斥锁