Recuperar exemplos da IMU do Azure Kinect
O dispositivo Azure Kinect fornece acesso às IMUs (Unidades de Movimento Inercial), incluindo os tipos de acelerômetro e giroscópio. Para acessar exemplos de IMUs, primeiro você precisa abrir e configurar o dispositivo e, em seguida, capturar os dados da IMU. Para obter mais informações, confira localizar e abrir dispositivo.
Os exemplos de IMU são gerados com uma frequência muito maior do que as imagens. Os exemplos são relatados ao host a uma taxa mais baixa do que a que foram amostrados. Aguardando um exemplo de IMU, vários exemplos frequentemente serão disponibilizados ao mesmo tempo.
Confira a especificação de hardware do Azure Kinect DK para obter detalhes sobre a taxa de relatórios da IMU.
Configurar e iniciar câmeras
Observação
Os sensores da IMU só podem funcionar quando as câmeras coloridas e/ou de profundidade estão em execução. Os sensores da IMU não podem funcionar sozinhos.
Para iniciar as câmeras, use 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;
}
Acessar exemplos de IMU
Cada k4a_imu_sample_t contém uma leitura de acelerômetro e giroscópio capturada quase ao mesmo tempo.
Você pode obter os exemplos de IMU no mesmo thread em que obtém capturas de imagem ou em threads separados.
Para recuperar exemplos de IMU assim que estiverem disponíveis, talvez você queira chamar k4a_device_get_imu_sample()
no próprio thread. A API também tem um enfileiramento interno suficiente para permitir que você verifique apenas os exemplos depois que cada captura de imagem é retornada.
Como há algum enfileiramento interno de exemplos de IMU, você pode usar o seguinte padrão sem remover os dados:
- Aguarde uma captura, em qualquer taxa de quadros.
- Processar a captura.
- Recuperar todos os exemplos de IMU enfileirados.
- Repetir a espera na próxima captura.
Para recuperar todos os exemplos de IMU enfileirados no momento, você pode chamar k4a_device_get_imu_sample()
com um timeout_in_ms
de 0 em um loop até que a função retorne K4A_WAIT_RESULT_TIMEOUT
. K4A_WAIT_RESULT_TIMEOUT
indica que não há amostras enfileiradas e que nenhuma chegou no tempo limite especificado.
Exemplo de uso
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);
}
Próximas etapas
Agora que você sabe como trabalhar com exemplos de IMU, você também pode