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
| Transport | Message on the wire | Use when |
|---|---|---|
compressed | sensor_msgs/msg/CompressedImage | Color video crosses a computer, container, or constrained link |
raw | sensor_msgs/msg/Image | Camera and Sentinel share a computer or high-bandwidth local link |
compressedDepth | Compressed depth transport | You 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: 5Match 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/compressedVerify 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: bgr8Cross-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.
Recommended starting point
- 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.