Topbot Publisher
Hammerhead can consume stereo images from Lucid cameras, over ZMQ, or over ROS2. This example publishes vertically stacked stereo images (which we refer to as topbot images) from disk onto a ROS2 topic so that Hammerhead can consume them as a camera source.
Hammerhead Configuration
To use this publisher with Hammerhead, set the camera source in master_config.ini:
camera_source = ros2:///nodar/topbots
The topic in the config must match the --topic argument (default: /nodar/topbots).
Build
cd ros2/nodarhub
colcon build --packages-up-to topbot_publisher_py
source install/setup.bash
Usage
ros2 run topbot_publisher_py topbot_publisher_py <topbot_data_directory> [--topic /nodar/topbots] [--fps 10] [--encoding auto]
Parameters
image_dir: Path to directory containing topbot images (default:.)--topic: ROS2 topic name (default:/nodar/topbots)--fps: Publish rate in frames per second (default:10)--encoding: Image encoding:auto,mono8,mono16,bgr8,bgr16,bayer_bggr8,bayer_rggb8, etc. (default:auto)--loop: Loop over the images continuously (default: off)
Examples
# Publish topbot images with auto-detected encoding at 10 fps
ros2 run topbot_publisher_py topbot_publisher_py /path/to/topbot/data
# Publish at 5 fps on a custom topic
ros2 run topbot_publisher_py topbot_publisher_py /path/to/topbot/data --topic /camera/image_raw --fps 5
# Publish with explicit Bayer encoding, looping continuously
ros2 run topbot_publisher_py topbot_publisher_py /path/to/topbot/data --encoding bayer_rggb8 --loop
Supported Image Formats
- TIFF (
.tiff,.tif) - PNG (
.png)
Features
- Publish pre-recorded stereo image pairs to Hammerhead over ROS2
- Automatic encoding detection from image properties
- Configurable frame rate and topic name
- Single-pass playback by default; continuous looping with
--loop - Per-frame timing output for performance monitoring
Requirements
- ROS2 with
rclpy,sensor_msgs, andcv_bridge - OpenCV (
cv2) - Directory should contain topbot image files in a supported format
DDS Transport
For large images, the default DDS transport may be too slow. See the DDS Transport Configuration section in the main README for how to configure shared memory or tuned UDP transport.
Troubleshooting
- Images not found: Ensure the directory contains TIFF or PNG files
- Encoding errors: Try specifying
--encodingexplicitly instead ofauto - Slow publish rate: Large images may exceed the requested period. Check the DDS Transport Configuration — switching to shared memory transport typically resolves this
Press Ctrl+C to stop publishing.