本文內容
● 配置并啟動(dòng)相機
● 獲取IMU數據
● 用例
● 后續步驟
在 Femto Mega 設備中包含慣性運動(dòng)單元 (IMU),其中包括加速度傳感器和陀螺儀。 如果要獲取IMU數據,首先需要打開(kāi)設備,然后再開(kāi)啟 IMU,然后獲取 IMU 數據。請參閱查找并打開(kāi)設備。
由于IMU的采樣頻率比圖像數據幀率高得多,而應用層獲取 IMU 的頻率低于 IMU 的采樣頻率,這樣每次應用層接收IMU數據時(shí),會(huì )同時(shí)收到多組 IMU 數據。
有關(guān) IMU 頻率的詳細信息,請參閱 Femto Mega硬件規格。
配置并啟動(dòng)相機
備注:
Femto Mega的IMU和深度、彩色相機相互獨立,可以單獨輸出IMU數據,這點(diǎn)和Aazure Kinect 不同,但是為了保持和Azure Kinect 的使用邏輯一致,還是先開(kāi)啟彩色或深度相機,然后才開(kāi)啟IMU。
若要啟動(dòng)相機,請使用 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 數據
每個(gè) k4a_imu_sample_t 包含同一時(shí)間獲取的加速度和陀螺儀數據。
您可以在用于獲取圖像數據的同一線(xiàn)程 或者在不同的線(xiàn)程中獲取IMU數據。
如果要快速獲取IMU數據,那IMU數據采集使用單獨的線(xiàn)程,在線(xiàn)程內調用k4a_device_get_imu_sample()函數獲取IMU數據。
由于 IMU 數據首先會(huì )存入 SDK 內部的隊列中,你可以在不丟棄任何數據的情況下實(shí)現對數據的獲取和處理:
1. 以一定頻率去等待捕獲數據(因緩存隊列長(cháng)度有限,頻率不能太低,通常間隔不要超過(guò)100ms);
2. 等待到捕獲數據后對數據進(jìn)行處理;
3. 獲取所有已存入隊列的數據進(jìn)行處理;
4. 循環(huán)以上步驟。
其中第三步可以在一個(gè)循環(huán)中傳入 參數 timeout_in_ms 值為 0 調用 k4a_device_get_imu_sample(),直到函數返回 K4A_WAIT_RESULT_TIMEOUT。 K4A_WAIT_RESULT_TIMEOUT 表明隊列中沒(méi)有緩存數據,且在指定的超時(shí)內沒(méi)有任何數據抵達。
用例
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);}
后續步驟
現在你已經(jīng)掌握了如何獲取IMU數據,接下來(lái)你還可以探索其他功能圖像轉換。