Space Pins
Zu lösende Probleme
Der Maßstabsfehler
Während der herkömmliche Raumankeransatz für die Ausrichtung von Hologrammen an realen Merkmalen in kleinem Maßstab hervorragend funktioniert, treten ab einer Größenordnung von etwa einem Meter zunehmend Abweichungen auf.
Maßstabsfehler beim Head-Tracking bedeuten Folgendes: Selbst wenn ein Raumanker ein Ende eines virtuellen Objekts, das nur wenige Meter lang ist, perfekt auf ein Merkmal der realen Welt ausrichtet, ist das andere Ende wahrscheinlich fehlerhaft auf ein reales Merkmal ausgerichtet. Diese Fehlausrichtung ist darauf zurückzuführen, dass die im Head-Tracking zurückgelegte Distanz tendenziell etwa 10 % von der im physischen Raum zurückgelegten Distanz abweicht. Der tatsächliche Fehler ist häufig geringer (abhängig von vielen Umgebungs- und Gerätemerkmalen), aber im Allgemeinen signifikant und kann grenzenlos zunehmen, je größer ein Projekt wird.
Anders ausgedrückt: Wenn ein Benutzer mit einer HoloLens 10 Meter in der realen Welt zurücklegt, liegt die vom Head-Tracker im virtuellen Raum gemeldete Distanz zwischen 9 und 11 Metern. Wenn der Benutzer 50 Meter zurücklegt, erhöht sich die Abweichung auf +-5 Meter. Je weiter der Benutzer geht, desto größer wird der Fehler.
Daher wird bei einem 10 Meter langen Messstrahl (im Modellierungsbereich), dessen einer Endpunkt perfekt am Nullende eines Bandmaßes im realen Raum ausgerichtet ist, das andere Ende des Bandmaßes irgendwo zwischen 9 und 11 Metern registriert.
Aus dem gleichen Grund weisen mehrere Objekte, die mit Raumankern weltgebunden sind, im virtuellen Raum andere Entfernungen voneinander auf als im realen Raum.
Das unbestimmte Koordinatensystem
Es gibt ein weiteres Problem. Das Unity-Koordinatensystem in HoloLens ist unbestimmt. Es basiert ausschließlich auf der Kopfposition bei Anwendungsstart.
Diese Unbestimmtheit ist bei vielen Aufgaben kein Problem. Wenn das Ziel darin besteht, einen Strahl in die räumliche Abbildung eines Raums zu werfen und ein Hologramm am Auftreffpunkt zu platzieren, sind die numerischen Werte dieses Punkts irrelevant.
Ebenso spielt es beim Anzeigen von Benutzeroberflächenelementen um Benutzer herum keine Rolle, wie die absoluten Koordinaten der Elemente lauten, wichtig sind nur die Koordinaten in Relation zum Benutzer.
Komplexere Szenarien können jedoch durch das unvorhersehbare Koordinatensystem noch schwieriger werden. Das Laden einer großen Sammlung von Objekten – z. B. eines Schreibtischs oder eines gesamten Büroraums – in einen virtuellen Raum mit einer festen Beziehung zum physischen Raum erfordert eine kompensierende Transformation, um die Objekte des Modellierungsbereichs am kopfbasierten Koordinatenrahmen auszurichten.
Diese Kompensierung erfolgt häufig durch Anfügen aller Objekte an eine einzelne Unity-Transformation und Anpassen dieser einzelnen Transformation, um die virtuellen Objekte entsprechend der realen Welt zu positionieren und auszurichten.
Entsprechend kann eine einzelne Transformation in der Hierarchie der Kamera verwendet werden, um die Kamera neu auszurichten, damit, wenn ein Benutzer einen realen Bezugspunkt sieht, dieses Merkmal mit einem virtuellen Objekt mit den gewünschten Modellierungskoordinaten überlagert wird.
Die Lösung
Das Space Pin-Feature behebt diese beiden Probleme gleichzeitig. Das Feature nutzt sowohl die weltgebundene Natur des globalen World Locking Tools-Raums als auch die Unbestimmtheit dieses Raums.
Ausrichten des Unity-Raums an der realen Welt
World Locking Tools (WLT) stellt im Kern ein stabiles, weltgebundenes Koordinatensystem bereit. Ein virtuelles Objekt, das im World Locked Space platziert wird und bei einem realen Merkmal registriert ist, bleibt bei diesem realen Merkmal registriert.
Es gibt jedoch eine unendliche Anzahl von Räumen, die dieses Ziel erfüllen. In der Tat erzeugt die Transformation eines weltgebundenen Raums durch eine beliebige Position und Drehung einen weiteren, ebenso gültigen weltgebundenen Raum.
Das Space Pin-Feature wendet eine andere Bedingung an, die die Unbestimmtheit der weltgebundenen Transformation beseitigt.
Diese Bedingung lautet: Wenn sich ein Objekt „in der Nähe“ eines Space Pin befindet, ist die Position des Space Pin im weltgebundenen Raum mit der Position des Space Pin im Modellierungsbereich identisch.
Stellen Sie sich einen Würfel in einer Unity-Szene vor, die mit den globalen Koordinaten (0, 0, 1) modelliert ist. Wenn die Szene in HoloLens geladen wird, wird der Würfel 1 Meter vor der anfänglichen Kopfposition angezeigt. Abhängig von der anfänglichen Kopfposition kann dies überall im physischen Raum sein.
Mit dem Space Pin kann dieser Würfel an ein reales Merkmal im Raum gekoppelt werden, z. B. an die Ecke eines bestimmten Schreibtischs. Im Gegensatz zum Koppeln des Würfels an einen Raumanker verschiebt der Space Pin den gesamten Unity-Raum so, dass der Würfel an der Tischecke ausgerichtet ist. Damit werden beispielsweise andere Tischelemente, die in Unity relativ zum Würfel modelliert sind, ordnungsgemäß auf den echten Schreibtisch verteilt.
Beheben des Maßstabsfehlers
Ein einzelner Space Pin beseitigt zwar die Unbestimmtheit der Beziehung zwischen einer virtuellen Koordinate und der realen Welt, behebt aber nicht den Maßstabsfehler.
Das bedeutet Folgendes: Obwohl der Ursprungspunkt möglicherweise an eine der physischen Welt entsprechenden Position und Ausrichtung verschoben wurde, entspricht eine Bewegung um 10 Meter in der realen Welt möglicherweise immer noch nur einer Bewegung um 9 Meter im virtuellen Raum.
Dieses Problem lässt sich mit mehreren Space Pins vollständig beheben. Wenn sich der Benutzer in der Nähe eines bestimmten Space Pin befindet, wird die Welt entsprechend diesem Space Pin ausgerichtet. Die anderen Space Pins sind zwar falsch ausgerichtet, aber weiter entfernt, was sich im Allgemeinen als akzeptabel und oft als nicht wahrnehmbar erweist.
Wenn sich der Benutzer zwischen Space Pins bewegt, minimiert eine reibungslose Interpolation den Maßstabsfehler an jedem Punkt im Raum. Bei einer ausreichenden Dichte von Space Pins als Bezugspunkte wird die Fehlausrichtung von Merkmalen der realen und der virtuellen Welt auf die Größenordnung eines Head Tracker-Fehlers reduziert.
Die erforderliche Dichte von Space Pins hängt sowohl von der durch die Umgebung unterstützten Tracking-Qualität als auch von den Genauigkeitsanforderungen der Anwendung ab. Hier einige Zahlen zu den zu erwartenden Abweichungen: In einer Büroumgebung mit adäquater Beleuchtung und sichtbaren Merkmalen für das Tracking reduziert ein Abstand von 10 Metern zwischen den Space Pins die Fehlersumme von 10–20 cm über 10 Meter auf eine Abweichung im Millimeterbereich (max. Fehler 0,5 cm, an Endpunkten 0,0 cm Fehler).
Persistenz
Das Space Pin-Feature funktioniert in Kombination mit der Persistenz der restlichen World Locking Tools. Es gibt sowohl manuelle Aufrufe zum Speichern und Laden aus dem Skript als auch Flags zum automatisierten Speichern und Laden pro Sitzung.
Wenn das Feature zum automatischen Speichern und Laden im World Locking Tools Manager aktiviert ist, ermöglicht es die Wiederherstellung der vollständigen räumlichen Ausrichtung der virtuellen Welt an der realen Welt in nachfolgenden Sitzungen.
In der Praxis bedeutet Persistenz, dass mit einer einzigen oder einigen wenigen vorbereitenden Sitzungen ein angemessener Scan der physischen Umgebung und die Ausrichtung dieser physischen Umgebung am Modellierungskoordinatenraum von Unity ausgeführt werden kann. Nachfolgende Sitzungen laden dann die ordnungsgemäß an der realen Welt ausgerichtete virtuelle Umgebung, ohne dass weitere Benutzeraktionen erforderlich sind.
Interpolation und Extrapolation
Interpolation und Extrapolation sind Techniken zum Schätzen von Datenwerten, wenn keine direkte Messung durchgeführt wurde. Die bisher erläuterten Space Pins sind Positionen, an denen Messungen vorgenommen wurden. Die virtuellen Koordinaten sind die gewünschten Koordinaten, und die physischen Koordinaten sind gemessene Koordinaten, bei denen diese virtuellen Koordinaten angezeigt werden sollen.
Das System führt eine Interpolation aus, aber keine Extrapolation, wie unten beschrieben. Im Allgemeinen ist eine Interpolation sicherer und stabiler als eine Extrapolation. Die bereitgestellte lineare Interpolation in Einzelschritten erfüllt die Anforderungen der meisten Anwendungen. Eine Extrapolation ist weniger sicher, und die ideale Implementierung erfordert im Allgemeinen Kenntnisse auf Anwendungsebene. Daher bleibt es der Anwendung überlassen, die Extrapolation wie unten beschrieben zu verarbeiten.
Ohne das Hinzufügen von Extrapolationspins durch die Anwendung wird außerhalb der Grenzen der Pins der Raum ausschließlich durch den Wert an der nächsten Grenze bestimmt. Wenn nur zwei Pins (A und B) vorhanden sind, geht bei der Verankerung die durch A angegebene Ausrichtung in die durch B angegebene Ausrichtung über (Interpolation), wenn sich der Benutzer von A nach B bewegt. Wenn der Benutzer sich an B vorbeibewegt, erfolgt die Verankerung genau an den von B angegebenen Positionen (konstante Erweiterung).
Interpolation
Im 2D-Bereich zwischen Pins wird die räumliche Lokalisierung linear interpoliert. Wenn die Space Pins präzise platziert sind und der Tracking-Fehler sich gleichmäßig über den Bereich verteilt, ist die zwischen den Space Pins angewendete Korrektur genau richtig.
Es sollte hier darauf hingewiesen werden, dass die Annahme einer gleichmäßigen Fehlerverteilung eigentlich nicht richtig ist. Als Näherung liefert das lineare Modell jedoch hervorragende Korrekturergebnisse.
Extrapolation
Das System bietet keinen integrierten Extrapolationsdienst mit konstanten Werterweiterungen außerhalb der konvexen Hülle von Space Pins. Diese Näherung entspricht der Annahme, dass es außerhalb der von der Anwendung bereitgestellten Space Pins keine Maßstabsfehler gibt.
Wenn die Anwendung jedoch über Kenntnisse über die Fehlerverteilung verfügt oder mit einer Schätzung zufrieden ist, kann sie jede gewünschte Extrapolation erstellen, indem sie weitere Space Pins in der Peripherie hinzufügt.
Beispiel für Extrapolation
Stellen Sie sich eine Szene mit vier Space Pins vor, die in einem Quadrat mit einer Seitenlänge von 4 Metern platziert sind.
Nehmen wir an, dass der tatsächliche Raum, in dem sich der Benutzer bewegt, 12 × 12 Meter ist, wobei die physischen Markierungen den vier Pins um den Mittelpunkt des Raums herum entsprechen.
Wenn die Anwendung mit einer konstanten Fehlerannäherung zufrieden ist, verfügt sie über alle Informationen, die sie benötigt, um vier oder mehr Space Pins zum Abdecken des gesamten 12 × 12 Meter großen Raums hinzuzufügen.
Wir bezeichnen die Pins an den Ecken des 4 × 4-Quadrats mit den Himmelsrichtungen NO, NW, SW und SO. Wir bezeichnen auch die virtuellen Positionen an jedem Punkt entsprechend als „virtualNE“ usw. und die physischen Positionen an jedem Punkt als „physicalNE“ usw.
Eine Strategie wäre das Hinzufügen äußerer Angelpunkte für die Himmelsrichtungen, die ein 12 × 12-Meter-Quadrat um das innere Quadrat herum erstellen: outerNE, outerNW, outerSW und outerSE. Die virtuellen und physischen Positionen dieser Punkte sind einfach zu berechnen. Nehmen wir „outerNE“ als Beispiel:
virtualOuterNE = virtualNE + (virtualNE - virtualSW);
physicalOuterNE = physicalNE + (physicalNE - virtualSW);
Durch das Erstellen eines Extrapolationsraums von 20 × 20 Metern wird nur der Maßstab des angewendeten Deltas geändert:
scale = (outerSize - innerSize) / innerSize / 2;
virtualOuterNE = virtualNE + (virtualNE - virtualSW) * scale;
physicalOuterNE = physicalNE + (physicalNE - virtualSW) * scale;
Bei einem outerSize-Wert von 20 Metern und einem innerSize-Wert von 4 Metern wäre der Maßstab 2.
Eine alternative Strategie wäre es, zusätzlich zu den Ecken acht weitere Punkte hinzuzufügen, wie unten dargestellt. Die Berechnung der neuen Pinpositionen aus den vorhandenen erfolgt genauso wie oben. Beachten Sie, dass das Hinzufügen weiterer Pins zwar im Allgemeinen die Stabilität verbessert, aber nicht unbedingt die Genauigkeit.
Ausrichten eines Teils der Szene
Die bisher behandelten Inhalte gelten für den globalen AlignmentManager, in Besitz und verwaltet durch WorldLockingManager.GetInstance(). Wie zuvor beschrieben, wird damit der gesamte globale Unity-Koordinatenraum an strategischen Bezugspunkten mit physischen Merkmalen verankert.
Manchmal wird dieses Konzept jedoch auf einen Teil einer Szene angewendet.
Stellen Sie sich beispielsweise ein Szenario vor, in dem Anmerkungen für zwei Fahrzeuge geladen werden sollen. Die genaue Platzierung der beiden physischen Fahrzeuge kann nicht im Voraus bekannt sein, da sie je nach Einrichtung der verschiedenen Autohäuser variieren kann. Sobald jedoch eines der physischen Fahrzeuge bereitgestellt wurde, sind die Positionen aller Komponententeile relativ zu dieser Bereitstellungsposition bekannt.
In diesem Szenario können dann Space Pins verwendet werden, um das virtuelle Chassis und die Anmerkungen für jedes der Fahrzeuge unabhängig voneinander zu verankern. Die gesamte virtuelle Darstellung der einzelnen Fahrzeuge kann in Unity eingerichtet und dann zur Laufzeit dem physischen Fahrzeug zugeordnet werden. Diese Ausrichtung kann manuell über die MRTK-Benutzeroberfläche oder automatisiert mithilfe von QR-Codes oder einer anderen Strategie erfolgen. Unabhängig davon, wie die Daten der Entsprechung zwischen virtuellen und physischen Bezugspunkten bestimmt werden, behält World Locking Tools for Unity (WLT) die virtuellen und physischen Objekte nach dem Übergeben an WLT über die Space Pins-API auf eine wahrnehmbar optimierte Weise ausgerichtet.
Beim globalen Koordinatenraum erfolgt die Ausrichtung durch Bearbeiten des Anpassungsknotens (im Allgemeinen das übergeordnete Element des übergeordneten Elements der Kamera). Dieser Knoten sollte als für die Verwendung durch WLT reserviert betrachtet werden. Jede andere Manipulation dieser Transformation führt zu nicht definiertem Verhalten.
Ebenso muss bei einer Teilstruktur die Ausrichtung eine Transformation am (untergeordneten) Stamm der auszurichtenden Teilstruktur besitzen. Jede externe Manipulation dieser Transformation führt zu nicht definiertem Verhalten.
Bevor die unabhängigen Räume verankert werden, werden sie beim Verankern des globalen Raums mitgezogen. Sobald jedoch ein unabhängiger Raum verankert wird, gilt er als an die physische Welt gebunden, und nachfolgende Änderungen an der Verankerung des globalen Raums mit der physischen Welt haben keine Auswirkung.