获取IMU数据


  • 南宫NG·28



  • 南宫NG·28

    获取IMU数据

    本文内容

    ● 配置并启动相机

    ● 获取IMU数据

    ● 用例

    ● 后续步骤

    Femto Bolt  设备中包含惯性运动单元 (IMU),其中包括加速度传感器和陀螺仪。 如果要获取IMU数据,首先需要打开设备,然后再开启 IMU,然后获取 IMU 数据。请参阅查找并打开设备

    由于IMU的采样频率比图像数据帧率高得多,而应用层获取 IMU 的频率低于 IMU 的采样频率,这样每次应用层接收IMU数据时,会同时收到多组 IMU 数据。

    有关 IMU 频率的详细信息,请参阅 Femto Bolt 硬件规格


    配置并启动相机

    备注:

    Femto Bolt的IMU和深度、彩色相机相互独立,可以单独输出IMU数据,这点和Aazure Kinect 不同,但是为了保持和Azure Kinect 的使用逻辑一致,还是先开启彩色或深度相机,然后才开启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数据,那IMU数据采集使用单独的线程,在线程内调用k4a_device_get_imu_sample()函数获取IMU数据。

    由于 IMU 数据首先会存入 SDK 内部的队列中,你可以在不丢弃任何数据的情况下实现对数据的获取和处理:

    1. 以一定频率去等待捕获数据(因缓存队列长度有限,频率不能太低,通常间隔不要超过100ms);

    2. 等待到捕获数据后对数据进行处理;

    3. 获取所有已存入队列的数据进行处理;

    4. 循环以上步骤。

    其中第三步可以在一个循环中传入 参数 timeout_in_ms 值为 0 调用 k4a_device_get_imu_sample(),直到函数返回 K4A_WAIT_RESULT_TIMEOUT。 K4A_WAIT_RESULT_TIMEOUT 表明队列中没有缓存数据,且在指定的超时内没有任何数据抵达。


    用例

    k4a_imu_sample_t imu_sample;// Capture a imu sampleswitch (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 readingsif (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数据,接下来你还可以探索其他功能图像转换

    友情链接: