Skip to content

Commit b3fba0f

Browse files
authored
Merge pull request #106404 from Teresa-Motiv/v-tea-CI-114183
v-tea-CI-114183-C
2 parents a9caa43 + 4a05224 commit b3fba0f

File tree

1 file changed

+44
-43
lines changed

1 file changed

+44
-43
lines changed

articles/kinect-dk/multi-camera-sync.md

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,124 +11,125 @@ keywords: azure, kinect, specs, hardware, DK, capabilities, depth, color, RGB, I
1111

1212
# Synchronize multiple Azure Kinect DK devices
1313

14-
Each Azure Kinect DK device includes 3.5-mm synchronization ports (**Sync in** and **Sync out**) that you can use to link multiple units together. When linked, your software can coordinate the trigger timing of multiple depth cameras and RGB cameras.
14+
Each Azure Kinect DK device includes 3.5-mm synchronization ports (**Sync in** and **Sync out**) that you can use to link multiple devices together. After you connect the devices, your software can coordinate the trigger timing between them.
1515

16-
This article introduces some of the benefits of synchronizing multiple devices, and provides instructions for how to connect the devices.
16+
This article how to connect and synchronize the devices.
1717

18-
## Why use multiple Azure Kinect DK devices?
18+
## Benefits of using multiple Azure Kinect DK devices
1919

20-
There are many reasons to use multiple Azure Kinect DK devices. Examples include the following:
20+
There are many reasons to use multiple Azure Kinect DK devices, including the following:
2121

22-
- Fill in occlusions. An occlusion occurs when a foreground object blocks the view of part of a background object for one of the two cameras. In the resulting color image, the foreground object appears to cast a shadow on the background object. Although the Azure Kinect DK data transformations produce a single image, the two cameras (Depth and RGB) are actually a small distance apart. The offset makes occlusions possible.
23-
For example, in the following diagram, the left camera sees the grey pixel "P2." However, the white foreground object blocks the right camera IR beam. The right camera has no data for "P2."
22+
- Fill in occlusions. Although the Azure Kinect DK data transformations produce a single image, the two cameras (depth and RGB) are actually a small distance apart. The offset makes occlusions possible. An occlusion occurs when a foreground object blocks the view of part of a background object for one of the two cameras on a device. In the resulting color image, the foreground object seems to cast a shadow on the background object.
23+
For example, in the following diagram, the left-side camera sees the gray pixel "P2." However, the white foreground object blocks the right-side camera IR beam. The right-side camera has no data for "P2."
2424
![Occlusion](./media/occlusion.png)
25-
Additional synchronized devices can fill in the occluded data.
25+
Additional synchronized devices can provide the occluded data.
2626
- Scan objects in three dimensions.
27-
- Increase the effective frame rate to something higher than 30 frames per second (FPS).
27+
- Increase the effective frame rate to a value that's greater than 30 frames per second (FPS).
2828
- Capture multiple 4K color images of the same scene, all aligned within 100 microseconds (μs) of the start of exposure.
2929
- Increase camera coverage within the space.
3030

3131
## Plan your multi-device configuration
3232

33-
Before you start, make sure to review [Azure Kinect DK Hardware specification](hardware-specification.md) and [Azure Kinect DK depth camera](depth-camera.md).
33+
Before you start, make sure that you review [Azure Kinect DK hardware specifications](hardware-specification.md) and [Azure Kinect DK depth camera](depth-camera.md).
3434

3535
### Select a device configuration
3636

37-
You can use two different approaches for your device configuration:
37+
You can use either of the following approaches for your device configuration:
3838

3939
- **Daisy-chain configuration**. Synchronize one master device and up to eight subordinate devices.
4040
![Diagram that shows how to connect Azure Kinect DK devices in a daisy-chain configuration.](./media/multicam-sync-daisychain.png)
41-
- **Star configuration**. Synchronize one master device with up to two subordinate devices.
41+
- **Star configuration**. Synchronize one master device and up to two subordinate devices.
4242
![Diagram that shows how to set up multiple Azure DK devices in a star configuration.](./media/multicam-sync-star.png)
4343

4444
#### Using an external sync trigger
4545

46-
In both of the configurations described previously, the master device provides the triggering signal for the subordinate devices. However, you can use a custom external source for the synchronization trigger. For example, you can use this option to synchronize image captures with other equipment. In either the daisy-chain configuration or the star configuration, the external trigger source connects to the master device.
46+
In both configurations, the master device provides the triggering signal for the subordinate devices. However, you can use a custom external source for the synchronization trigger. For example, you can use this option to synchronize image captures with other equipment. In either the daisy-chain configuration or the star configuration, the external trigger source connects to the master device.
4747

48-
Your external trigger source must function in the same manner as the master device: it must deliver a sync signal that has the following characteristics:
48+
Your external trigger source must function in the same manner as the master device. It must deliver a sync signal that has the following characteristics:
4949

5050
- Active high
51-
- Pulse width: greater than 8μs
51+
- Pulse width: Greater than 8μs
5252
- 5V TTL/CMOS
53-
- Maximum driving capacity: no less than 8 milliamps (mA)
54-
- Frequency support: precisely 30 FPS, 15 FPS, and 5 FPS (the frequency of the color camera master VSYNC signal)
53+
- Maximum driving capacity: No less than 8 milliamps (mA)
54+
- Frequency support: Exactly 30 FPS, 15 FPS, and 5 FPS (the frequency of the color camera master VSYNC signal)
5555

56-
The trigger source must deliver the signal to the master device **Sync in** port by using a 3.5-mm audio cable. You can use a stereo or mono cable. The Azure Kinect DK shorts all of the sleeves and rings of the audio cable connector together, and grounds them. As shown in the following diagram, the device receives the sync signal from the connector tip only.
56+
The trigger source must deliver the signal to the master device **Sync in** port by using a 3.5-mm audio cable. You can use a stereo or mono cable. The Azure Kinect DK shorts all the sleeves and rings of the audio cable connector together, and grounds them. As shown in the following diagram, the device receives the sync signal from the connector tip only.
5757

5858
![Cable configurations for an external trigger signal](./media/resources/camera-trigger-signal.jpg)
5959

60-
For more information about working with external equipment, see [Use Azure Kinect recorder with external synchronized devices](record-external-synchronized-units.md)
60+
For more information about how to work with external equipment, see [Use Azure Kinect recorder with external synchronized devices](record-external-synchronized-units.md)
6161

6262
### Plan your camera settings and software configuration
6363

6464
For information about how to set up your software to control the cameras and use the image data, see the [Azure Kinect Sensor SDK](about-sensor-sdk.md).
6565

66-
This section addresses several factors that affect synchronized devices (but not single devices). Your software should take these factors into account.
66+
This section discusses several factors that affect synchronized devices (but not single devices). Your software should consider these factors.
6767

6868
#### Exposure considerations
6969
If you want to control the precise timing of each device, we recommend that you use a manual exposure setting. Under the automatic exposure setting, each color camera can dynamically change the actual exposure. Because the exposure affects the timing, such changes quickly push the cameras out of sync.
7070

71-
In the image capture loop, avoid repeatedly setting the same exposure setting. When needed, just call the API once.
71+
In the image capture loop, avoid repeatedly setting the same exposure setting. Call the API only one time when it's needed.
7272

7373
#### Timestamp considerations
7474
Devices that are acting in master or subordinate roles report image timestamps in terms of *Start of Frame* instead of *Center of Frame*.
7575

7676
#### Avoiding interference between multiple depth cameras
7777

78-
When multiple depth cameras image overlapping fields of view, each camera must image its own associated laser. To prevent the lasers from interfering with each other, the camera captures should be offset from one another by 160μs or more.
78+
When multiple depth cameras are imaging overlapping fields of view, each camera must image its own associated laser. To prevent the lasers from interfering with one another, the camera captures should be offset from one another by 160μs or more.
7979

8080
For each depth camera capture, the laser turns on nine times and is active for only 125μs each time. The laser is then idle for either 14505μs or 23905μs, depending on the mode of operation. This behavior means that the starting point for the offset calculation is 125μs.
8181

82-
Additionally, difference between the camera clock and the device firmware clock increase the minimum offset to 160μs. To calculate a more precise offset for your configuration, note the depth mode that you are using and refer to the [depth sensor raw timing table](hardware-specification.md#depth-sensor-raw-timing). Using the data from this table, you can calculate the minimum offset (the exposure time of each camera) by using the following equation:
82+
Additionally, differences between the camera clock and the device firmware clock increase the minimum offset to 160μs. To calculate a more precise offset for your configuration, note the depth mode that you are using and refer to the [depth sensor raw timing table](hardware-specification.md#depth-sensor-raw-timing). By using the data from this table, you can calculate the minimum offset (the exposure time of each camera) by using the following equation:
8383

8484
> *Exposure Time* = (*IR Pulses* × *Pulse Width*) + (*Idle Periods* × *Idle Time*)
8585
86-
When you use an offset of 160μs, you can configure up to nine additional depth cameras so that each laser fires while the other lasers are idle.
86+
When you use an offset of 160μs, you can configure up to nine additional depth cameras so that each laser turns on while the other lasers are idle.
8787

8888
In your software, use ```depth_delay_off_color_usec``` or ```subordinate_delay_off_master_usec``` to make sure that each IR laser fires in its own 160μs window or has a different field of view.
8989

9090
## Prepare your devices and other hardware
9191

92-
In addition to multiple Azure Kinect DK devices, you may have to obtain additional host computers and other hardware in order to support the configuration you want to build. Use the information in this section to make sure that all of your devices and hardware are ready before you begin setting up.
92+
In addition to multiple Azure Kinect DK devices, you may have to get additional host computers and other hardware in order to support the configuration that you want to build. Use the information in this section to make sure that all devices and hardware are ready before you start to set up.
9393

9494
### Azure Kinect DK devices
9595

96-
For each of the Azure Kinect DK devices that you want to synchronize, do the following:
96+
For each Azure Kinect DK device that you want to synchronize, do the following:
9797

98-
- Ensure that the latest firmware is installed on the device. For more info about updating your devices, go to [Update Azure Kinect DK firmware](update-device-firmware.md).
98+
- Make sure that the latest firmware is installed on the device. For more information about how to update your devices, go to [Update Azure Kinect DK firmware](update-device-firmware.md).
9999
- Remove the device cover to reveal the sync ports.
100100
- Note the serial number for each device. You will use this number later in the setup process.
101101

102102
### Host computers
103103

104-
Typically, each Azure Kinect DK uses its own host computer. You can use a dedicated host controller, depending on how you're using the device and the amount of data being transferred over USB.
104+
Typically, each Azure Kinect DK uses its own host computer. You can use a dedicated host controller, depending on how you use the device and how much data is transferred over the USB connection.
105105

106-
Make sure that the Azure Kinect Sensor SDK is installed on each host computer. For more info on installing the Sensor SDK, go to [Quickstart: Set up your Azure Kinect DK](set-up-azure-kinect-dk.md).
106+
Make sure that the Azure Kinect Sensor SDK is installed on each host computer. For more information about how to install the Sensor SDK, go to [Quickstart: Set up your Azure Kinect DK](set-up-azure-kinect-dk.md).
107107

108108
#### Linux computers: USB memory on Ubuntu
109109

110-
By default, Linux-based host computers allocate the USB controller only 16 MB of kernel memory for handling USB transfers. This amount is typically enough to support a single Azure Kinect DK. However, to support multiple devices, the USB controller has to have more memory. To increase the memory, follow these steps:
110+
By default, Linux-based host computers allocate the USB controller only 16 MB of kernel memory to handle USB transfers. This amount is usually enough to support a single Azure Kinect DK. However, to support multiple devices, the USB controller has to have more memory. To increase the memory, follow these steps:
111111

112112
1. Edit /**etc/default/grub**.
113-
1. Replace the following line:
113+
1. Locate the following line:
114114
```cmd
115115
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
116116
```
117-
with this line:
117+
Replace it by using this line:
118118
```cmd
119119
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.usbfs_memory_mb=32"
120120
```
121-
These commands set the USB memory to 32 MB. This value is twice the default value. You can set a much larger value. Use a value that is right for your solution.
121+
> [!NOTE]
122+
> These commands set the USB memory to 32 MB. This is an example setting at two times the default value. You can set a much larger value, as appropriate for your solution.
122123
1. Run **sudo update-grub**.
123124
1. Restart the computer.
124125

125126
### Cables
126127

127-
To connect the devices to each other and to the host computers, you need 3.5-mm male-to-male cables (also known as 3.5-mm audio cable). The cables should be less than 10 meters long, and may be stereo or mono.
128+
To connect the devices to one another and to the host computers, you have to use 3.5-mm male-to-male cables (also known as 3.5-mm audio cable). The cables should be less than 10 meters long, and can be stereo or mono.
128129

129-
The number of cables that you need depends on the number of devices that you are using as well as the specific device configuration. The Azure Kinect DK box does not include cables—you must purchase them separately.
130+
The number of cables that you must have depends on the number of devices that you use and also the specific device configuration. The Azure Kinect DK box does not include cables. You must purchase them separately.
130131

131-
If you're connecting the devices in the star configuration, you also need one headphone splitter.
132+
If you connect the devices in the star configuration, you must also have one headphone splitter.
132133

133134
## Connect your devices
134135

@@ -138,8 +139,8 @@ If you're connecting the devices in the star configuration, you also need one he
138139
1. Connect each device to its host PC.
139140
1. Select one device to be the master device, and plug a 3.5-mm audio cable into its **Sync out** port.
140141
1. Plug the other end of the cable into the **Sync in** port of the first subordinate device.
141-
1. To connect another device, plug another cable into the **Sync out** port of the first subordinate device, and plug the other end of that cable into the **Sync in** port of the next device.
142-
1. Repeat the previous step until all of the devices are connected. The last device should have one cable plugged into its **Sync in** port, and its **Sync out** port should be empty.
142+
1. To connect another device, plug another cable into the **Sync out** port of the first subordinate device, and into the **Sync in** port of the next device.
143+
1. Repeat the previous step until all the devices are connected. The last device should have only one cable connection. Its **Sync out** port should be empty.
143144

144145
**To connect Azure Kinect DK devices in a star configuration**
145146

@@ -151,10 +152,10 @@ If you're connecting the devices in the star configuration, you also need one he
151152

152153
## Verify that the devices are connected and communicating
153154

154-
To verify that the devices are connected correctly, use [Azure Kinect Viewer](azure-kinect-viewer.md). Repeat this procedure as needed to test each subordinate device in combination with the master device
155+
To verify that the devices are connected correctly, use [Azure Kinect Viewer](azure-kinect-viewer.md). Repeat this procedure as necessary to test each subordinate device in combination with the master device
155156

156157
> [!IMPORTANT]
157-
> For this procedure, you need the serial number of each Azure Kinect DK.
158+
> For this procedure, you must know the serial number of each Azure Kinect DK.
158159
159160
1. Open two instances of Azure Kinect Viewer.
160161
1. Under **Open Device**, select the serial number of the subordinate device that you want to test.
@@ -174,17 +175,17 @@ When the master Azure Kinect Device starts, both instances of Azure Kinect Viewe
174175

175176
## Calibrate the devices as a synchronized set
176177

177-
When you have verified that the devices are communicating correctly, you are ready to calibrate them to produce images in a single domain.
178+
After you verify that the devices are communicating correctly, you're ready to calibrate them to produce images in a single domain.
178179

179-
In a single device, the depth and RGB cameras are factory calibrated to work together. However, when multiple devices have to work together, they need to be calibrated in order to determine how to transform an image from the domain of the camera that captured it to the domain of the camera you want to use to process images.
180+
In a single device, the depth and RGB cameras are factory calibrated to work together. However, when multiple devices have to work together, they have to be calibrated in order to determine how to transform an image from the domain of the camera that captured it to the domain of the camera you want to use to process images.
180181

181182
There are multiple options for cross-calibrating devices. Microsoft provides the [GitHub green screen code sample](https://github.com/microsoft/Azure-Kinect-Sensor-SDK/tree/develop/examples/green_screen), which uses the OpenCV method. The Readme file for this code sample provides more details and instructions for calibrating the devices.
182183

183-
For more general information about calibration, see [Use Azure Kinect calibration functions](use-calibration-functions.md).
184+
For more information about calibration, see [Use Azure Kinect calibration functions](use-calibration-functions.md).
184185

185186
## Next steps
186187

187-
After you have set up synchronized devices, you can also learn how to use the
188+
After you set up synchronized devices, you can also learn how to use the
188189
> [!div class="nextstepaction"]
189190
> [Azure Kinect sensor SDK record and playback API](record-playback-api.md)
190191

0 commit comments

Comments
 (0)