Skip to main content
Cerulion ships ROS 2 compatible message types in the native_ros2_messages crate, generated from upstream .msg definitions at build time. The current build carries 254 messages across 22 packages, so most robotics pipelines never need a custom schema. Import a type from its package:
Reference it in graph YAML by qualified name (sensor_msgs/Image); the pkg::Type form is normalized to pkg/Type. List everything available on your build, grouped by package:

Packages

A bare type name that exists in several packages — Pose2D is in both geometry_msgs and vision_msgs — must be qualified. The CLI errors and lists the candidates rather than guessing.

ROS 2 to Rust type mapping

Fixed and variable fields

Fixed-size fields are read and written as plain fields. Variable-length fields (string, T[]) are read through an accessor method and written with the same plain assignment:
Variable-length output fields have one extra requirement: a tick that publishes a variable-schema message must write every variable field, at every nesting depth, or the frame is discarded with a loud error. For large payloads, fill_from writes straight into the shared-memory destination — see the node macro reference.

Defining your own

When no built-in type fits, define a workspace schema:
The YAML format is in Graph and schema files. Workspace schemas resolve before built-in messages, so a bare name you define shadows a built-in one (with a warning).