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 샘플을 모두 검색하려면 함수가 K4A_WAIT_RESULT_TIMEOUT
을 반환할 때까지 루프에서 timeout_in_ms
가 0인 k4a_device_get_imu_sample()
을 호출할 수 있습니다. 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 샘플로 작업하는 방법을 배웠으므로 다음 작업을 수행할 수 있습니다.