XVIZ - Autonomy数据的实时传输和可视化协议
XVIZ是AVS的数据层。
主要特点
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公司使用和开发。