跳到主要内容

介绍

coScene 通常要求传入的消息遵循特定结构,以便正确进行可视化。使用 Foxglove 架构可充分利用平台内置的可视化功能。

支持的格式

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

Protobuf 和 JSON 架构类型

将所需的 .proto文件 .json 文件直接复制到您的项目中,并通过 coScene WebSocket 连接发布数据,或记录到MCAP文件中。

注意:

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

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

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

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

请参阅关于使用 MCAP C++ 写入器记录您的 Protobuf 数据的示例博客文章:Recording Robocar Data with MCAP

无架构类型的 JSON

MCAP 支持在不指定架构类型的情况下写入 JSON 消息。要写入不带架构类型的 JSON 消息数据,请将通道的消息编码设置为json 并将架构类型 ID 设置为 0。这表示该通道没有架构类型。详细信息请参阅:https://mcap.dev/spec#channel-op0x04

ROS

安装 foxglove_msgs

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

然后,在您的 ROS 项目中导入所需的 schemas 以开始发布数据:

from foxglove_msgs.msg import Vector2

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

TypeScript

将 coScene 消息架构作为 TypeScript 类型导入,以进行类型检查。

在 coScene 的用户脚本面板中,您可以使用 Message<"foxglove.[SchemaName]"> 指定所需的架构类型:

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

然后,在您的 ROS 项目中导入所需的 schemas 以开始发布数据:

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 myPoint: Point2 = { x: 1, y: 2 };

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