ROS 2 bridge

Coming soon

This page is a placeholder for an upcoming topic — shipping in `robotrace 0.2`. The URL is stable, so any links you write today won't rot when the real page lands. For now, `log_episode` with file paths covers the closest live topic.

What it'll do

Subscribe to a configurable set of ROS 2 topics during a robot run, buffer the messages locally, and ship the result as a RoboTrace episode the moment the run ends. Targeted shape:

from robotrace.adapters import ros2
 
with ros2.record(
    topics=["/camera/image", "/joint_states", "/cmd_vel"],
    policy_version="pap-v3.2.1",
    env_version="halcyon-cell-rev4",
    git_sha="abc1234",
) as run:
    run.wait_for_done()   # or your existing rclpy spin loop
# auto-uploads on exit

Under the hood it'll use the same /api/ingest/episode endpoints as everything else — the bridge is just an opinionated way to fill the artifact slots.

Until it lands

The Python SDK already accepts file paths. If you've got a ROS 2 bag, convert it offline (e.g. with ros2 bag info + bag2parquet) and pass the resulting files to log_episode:

import robotrace as rt
 
rt.log_episode(
    name="ros2 manual export",
    source="real",
    robot="halcyon-bimanual-01",
    policy_version="pap-v3.2.1",
    env_version="halcyon-cell-rev4",
    git_sha="abc1234",
    video="/tmp/run.mp4",
    sensors="/tmp/sensors.parquet",
    actions="/tmp/actions.parquet",
)

ROS 1 is out of scope in Phase 1 and won't ever land.