Controllare il processo di tracciamento Mega
Questo articolo descrive come controllare le diverse funzioni e i parametri nel processo di tracciamento Mega per soddisfare le esigenze di diversi scenari di applicazione.
Prima di iniziare
Flusso di lavoro del tracker
Il flusso di lavoro del tracker è il seguente:
flowchart LR
subgraph startup_graph[Avvio]
direction TB
sstart((Avvio della sessione))
create[Creazione nativa]
load(Caricamento del target)
init_g[[Inizializzazione]]
end
subgraph init_graph[Inizializzazione]
direction TB
init_{Inizializzazione 6DoF riuscita<br>o non 6DoF}
init[[Processo di inizializzazione del tracciamento locale]]
localization_g[[Localizzazione iniziale]]
end
subgraph localization_graph[Localizzazione iniziale]
direction TB
localize__{Localizzazione attivata e<br>superato l'intervallo di richiesta}
localize[Localizzazione云端]
localize_{Localizzato il blocco e<br>blocco caricato}
tracking_g[[Tracciamento]]
end
subgraph tracking_graph[Tracciamento]
direction TB
tracking[[Tracciamento continuo]]
localizet_{Localizzazione attivata e<br>superato l'intervallo di richiesta}
localize2[Localizzazione云端]
localize2_{Localizzato il blocco e<br>blocco caricato}
localization_g2[[Localizzazione iniziale]]
end
subgraph stopping_graph[Arresto]
direction TB
unload(Scaricamento del target)
dispose[Distruzione nativa]
sstop([Arresto della sessione])
end
sstart --> create --> load --> init_g
init --> init_ --> |Sì| localization_g
localize --> localize_ --> |Sì| tracking_g
localize_ --> |No| localize__ --> |Sì| localize
unload --> dispose --> sstop
init_ --> |No| init
tracking --> localizet_ --> |Sì| localize2 --> localize2_ --> |Sì| tracking
localizet_ --> |No| tracking
localize2_ --> |No| localization_g2
startup_graph --> init_graph
init_graph --> localization_graph
localization_graph --> tracking_graph
tracking_graph --> localization_graph
tracking_graph --> stopping_graph
Il flusso è grossomodo suddiviso in diverse fasi:
- Avvio:
- Dopo l'avvio della sessione, il tracker dello strato nativo viene creato.
- Dopo Start() del target stesso, viene caricato nel tracker corrispondente.
- Inizializzazione:
- Quando si utilizza la sorgente di frame 6DoF, si entra nel processo di inizializzazione del tracciamento locale.
- Quando si utilizza una sorgente di frame non 6DoF, la fase di inizializzazione viene saltata e si passa direttamente alla fase di localizzazione iniziale.
- Questo processo potrebbe richiedere del tempo, in relazione alla complessità della scena e alle prestazioni del dispositivo, e di solito dipende dall'algoritmo utilizzato a livello inferiore dalla sorgente di frame.
- Con la configurazione predefinita, il contenuto di questa fase non viene visualizzato. È possibile controllare questo comportamento tramite le opzioni del componente ActiveController.
- Localizzazione iniziale:
- Se la localizzazione è attivata e è superato l'intervallo di richiesta, il tracker invia una richiesta di localizzazione al cloud.
- Dopo una localizzazione riuscita, se il blocco corrispondente all'id restituito dal servizio di localizzazione è stato caricato, si entra nella fase di tracciamento; se il blocco non è stato caricato, si continua ad aspettare il completamento del caricamento del blocco e la prossima richiesta di localizzazione.
- Dopo una localizzazione fallita, il tracker continua ad aspettare la prossima richiesta di localizzazione.
- Questo processo potrebbe richiedere del tempo, a seconda della facilità di localizzazione della scena e delle condizioni di rete.
- Con la configurazione predefinita, il contenuto di questa fase non viene visualizzato. È possibile controllare questo comportamento tramite le opzioni del componente ActiveController.
- Se la localizzazione è attivata e è superato l'intervallo di richiesta, il tracker invia una richiesta di localizzazione al cloud.
- Tracciamento:
- Il tracker continua a tracciare il blocco corrente.
- Se la localizzazione è attivata e è superato l'intervallo di richiesta, il tracker invia una richiesta di localizzazione al cloud.
- Dopo una localizzazione riuscita, se l'id restituito dal servizio di localizzazione non è cambiato, si continua a tracciare; se l'id è cambiato e il blocco è stato caricato, si passa al nuovo blocco e si continua a tracciare; se l'id è cambiato e il blocco non è stato caricato, si continua ad aspettare il completamento del caricamento del blocco e la prossima richiesta di localizzazione.
- Dopo una localizzazione fallita, il tracker continua a tracciare il blocco corrente e aspetta la prossima richiesta di localizzazione.
- Con la configurazione predefinita, in questa fase viene visualizzato solo il contenuto sotto il nodo del target in stato di tracciamento (TargetController.IsTracked ==
true). È possibile controllare questo comportamento tramite le opzioni del componente ActiveController.
- Arresto:
- Dopo l'arresto della sessione, il target viene scaricato e il tracker dello strato nativo viene distrutto.
Regolare il livello di supporto del dispositivo
La proprietà MegaTrackerFrameFilter.MinInputFrameLevel di MegaTrackerFrameFilter viene utilizzata per specificare il livello minimo di dispositivo supportato da Mega.
![]()
Mega può funzionare su quasi tutti i tipi di sorgenti di frame, ma diverse sorgenti di frame hanno effetti diversi sull'effetto di tracciamento.
Per impostazione predefinita, Mega seleziona la sorgente di frame di livello più alto supportato dal dispositivo per il tracciamento. La sessione che supporta Mega con la configurazione predefinita è già configurata con le sorgenti di frame che supportano 6DoF e 5DoF.
Per supportare una certa sorgente di frame durante il funzionamento di Mega, sono necessarie due condizioni:
- La sorgente di frame richiesta deve essere presente nel gruppo di sorgenti di frame opzionali della sessione.
- MegaTrackerFrameFilter.MinInputFrameLevel deve essere maggiore o uguale al livello CameraTransformType della sorgente di frame richiesta.
Ad esempio, per supportare il tracciamento 3DoF nella sessione predefinita, è necessario:
- Aggiungere ThreeDofCameraDeviceFrameSource al gruppo di sorgenti di frame della sessione.
- Modificare MegaTrackerFrameFilter.MinInputFrameLevel in ThreeDof.
Un altro esempio: per rimuovere il supporto per il tracciamento 5DoF nella sessione predefinita, è necessario:
- Rimuovere InertialCameraDeviceFrameSource dal gruppo di sorgenti di frame della sessione.
- Modificare MegaTrackerFrameFilter.MinInputFrameLevel in SixDof (anche se non si modifica, poiché non ci sono sorgenti di frame 5DoF, il 5DoF non verrà utilizzato).
Quando non è disponibile una sorgente di frame che soddisfa le condizioni, l'assemblaggio della sessione fallisce.
Comprendere lo stato attuale del sistema
Nella configurazione predefinita della sessione, i messaggi dell'interfaccia utente vengono visualizzati sullo schermo, contenenti informazioni sullo stato di tracciamento di Mega.
Quando il posizionamento ha successo, le informazioni del servizio Mega includeranno il testo di stato Found; quando il posizionamento fallisce, le informazioni del servizio Mega includeranno il testo di stato NotFound.
I blocchi già caricati vengono visualizzati come Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Qui <objName> è il nome dell'oggetto di scena corrispondente al blocco, <name> è il nome del blocco, <id> è l'ID del blocco. trackingStatus può essere Tracking o NotTracking, che indicano rispettivamente se il blocco è attualmente in tracciamento o meno.
![]()
Quando il posizionamento ha successo, le informazioni sui blocchi che sono stati posizionati ma non caricati vengono visualizzate come Block [scnObj=?]: <name> (<id>).
![]()
Consiglio
NotFound è uno stato normale, che si verifica frequentemente durante l'intero processo di lavoro di Mega, e il tracciamento continua ancora quando appare questo stato. In genere, nello sviluppo dell'applicazione non è necessario gestire in modo speciale lo stato NotFound.
Utilizzando l'evento MegaTrackerFrameFilter.LocalizationRespond è possibile ottenere lo stato di posizionamento corrente, per capire se il sistema ha trovato o meno l'obiettivo di tracciamento.
Il seguente codice mostra come utilizzare questo evento e i metodi di gestione comuni per gli stati anomali a cui l'applicazione deve prestare attenzione:
private void Awake()
{
megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
var status = response.Status;
wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
if (wakingUpCount >= 5)
{
// Il servizio si sta svegliando, è necessario far attendere l'utente finale
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// QPS superato, alcuni utenti finali potrebbero fallire il posizionamento in modo casuale (qualità complessiva del tracciamento ridotta)
// In questo caso, di solito è necessario pagare per aumentare il limite QPS per garantire la qualità del tracciamento con il volume attuale di utenti
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// Token scaduto, questo si verifica solo quando si accede al servizio tramite l'interfaccia Token
// Per risolvere questo problema, l'applicazione deve richiedere il Token al proprio backend e chiamare MegaTrackerFrameFilter.UpdateToken per aggiornarlo
}
}
Se l'applicazione incontra frequentemente lo stato MegaTrackerLocalizationStatus.RequestTimeout, di solito indica che le condizioni di rete del dispositivo per connettersi al servizio sono scarse. Si consiglia di ottimizzare l'ambiente di rete per migliorare la qualità del tracciamento. In scenari in cui le condizioni di rete non possono essere migliorate, si può considerare di aumentare il timeout della richiesta.
Nota
Non è possibile ottenere la pose restituita dal posizionamento tramite questo evento.
In effetti, la pose restituita dal posizionamento non è necessaria nello sviluppo dell'applicazione. EasyAR calcolerà una pose più accurata tramite un algoritmo locale dopo il ritorno del posizionamento e la restituirà allo sviluppatore per l'uso. Questa pose è già riflessa nel transform del blocco, si può fare riferimento a Ottenere i risultati di esecuzione della sessione.
Sospendi e riprendi
Le funzioni di tracciamento e localizzazione di Mega possono essere sospese e riprese separatamente.
Pausa del tracciamento
Impostando MegaTrackerFrameFilter.enabled su false, è possibile mettere in pausa il tracciamento.
Per impostazione predefinita, dopo la pausa del tracciamento, tutto il contenuto sotto i nodi block verrà nascosto.
暂停定位
Impostare MegaTrackerFrameFilter.EnableLocalization su false consente di mettere in pausa la localizzazione.
Avvertenza
Mettere in pausa la localizzazione influisce sull'efficacia del tracciamento e generalmente non è consigliabile modificarla. Utilizzare questa funzione sotto la guida del supporto tecnico di EasyAR.
Se la localizzazione è stata messa in pausa durante l'esecuzione dell'applicazione, assicurarsi di specificarlo quando si segnalano problemi a EasyAR.
Controllo dei servizi e delle richieste
È possibile controllare il comportamento delle richieste di servizio modificando i parametri del componente MegaTrackerFrameFilter.
Intervallo e timeout delle richieste
Seleziona l'oggetto Mega Tracker nella sessione e modifica le opzioni in Request Time Parameters per regolare l'intervallo di tempo tra le richieste al servizio e il timeout.
![]()
Nel codice, puoi modificare MegaTrackerFrameFilter.RequestTimeParameters per ottenere lo stesso effetto.
Avvertenza
Modificare l'intervallo di tempo tra le richieste influisce sull'efficacia del tracciamento. In generale, non è consigliabile farlo. Utilizza questa funzione solo sotto la guida del supporto tecnico di EasyAR.
Se l'intervallo di tempo tra le richieste è stato modificato durante l'esecuzione dell'applicazione, assicurati di specificarlo quando segnali un problema a EasyAR.
切换定位库
使用 MegaTrackerFrameFilter.SwitchEndPoint 可以在运行时切换定位库。使用这个接口时相机画面及 session 不会中断。
Argomenti correlati
- Best practice per la sessione AR per Mega spiega come creare e configurare una sessione AR per Mega
- Aggiunta di un obiettivo di tracciamento Mega spiega come aggiungere il blocco obiettivo di tracciamento di Mega e come caricare il modello del blocco nell'editor Unity per supportare lo sviluppo
- Aggiunta di un gruppo di fonti di dati di frame spiega come modificare il gruppo di fonti di dati di frame della sessione
- Ottenimento dei risultati dell'esecuzione della sessione spiega come ottenere i risultati di tracciamento del componente sessione
- Messaggi UI spiega come utilizzare i messaggi UI per visualizzare lo stato della sessione