Partager via


Récupérer des échantillons d’IMU Azure Kinect

L’appareil Azure Kinect donne accès aux unités de mesure inertielle (IMU), notamment des types accéléromètre et gyroscope. Pour accéder aux échantillons d’IMU, vous devez ouvrir et configurer votre appareil, puis capturer des données d’IMU. Pour plus d’informations, consultez Rechercher et ouvrir un appareil.

Les échantillons d’IMU sont générés à une fréquence sensiblement plus élevée que les images. Les échantillons sont signalés à l’hôte à un débit inférieur à celui de leur collecte. Lors de l’attente d’un échantillon d’IMU, il est fréquent que plusieurs échantillons deviennent disponibles en même temps.

Pour plus d’informations sur le taux de création de rapports sur les IMU, consultez les spécifications matérielles d’Azure Kinect DK.

Configurer et démarrer des caméras

Notes

Les capteurs IMU ne peuvent fonctionner que lorsque les caméras couleur et/ou de profondeur sont en cours d’exécution. Les capteurs IMU ne peuvent pas fonctionner isolément.

Pour démarrer les caméras, utilisez 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;
}

Accéder aux échantillons d’IMU

Chaque échantillon k4a_imu_sample_t contient des lectures d’accéléromètre et de gyroscope capturées presque en même temps.

Vous pouvez recevoir les échantillons d’IMU sur le même thread que celui sur lequel vous recevez les captures d’images ou sur des threads distincts.

Pour récupérer les échantillons d’IMU dès qu’ils sont disponibles, vous pouvez appeler k4a_device_get_imu_sample() sur son propre thread. L’API dispose également d’une mise en file d’attente interne suffisante pour vous permettre de vérifier les échantillons uniquement après le retour de chaque capture d’image.

Étant donné qu’il existe une mise en file d’attente interne des échantillons d’IMU, vous pouvez utiliser le modèle suivant sans supprimer de données :

  1. Attendez une capture, quelle que soit la fréquence des images.
  2. Traitez la capture.
  3. Récupérez tous les échantillons d’IMU mis en file d’attente.
  4. Répétez l’attente pour la capture suivante.

Pour récupérer tous les échantillons d’IMU actuellement en file d’attente, vous pouvez appeler la fonction k4a_device_get_imu_sample() avec un timeout_in_ms de 0 dans une boucle jusqu’à ce que la fonction retourne K4A_WAIT_RESULT_TIMEOUT. K4A_WAIT_RESULT_TIMEOUT indique qu’aucun échantillon n’est en file d’attente et n’est arrivé dans le délai spécifié.

Exemple d’utilisation

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

Étapes suivantes

Maintenant que vous savez comment utiliser les échantillons d’IMU, vous pouvez également