Diagnosticare e correggere problemi di jitter e drift dei contenuti in un'applicazione
"Il contenuto virtuale si sposta", "gli oggetti tremano" e "la posizione non è stabile" sono problemi che gli sviluppatori incontrano spesso nelle applicazioni AR. Un contenuto instabile può compromettere gravemente l'immersione e persino causare una cattiva esperienza utente.
Questo articolo aiuta a comprendere le cause di jitter e drift dei contenuti e fornisce un processo sistematico di troubleshooting e ottimizzazione.
Distinguere tra "jitter normale" e "drift anomalo"
Per prima cosa è necessario definire aspettative ragionevoli. Realizzare AR tracking ad alta precisione su dispositivi mobili è già di per sé impegnativo. I casi seguenti rientrano nel range normale. Non possono essere eliminati completamente, ma possono essere ottimizzati:
Piccolo jitter ad alta frequenza:
- Sintomo: L'oggetto virtuale presenta una lieve oscillazione a livello di millimetri.
- Causa: È causato dal rumore fisico dei sensori del dispositivo, dai limiti di precisione degli algoritmi di visual tracking e dai piccoli tremori della mano che tiene il dispositivo.
- Esempio: Quando si osserva da vicino, ad esempio mettendo un oggetto virtuale su un tavolo e avvicinandosi per guardarlo, questo leggero jitter è normale.
Drift breve:
- Sintomo: Quando l'utente muove o ruota rapidamente il dispositivo, l'oggetto virtuale mostra un offset di posizione per un breve periodo (0.5-1 secondo), poi si ripristina.
- Causa: Durante movimenti rapidi, l'errore accumulato della IMU (inertial measurement unit) e la latenza della visual localization nel sistema SLAM del dispositivo possono causare un breve position drift.
- Esempio: In scene dinamiche, questo è accettabile. Se l'oggetto può essere rapidamente "riportato" alla posizione corretta, significa che il sistema è efficace.
I casi seguenti sono invece problemi anomali che richiedono troubleshooting e correzione:
- Drift di posizione persistente e ampio: L'oggetto virtuale si allontana lentamente e continuamente dalla posizione in cui dovrebbe trovarsi e non si ripristina, oppure si ripristina solo dopo molto tempo.
- Salti o sfarfallii intensi: L'oggetto virtuale salta molto sullo schermo oppure appare e scompare.
- Posizione relativa incoerente rispetto agli oggetti reali: L'oggetto virtuale non riesce a restare stabilmente "fissato" a un oggetto reale.
Nota
Inoltre, c'è un punto importante da notare:
Per i dispositivi che funzionano in modalità 0DoF, 3DoF o 5DoF, il senso di allineamento e realismo è intrinsecamente più debole rispetto ai dispositivi 6DoF. Quando gli utenti si muovono rapidamente, girano o salgono e scendono le scale, gli oggetti virtuali non possono seguirli perfettamente.
Pertanto, in queste modalità, fenomeni come contenuti che "fluttuano nell'aria" o "offset di posizione" sono limitazioni fondamentali delle capacità del dispositivo, non il guasto di "jitter o drift dei contenuti" discusso in questo articolo.
Per le differenze di esperienza tra le diverse modalità xDoF, vedere l'introduzione in Best practice di navigazione.
Processo sistematico di troubleshooting
Eseguire il troubleshooting nell'ordine seguente, iniziando dalle cause più probabili.
Passaggio 1: Fattori di ambiente esterno e hardware (senza modifiche al codice)
Controllo dell'ambiente fisico:
- Ricchezza delle texture
L'ambiente di test è troppo monotono? Grandi pareti bianche uniformi, pavimenti lisci e superfici in vetro possono causare errori o fallimenti della visual localization. - Oggetti dinamici
Nell'ambiente sono presenti molti oggetti in movimento, come folle o veicoli in movimento? Gli oggetti dinamici interferiscono con la visual localization, ma questo problema è spesso temporaneo. - Confusione della scena
Nell'ambiente esistono aree molto facili da confondere, come ingressi agli ascensori in punti diversi? Aree visivamente simili possono influenzare la localization e far saltare il risultato tra aree simili. Questo tipo di problema può essere evitato impostando in anticipo prior information adeguata.
- Ricchezza delle texture
Controllo dell'hardware del dispositivo:
- Riscaldamento del dispositivo
Dopo un funzionamento prolungato, il dispositivo si scalda molto? Il surriscaldamento può causare throttling di CPU/GPU e influenzare la tracking performance del sistema SLAM del dispositivo stesso. È la causa più comune di drift persistente. - Prestazioni del dispositivo
Alcuni dispositivi vecchi sono limitati dalle prestazioni hardware e dalla precisione dei componenti, quindi sono più soggetti a scale drift, che porta anche il contenuto virtuale a driftare. È possibile provare un altro dispositivo per un test comparativo, così da capire se il problema è causato dai limiti del dispositivo stesso.
- Riscaldamento del dispositivo
Passaggio 2: Analisi della qualità di map e localization (con strumenti esterni)
Usare Mega Toolbox:
- Eseguire Mega Toolbox nella stessa posizione e osservare la stabilità della sua localization.
- Se anche la localization di Toolbox drifta o salta: Il problema è nella map stessa o l'ambiente attuale non è adatto alla localization.
- Se la localization di Toolbox è stabile: Il problema è nella vostra applicazione. Continuare con il passaggio 3.
Eseguire EIF data in simulazione PC:
- Riprodurre gli EIF data registrati sul posto.
- Se anche la riproduzione drifta o salta: Significa che la scena stessa non è adatta alla localization, oppure la map stessa ha problemi, oppure il dispositivo che ha registrato l'EIF presenta scale drift nel motion tracking.
- Se la riproduzione è stabile: Significa che la scena stessa è favorevole alla localization, e il problema potrebbe derivare da fattori durante l'esecuzione realtime della vostra applicazione, come riscaldamento del dispositivo e throttling.
Passaggio 3: Controllo della logica interna dell'applicazione
Aggiornamento della pose:
- Verificare se è stato applicato smoothing aggiuntivo non necessario ai pose data, come
LerpoSmoothDampeccessivi, che possono invece causare latenza e una sensazione di drift. - Nella maggior parte dei casi, usare direttamente la Pose originale restituita da Mega è l'approccio più stabile.
- Verificare se è stato applicato smoothing aggiuntivo non necessario ai pose data, come
Corrispondenza del coordinate system:
- Confermare che le relazioni dei node tra gli oggetti virtuali, la scene camera,
MegaTrackere oggetti simili siano corrette, e che i valori dilocal transformdei node sottoMegaBlocksnon siano stati modificati. - Una configurazione errata dei node può causare trasformazioni del coordinate system non corrette, producendo comportamenti imprevedibili nel rendering del contenuto.
- Confermare che le relazioni dei node tra gli oggetti virtuali, la scene camera,
Promemoria speciale: problemi di visual overlay sui dispositivi headset OST
Dopo aver completato il controllo della localization e della rendering logic, se si usa un dispositivo headset OST (optical see-through), occorre considerare anche una categoria speciale di problemi.
Anche se il dispositivo stesso dispone di buone capacità di 6DoF motion tracking, a volte può comunque verificarsi una scarsa sensazione di allineamento quando gli oggetti virtuali sono sovrapposti al physical space. Di solito non si tratta di un guasto del Mega localization service, ma di un fenomeno intrinseco causato dai principi ottici dei dispositivi OST, ad esempio errori di optical alignment o differenze di eye calibration.
Per spiegazioni dettagliate e metodi di valutazione di questo tipo di problema, vedere Note speciali per i dispositivi OST.
Riepilogo e best practice
Dopo il troubleshooting precedente, dovreste aver individuato la causa principale del jitter o drift dei contenuti. Per aiutarvi a rivedere rapidamente e ad agire, la tabella seguente riassume fenomeni comuni, possibili cause e best practice. In base al risultato del troubleshooting, trovate nella tabella la soluzione corrispondente.
| Tipo di problema | Possibile causa | Best practice |
|---|---|---|
| Piccolo jitter | Rumore dei sensori, limiti dell'algoritmo | Questo tipo di piccolo jitter è normale e di solito non richiede molta attenzione |
| Drift dopo movimento rapido | Latenza SLAM, correzione dell'algoritmo | Guidare l'utente a muovere il dispositivo in modo fluido. Se non si ripristina rapidamente, serve ulteriore attenzione |
| Drift persistente e ampio | Guasto SLAM, differenze tra dispositivi | Usare un altro dispositivo per cross-validation |
| Salti/sfarfallii intensi | Scena confondibile, ambiente non favorevole alla localization | Impostare auxiliary prior information o guidare l'utente |
| Posizione relativa incoerente rispetto agli oggetti reali | Errore di localization/map, errore di code logic | Testare da più viewpoints e osservare la posizione del virtual object, correggendo possibili errori di codice |
Se dopo il troubleshooting e le correzioni sopra descritti il problema persiste, inviare un report dettagliato tramite Issue reporting insieme a screen recording, registrazioni EIF data e log dettagliati.