Sdílet prostřednictvím


Vyhledání a otevření zařízení Azure Kinect

Tento článek popisuje, jak najít a pak otevřít Azure Kinect DK. Tento článek vysvětluje, jak vyřešit případ, kdy je k vašemu počítači připojeno více zařízení.

Můžete se také podívat na příklad výčtu sady SDK, který ukazuje, jak používat funkce v tomto článku.

Probíráme následující funkce:

Zjištění počtu připojených zařízení

Nejprve získejte počet aktuálně připojených zařízení Azure Kinect pomocí k4a_device_get_installed_count().

uint32_t device_count = k4a_device_get_installed_count();

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

Otevření zařízení

Pokud chcete získat informace o zařízení nebo číst data z něj, musíte nejprve otevřít popisovač zařízení pomocí 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);
}

Parametr index k4a_device_open() indikuje, které zařízení se má otevřít, pokud je připojených více zařízení. Pokud očekáváte, že se připojí jenom jedno zařízení, můžete předat argument K4A_DEVICE_DEFAULT 0 označující první zařízení.

Kdykoli otevřete zařízení, které potřebujete zavolat k4a_device_close() , až budete hotovi pomocí popisovače. Žádné další popisovače nelze otevřít na stejném zařízení, dokud nezavřete úchyt.

Identifikace konkrétního zařízení

Pořadí zařízení vyčíslení podle indexu se nezmění, dokud se zařízení nepřipojí nebo neodpojí. K identifikaci fyzického zařízení byste měli použít sériové číslo zařízení.

Pokud chcete přečíst sériové číslo ze zařízení, použijte k4a_device_get_serialnum() funkci po otevření úchytu.

Tento příklad ukazuje, jak přidělit správné množství paměti pro uložení sériového čísla.

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

Otevření výchozího zařízení

Ve většině aplikací bude k jednomu počítači připojený jenom jeden Azure Kinect DK. Pokud se potřebujete připojit jenom k jednomu očekávanému zařízení, můžete zavolat k4a_device_open() , index K4A_DEVICE_DEFAULT abyste otevřeli první zařízení.

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

Další kroky