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
targetselbst 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.
- Wenn die lokalisierung aktiviert ist und das anforderungsintervall überschritten wurde, sendet der tracker eine lokalisierungsanfrage an die cloud.
- 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.
![]()
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:
- Die erforderliche bildquelle ist in der optionalen bildquellengruppe der session enthalten.
- MegaTrackerFrameFilter.MinInputFrameLevel ist größer oder gleich der stufe der erforderlichen bildquelle CameraTransformType.
Zum beispiel, um 3DoF-verfolgung in der standard-session zu unterstützen, benötigen sie:
- Fügen Sie ThreeDofCameraDeviceFrameSource zur bildquellengruppe der session hinzu.
- Ändern Sie MegaTrackerFrameFilter.MinInputFrameLevel zu ThreeDof.
Ein weiteres beispiel, um die unterstützung für 5DoF-verfolgung in der standard-session zu entfernen, benötigen sie:
- Entfernen Sie InertialCameraDeviceFrameSource aus der bildquellengruppe der session.
- Ändern Sie MegaTrackerFrameFilter.MinInputFrameLevel zu SixDof (auch ohne änderung wird 5DoF nicht verwendet, da es keine 5DoF-bildquelle gibt).
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.
![]()
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
- Bewährte Praktiken für AR-Sitzungen mit Mega stellt vor, wie man eine AR-Sitzung für Mega erstellt und konfiguriert
- Tracking-Ziel für Mega hinzufügen erklärt, wie man einen Tracking-Ziel-Block für Mega hinzufügt und wie man Block-Modelle im Unity-Editor lädt, um die Entwicklung zu unterstützen
- Eine Gruppe von Frame-Datenquellen hinzufügen erklärt, wie man die Frame-Datenquellengruppe einer Sitzung ändert
- Ausführungsergebnisse einer Sitzung abrufen erklärt, wie man die Tracking-Ergebnisse der Sitzungskomponente erhält
- UI-Nachrichten erklärt, wie man UI-Nachrichten verwendet, um den Sitzungsstatus anzuzeigen