ROS 2 Integration Guide

The first-party ROS 2 beta lives under integrations/ros2/ as an optional companion workspace. The root Python package stays ROS-free; build the ROS layer only when you need ROS graph integration.

What is in the companion workspace

  • src/zeroproofml_ros/: ament_python node package and launch files
  • src/zeroproofml_msgs/: StrictInferenceResult.msg
  • containers/: Humble/Jazzy CPU images and a small manifest

The strict-inference node loads one startup-selected bundle, consumes std_msgs/msg/Float64MultiArray, publishes StrictInferenceResult, and emits plot-friendly telemetry on telemetry_topic.

Supported beta path

  • validated RMW: rmw_cyclonedds_cpp
  • covered distros: Humble/Jammy and Jazzy/Noble
  • startup bundle loading via the bundle_dir parameter

Hot-reload is still out of scope for the first beta path. Use the lifecycle node only when deployment orchestration needs managed configure/activate transitions.

Build and launch

Build the companion workspace with colcon, then point the launch file at an existing deployment bundle:

ros2 launch zeroproofml_ros rr_ik_strict_inference.launch.py \
  bundle_dir:=/absolute/path/to/results/reference_deploy_robotics/.../bundle

For a non-ROS smoke run against the same runtime path:

rr_ik_demo --bundle-dir /absolute/path/to/results/reference_deploy_robotics/.../bundle

For the offline DOSE batch path:

ros2 launch zeroproofml_ros dose_offline_batch.launch.py \
  bundle_dir:=/absolute/path/to/bundle

QoS and telemetry

Use qos_preset=low_latency_control for fresh control-loop samples and qos_preset=offline_batch_replay for deterministic rosbag or batch replay.

The node also publishes a numeric telemetry vector on telemetry_topic for Foxglove or PlotJuggler, and the package can export the same fields as named CSV rows through write_visualization_telemetry_csv(...).

For RViz workflows, the companion package exposes marker-overlay helpers for workspace heatmaps and RR IK result inspection.