Найдите, а затем откройте устройство Azure Kinect

В этой статье описывается, как можно найти, а затем открыть Azure Kinect DK. В этой статье объясняется, как справиться с тем, когда к компьютеру подключено несколько устройств.

Можно также обратиться к примеру SDK Enumerate, в котором показано, как использовать функции, описанные в этой статье.

Рассматриваются следующие функции:

Определение количества подключенных устройств

Сначала узнайте число подключенных в настоящее время устройств Azure Kinect с помощью k4a_device_get_installed_count().

uint32_t device_count = k4a_device_get_installed_count();

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

Открытие устройства

Чтобы получить сведения об устройстве или прочитать данные из него, необходимо сначала открыть дескриптор устройства с помощью 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);
}

indexПараметр k4a_device_open() указывает, какое устройство следует открыть при наличии нескольких подключенных. Если предполагается подключение только одного устройства, можно передать аргумент K4A_DEVICE_DEFAULT или значение 0, чтобы указать первое устройство.

В любой момент, когда вы открываете устройство, по завершении работы его необходимо вызвать k4a_device_close() с помощью этого дескриптора. Никакие другие дескрипторы нельзя открыть, пока вы не закроете дескриптор.

Идентификация конкретного устройства

Порядок устройств, перечисленных по индексу, не изменится, пока устройства не будут присоединены или отсоединены. Для обнаружения физического устройства следует использовать серийный номер устройства.

Чтобы прочитать серийный номер с устройства, используйте функцию k4a_device_get_serialnum() после открытия дескриптора.

В этом примере показано, как выделить оптимальный объем памяти для хранения серийного номера.

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);

Открыть устройство по умолчанию

В большинстве приложений к одному и тому же компьютеру будет присоединено только одно устройство Azure Kinect DK. Если необходимо подключиться только к одному ожидаемому устройству, можно вызвать k4a_device_open() с помощью index из K4A_DEVICE_DEFAULT, чтобы открыть первое устройство.

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;
}

Дальнейшие действия