5.2.3. Multi-Camera Synchronization Verification Node
File path: image_sync_example_node.cpp
This example node is designed for synchronized capture and timestamp verification across four Orbbec cameras. It can be used to validate frame alignment accuracy under the multi-camera Primary / Secondary Synced mode.
5.2.3.1. Usage Guide
Modify
multi_camera_synced.launchas followsAdd include blocks to support four cameras.
Select the appropriate launch file based on your camera model. For example, use
gemini_330_series.launchfor the Gemini 330 series.Naming convention:
camera_nameshould follow the formatcamera_01,camera_02,camera_03, …Set
device_numto 4.Configure the USB ports using:
rosrun orbbec_camera list_devices_nodeto view and bind the correct ports.
Set synchronization mode to Primary/Secondary Synced, with one camera as primary and the others as secondary_synced.
Startup sequence: Start secondary cameras first, and start the Primary camera last to ensure the synchronization signal is established correctly.
Modify configuration files
Edit the following two files under the
configdirectory:camera_params.yamlcamera_secondary_params.yaml
Ensure the following settings are consistent across all cameras:
Enable both depth and color streams.
Use the same frame rate (fps) for all cameras.
Launch and Verification
Start the multi-camera synchronization launch file:
roslaunch orbbec_camera multi_camera_synced.launchIn a new terminal, run the synchronization verification node:
rosrun orbbec_camera image_sync_example_nodeThis node outputs timestamp differences between multiple camera streams for synchronization validation.
Reference Launch File
<launch>
<arg name="device_num" default="4"/>
<arg name="camera1_name" default="camera_01"/>
<arg name="camera2_name" default="camera_02"/>
<arg name="camera3_name" default="camera_03"/>
<arg name="camera4_name" default="camera_04"/>
<arg name="camera1_usb_port" default="2-2.3"/>
<arg name="camera2_usb_port" default="2-1"/>
<arg name="camera3_usb_port" default="2-3"/>
<arg name="camera4_usb_port" default="2-4"/>
<arg name="primary_config" default="$(find orbbec_camera)/config/camera_params.yaml"/>
<arg name="secondary_config" default="$(find orbbec_camera)/config/camera_secondary_params.yaml"/>
<!-- secondary cameras -->
<include file="$(find orbbec_camera)/launch/gemini_330_series.launch">
<arg name="camera_name" value="$(arg camera2_name)"/>
<arg name="usb_port" value="$(arg camera2_usb_port)"/>
<arg name="device_num" value="$(arg device_num)"/>
<arg name="sync_mode" value="secondary_synced"/>
<arg name="config_file_path" value="$(arg secondary_config)"/>
<arg name="trigger_out_enabled" value="false"/>
</include>
<include file="$(find orbbec_camera)/launch/gemini_330_series.launch">
<arg name="camera_name" value="$(arg camera3_name)"/>
<arg name="usb_port" value="$(arg camera3_usb_port)"/>
<arg name="device_num" value="$(arg device_num)"/>
<arg name="sync_mode" value="secondary_synced"/>
<arg name="config_file_path" value="$(arg secondary_config)"/>
<arg name="trigger_out_enabled" value="false"/>
</include>
<include file="$(find orbbec_camera)/launch/gemini_330_series.launch">
<arg name="camera_name" value="$(arg camera4_name)"/>
<arg name="usb_port" value="$(arg camera4_usb_port)"/>
<arg name="device_num" value="$(arg device_num)"/>
<arg name="sync_mode" value="secondary_synced"/>
<arg name="config_file_path" value="$(arg secondary_config)"/>
<arg name="trigger_out_enabled" value="false"/>
</include>
<!-- primary camera -->
<include file="$(find orbbec_camera)/launch/gemini_330_series.launch">
<arg name="camera_name" value="$(arg camera1_name)"/>
<arg name="usb_port" value="$(arg camera1_usb_port)"/>
<arg name="device_num" value="$(arg device_num)"/>
<arg name="sync_mode" value="primary"/>
<arg name="config_file_path" value="$(arg primary_config)"/>
<arg name="trigger_out_enabled" value="true"/>
</include>
</launch>
5.2.3.2. System Configuration Requirements
Increase USB Buffer Memory
Prevent frame drops caused by concurrent data transmission:
echo 512 | sudo tee /sys/module/usbcore/parameters/usbfs_memory_mbTune ROS1 Runtime Performance
Optimize CPU and USB usage to reduce transmission delay and instability. See this section for detailed tuning instructions.