Table of Contents

Steuern des mega-tracking-prozesses

Dieser artikel beschreibt, wie sie die verschiedenen funktionen und parameter des mega-tracking-prozesses steuern können, um die anforderungen verschiedener anwendungsszenarien zu erfüllen.

Bevor du anfängst

Arbeitsablauf des trackers

der arbeitsablauf des trackers ist wie folgt:

flowchart LR
  subgraph startup_graph[启动]
    direction TB
    sstart((session 启动))
    create[原生创建]
    load(加载 target)
    init_g[[初始化]]
  end
  
  subgraph init_graph[初始化]
    direction TB
    init_{6DoF 初始化成功<br>或非 6DoF}
    init[[本地跟踪初始化过程]]
    localization_g[[初始定位]]
  end

  subgraph localization_graph[初始定位]
    direction TB
    localize__{定位开启且<br>超过请求间隔}
    localize[云端定位]
    localize_{定位到 block 且<br>block 已加载}
    tracking_g[[跟踪]]
  end
  
  subgraph tracking_graph[跟踪]
    direction TB
    tracking[[持续跟踪]]
  
    localizet_{定位开启且<br>超过请求间隔}
    localize2[云端定位]
    localize2_{定位到 block 且<br>block 已加载}
    localization_g2[[初始定位]]
  end

  subgraph stopping_graph[停止]
    direction TB
    unload(卸载 target)
    dispose[原生销毁]
    sstop([session 停止])
  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 tracker auf der nativen ebene erstellt.
    • Nachdem target selbst Start() ausgeführt hat, wird es in den entsprechenden tracker geladen.
  • Initialisierung:
    • Bei verwendung eines 6DoF-frame-source wird der initialisierungsprozess des lokalen trackings gestartet.
    • Bei verwendung eines nicht-6DoF-frame-source wird die initialisierungsphase übersprungen und direkt zur initialen lokalisierungsphase übergegangen.
    • Dieser vorgang kann einige zeit in anspruch nehmen, er hängt von der szenenkomplexität und der geräteleistung ab und steht in der regel im zusammenhang mit dem algorithmus, der vom unterbau des frame-source verwendet wird.
    • In der standardkonfiguration wird der inhalt dieser phase nicht angezeigt, dieses verhalten kann über die komponenteneinstellungen von ActiveController gesteuert werden.
  • Initiale lokalisierung:
    • Wenn die lokalisierung aktiviert ist und das anforderungsintervall überschritten wurde, sendet der tracker eine lokalisierungsanfrage an die cloud.
      • Nach erfolgreicher lokalisierung wird zur tracking-phase übergegangen, wenn der zum von dem lokalisierungsdienst zurückgegebenen id gehörende block bereits geladen wurde; wenn der block nicht geladen wurde, wird weiter auf den abschluss des ladens des blocks gewartet und auf die nächste lokalisierungsanfrage gewartet.
      • Wenn die lokalisierung fehlschlägt, wartet der tracker weiterhin auf die nächste lokalisierungsanfrage.
    • Dieser vorgang kann einige zeit in anspruch nehmen, er hängt von der lokalisierbarkeit der szene und dem netzwerkzustand ab.
    • In der standardkonfiguration wird der inhalt dieser phase nicht angezeigt, dieses verhalten kann über die komponenteneinstellungen von ActiveController gesteuert werden.
  • Tracking:
    • Der tracker verfolgt kontinuierlich den aktuellen block.
    • Wenn die lokalisierung aktiviert ist und das anforderungsintervall überschritten wurde, sendet der tracker eine

Anpassung der geräteunterstützungsstufe

MegaTrackerFrameFilter Die Eigenschaft MegaTrackerFrameFilter.MinInputFrameLevel dient zur Angabe der minimalen gerätestufe, die von Mega unterstützt wird.

alt text

Mega kann auf fast allen arten von bildquellen laufen, aber verschiedene bildquellen haben unterschiedliche einflüsse auf die verfolgungsergebnisse.

Standardmäßig wählt Mega die höchste stufe der vom gerät unterstützten bildquelle für die verfolgung aus. Die session, die Mega in der standardkonfiguration unterstützt wurde bereits mit bildquellen konfiguriert, die 6DoF und 5DoF unterstützen.

Um eine bestimmte stufe der bildquelle während des betriebs von Mega zu unterstützen, müssen zwei bedingungen erfüllt sein:

Zum beispiel, um 3DoF-verfolgung in der standard-session zu unterstützen, benötigen sie:

Ein weiteres beispiel, um die unterstützung für 5DoF-verfolgung in der standard-session zu entfernen, benötigen sie:

Wenn keine qualifizierte bildquelle verfügbar ist, schlägt die zusammenstellung der session fehl.

Den systemstatus verstehen

In der standardmäßigen session-konfiguration werden UI-nachrichten auf dem bildschirm angezeigt, die informationen zum mega-tracking-status enthalten.

Tipp

NotFound ist ein normaler status, der während des gesamten mega-arbeitssprozesses häufig auftritt. Wenn dieser status auftritt, läuft das tracking weiter. In der regel ist in der anwendungsentwicklung keine spezielle behandlung des NotFound-status erforderlich.

Mit dem MegaTrackerFrameFilter.LocalizationRespond-ereignis kann der aktuelle lokalisierungsstatus abgerufen werden, um zu verstehen, ob das system derzeit ein tracking-ziel gefunden hat.

Der folgende code zeigt, wie dieses ereignis verwendet wird, sowie die behandlungsmethoden für häufige ausnahmezustände, auf die anwendungen achten sollten:

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 wird gerade aufgeweckt, der endbenutzer muss warten
    }

    if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
    {
        // QPS-limit überschritten, einige endbenutzer werden zufällig fehlschlagen (insgesamt sinkt die tracking-qualität)
        // In diesem fall ist es in der regel erforderlich, das QPS-limit gegen gebühr zu erhöhen, um die tracking-qualität bei der aktuellen benutzerzahl zu gewährleisten
    }

    if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
    {
        // Token abgelaufen, dies tritt nur auf, wenn der dienst über die token-schnittstelle aufgerufen wird
        // Um dieses problem zu beheben, muss die anwendung ihr eigenes backend anfordern, um ein token zu erhalten, und MegaTrackerFrameFilter.UpdateToken aufrufen, um es zu aktualisieren
    }
}

Wenn die anwendung häufig auf den status MegaTrackerLocalizationStatus.RequestTimeout stößt, deutet dies in der regel auf eine schlechte netzwerkverbindung des geräts zum dienst hin. Es wird empfohlen, die netzwerkumgebung zu optimieren, um die tracking-qualität zu verbessern. In szenarien, in denen die netzwerkbedingungen nicht verbessert werden können, kann eine erhöhung der anfrage-timeout-zeit in betracht gezogen werden.

Anmerkung

Die von der lokalisierung zurückgegebene pose kann nicht über dieses ereignis abgerufen werden.

Tatsächlich ist die von der lokalisierung zurückgegebene pose in der anwendungsentwicklung nicht erforderlich. EasyAR berechnet nach der lokalisierung eine genauere pose durch lokale algorithmen und gibt sie den entwicklern zur verwendung zurück. Diese pose spiegelt sich bereits im transform des blocks wider. Weitere informationen finden Sie unter Ergebnisse der session abrufen.

Pause und Fortsetzung

Die Tracking- und Positionsbestimmungsfunktionen von Mega können jeweils pausiert und fortgesetzt werden.

Tracking pausieren

Sie können das Tracking pausieren, indem Sie MegaTrackerFrameFilter.enabled auf false setzen.

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

Pausieren der Lokalisierung

Das Pausieren der Lokalisierung ist möglich, indem MegaTrackerFrameFilter.EnableLocalization auf false gesetzt wird.

Warnung

Das Pausieren der Lokalisierung kann sich auf die Tracking-Leistung auswirken. Im Allgemeinen wird eine Änderung nicht empfohlen. Bitte verwenden Sie diese Funktion nur unter der Anleitung des EasyAR-Technischen Supports.

Wenn die Lokalisierung während der Ausführung der Anwendung pausiert wurde, geben Sie dies unbedingt an, wenn Sie EasyAR über Probleme informieren.

Dienstleistungen und Request-Steuerung

Das Verhalten des Service-Requests kann durch Ändern der Parameter der MegaTrackerFrameFilter-Komponente gesteuert werden.

Anforderungsintervall und Timeout

Wählen Sie das Objekt Mega Tracker unter session aus. Die Optionen unter Request Time Parameters können Sie ändern, um das Zeitintervall und die Timeout-Zeit für die Serviceanforderung anzupassen.

alt text

In einem Skript können Sie MegaTrackerFrameFilter.RequestTimeParameters ändern, um den gleichen Effekt zu erzielen.

Warnung

Die Änderung des Anforderungsintervalls kann die Tracking-Leistung beeinträchtigen. Es wird im Allgemeinen nicht empfohlen, es zu ändern. Verwenden Sie diese Funktion bitte unter Anleitung des EasyAR-Technischen Supports.

Wenn das Anforderungsintervall während der Ausführung der Anwendung geändert wurde, geben Sie dies unbedingt an, wenn Sie Probleme an EasyAR melden.

Wechseln der Lokalisierungsbibliothek

Verwenden Sie MegaTrackerFrameFilter.SwitchEndPoint, um die Lokalisierungsbibliothek zur Laufzeit zu wechseln. Bei Verwendung dieser Schnittstelle werden die Kamerabilder und die Sitzung nicht unterbrochen.

Verwandte Themen