检索 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 样本,可以在循环中结合 0 值 timeout_in_ms
调用 k4a_device_get_imu_sample()
,直到函数返回 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 样本,接下来还可以