Trovare e poi aprire il dispositivo Azure Kinect

Questo articolo descrive come trovare e poi aprire Azure Kinect DK. L'articolo illustra come gestire il caso in cui sono presenti più dispositivi connessi al computer.

È anche possibile fare riferimento all'esempio di enumerazione SDK che illustra come usare le funzioni in questo articolo.

Vengono illustrate le funzioni seguenti:

Individuare il numero di dispositivi connessi

Innanzitutto, eseguire il conteggio dei dispositivi Azure Kinect attualmente connessi usando k4a_device_get_installed_count().

uint32_t device_count = k4a_device_get_installed_count();

printf("Found %d connected devices:\n", device_count);

Aprire un dispositivo

Per ottenere informazioni su un dispositivo o per leggere i dati da esso, è necessario prima aprire un handle per il dispositivo usando k4a_device_open().

k4a_device_t device = NULL;

for (uint8_t deviceIndex = 0; deviceIndex < device_count; deviceIndex++)
{
    if (K4A_RESULT_SUCCEEDED != k4a_device_open(deviceIndex, &device))
    {
        printf("%d: Failed to open device\n", deviceIndex);
        continue;
    }

    ...

    k4a_device_close(device);
}

Il index parametro di k4a_device_open() indica quale dispositivo aprire nel caso siano connessi più di un dispositivo. Se si prevede di connettere un singolo dispositivo, è possibile passare un argomento di K4A_DEVICE_DEFAULT o 0 per indicare il primo dispositivo.

Ogni volta che si apre un dispositivo è necessario eseguire la chiamata k4a_device_close() quando si smette di usare l'handle. Non è possibile aprire nessun altro handle sullo stesso dispositivo, finché non si chiude l'handle.

Identificare un dispositivo specifico

L’ordine in cui i dispositivi enumerano da indice non cambia, finché i dispositivi non vengono collegati o rimossi. Per identificare un dispositivo fisico è necessario usare il numero di serie del dispositivo.

Per leggere il numero di serie dal dispositivo, usare la funzionek4a_device_get_serialnum() dopo aver aperto un handle.

In questo esempio viene illustrato come allocare la quantità di memoria corretta per archiviare il numero di serie.

char *serial_number = NULL;
size_t serial_number_length = 0;

if (K4A_BUFFER_RESULT_TOO_SMALL != k4a_device_get_serialnum(device, NULL, &serial_number_length))
{
    printf("%d: Failed to get serial number length\n", deviceIndex);
    k4a_device_close(device);
    device = NULL;
    continue;
}

serial_number = malloc(serial_number_length);
if (serial_number == NULL)
{
    printf("%d: Failed to allocate memory for serial number (%zu bytes)\n", deviceIndex, serial_number_length);
    k4a_device_close(device);
    device = NULL;
    continue;
}

if (K4A_BUFFER_RESULT_SUCCEEDED != k4a_device_get_serialnum(device, serial_number, &serial_number_length))
{
    printf("%d: Failed to get serial number\n", deviceIndex);
    free(serial_number);
    serial_number = NULL;
    k4a_device_close(device);
    device = NULL;
    continue;
}

printf("%d: Device \"%s\"\n", deviceIndex, serial_number);

Aprire il dispositivo predefinito

Nella maggior parte delle applicazioni ci sarà un singolo Azure Kinect DK collegato allo stesso computer. Se è necessario solo connettersi al singolo dispositivo previsto, è possibile eseguire la chiamata k4a_device_open() con indexdi K4A_DEVICE_DEFAULT per aprire il primo dispositivo.

k4a_device_t device = NULL;
uint32_t device_count = k4a_device_get_installed_count();

if (device_count != 1)
{
    printf("Unexpected number of devices found (%d)\n", device_count);
    goto Exit;
}

if (K4A_RESULT_SUCCEEDED != k4a_device_open(K4A_DEVICE_DEFAULT, &device))
{
    printf("Failed to open device\n");
    goto Exit;
}

Passaggi successivi