Skip to main content

介绍

Foxglove 通常要求传入消息符合特定结构,以便正确可视化它们。使用 Foxglove 模式 可以帮助您充分利用平台内置的可视化功能。

支持的格式

如果您已经编写了自定义消息,可以使用消息转换器扩展将它们转换为 Foxglove 支持的模式。

Protobuf 和 JSON Schema

将所需的 .proto 文件.json 文件 直接复制到您的项目中,并使用它们通过 实时 Foxglove WebSocket 连接 发布数据或记录数据到 MCAP 文件

注意:对于 Protobuf 数据,类型为 google.protobuf.Timestampgoogle.protobuf.Duration 的时间值将在 用户脚本消息转换器 和 Foxglove 的其他部分中显示为 secnsec 字段(而不是 secondsnanos),以便与其他数据格式中的时间和持续时间类型保持一致。

您还可以通过 @foxglove/schemas npm 包 导入 JSON 模式:

import { CompressedImage } from "@foxglove/schemas/jsonschema";

我们提供用于实时数据的 WebSocket 库(PythonJavaScriptC++),以及用于预录数据文件的 MCAP 写入器(PythonJavaScriptC++)。

查看博客文章 使用 MCAP 记录 Robocar 数据,了解如何使用 MCAP C++ 写入器记录您的 Protobuf 数据。

Empty JSON Schemas

MCAP 允许 JSON 消息编码的空模式,但您必须定义一个有效的 JSON 模式以进行可视化。如果您不想定义自己的模式,可以指定一个表示任何对象的 JSON 模式,默认情况下允许附加属性:{"type": "object"}

ROS

Install the foxglove_msgs package:

$ sudo apt install ros-noetic-foxglove-msgs # For ROS 1
$ sudo apt install ros-galactic-foxglove-msgs # For ROS 2

Then, import the schemas you need inside your ROS project to start publishing data:

from foxglove_msgs.msg import Vector2


msg = Vector2()
msg.x = 0.5
msg.y = 0.7

TypeScript

将 Foxglove 模式导入为 TypeScript 类型以进行类型检查。

在 Foxglove 的用户脚本面板中,您可以使用 Message<"foxglove.[SchemaName]"> 指定所需的模式:

import { Input, Message } from "./types";

type Output = Message<"foxglove.Point2">;

export const inputs = ["/input/topic"];
export const output = "/studio_script/output_topic";

export default function script(event: Input<"/input/topic">): Output {
return { x: 1, y: 2 };
}

对于您自己的 TypeScript 项目,您可以直接从 @foxglove/schemas npm 包中导入类型:

import { Point2 } from "@foxglove/schemas";

const myImage: Point2 = { x: 1, y: 2 };

在处理 JavaScript WebSocket 或 MCAP 项目时,或在 Foxglove 的用户脚本面板中编写自定义数据转换脚本时,导入这些类型。