z6娱乐

z6娱乐

获取IMU数据

本文内容

● 配置并启动相机

● 获取IMU数据

● 用例

● 后续步骤


在 Femto Mega 设备中蕴含惯性活动单元 (IMU),,,,, ,, ,其中蕴含加快度传感器和陀螺仪。。。。。 若是要获取IMU数据,,,,, ,, ,首先必要打开设备,,,,, ,, ,而后再开启 IMU,,,,, ,, ,而后获取 IMU 数据。。。。。请参阅查找并打开设备。。。。。


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


有关 IMU 频率的具体信息,,,,, ,, ,请参阅 Femto Mega硬件规格。。。。。



配置并启动相机

备注:

Femto Mega的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数据,,,,, ,, ,接下来你还能够索求其他职能图像转换。。。。。

【网站地图】【sitemap】