Controllare il processo di tracciamento Mega
Questo documento spiega come controllare le varie funzioni e i parametri del processo di tracking Mega per adattarlo a scenari applicativi differenti.
Prima di iniziare
- Verificare La mia funzione di localizzazione è pronta? per confermare che la cloud localization library sia stata creata correttamente e che la mappa sia stata aggiunta.
Flusso di lavoro del tracker
Il flusso di lavoro del tracker è il seguente:
flowchart LR
subgraph startup_graph[Avvio]
direction TB
sstart((session avviata))
create[Creazione nativa]
load(Carica target)
init_g[[Inizializzazione]]
end
subgraph init_graph[Inizializzazione]
direction TB
init_{Inizializzazione 6DoF riuscita<br>o non 6DoF}
init[[Processo di inizializzazione del tracking locale]]
localization_g[[Localizzazione iniziale]]
end
subgraph localization_graph[Localizzazione iniziale]
direction TB
localize__{Localizzazione attiva e<br>intervallo di richiesta superato}
localize[Localizzazione cloud]
localize_{Localizzato su block e<br>block caricato}
tracking_g[[Tracking]]
end
subgraph tracking_graph[Tracking]
direction TB
tracking[[Tracking continuo]]
localizet_{Localizzazione attiva e<br>intervallo di richiesta superato}
localize2[Localizzazione cloud]
localize2_{Localizzato su block e<br>block caricato}
localization_g2[[Localizzazione iniziale]]
end
subgraph stopping_graph[Arresto]
direction TB
unload(Scarica target)
dispose[Distruzione nativa]
sstop([session arrestata])
end
sstart --> create --> load --> init_g
init --> init_ --> |Yes| localization_g
localize --> localize_ --> |Yes| tracking_g
localize_ --> |No| localize__ --> |Yes| localize
unload --> dispose --> sstop
init_ --> |No| init
tracking --> localizet_ --> |Yes| localize2 --> localize2_ --> |Yes| 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 si divide in alcune fasi:
- Avvio:
- dopo l'avvio della sessione, il tracker nativo viene creato.
- Il target viene caricato nel tracker corrispondente dopo il suo
Start(Start()).
- Inizializzazione:
- quando si usa un frame source 6DoF, si entra nel processo locale di inizializzazione del tracking.
- quando si usa un frame source non 6DoF, la fase di inizializzazione viene saltata e si passa direttamente alla localizzazione iniziale.
- questo processo può richiedere tempo, dipende dalla complessità della scena e dalle capacità del dispositivo, e di solito è legato agli algoritmi usati dal frame source sottostante.
- Con la configurazione predefinita, il contenuto di questa fase non viene mostrato; si può controllare questo comportamento tramite le opzioni del componente ActiveController.
- Localizzazione iniziale:
- se la localizzazione è abilitata e l'intervallo richiesto è stato superato, il tracker invia una richiesta di localizzazione al cloud.
- se la localizzazione riesce e l'id restituito dal servizio corrisponde a un block già caricato, si entra nella fase di tracking; se il block non è caricato, si continua ad attendere il caricamento e la prossima richiesta di localizzazione.
- se la localizzazione fallisce, il tracker continua ad attendere la prossima richiesta di localizzazione.
- questo processo può richiedere tempo, a seconda di quanto la scena è facile da localizzare, della qualità di acquisizione/mappatura e della rete.
- Con la configurazione predefinita, il contenuto di questa fase non viene mostrato; si può controllare questo comportamento tramite le opzioni del componente ActiveController.
- se la localizzazione è abilitata e l'intervallo richiesto è stato superato, il tracker invia una richiesta di localizzazione al cloud.
- Tracking:
- il tracker segue continuamente il block corrente.
- se la localizzazione è abilitata e l'intervallo richiesto è stato superato, il tracker invia una richiesta di localizzazione al cloud.
- se la localizzazione riesce e l'id restituito dal servizio non cambia, il tracking continua; se l'id cambia e il block è già caricato, si passa al nuovo block e il tracking continua; se l'id cambia e il block non è caricato, si continua ad attendere il caricamento e la prossima richiesta di localizzazione.
- se la localizzazione fallisce, il tracker continua a seguire il block corrente e attende la prossima richiesta.
- Con la configurazione predefinita, solo il contenuto sotto il nodo target che è nello stato di tracking (TargetController.IsTracked ==
true) viene mostrato; questo comportamento si può controllare tramite le opzioni del componente ActiveController.
- Arresto:
- dopo l'arresto della sessione, il target viene scaricato e il tracker nativo viene distrutto.
Regolare il livello di supporto del dispositivo
La proprietà MegaTrackerFrameFilter.MinInputFrameLevel di MegaTrackerFrameFilter serve a specificare il livello minimo di dispositivo supportato da Mega.
![]()
Mega può funzionare su quasi tutti i tipi di frame source, ma frame source diversi hanno effetti differenti sul tracking.
Per impostazione predefinita, Mega sceglie per il tracking il frame source di livello più alto supportato dal dispositivo. La sessione supportata da Mega con la configurazione predefinita è già configurata con frame source che supportano 6DoF e 5DoF.
Per supportare un determinato livello di frame source durante l'esecuzione di Mega devono essere soddisfatte due condizioni:
- il frame source richiesto è presente nel gruppo di frame source opzionali della sessione.
- MegaTrackerFrameFilter.MinInputFrameLevel è maggiore o uguale al livello CameraTransformType del frame source richiesto.
Per esempio, per supportare il tracking 3DoF nella sessione predefinita, bisogna:
- aggiungere ThreeDofCameraDeviceFrameSource al gruppo di frame source della sessione.
- modificare MegaTrackerFrameFilter.MinInputFrameLevel in ThreeDof.
Oppure, per rimuovere il supporto 5DoF dalla sessione predefinita, bisogna:
- rimuovere InertialCameraDeviceFrameSource dal gruppo di frame source della sessione.
- modificare MegaTrackerFrameFilter.MinInputFrameLevel in SixDof (anche senza modificarlo, dato che non esiste un frame source 5DoF, il 5DoF non verrà comunque usato).
Se non è disponibile alcun frame source che soddisfi le condizioni, l'assemblaggio della sessione fallirà.
Capire lo stato corrente del sistema
Con la configurazione predefinita della sessione, i messaggi UI vengono mostrati sullo schermo e contengono informazioni sullo stato del tracking Mega.
Quando la localizzazione riesce, sotto le informazioni di servizio Mega compare il testo di stato Found; quando la localizzazione fallisce, compare NotFound.
Un block già caricato viene mostrato come Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Qui <objName> è il nome dell'oggetto di scena corrispondente al block, <name> è il nome del block e <id> è l'ID del block. trackingStatus può essere Tracking o NotTracking, e indica rispettivamente se il block è attualmente tracciato.
![]()
Quando la localizzazione riesce, un block localizzato ma non ancora caricato viene mostrato come Block [scnObj=?]: <name> (<id>).
![]()
Consiglio
NotFound è uno stato normale; compare spesso durante il funzionamento di Mega e il tracking continua comunque. In genere non serve gestire in modo speciale lo stato NotFound.
È possibile usare l'evento MegaTrackerFrameFilter.LocalizationRespond per ottenere lo stato corrente della localizzazione e capire se il sistema ha trovato o meno il target di tracking.
Il codice seguente mostra come usare questo evento e come gestire gli stati anomali più comuni 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 riattivando; l utente finale deve attendere
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// limite QPS superato; alcuni utenti finali possono fallire casualmente la localizzazione (la qualita complessiva del tracking diminuisce)
// di solito e necessario pagare per aumentare il limite QPS e garantire la qualita del tracking con il numero attuale di utenti
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// Token scaduto; questo accade solo quando si accede al servizio tramite l interfaccia Token
// per risolvere il problema, l applicazione deve richiedere un Token al proprio backend e chiamare MegaTrackerFrameFilter.UpdateToken per aggiornarlo
}
}
Se l'app incontra spesso lo stato MegaTrackerLocalizationStatus.RequestTimeout, in genere significa che la rete del dispositivo verso il servizio non è buona; si consiglia di ottimizzare l'ambiente di rete per migliorare la qualità del tracking. Se la rete non può essere migliorata, si può considerare di aumentare il timeout della richiesta.
Nota
Non è possibile ottenere il pose restituito dalla localizzazione tramite questo evento.
In realtà, il pose restituito dalla localizzazione non serve nello sviluppo dell'app: dopo la localizzazione, EasyAR calcolerà con un algoritmo locale un pose più accurato e lo restituirà allo sviluppatore; questo pose è già riflesso nel transform del block, e si può fare riferimento a Ottenere il risultato di esecuzione della sessione.
Pausa e ripresa
Il tracking e la localizzazione di Mega possono essere messi in pausa e ripresi separatamente.
Pausa del tracking
Impostare MegaTrackerFrameFilter.enabled su false per mettere in pausa il tracking.
Per impostazione predefinita, dopo la pausa del tracking, tutto il contenuto sotto i nodi block viene nascosto.
Pausa della localizzazione
Impostare MegaTrackerFrameFilter.EnableLocalization su false per mettere in pausa la localizzazione.
Avvertenza
Mettere in pausa la localizzazione influisce sul risultato del tracking e in generale non è consigliato. Usarla solo sotto la guida del supporto tecnico EasyAR.
Se la localizzazione è stata messa in pausa durante l'esecuzione dell'app, assicurarsi di segnalarlo quando si fornisce un report del problema a EasyAR.
Controllo del servizio e delle richieste
È possibile controllare il comportamento della richiesta al servizio modificando i parametri del componente MegaTrackerFrameFilter.
Selezionare la cloud localization library
Selezionare l'oggetto Mega Tracker sotto la sessione e modificare le opzioni sotto Service per cambiare la cloud localization library connessa. Questa opzione deve essere impostata prima dell'avvio della sessione.
Con la configurazione predefinita, Access Source è Global Config: la configurazione del servizio usa la configurazione globale e i parametri del servizio possono essere modificati in Project Settings > EasyAR > Sense > Mega > Mega Block; questa configurazione influisce su tutte le sessioni che usano la stessa configurazione globale.
![]()
Consiglio
La configurazione del servizio può essere ottenuta dal EasyAR Developer Center.

Se si desidera usare cloud localization library diverse in sessioni diverse, si può impostare Access Source su API Key e quindi modificare i parametri del servizio qui sotto.
![]()
In uno script, si possono modificare MegaTrackerFrameFilter.ServiceAccessSource e MegaTrackerFrameFilter.ServiceAccessData per ottenere lo stesso risultato.
Per esempio, il codice seguente mostra come configurare il tracker prima dell'avvio della sessione per connettersi al servizio usando parametri runtime:
megaTracker.ServiceType = easyar.MegaApiType.Block;
megaTracker.ServiceAccessSource = easyar.MegaServiceAccessSourceType.APIKey;
megaTracker.ServiceAccessData = new easyar.APIKeyAccessData
{
ServerAddress = serverAddress,
APIKey = apiKey,
APISecret = apiSecret,
AppID = appID
};
Intervallo e timeout delle richieste
Selezionare l'oggetto Mega Tracker sotto la sessione e modificare le opzioni sotto Request Time Parameters per regolare l'intervallo di richiesta al servizio e il timeout.
![]()
In uno script, si può modificare MegaTrackerFrameFilter.RequestTimeParameters per ottenere lo stesso risultato.
Avvertenza
Modificare l'intervallo di richiesta influisce sul risultato del tracking e in generale non è consigliato. Usarlo solo sotto la guida del supporto tecnico EasyAR.
Se l'intervallo di richiesta è stato modificato durante l'esecuzione dell'app, assicurarsi di segnalarlo quando si fornisce un report del problema a EasyAR.
Cambiare localization library
È possibile usare MegaTrackerFrameFilter.SwitchEndPoint per cambiare localization library a runtime. Usando questa interfaccia, l'immagine della fotocamera e la sessione non verranno interrotte.
Argomenti correlati
- Best practice per AR Session adatto a Mega spiega come creare e configurare una AR Session adatta a Mega
- Aggiungere target di tracking Mega spiega come aggiungere il target di tracking block di Mega e come caricare in editor il modello block per supportare lo sviluppo
- Aggiungere un gruppo di frame source spiega come modificare il gruppo di frame source della sessione
- Ottenere il risultato di esecuzione della sessione spiega come ottenere i risultati di tracking dei componenti della sessione
- Messaggi UI spiega come usare i messaggi UI per mostrare lo stato della sessione