擷取 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 範例,您可以在迴圈中呼叫 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 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 範例,您也可以