Búsqueda y apertura del dispositivo Azure Kinect

En este artículo se explica cómo buscar y luego abrir Azure Kinect DK. En el artículo se explica cómo controlar el caso de que haya varios dispositivos conectados al equipo.

También puede ver el Ejemplo de enumeración del SDK, donde se muestra cómo usar las funciones de este artículo.

Se explican las siguientes funciones:

Detección del número de dispositivos conectados

En primer lugar, obtenga el número de dispositivos Azure Kinect conectados actualmente mediante k4a_device_get_installed_count().

uint32_t device_count = k4a_device_get_installed_count();

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

Apertura de un dispositivo

Para obtener información sobre un dispositivo o para leer datos de él, primero debe abrir un identificador para el dispositivo mediante 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);
}

El parámetro index de k4a_device_open() indica qué dispositivo se va a abrir si hay más de uno conectado. Si solo espera que haya un dispositivo conectado, puede pasar un argumento de K4A_DEVICE_DEFAULT o 0 para indicar el primer dispositivo.

Siempre que abra un dispositivo, debe llamar a k4a_device_close() cuando haya terminado de usar el identificador. No se puede abrir ningún otro identificador para el mismo dispositivo hasta que se haya cerrado el identificador.

Identificación de un dispositivo concreto

El orden en que los dispositivos se enumeran por índice no cambia hasta que se asocian o desasocian. Para identificar un dispositivo físico, debe usar el número de serie del dispositivo.

Para leer el número de serie del dispositivo, use la función k4a_device_get_serialnum() después de abrir un identificador.

En este ejemplo se muestra cómo asignar la cantidad adecuada de memoria para almacenar el número de 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);

Apertura del dispositivo predeterminado

En la mayoría de las aplicaciones, solo hay un dispositivo Azure Kinect DK asociado al mismo equipo. Si solo necesita conectarse al dispositivo esperado único, puede llamar a k4a_device_open() con index de K4A_DEVICE_DEFAULT para abrir el primer 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;
}

Pasos siguientes