Note
This C++ sample has a corresponding Python sample.
HAL Sync Sample
The sample metavision_hal_sync.cpp
shows how to use Metavision HAL API for synchronizing two event-based cameras.
The source code of this sample can be found in <install-prefix>/share/metavision/hal/cpp_samples/metavision_hal_sync
when installing Metavision SDK from installer or packages. For other deployment methods, check the page
Path of Samples.
Prerequisites
As explained in the camera synchronization page, you will need to connect two event-based cameras using a synchronization cable. Specifically, the Sync Out signal of the master camera needs to be connected to the Sync In interface of the slave camera. One of the camera will be the master camera, while the other will be the slave camera.
See also
See the Timing Interface section for more information about Prophesee cameras Sync In and Sync Out interfaces.
You will need to start the slave camera first, followed by the master camera. You can connect both cameras to the same PC or to two different PCs.
Note
When connecting the two cameras on the same PC, make sure to specify the serial number of the camera you want to use (SERIAL_NUMBER in the commands below). You can retrieve it using Metavision Platform Info Application (the Serial Number it the Serial from the output, e.g. 00ca0009).
Expected Output
The sample visualizes CD events on the screen. Note that the slave camera will not visualize any events until the master camera is started.
How to start
First, compile the sample as described in this tutorial.
To start the sample, first run the slave camera:
Linux
./metavision_hal_sync --slave -s SERIAL_NUMBER
Windows
metavision_hal_sync.exe --slave -s SERIAL_NUMBER
Then start the master camera:
Linux
./metavision_hal_sync --master -s SERIAL_NUMBER
Windows
metavision_hal_sync.exe --master -s SERIAL_NUMBER
Warning
When starting the second camera (the master), you may get an error message similar to [HAL][ERROR] Camera is busy (r=-6)
or Unable to open device: LIBUSB_ERROR_ACCESS
. This error message can be safely ignored. It is only an symptom
of the sample trying to connect to all the connected cameras to retrieve their serial number,
and randomly trying the slave first which is already connected.
To check for additional options:
Linux
./metavision_hal_sync -h
Windows
metavision_hal_sync.exe -h
Note
You cannot run this sample from a pre-recorded RAW file, as the synchronization only works with live camera. RAW files recorded with synchronized cameras will have synchronized timestamps, but can be played separately using any available RAW player.
Code Notes
The code of this sample is very similar to the one of the Metavision HAL Showcase.
Essentially, the synchronization is done using the two functions Metavision::I_CameraSynchronization::set_mode_master()
and Metavision::I_CameraSynchronization::set_mode_slave()
.