There are numerous use cases where multiple Helios ToF cameras are required to be used simultaneously at the same scene. To avoid interference between the lasers emitted by the different devices, special measures have to be employed.
On Helios2 family devices, A feature called Communication Channel is available, allowing users to operate up to 5 Helios2 cameras without interference between cameras.
What if I want to use more than 5 cameras? Such can be achieved by implementing timed triggering and acquisition for different cameras.
The following graph shows the Integration stages of the lasers on the normal modes on all Helios2 and Helios2+ at 1000us exposure times in non-high speed Operating Modes.
|
Duration |
Description |
---|---|---|
Reset |
Negligible |
The duration is minimal and negligible, and no integration or image acquisition takes place. Hence it can be grouped and considered as part of readout/ idle time. |
Integration |
User-selected |
The duration of the laser integration is slightly shorter than the user-selected ExposureTime:
|
Readout |
1.55 ms |
Always constant independent of operating mode on all Helios 2 variants |
Idle |
Calculated |
The lasers are idle during the remainder of the time in the allocated time in each frame |
The following shows the sequence of the operation of the cameras with the exposure time of 1000 μs, with one of the single-frequency operating modes.
-
The laser integrate for 0.98 ms
-
followed by the constant readout time of 1.55 ms
-
Steps 1 & 2 are repeated 4 times for all 4 lasers
-
T(total) = (0.98 + 1.55) x 4 = 10.12 ms. The camera will then stay idle until it is time to integrate for the next frame
During the idle time in each frame, additional integrations and acquisitions can be accommodated. This is given by:
Total allowable exposure between frames = T(FPS) / T(total) = (1000 ms / 30 FPS) / 10.12 ms = 3
During the readout time in each micro frame, additional integrations and acquisitions can be accommodated. This is given by:
Total allowable exposures between integration = T(readout) / T(integration) = 1.55 ms / 0.98 ms = 1
Combining the above would give 3 x (1 + 1) = a total of 6 cameras.
Now that we have knowledge of the laser timings and durations when additional cameras could be added, we can work out the TriggerDelay times for each camera.
Calculations for the timings for the TriggerDelay for an ExposureTime of 1000us:
Camera # |
Group (G) |
Formula |
Calculation (μs) |
TriggerDelay (μs) |
---|---|---|---|---|
ExposureTimeSelector = 1000 | ||||
1 |
0 |
Reference |
0 |
0 |
2 |
0 |
T(integration) + buffer |
980 + 170 |
1150 |
3 |
1 |
G x T(total) |
10120 |
10120 |
4 |
1 |
G x T(total) + T(integration) + buffer |
10120 + 980 + 170 |
11270 |
5 |
2 |
G x T(total) |
20240 |
20240 |
6 |
2 |
G x T(total) + T(integration) + buffer |
20240 + 980 +170 |
21390 |
TriggerDelay can be implemented in one of the two ways below:
- ArenaView: navigate to the Trigger Delay Node and input the calculated value
- C/C#/C++/Python API in Arena SDK: set the TriggerDelay node to the calculated value
C: SetFloatValue(hNodeMap, "TriggerDelay", delay_value);
C#: SetFloatValue(device.NodeMap, "TriggerDelay", delay_value);
C++: SetFloatValue(pDevice->GetNodeMap(), "TriggerDelay", delay_value);
Python: device.nodemap.nodes['TriggerDelay'].value = delay_value