Table of Contents

Diagnosticar e corrigir problemas de jitter e drift de conteúdo em uma aplicação

"O conteúdo virtual está derivando", "os objetos estão tremendo" e "a posição está instável" são problemas que desenvolvedores encontram com frequência em aplicações de AR. Conteúdo instável pode prejudicar muito a imersão e até causar uma experiência ruim para o usuário.

Este artigo ajuda você a entender as causas de jitter e drift de conteúdo e fornece um processo sistemático de troubleshooting e otimização.

Distinguir "jitter normal" de "drift anormal"

Primeiro, precisamos estabelecer expectativas razoáveis. Implementar AR tracking de alta precisão em dispositivos móveis já é, por si só, um desafio. As situações a seguir estão dentro do intervalo normal. Elas não podem ser completamente eliminadas, mas podem ser otimizadas:

  • Jitter pequeno de alta frequência:

    • Sintoma: O objeto virtual apresenta uma oscilação sutil, em nível de milímetros.
    • Causa: Isso é causado pelo ruído físico dos sensores do dispositivo, pelos limites de precisão dos algoritmos de visual tracking e pelos pequenos tremores da mão ao segurar o dispositivo.
    • Exemplo: Ao observar de perto, por exemplo colocando um objeto virtual sobre uma mesa e chegando mais perto para vê-lo, esse pequeno jitter é normal.
  • Drift breve:

    • Sintoma: Quando o usuário move ou gira rapidamente o dispositivo, o objeto virtual apresenta um offset de posição por um curto período (0.5-1 segundo) e depois se recupera.
    • Causa: Durante movimentos rápidos, o erro acumulado da IMU (inertial measurement unit) e a latência de visual localization no sistema SLAM do dispositivo podem causar um breve position drift.
    • Exemplo: Em scenes dinâmicas, isso é aceitável. Se o objeto puder ser rapidamente "puxado de volta" para a posição correta, o sistema está funcionando de forma eficaz.

Já as situações a seguir são problemas anormais que precisam de troubleshooting e correção:

  • Drift de posição persistente e amplo: O objeto virtual se afasta lenta e continuamente da posição em que deveria estar, e não se recupera ou só se recupera depois de muito tempo.
  • Saltos ou flickering intensos: O objeto virtual salta muito na tela ou aparece e desaparece.
  • Posição relativa inconsistente em relação a objetos reais: O objeto virtual não consegue ficar "fixado" de forma estável a um objeto real.
Nota

Além disso, há um ponto importante a observar:
Para dispositivos executando em modos 0DoF, 3DoF ou 5DoF, a sensação de encaixe e realismo é inerentemente mais fraca do que em dispositivos 6DoF. Quando usuários se movem rapidamente, viram ou sobem e descem escadas, os objetos virtuais não conseguem acompanhar perfeitamente.
Portanto, nesses modos, fenômenos como conteúdo "flutuando no ar" ou "offset de posição" são limitações fundamentais da capacidade do dispositivo, e não a falha de "jitter ou drift de conteúdo" discutida neste artigo.
Para as diferenças de experiência entre diferentes modos xDoF, consulte a introdução em Best practices de navegação.

Processo sistemático de troubleshooting

Faça o troubleshooting na ordem abaixo, começando pelas causas mais prováveis.

Etapa 1: Ambiente externo e fatores de hardware (sem necessidade de alterar código)

  1. Verificação do ambiente físico:

    • Riqueza de textura
      Seu ambiente de teste é monótono demais? Grandes paredes brancas lisas, pisos polidos e superfícies de vidro podem fazer visual localization falhar ou gerar erros.
    • Objetos dinâmicos
      Há muitos objetos em movimento no ambiente, como multidões ou veículos em movimento? Objetos dinâmicos interferem em visual localization, mas esse problema costuma ser temporário.
    • Confusão de scene
      Existem áreas no ambiente que são muito fáceis de confundir, como halls de elevadores em entradas diferentes? Áreas visualmente semelhantes podem afetar localization e fazer o resultado de localization saltar entre áreas parecidas. Esse tipo de problema pode ser evitado configurando prior information adequada com antecedência.
  2. Verificação do hardware do dispositivo:

    • Aquecimento do dispositivo
      Após uma execução longa, o dispositivo fica muito quente? Superaquecimento pode causar CPU/GPU throttling e afetar a tracking performance do próprio sistema SLAM do dispositivo. Essa é a causa mais comum de drift persistente.
    • Desempenho do dispositivo
      Alguns dispositivos antigos são limitados pelo desempenho do hardware e pela precisão dos componentes, tornando scale drift mais provável e fazendo o conteúdo virtual derivar junto. Você pode tentar trocar de dispositivo para um teste comparativo e ajudar a determinar se o problema é causado por limitações do próprio dispositivo.

Etapa 2: Análise da qualidade da map e de localization (usando ferramentas externas)

  1. Usar Mega Toolbox:

    • Execute Mega Toolbox no mesmo local e observe a estabilidade da localization.
    • Se a localization do Toolbox também apresentar drift/jump: O problema está na map em si ou no fato de que o ambiente atual não é adequado para localization.
    • Se a localization do Toolbox for estável: O problema está na sua aplicação. Continue para a etapa 3.
  2. Executar EIF data em simulação no PC:

    • Reproduza os EIF data gravados no local.
    • Se a reprodução também apresentar drift/jump: Isso indica que a scene em si não é adequada para localization, ou que a map em si tem problemas, ou que o dispositivo que gravou o EIF possui scale drift em seu motion tracking.
    • Se a reprodução for estável: Isso indica que a scene em si é favorável a localization, e o problema pode vir de fatores durante a execução em realtime da sua aplicação, como aquecimento do dispositivo e throttling.

Etapa 3: Verificação da lógica interna da aplicação

  1. Atualização de pose:

    • Verifique se você aplicou smoothing adicional desnecessário aos pose data, como Lerp ou SmoothDamp em excesso, o que pode causar latência e sensação de drift.
    • Na maioria dos casos, usar diretamente a Pose original retornada pelo Mega é a abordagem mais estável.
  2. Correspondência do coordinate system:

    • Confirme que as relações de node entre seus objetos virtuais, scene camera, MegaTracker e objetos semelhantes estão corretas, e que os valores de local transform dos nodes sob MegaBlocks não foram modificados.
    • Configuração incorreta de node pode causar transformações incorretas de coordinate system, fazendo o rendering do conteúdo se comportar de forma imprevisível.

Lembrete especial: problemas de visual overlay em dispositivos headset OST

Depois de concluir a verificação da localization e da rendering logic, se você estiver usando um dispositivo headset OST (optical see-through), também precisa considerar uma categoria especial de situações.

Mesmo que o próprio dispositivo tenha boa capacidade de 6DoF motion tracking, às vezes ainda pode haver uma sensação ruim de encaixe quando objetos virtuais são sobrepostos ao physical space. Isso normalmente não é uma falha do Mega localization service, mas um fenômeno inerente causado pelos princípios ópticos dos dispositivos OST, como optical alignment error ou diferenças de eye calibration.

Para explicações detalhadas e métodos de avaliação desse tipo de problema, consulte Notas especiais para dispositivos OST.

Resumo e best practices

Após o troubleshooting acima, você deve ter identificado a causa raiz do jitter ou drift de conteúdo. Para ajudar você a revisar rapidamente e agir, a tabela abaixo resume sintomas comuns, possíveis causas e best practices. Com base no resultado do seu troubleshooting, encontre a solução correspondente na tabela.

Tipo de problema Possível causa Best practice
Jitter pequeno Ruído de sensores, limites do algoritmo Esse tipo de pequeno jitter é normal e geralmente não exige muita atenção
Drift após movimento rápido Latência SLAM, correção do algoritmo Oriente o usuário a mover o dispositivo suavemente. Se não se recuperar rapidamente, é preciso atenção adicional
Drift persistente amplo Falha de SLAM, diferenças de dispositivo Use outro dispositivo para cross-validation
Saltos/flickering intensos Scene confusa, ambiente desfavorável a localization Configure auxiliary prior information ou oriente o usuário
Posição relativa inconsistente em relação a objetos reais Erro de localization/map, erro de code logic Teste a partir de vários viewpoints e observe a posição do virtual object, corrigindo possíveis erros de código

Se o problema ainda existir depois do troubleshooting e das correções acima, envie um relatório detalhado por meio de Issue reporting junto com screen recordings, gravações de EIF data e logs detalhados.