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)
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.
- Riqueza de textura
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.
- Aquecimento do dispositivo
Etapa 2: Análise da qualidade da map e de localization (usando ferramentas externas)
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.
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
Atualização de pose:
- Verifique se você aplicou smoothing adicional desnecessário aos pose data, como
LerpouSmoothDampem 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.
- Verifique se você aplicou smoothing adicional desnecessário aos pose data, como
Correspondência do coordinate system:
- Confirme que as relações de node entre seus objetos virtuais, scene camera,
MegaTrackere objetos semelhantes estão corretas, e que os valores delocal transformdos nodes sobMegaBlocksnã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.
- Confirme que as relações de node entre seus objetos virtuais, scene camera,
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.