Table of Contents

Mega-Tracking-Prozess steuern

Dieses Dokument beschreibt, wie Sie verschiedene Funktionen und Parameter im Mega-Tracking-Prozess steuern, um ihn an unterschiedliche Anwendungsszenarien anzupassen.

Vor dem Start

Arbeitsablauf des Trackers

Der Arbeitsablauf des Trackers sieht wie folgt aus:

flowchart LR
  subgraph startup_graph[Start]
    direction TB
    sstart((Session-Start))
    create[Native-Erstellung]
    load(Target laden)
    init_g[[Initialisieren]]
  end
  
  subgraph init_graph[Initialisierung]
    direction TB
    init_{6DoF-Initialisierung erfolgreich<br>oder nicht 6DoF}
    init[[Lokale Tracking-Initialisierung]]
    localization_g[[Erstlokalisierung]]
  end

  subgraph localization_graph[Erstlokalisierung]
    direction TB
    localize__{Lokalisierung aktiv und<br>Intervall überschritten}
    localize[Cloud-Lokalisierung]
    localize_{Block lokalisiert und<br>Block geladen}
    tracking_g[[Tracking]]
  end
  
  subgraph tracking_graph[Tracking]
    direction TB
    tracking[[Dauerhaftes Tracking]]
  
    localizet_{Lokalisierung aktiv und<br>Intervall überschritten}
    localize2[Cloud-Lokalisierung]
    localize2_{Block lokalisiert und<br>Block geladen}
    localization_g2[[Erstlokalisierung]]
  end

  subgraph stopping_graph[Stopp]
    direction TB
    unload(Target entladen)
    dispose[Native zerstören]
    sstop([Session-Stopp])
  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

Der Ablauf lässt sich grob in mehrere Phasen unterteilen:

  • Start:
    • Nach dem Start der Session wird der native Tracker erstellt.
    • Nach dem eigenen Start() des Targets wird das Target in den entsprechenden Tracker geladen.
  • Initialisierung:
    • Bei Verwendung einer 6DoF-Frame-Source wird der lokale Tracking-Initialisierungsprozess durchlaufen.
    • Bei Verwendung einer Nicht-6DoF-Frame-Source wird die Initialisierung übersprungen und direkt zur Erstlokalisierung gewechselt.
    • Dieser Vorgang kann je nach Szenenkomplexität, Geräteleistung und den im Hintergrund verwendeten Algorithmen einige Zeit dauern.
    • Standardmäßig wird dieser Status nicht angezeigt. Das Verhalten kann über die Optionen der Komponente ActiveController gesteuert werden.
  • Erstlokalisierung:
    • Wenn die Lokalisierung aktiv ist und das Anfrageintervall überschritten wurde, sendet der Tracker eine Lokalisierungsanfrage an die Cloud.
      • Wenn die Lokalisierung erfolgreich ist und der vom Dienst zurückgegebene Block bereits geladen wurde, wechselt das System in die Tracking-Phase. Wenn der Block nicht geladen ist, wartet das System weiter, bis der Block geladen wurde, und bis zur nächsten Lokalisierungsanfrage.
      • Wenn die Lokalisierung fehlschlägt, wartet der Tracker auf die nächste Lokalisierungsanfrage.
    • Dieser Vorgang kann je nach Lokalisierbarkeit der Szene, Qualität der Erfassung und des Mappings sowie Netzwerkbedingungen einige Zeit dauern.
    • Standardmäßig wird dieser Status nicht angezeigt. Das Verhalten kann über die Optionen der Komponente ActiveController gesteuert werden.
  • Tracking:
    • Der Tracker verfolgt den aktuellen Block fortlaufend.
    • Wenn die Lokalisierung aktiv ist und das Anfrageintervall überschritten wurde, sendet der Tracker eine Lokalisierungsanfrage an die Cloud.
      • Wenn die Lokalisierung erfolgreich ist und sich die zurückgegebene ID nicht geändert hat, wird das Tracking fortgesetzt. Wenn sich die ID geändert hat und der Block geladen wurde, wird zum neuen Block gewechselt und das Tracking fortgesetzt. Wenn sich die ID geändert hat und der Block nicht geladen wurde, wartet das System weiter, bis der Block geladen wurde, und bis zur nächsten Lokalisierungsanfrage.
      • Wenn die Lokalisierung fehlschlägt, verfolgt der Tracker weiterhin den aktuellen Block und wartet auf die nächste Lokalisierungsanfrage.
    • Standardmäßig wird in dieser Phase nur Inhalt unter dem Target angezeigt, das sich im Tracking-Zustand befindet (TargetController.IsTracked == true). Das Verhalten kann über die Optionen der Komponente ActiveController gesteuert werden.
  • Stopp:
    • Nach dem Stopp der Session wird das Target entladen und der native Tracker zerstört.

Unterstützungsstufe des Geräts anpassen

Die Eigenschaft MegaTrackerFrameFilter.MinInputFrameLevel von MegaTrackerFrameFilter legt die niedrigste vom Mega unterstützte Geräteklasse fest.

alt text

Mega kann mit fast allen Arten von Frame-Quellen arbeiten, aber verschiedene Frame-Quellen beeinflussen die Trackingqualität unterschiedlich.

Standardmäßig wählt Mega für das Tracking die höchstmögliche vom Gerät unterstützte Frame-Quelle. Das Standard-Session-Setup mit Mega-Unterstützung ist bereits für Frame-Quellen mit 6DoF und 5DoF konfiguriert.

Damit Mega im Laufzeitbetrieb eine bestimmte Frame-Quellen-Stufe unterstützt, müssen zwei Bedingungen erfüllt sein:

Wenn Sie zum Beispiel in der Standard-Session 3DoF-Tracking unterstützen möchten, müssen Sie:

Wenn Sie zum Beispiel die 5DoF-Unterstützung in der Standard-Session entfernen möchten, müssen Sie:

Wenn keine passende Frame-Quelle verfügbar ist, schlägt das Zusammenstellen der Session fehl.

Aktuellen Systemstatus verstehen

Mit der Standard-Session-Konfiguration werden UI-Meldungen auf dem Bildschirm angezeigt. Sie enthalten Informationen über den Mega-Tracking-Status.

Bei erfolgreicher Lokalisierung enthält die Mega-Dienstinformation den Status Found; bei fehlgeschlagener Lokalisierung enthält sie NotFound.

Bereits geladene Blöcke werden als Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>) angezeigt. Dabei ist <objName> der Name des zugehörigen Szenenobjekts, <name> der Name des Blocks und <id> die ID des Blocks. trackingStatus kann Tracking oder NotTracking sein und zeigt an, ob der aktuelle Block gerade verfolgt wird.

alt text alt text

Wenn die Lokalisierung erfolgreich ist, aber der Block noch nicht geladen wurde, wird die Information des lokalisierten, aber nicht geladenen Blocks als Block [scnObj=?]: <name> (<id>) angezeigt.

alt text

Tipp

NotFound ist ein normaler Zustand. Er tritt im gesamten Arbeitsablauf von Mega häufig auf, und das Tracking läuft dabei weiter. In der Regel ist keine besondere Behandlung für NotFound nötig.

Mit dem Ereignis MegaTrackerFrameFilter.LocalizationRespond können Sie den aktuellen Lokalisierungsstatus abrufen und so sehen, ob das System das Tracking-Ziel gefunden hat.

Das folgende Codebeispiel zeigt die Verwendung des Ereignisses und den Umgang mit häufigen Ausnahmezuständen, die für Anwendungen relevant sind:

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)
    {
        // Der Dienst wacht gerade auf, bitte den Endnutzer warten lassen
    }

    if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
    {
        // QPS-Limit überschritten, einige Nutzer werden zufällig fehlschlagen (Trackingqualität sinkt insgesamt)
        // In diesem Fall muss das QPS-Limit normalerweise kostenpflichtig erhöht werden
    }

    if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
    {
        // Token abgelaufen. Das tritt nur bei Verwendung des Token-Zugriffs auf den Dienst auf.
        // Die Lösung besteht darin, vom eigenen Backend ein Token anzufordern und es mit MegaTrackerFrameFilter.UpdateToken zu aktualisieren
    }
}

Wenn Anwendungen häufig den Status MegaTrackerLocalizationStatus.RequestTimeout erhalten, deutet das normalerweise darauf hin, dass die Netzwerkanbindung des Geräts schlecht ist. Es wird empfohlen, die Netzwerkumgebung zu verbessern, um die Trackingqualität zu erhöhen. In Szenarien, in denen sich das Netzwerk nicht verbessern lässt, kann eine Erhöhung des Anfrage-Timeouts sinnvoll sein.

Anmerkung

Die Pose des Lokalisierungsergebnisses kann nicht über dieses Ereignis abgerufen werden.

Tatsächlich wird die von der Lokalisierung zurückgegebene Pose in der Anwendung meist nicht benötigt. EasyAR berechnet nach der Lokalisierung lokal eine genauere Pose und gibt sie an die Entwickler zurück. Diese Pose ist bereits im Transform des Blocks enthalten. Siehe Laufergebnis der Session abrufen.

Pausieren und Fortsetzen

Tracking und Lokalisierung von Mega können getrennt pausiert und fortgesetzt werden.

Tracking pausieren

Setzen Sie MegaTrackerFrameFilter.enabled auf false, um das Tracking zu pausieren.

Standardmäßig werden nach dem Pausieren des Trackings alle Inhalte unter den Block-Knoten ausgeblendet.

Lokalisierung pausieren

Setzen Sie MegaTrackerFrameFilter.EnableLocalization auf false, um die Lokalisierung zu pausieren.

Warnung

Das Pausieren der Lokalisierung wirkt sich auf die Trackingqualität aus und wird normalerweise nicht empfohlen. Verwenden Sie diese Funktion bitte nur unter Anleitung des EasyAR-Supports.

Wenn die Lokalisierung während der Ausführung der Anwendung pausiert wurde, erwähnen Sie dies bitte unbedingt, wenn Sie ein Problem an EasyAR melden.

Dienst- und Anfrage-Steuerung

Sie können das Verhalten der Dienstanfragen steuern, indem Sie die Parameter der Komponente MegaTrackerFrameFilter ändern.

Lokalisierungsbibliothek auswählen

Wählen Sie das Objekt Mega Tracker unter der Session aus. Mit den Optionen unter Service können Sie die verbundene Lokalisierungsbibliothek anpassen. Diese Option muss vor dem Start der Session gesetzt werden.

Standardmäßig ist Access Source auf Global Config gesetzt. Die Dienstkonfiguration verwendet dann die globale Konfiguration. Die Dienstparameter können in Project Settings unter EasyAR > Sense > Mega > Mega Block geändert werden. Diese Konfiguration wirkt sich auf alle Sessions aus, die diese globale Konfiguration verwenden.

alt text

Tipp

Die Dienstkonfiguration kann im EasyAR Developer Center abgerufen werden.
Mega Config Detail

Wenn Sie in verschiedenen Sessions unterschiedliche Lokalisierungsbibliotheken verwenden möchten, setzen Sie Access Source auf API Key und ändern Sie anschließend die Dienstparameter darunter.

alt text

Im Skript können Sie MegaTrackerFrameFilter.ServiceAccessSource und MegaTrackerFrameFilter.ServiceAccessData ändern, um denselben Effekt zu erzielen.

Das folgende Codebeispiel zeigt, wie Sie den Tracker vor dem Start der Session mit Laufzeitparametern für die Dienstverbindung konfigurieren:

megaTracker.ServiceType = easyar.MegaApiType.Block;
megaTracker.ServiceAccessSource = easyar.MegaServiceAccessSourceType.APIKey;
megaTracker.ServiceAccessData = new easyar.APIKeyAccessData
{
    ServerAddress = serverAddress,
    APIKey = apiKey,
    APISecret = apiSecret,
    AppID = appID
};

Anfrageintervall und Timeout

Wählen Sie das Objekt Mega Tracker unter der Session aus. Mit den Optionen unter Request Time Parameters können Sie das Anfrageintervall und das Timeout der Dienstanfragen anpassen.

alt text

Im Skript können Sie MegaTrackerFrameFilter.RequestTimeParameters ändern, um denselben Effekt zu erzielen.

Warnung

Eine Änderung des Anfrageintervalls beeinflusst die Trackingqualität und wird normalerweise nicht empfohlen. Verwenden Sie diese Funktion bitte nur unter Anleitung des EasyAR-Supports.

Wenn das Anfrageintervall während der Ausführung der Anwendung geändert wurde, erwähnen Sie dies bitte unbedingt, wenn Sie ein Problem an EasyAR melden.

Lokalisierungsbibliothek wechseln

Mit MegaTrackerFrameFilter.SwitchEndPoint können Sie die Lokalisierungsbibliothek zur Laufzeit wechseln. Dabei werden das Kamerabild und die Session nicht unterbrochen.

Verwandte Themen