Conseguir a pose geoespacial da câmera do dispositivo

Depois de definir as configurações do app para usar a API Geospatial, chame ArEarth_getCameraGeospatialPose para receber um ArGeospatialPose que descreva o posicionamento geoespacial da câmera no frame mais recente. Essa pose, gerenciada em um objeto ArEarth, contém as seguintes informações:

  • Localização, expressa em latitude e longitude
  • Altitude
  • Orientação aproximada da direção em que o usuário está voltado no sistema de coordenadas EUS, com X+ apontando para o leste, Y+ para cima e Z+ para o sul.

Verificar o estado do rastreamento

Valores geoespaciais são válidos apenas enquanto ArEarth.ArTrackingState é ArTrackingState.AR_TRACKING_STATE_TRACKING e ArEarth.ArEarthState é AR_EARTH_STATE_ENABLED. Una todas as chamadas da API Geospatial em um bloco de controle ArEarth.ArTrackingState.

if (ar_earth != NULL) {
  ArTrackingState earth_tracking_state = AR_TRACKING_STATE_STOPPED;
  ArTrackable_getTrackingState(ar_session, (ArTrackable*)ar_earth,
                               &earth_tracking_state);
  if (earth_tracking_state == AR_TRACKING_STATE_TRACKING) {
    ArGeospatialPose* camera_geospatial_pose = NULL;
    ArGeospatialPose_create(ar_session, &camera_geospatial_pose);
    ArEarth_getCameraGeospatialPose(ar_session, ar_earth,
                                    camera_geospatial_pose);
    // camera_geospatial_pose contains geodetic location, rotation, and
    // confidences values.
    ArGeospatialPose_destroy(camera_geospatial_pose);
  }
}

Se ArEarth.ArTrackingState não se tornar ArTrackingState.AR_TRACKING_STATE_TRACKING, ArEarth.ArTrackingState poderá ser AR_TRACKING_STATE_PAUSED ou AR_TRACKING_STATE_STOPPED. Se nenhuma dessas condições for verdadeira, marque ArEarth.ArEarthState, que mostra outros estados de erro que podem impedir o rastreamento do objeto ArEarth.

Ajustar a pose para mais precisão

Quando o dispositivo está na posição vertical na orientação padrão, os ângulos de inclinação (X+) e de rolagem (Z+) tendem a ser precisos devido a um alinhamento natural com rastreamento em RA. No entanto, os ângulos de guinada (Y+) podem variar dependendo da disponibilidade dos dados do VPS e das condições temporais no local. Talvez seja necessário fazer ajustes para aumentar a precisão.

ArGeospatialPose_getOrientationYawAccuracy() fornece uma estimativa de precisão para os ângulos de guinada (Y+) de um determinado ArGeospatialPose. A precisão da guinada de orientação é um número que descreve o raio, em graus, do nível de confiança do 68o percentil ao redor dos ângulos de guinada retornados de ArGeospatialPose_getEastUpSouthQuaternion(). Em outras palavras, há 68% de chance de que o ângulo de guinada real da ArGeospatialPose seja preciso.

Valores maiores indicam menor acurácia. Por exemplo, se o ângulo de guinada estimado for de 60 graus e a precisão da guinada for de 10 graus, haverá uma probabilidade de 68% de que o ângulo de guinada real esteja entre 50 e 70 graus.

A seguir