Udostępnij za pośrednictwem


Pobieranie przykładów dla zestawu Azure Kinect IMU

Urządzenie Azure Kinect zapewnia dostęp do jednostek ruchu inertial (IMU), w tym zarówno akcelerometru, jak i typów ż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 znajdowanie i otwieranie urządzenia.

Próbki IMU są generowane z znacznie wyższą częstotliwością niż obrazy. Próbki są zgłaszane do hosta z niższą szybkością niż próbkowane. Podczas oczekiwania na przykład IMU wiele próbek będzie często dostępnych jednocześnie.

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

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 akcelerometr i odczyt żyroskopu przechwycony niemal w tym samym czasie.

Przykłady IMU można pobrać w tym samym wątku, który otrzymujesz przechwytywane obrazy, lub w osobnych wątkach.

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

Ponieważ istnieje kilka wewnętrznych kolejek przykładów IMU, możesz użyć następującego wzorca bez porzucania żadnych danych:

  1. Zaczekaj na przechwycenie, przy dowolnej szybkości klatek.
  2. Przetwarzanie przechwytywania.
  3. Pobierz wszystkie w kolejce przykłady IMU.
  4. Powtórz oczekiwanie na następne przechwycenie.

Aby pobrać wszystkie aktualnie w kolejce przykłady IMU, można wywołać k4a_device_get_imu_sample() metodę z wartością timeout_in_ms 0 w pętli, dopóki funkcja nie zwróci K4A_WAIT_RESULT_TIMEOUTwartości . K4A_WAIT_RESULT_TIMEOUT wskazuje, że nie ma żadnych przykładów w kolejce i żaden nie dotarł do określonego limitu czasu.

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 wiesz, jak pracować z przykładami IMU, możesz również