介绍
Foxglove 通常要求传入消息符合特定结构,以便正确可视化它们。使用 Foxglove 模式 可以帮助您充分利用平台内置的可视化功能。
支持的格式
如果您已经编写了自定义消息,可以使用消息转换器扩展将它们转换为 Foxglove 支持的模式。
Protobuf 和 JSON Schema
将所需的 .proto
文件 或 .json
文件 直接复制到您的项目中,并使用它们通过 实时 Foxglove WebSocket 连接 发布数据或记录数据到 MCAP 文件。
注意:对于 Protobuf 数据,类型为 google.protobuf.Timestamp
或 google.protobuf.Duration
的时间值将在 用户脚本、消息转换器 和 Foxglove 的其 他部分中显示为 sec
和 nsec
字段(而不是 seconds
和 nanos
),以便与其他数据格式中的时间和持续时间类型保持一致。
您还可以通过 @foxglove/schemas
npm 包 导入 JSON 模式:
import { CompressedImage } from "@foxglove/schemas/jsonschema";
我们提供用于实时数据的 WebSocket 库(Python、JavaScript、C++),以及用于预录数据文件的 MCAP 写入器(Python、JavaScript、C++)。
查看博客文章 使用 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 的用户脚本面板中编写自定义数据转换脚本时,导入这些类型。