Udostępnij za pośrednictwem


Pobierz próbki z Azure Kinect IMU

Urządzenie Azure Kinect zapewnia dostęp do jednostek pomiarowych ruchu inercyjnego (IMU), w tym zarówno akcelerometru, jak i żyroskopu. Aby uzyskać dostęp do przykładów jednostek IMU, musisz najpierw otworzyć i skonfigurować urządzenie, a następnie przechwycić dane IMU. Aby uzyskać więcej informacji, zobacz , jak znaleźć i otworzyć urządzenie.

Próbki IMU są generowane z znacznie wyższą częstotliwością niż obrazy. Próbki są przesyłane do serwera z niższą szybkością niż są pobierane. Podczas oczekiwania na próbkę IMU często staje się dostępnych jednocześnie wiele próbek.

Aby uzyskać szczegółowe informacje na temat współczynnika raportowania IMU, zobacz specyfikację sprzętu zestawu Azure Kinect DK .

Konfigurowanie i uruchamianie kamer

Uwaga

Czujniki IMU mogą działać tylko wtedy, gdy są uruchomione kamery koloru i/lub głębokości. Czujniki IMU nie mogą działać samodzielnie.

Aby uruchomić kamery, użyj k4a_device_start_cameras().

k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
config.camera_fps = K4A_FRAMES_PER_SECOND_30;
config.color_format = K4A_IMAGE_FORMAT_COLOR_MJPG;
config.color_resolution = K4A_COLOR_RESOLUTION_2160P;

if (K4A_RESULT_SUCCEEDED != k4a_device_start_cameras(device, &config))
{
    printf("Failed to start cameras\n");
    goto Exit;
}

if (K4A_RESULT_SUCCEEDED != k4a_device_start_imu(device))
{
    printf("Failed to start imu\n");
    goto Exit;
}

Uzyskiwanie dostępu do przykładów IMU

Każdy k4a_imu_sample_t zawiera odczyty z akcelerometru i żyroskopu przechwycone niemal w tym samym czasie.

Próbki IMU można pobrać albo w tym samym wątku, co obrazy, albo w oddzielnych wątkach.

Aby pobrać dane IMU, gdy tylko są dostępne, możesz wywołać k4a_device_get_imu_sample() w oddzielnym wątku. Interfejs API ma również wystarczającą wewnętrzną kolejkę, aby umożliwić sprawdzanie próbek dopiero po zakończeniu zwracania każdego przechwycenia obrazu.

Ponieważ istnieje pewne wewnętrzne kolejkowanie próbek IMU, możesz użyć następującego wzorca bez pominięcia jakichkolwiek danych.

  1. Zaczekaj na przechwycenie, przy dowolnej liczbie klatek na sekundę.
  2. Przetwórz przechwytywanie.
  3. Pobierz wszystkie zakolejkowane próbki IMU.
  4. Powtórz oczekiwanie na kolejne przechwycenie.

Aby pobrać wszystkie aktualnie oczekujące w kolejce próbki IMU, możesz wywoływać k4a_device_get_imu_sample() z timeout_in_ms równym 0 w pętli, aż funkcja zwróci K4A_WAIT_RESULT_TIMEOUT. K4A_WAIT_RESULT_TIMEOUT wskazuje, że nie ma żadnych próbek w kolejce i żadna nie dotarła w określonym czasie limitu.

Przykład użycia

k4a_imu_sample_t imu_sample;

// Capture a imu sample
switch (k4a_device_get_imu_sample(device, &imu_sample, TIMEOUT_IN_MS))
{
case K4A_WAIT_RESULT_SUCCEEDED:
    break;
case K4A_WAIT_RESULT_TIMEOUT:
    printf("Timed out waiting for a imu sample\n");
    continue;
    break;
case K4A_WAIT_RESULT_FAILED:
    printf("Failed to read a imu sample\n");
    goto Exit;
}

// Access the accelerometer readings
if (imu_sample != NULL)
{
    printf(" | Accelerometer temperature:%.2f x:%.4f y:%.4f z: %.4f\n",
            imu_sample.temperature,
            imu_sample.acc_sample.xyz.x,
            imu_sample.acc_sample.xyz.y,
            imu_sample.acc_sample.xyz.z);
}

Następne kroki

Teraz, gdy wiesz, jak pracować z próbkami z IMU, możesz również