Sentinel
Connect with ROS 2

ROS 2 camera interface

Connect raw, compressed, or compressed-depth ROS 2 image topics to Sentinel.

Use this page when a camera already publishes through ROS 2. If Sentinel supports opening the camera directly, you can configure the hardware adapter instead.

Connect one operator view first. Verify its rate, timestamps, orientation, and latency before adding more cameras.

Choose a transport

TransportMessage on the wireUse when
compressedsensor_msgs/msg/CompressedImageColor video crosses a computer, container, or constrained link
rawsensor_msgs/msg/ImageCamera and Sentinel share a computer or high-bandwidth local link
compressedDepthCompressed depth transportYou need a supported depth stream

Prefer compressed for color video across computers or containers. Raw 1080p video can consume substantial DDS bandwidth before Sentinel encodes it for the operator.

The adapter accepts common color, mono, Bayer, YUV, and depth encodings and converts them into the configured Sentinel output format.

Configure a camera

For image transport, configure the base topic—not the suffixed transport topic. This example subscribes to /head/image_raw/compressed:

cameras:
  - name: head
    adapter:
      plugin: sentinel_vision_adapter_image_transport::ImageTransportCamera
      config:
        image_topic: /head/image_raw
        transport: compressed
        camera_id: head
        stream_type: color
        output_format: bgr8
        reliability: best_effort
        queue_size: 5

Match reliability to the publisher. Use a stable camera name such as head, left_wrist, right_wrist, or overhead; that name identifies the view in the operator interface and recorded output.

ZSTD image transport is not included in the current released runtime. Use raw, compressed, or compressedDepth.

Validate one feed

Verify the source topic

Run the check from the same domain and container network as Sentinel:

ros2 topic hz /head/image_raw/compressed
ros2 topic info --verbose /head/image_raw/compressed

Verify timestamps

Confirm that header.stamp increases monotonically and represents capture time when the driver supports it.

Verify the Sentinel view

Start Sentinel with only this camera configured. Confirm the image orientation, role, resolution, and frame rate.

Check end-to-end latency

Move a visible object through the frame and compare physical motion with the operator view. Reduce resolution or frame rate before accepting unstable latency or frame bursts.

Add the remaining views

Add one camera at a time. Verify each view before increasing resolution, frame rate, or encoder bitrate.

Use a different source domain

The image-transport adapter joins Sentinel's ROS_DOMAIN_ID. Use the dedicated compressed-camera bridge when the source must remain in another domain.

The cross-domain bridge currently consumes sensor_msgs/msg/CompressedImage with best-effort, volatile QoS. Configure the exact suffixed source topic:

adapter:
  plugin: sentinel_vision_adapter_ros2_bridge::ROS2BridgeCamera
  config:
    source_domain_id: 42
    source_topic: /head/image_raw/compressed
    camera_id: head
    output_format: bgr8

Cross-domain support is camera-specific. Configuring a camera source domain does not make robot state or command topics from that domain visible to the generic robot bridge.

  • Start at 30 fps while validating a new network and camera path.
  • Prefer capture timestamps in header.stamp.
  • Match the configured encoder resolution and frame rate to the source.
  • Use a wired robot network when streaming multiple high-resolution views.
  • Add depth only after the color path is stable.

Return to the integration checklist

Finish the robot configuration and pre-arm validation.