Извлечение образцов 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 можно использовать следующий шаблон без потери данных:

  1. Подождите записи при любой частоте кадров.
  2. Обработка записи
  3. Получение всех примеров IMU в очереди.
  4. Повторите ожидание следующей записи.

Чтобы получить все образцы 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, вы также можете