Извлечение образцов Azure Kinect IMU
Устройство Azure Kinect предоставляет доступ к единицам движения по инерции (IMU), включая акселерометр и гироскоп. Чтобы получить доступ к образцам IMU, необходимо сначала открыть и настроить устройство, а затем сканировать данные IMU. Дополнительные сведения см. в разделе Поиск и открытие устройства.
Примеры IMU создаются с более высокой частотой, чем образы. Образцы выводятся на узел с более низкой скоростью, чем производится выборка. В процессе ожидания образца IMU несколько образцов часто становятся доступными одновременно.
Подробные сведения о частоте отчетов IMU см. в спецификации оборудования Azure Kinect DK.
Настройка и запуск камер
Примечание.
Датчики IMU могут работать только при включенных камерах глубины и (или) цвета. Датчики IMU не могут работать самостоятельно.
Чтобы запустить камеры, используйте 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;
}
Доступ к образцам IMU
Каждый k4a_imu_sample_t содержит запись показаний акселерометра и гироскопа, произведенную практически в одно и то же время.
Образцы IMU можно получить в том же потоке, в котором будут записываться образы, или в отдельных потоках.
Чтобы получить образцы IMU, как только они станут доступны, можно вызвать метод k4a_device_get_imu_sample()
в собственном потоке. API также имеет достаточный объем внутренней очереди, что позволяет проверять наличие образцов после возврата каждого образа.
Из-за некоторых нюансов внутренней очередности образцов IMU можно использовать следующий шаблон без потери данных:
- Подождите записи при любой частоте кадров.
- Обработка записи
- Получение всех примеров IMU в очереди.
- Повторите ожидание следующей записи.
Чтобы получить все образцы IMU в текущей очереди, можно вызвать k4a_device_get_imu_sample()
с timeout_in_ms
из 0 в цикле до тех пор, пока функция не вернет значение K4A_WAIT_RESULT_TIMEOUT
. K4A_WAIT_RESULT_TIMEOUT
указывает, что отсутствуют образцы в очереди, и они не поступили за указанное время ожидания.
Пример использования
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);
}
Следующие шаги
Теперь, когда вы умеете работать с образцами IMU, вы также можете