Freigeben über


Abrufen von Azure Kinect IMU-Beispielen

Das Azure Kinect-Gerät bietet Zugriff auf Inertial Motion Units (IMUs), einschließlich der Beschleunigungsmesser- und Gyroskoptypen. Um auf IMUs-Beispiele zuzugreifen, müssen Sie zuerst Ihr Gerät öffnen und konfigurieren und dann IMU-Daten erfassen. Weitere Informationen finden Sie unter Suchen und Öffnen des Geräts.

IMU-Beispiele werden mit einer viel höheren Häufigkeit als Bilder generiert. Stichproben werden dem Host mit einer geringeren Frequenz gemeldet, als sie erfasst werden. Wenn Sie auf ein IMU-Beispiel warten, werden häufig mehrere Beispiele gleichzeitig verfügbar.

Details zur IMU-Berichterstattungsrate finden Sie in der Azure Kinect DK-Hardwarespezifikation .

Konfigurieren und Starten von Kameras

Hinweis

IMU-Sensoren können nur arbeiten, wenn die Farb- und/oder die Tiefenkameras laufen. IMU-Sensoren können nicht allein funktionieren.

Um die Kameras zu starten, verwenden Sie 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;
}

Zugang zu IMU-Mustern

Jedes k4a_imu_sample_t enthält einen Beschleunigungsmesser und einen Gyroskop-Lesewert, der fast gleichzeitig erfasst wird.

Sie können die IMU-Daten entweder im selben Thread abrufen, in dem Sie Bildaufnahmen erhalten, oder auf separaten Threads.

Um IMU-Beispiele abzurufen, sobald sie verfügbar sind, sollten Sie k4a_device_get_imu_sample() in einem eigenen Thread aufrufen. Die API verfügt außerdem über ausreichende interne Warteschlangen, damit Sie nur nach der Rückgabe jeder Bildaufnahme nach Beispielen suchen können.

Da es eine interne Warteschlange von IMU-Daten gibt, können Sie das folgende Muster verwenden, ohne Daten zu verlieren:

  1. Warten Sie auf eine Aufnahme, bei jeder Framesrate.
  2. Verarbeiten Sie die Erfassung.
  3. Rufen Sie alle in der Warteschlange befindlichen IMU-Messdaten ab.
  4. Wiederholen Sie das Warten auf die nächste Aufnahme.

Um alle aktuell in die Warteschlange eingereihten IMU-Daten abzurufen, können Sie `k4a_device_get_imu_sample()` mit einem `timeout_in_ms` von 0 in einer Schleife aufrufen, bis die Funktion `K4A_WAIT_RESULT_TIMEOUT` liefert. K4A_WAIT_RESULT_TIMEOUT gibt an, dass keine Beispiele in der Warteschlange vorhanden sind und keine innerhalb der angegebenen Zeitüberschreitung eingetroffen sind.

Verwendungsbeispiel

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

Nächste Schritte

Jetzt wissen Sie, wie Sie mit IMU-Mustern arbeiten, und Sie können auch