Recuperare gli esempi di Azure Kinect IMU

Il dispositivo Azure Kinect consente l'accesso alle unità di movimento inerziali (IMU), compresi l'accelerometro e i tipi di giroscopio. Per accedere agli esempi di IMU, è necessario innanzitutto aprire e configurare il dispositivo, e poi acquisire i dati dell’IMU. Per altre informazioni, vedere Trovare e aprire dispositivo.

Gli esempi di IMU vengono generati a una frequenza molto più elevata rispetto alle immagini. Gli esempi vengono segnalati all'host a una frequenza inferiore rispetto a quando sono campionati. Quando si attende un esempio di IMU, di solito sono disponibili più esempi contemporaneamente.

Per informazioni dettagliate sulla frequenza di creazione di report dell’IMU, consultare le Specifiche hardware di Azure Kinect DK.

Configurare e avviare le fotocamere

Nota

I sensori IMU possono funzionare solo quando la fotocamera di profondità e/o la fotocamera a colori sono in esecuzione. I sensori IMU non possono funzionare da soli.

Per avviare le fotocamere, usare 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;
}

Accedere agli esempi di IMU

Ogni k4a_imu_sample_t contiene una lettura dell’accelerometro e del giroscopio acquisita quasi contemporaneamente.

È possibile visualizzare gli esempi di IMU nello stesso thread delle acquisizioni di immagini o in thread separati.

Per recuperare gli esempi di IMU appena disponibili, è possibile eseguire la chiamata k4a_device_get_imu_sample() nel proprio thread. L'API include anche un accodamento interno appena sufficiente per consentire di controllare gli esempi dopo che è stata restituita ogni acquisizione di immagini.

Poiché sono presenti alcune code interne di esempi di IMU, è possibile usare il modello seguente senza rimuovere alcun dato:

  1. Attendere l'acquisizione a qualsiasi frequenza di fotogrammi.
  2. Elaborare l'acquisizione.
  3. Recuperare tutti gli esempi di IMU in coda.
  4. Ripetere l'attesa dell'acquisizione successiva.

Per recuperare tutti gli esempi di IMU attualmente in coda, è possibile eseguire la chiamata k4a_device_get_imu_sample() con un timeout_in_ms valore pari a 0 in un ciclo fino a quando la funzione restituisce K4A_WAIT_RESULT_TIMEOUT. K4A_WAIT_RESULT_TIMEOUT indica che non sono presenti esempi in coda e che nessun esempio è arrivato nel timeout specificato.

Esempio di utilizzo

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

Passaggi successivi

Una volta che si è appreso come usare gli esempi di IMU è anche possibile