Table of Contents

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.
  • 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.

alt text

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:

Ad esempio, per supportare il tracciamento 3DoF nella sessione predefinita, è necessario:

Un altro esempio: per rimuovere il supporto per il tracciamento 5DoF nella sessione predefinita, è necessario:

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.

alt text alt text

Quando il posizionamento ha successo, le informazioni sui blocchi che sono stati posizionati ma non caricati vengono visualizzate come Block [scnObj=?]: <name> (<id>).

alt text

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.

alt text

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