ROS 2 bridge
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 exitUnder 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.