Udostępnij za pośrednictwem


Znajdź i otwórz urządzenie Azure Kinect

W tym artykule opisano, jak można znaleźć, a następnie otworzyć zestaw Azure Kinect DK. W tym artykule wyjaśniono sposób obsługi przypadku, w którym istnieje wiele urządzeń połączonych z maszyną.

Możesz również zapoznać się z przykładem zestawu SDK, który pokazuje, jak używać funkcji w tym artykule.

Omówiono następujące funkcje:

Odnajdywanie liczby połączonych urządzeń

Najpierw uzyskaj liczbę aktualnie połączonych urządzeń Azure Kinect przy użyciu polecenia k4a_device_get_installed_count().

uint32_t device_count = k4a_device_get_installed_count();

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

Otwieranie urządzenia

Aby uzyskać informacje o urządzeniu lub odczytywać z niego dane, musisz najpierw otworzyć uchwyt na urządzeniu przy użyciu polecenia 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 parametru k4a_device_open() wskazuje, które urządzenie ma być otwarte, jeśli istnieje więcej niż jeden połączony. Jeśli oczekujesz połączenia tylko jednego urządzenia, możesz przekazać argument lub K4A_DEVICE_DEFAULT 0, aby wskazać pierwsze urządzenie.

Za każdym razem, gdy otworzysz urządzenie, musisz wywołać k4a_device_close() je po zakończeniu korzystania z uchwytu. Żadne inne dojścia nie mogą być otwierane na tym samym urządzeniu, dopóki nie zamkniesz uchwytu.

Identyfikowanie określonego urządzenia

Urządzenia kolejności wyliczane przez indeks nie zmienią się, dopóki urządzenia nie zostaną dołączone lub odłączone. Aby zidentyfikować urządzenie fizyczne, należy użyć numeru seryjnego urządzenia.

Aby odczytać numer seryjny z urządzenia, użyj k4a_device_get_serialnum() funkcji po otwarciu uchwytu.

W tym przykładzie pokazano, jak przydzielić odpowiednią ilość pamięci do przechowywania numeru seryjnego.

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

Otwieranie urządzenia domyślnego

W większości aplikacji do tego samego komputera będzie dołączony tylko jeden zestaw Azure Kinect DK. Jeśli musisz połączyć się tylko z jednym oczekiwanym urządzeniem, możesz wywołać k4a_device_open() metodę z index , K4A_DEVICE_DEFAULT aby otworzyć pierwsze urządzenie.

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

Następne kroki