Hämta Azure Kinect IMU-exempel
Azure Kinect-enheten ger åtkomst till Inertial Motion Units (IMUs), inklusive både accelerometer- och gyroskoptyperna. För att få åtkomst till IMUs-exempel måste du först öppna och konfigurera enheten och sedan samla in IMU-data. Mer information finns i hitta och öppna enheten.
IMU-exempel genereras med mycket högre frekvens än bilder. Exempel rapporteras till värden med en lägre hastighet än de samplas. När du väntar på ett IMU-exempel blir flera exempel ofta tillgängliga samtidigt.
Mer information om IMU-rapporteringsfrekvensen finns i maskinvaruspecifikationen för Azure Kinect DK.
Konfigurera och starta kameror
Kommentar
IMU-sensorer kan bara fungera när färgen och/eller djupkamerorna körs. IMU-sensorer kan inte fungera ensamma.
Starta kamerorna genom att använda 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;
}
Komma åt IMU-exempel
Varje k4a_imu_sample_t innehåller en accelerometer och gyroskopläsning som fångas på nästan samma gång.
Du kan hämta IMU-exemplen antingen på samma tråd som du får bildinspelningar eller på separata trådar.
Om du vill hämta IMU-exempel så snart de är tillgängliga kanske du vill anropa k4a_device_get_imu_sample()
på en egen tråd. API:et har också tillräckligt med interna köer så att du bara kan söka efter exempel efter att varje avbildningsfångst returneras.
Eftersom det finns en intern köning av IMU-exempel kan du använda följande mönster utan att ta bort några data:
- Vänta på en avbildning, i valfri bildfrekvens.
- Bearbeta avbildningen.
- Hämta alla IMU-exempel i kö.
- Upprepa väntan på nästa avbildning.
Om du vill hämta alla IMU-exempel i kö kan du anropa k4a_device_get_imu_sample()
med timeout_in_ms
0 i en loop tills funktionen returnerar K4A_WAIT_RESULT_TIMEOUT
. K4A_WAIT_RESULT_TIMEOUT
anger att det inte finns några köade exempel och att ingen har kommit till den angivna tidsgränsen.
Användningsexempel
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ästa steg
Nu när du vet hur du arbetar med IMU-exempel kan du också