Zum Hauptinhalt springen

Navigation

Das Navigationsmodul ermöglicht es, den Cursor in der Anwendung „ Inverse3 “ innerhalb des Arbeitsbereichs zu bewegen – dies wird manchmal als „geschwindigkeitsgesteuerte Bewegung“ oder „Game-Pad-ähnliches Driften “ bezeichnet. Der Cursor stößt am Rand des physischen Arbeitsbereichs nicht auf eine harte Wand, sondern gelangt in eine weiche Hülle: Der Abstand des Cursors zum virtuellen Zentrum wird in Geschwindigkeit umgewandelt, wodurch der gesamte Arbeitsbereich verschoben wird. Je weiter der Cursor verschoben wird, desto schneller scrollt die Szene.

Derzeitist die Blasen-Navigation diewichtigste (und einzige)Funktion. Die Form der Blasen wird durch SDF-Elemente definiert – weitere Informationen hierzu finden Sie unter „Was ist SDF?“.


Blasennavigation – Konzept​

Die virtuelle Blaseist an einem zentralen Punkt im Einbauraum des Geräts verankert. Der Cursor durchläuft drei konzentrische Bereiche:

┌──────────────────────────────────────────┐
│ WALL ZONE │ cursor beyond outer shell
│ ┌────────────────────────────────────┐ │
│ │ VELOCITY ZONE │ │ soft shell → scene moves
│ │ ┌──────────────────────────────┐ │ │
│ │ │ DEAD ZONE (inside) │ │ │ no scene movement
│ │ │ │ │ │
│ │ │ ● centre │ │ │
│ │ │ │ │ │
│ │ └──────────────────────────────┘ │ │
│ │ bubble surface │ │
│ └────────────────────────────────────┘ │
│ outer boundary │
└──────────────────────────────────────────┘
GebietCursorpositionVerhalten
Tote ZoneIm Inneren der BlaseKeine Navigation. Leichte Dämpfung. Sie können die Szene frei steuern.
GeschwindigkeitsbereichZwischen der Oberfläche der Blase und der äußeren BegrenzungDie Kurve „Entfernung → Geschwindigkeit“ bewirkt, dass sich der Arbeitsbereich in Richtung des Cursors bewegt.
WandbereichÜber die äußeren Grenzen hinausEine harte Feder drückt den Cursor wieder nach innen, wodurch die Navigationsgeschwindigkeit ihre Obergrenze erreicht.

In allen drei Bereichen wirdeine feder-dämpfende taktile Kraftausgeübt – Sie können die Oberfläche, die Driftschale sowie die Außenwand spüren.


Schnellstart – Bubble-Navigation aktivieren​

Die Navigation ist eine dauerhafte, einmalige Konfiguration – sie muss nur einmal gesendet werden und bleibt dann aktiv, bis Sie die Navigation ausdrücklich beenden, den Dienst neu starten oder die Sitzung schließen.

Starten (Minimalkonfiguration – Standard: abgerundete Box mit Sprechblase)​

{
"inverse3": [
{
"device_id": "04C3",
"configure": {
"navigation": { "mode": "bubble" }
}
}
]
}

Stopp​

{
"inverse3": [
{
"device_id": "04C3",
"configure": {
"navigation": { "mode": "disabled" }
}
}
]
}

Weitere HTTP-Routen​

MethodePfadVerwendungszweck
GET/{type}/{id}/config/navigation?session=<expr>Aktuelle Navigationskonfiguration und -status
POST/{type}/{id}/config/navigation?session=<expr>Navigation starten oder aktualisieren
DELETE/{type}/{id}/config/navigation?session=<expr>Navigation beenden

Verzeichnis der Blasenformen​

Die tote Zone der Blase wird durch die Form der vorzeichenbehafteten Abstandsfunktion (SDF) beschrieben. Unterschiedliche Formen führen zu unterschiedlichen Navigationsgefühlen: Die abgerundete Box (Standard) eignet sich für komfortable, rechteckige Ruhezonen, die Kugel für isotropes Driften, die Ellipsoidform für eine Ausrichtung entlang bestimmter Achsen und die Kapselform für koridorartige Szenarien.

Abgerundete Box (Standard)​

Die Standard-Tote Zone ist ein flacher Bereich, dessen Höhe etwas größer ist als seine Tiefe – nach der Anpassung sorgt sie sowohl bei Inverse3 als auch bei MInverse für ein angenehmes Schreibgefühl:

{
"shape": {
"primitive": "rounded_box",
"parameters": { "b": { "x": 0.05, "y": 0.02, "z": 0.03 }, "r": 0.01 }
}
}

Kugel – isotropes Driften​

{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}

Ellipsoid – in X- und Z-Richtung breiter als in Y-Richtung​

Wird verwendet, wenn die Empfindlichkeit der Handabtastung bei horizontaler Verschiebung geringer ist als in vertikaler Richtung:

{
"shape": {
"primitive": "ellipsoid",
"parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } }
}
}

Kapselkörper – schmaler Korridor​

von zwei Endpunkten a/b mit dem Radius r Definition:

{
"shape": {
"primitive": "capsule",
"parameters": {
"a": { "x": 0.0, "y": -0.03, "z": 0.0 },
"b": { "x": 0.0, "y": 0.03, "z": 0.0 },
"r": 0.04
}
}
}

Ein vollständiges Beispiel mit benutzerdefinierten Abmessungen und Bewegungsgefühl:

{
"inverse3": [
{
"device_id": "04C3",
"configure": {
"navigation": {
"mode": "bubble",
"bubble": {
"shape": {
"primitive": "ellipsoid",
"parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } }
},
"velocity_zone_width": 0.025,
"max_velocity": 1.0,
"velocity_ease": "quadratic_in"
}
}
}
}
]
}

Geschwindigkeitskurve​

Die Entfernungen in den Geschwindigkeitszonen werden zunächst über eine Beschleunigungskurve abgebildet und anschließend in die Geschwindigkeit im Arbeitsbereich umgerechnet. Wählen Sie bitte eine Beschleunigungsfunktion aus, die Ihrer gewünschten Beschleunigungsart entspricht – also wie sich die Szene beschleunigen soll, wenn der Benutzer weiter in die Tiefe der Hülle vordringt.

velocity_easeHaptikAnwendungsszenarien
linearKonstante SteigungVorhersehbar, als Standardwert empfohlen
quadratic_inDer Start verläuft langsam, doch je weiter man voranschreitet, desto schneller wird es.Präzise bei Nahbereichsbetrieb, schnell bei Bewegungen über große Entfernungen
cubic_inDer Start verlief sehr langsamSehr präzise, schrittweise Beschleunigung bei großen Entfernungen
sine_outDer Start verläuft sanft und schnell; bei Annäherung an die Außengrenze wird die Fahrt gleichmäßiger.Reaktionsschnell, gleichmäßige Beschleunigung bis zur Höchstgeschwindigkeit
quadratic_outSchnelles Ansprechen, angenehmes Spielgefühl auch über große EntfernungenSchnelles, leichtes Schieben, komfortables Cruisen
{ "velocity_ease": "quadratic_in", "max_velocity": 1.5 }

Kernverhalten​

Der Mittelpunkt der Blase verläuft durch die verschachtelten center Konfigurieren Sie das Objekt, das vier Felder enthält –position、relative、follow、speed——ersetzte das von center、center_enabled、center_mode und center_drift_speed ein veraltetes, flaches Layout.

{
"center": {
"position": { "x": 0.0, "y": 0.0, "z": 0.0 },
"relative": true,
"follow": false,
"speed": 0.02
}
}

Die Verankerungsposition in der Mitte​

position und relative Steuerung der anfänglichen Mittelposition bei der Aktivierung:

relativeposition die Bedeutung
true(Standard)position Bezieht sich auf den CursorOffset——Ausgangspunkt ist cursor + position。Standardwerte verwenden (0, 0, 0) In diesem Moment entsteht genau an der Cursorposition eine Blase.
falseposition ist im AnwendungsbereichAbsolutpunkt——Beim Eingang wird der Wert in Speicherplatz umgewandelt, beim Ausgang wieder in Anwendungsspeicherplatz, sodass der Wert bei Hin- und Rückweg gleich bleibt.

Wie bewegt sich der Mittelpunkt danach?​

follow und speed Verhalten nach Aktivierung der Blasen in jedem Aktualisierungszyklus:

followspeedVerhaltenÄquivalente Konfiguration in älteren Versionen
false(Standard)IgnorierenDer Mittelpunkt behält die Position bei, die er bei der Initialisierung hatte –fester Mittelpunkt.center_mode: "fixed"
true> 0Befindet sich der Cursor innerhalb der Blase, so ist der Mittelpunkt speed mit einer Geschwindigkeit von m/s in Richtung des Cursors.center_mode: "auto_follow"(in Kombination mit center_drift_speed)
true0.0Das Zentrum passt sich in jedem Aktualisierungszyklus direkt an den Cursor an –ein Gefühl wie beim Teleportieren.center_mode: "track_cursor"
In Version 3.5 wurden die Standardwerte geändert

Das Standardverhalten des Zentrums wurde nun geändert aufFixieren(follow = false). In früheren Versionen wurde standardmäßig eine Cursor-Drift berücksichtigt (auto_follow). Wenn Sie das alte Drift-Verhalten wiederherstellen möchten, nehmen Sie bitte folgende Einstellung vor: center.follow = true, und wird center.speed Anpassung an die alte center_drift_speed Die Werte stimmen überein.

Wenn follow = true Und wenn der Cursor über den äußeren Rand hinausgleitet, unabhängig davon, ob speed Warum folgt der Mittelpunkt immer dem Cursor, sodass die Blase stets um den Cursor herumschwebt und dieser nicht entweichen kann?


Reaktion bei einem Aufprall​

Wenn die externe Cursorkraft collision_detection.force_threshold Dann reagieren die Blasen:

  • Geschwindigkeitsbegrenzungen können vorübergehend geltenAusdehnung(bis zu velocity_zone_width 的 collision_detection.inflate_ratio (mal), damit der Benutzer beim Umfahren von Hindernissen mehr Handlungsspielraum hat.
  • Wenn collision_detection.enabled für true(Standardwert): In diesem Fall wird verhindert, dass sich der Mittelpunkt der Blase in Richtung der Kollisionskraft verschiebt, wodurch verhindert wird, dass der Benutzer den Arbeitsbereich gegen eine feste Wand zieht.

Für die Kollisionserkennung wirdHystereseEin Mechanismus zur Vermeidung von Schwankungen im Bereich des Schwellenwerts: Sobald eine Kollision ausgelöst wurde, bleibt sie aktiv, bis |ext_force| auf … sinken collision_detection.force_threshold × collision_detection.exit_ratio unter dem Produkt von … liegen. Senken exit_ratio Der Hysterese-Bereich kann vergrößert werden (um die Kollision viskoser zu gestalten); er kann auf 1.0 Dann kann die Hysterese deaktiviert und nur ein einziger Schwellenwert verwendet werden.

{
"collision_detection": {
"enabled": true,
"force_threshold": 0.5,
"inflate_ratio": 2.0,
"exit_ratio": 0.7
}
}

Parameterübersicht​

Die am häufigsten angepassten Parameter​

ParameterStandardwertErläuterung
shape{rounded_box, r=0.01, b=(0.05,0.02,0.03)}Definition der SDF-Form der Totzone
velocity_zone_width0.03 mDie Dicke der Hülle wird durch die Geschwindigkeit gesteuert
max_velocity0.5 m/sMaximale Fahrgeschwindigkeit
velocity_ease"quadratic_in"Dämpfungskurve von Entfernung zu Geschwindigkeit
center.followfalseFolgt die Mitte dem Cursor?
center.speed0.02 m/sfollow = true Driftgeschwindigkeit zu diesem Zeitpunkt

Vollständige Liste der Parameter​

FeldTypStandardwertBeschreibung
center.positionvec3(0, 0, 0)Ausgangspunkt –relative = true „时“ ist der Versatz des relativen Cursors,false Dies ist ein absoluter Koordinatenpunkt im Anwendungsraum
center.relativebooltruetrue:position Der Versatz des relativen Cursors.false: Absolute Koordinatenpunkte im Anwendungsraum, die an den Rändern in Koordinaten des Einbauraums umgerechnet werden
center.followboolfalsefalse: Der Mittelpunkt bleibt an seiner Ausgangsposition.true: Der Mittelpunkt folgt dem Cursor
center.speedfloat0.02follow = true Driftgeschwindigkeit zu diesem Zeitpunkt (Meter/Sekunde);0.0 Jeden Zyklus direkt am Cursor anzeigen
shapeForm{rounded_box, r=0.01, b=(0.05,0.02,0.03)}Tote Zone – SDF-Form
velocity_zone_widthfloat0.03Breite des Gehäuses für die Drehzahlregelung (Meter)
max_velocityfloat0.5Maximale Fahrgeschwindigkeit (m/s)
velocity_easeString"quadratic_in"Dämpfungsfunktion von der Entfernung zur Geschwindigkeit
reset_velocity_on_entrybooltrueSobald der Cursor wieder in den Geschwindigkeitsbereich gelangt, wird die kumulierte Geschwindigkeit auf Null zurückgesetzt.
bump_widthfloat0.005Breite der taktilen Erhebungen an der Oberfläche (Meter)
bump_stiffnessfloat200.0Federkonstante bei einer Oberflächenausbuchtung
spring_innerfloat0.0Die Feder im Zentrum der Blase
spring_surfacefloat10.0Die Feder an der Oberfläche
spring_outerfloat15.0Die Feder an der Außenkante
wall_stiffnessfloat700.0Hartwandfeder, die über die Außenkante hinausragt
damping_innerfloat0.1Dämpfung in der Mitte
damping_surfacefloat4.0Dämpfung an der Oberfläche
damping_outerfloat7.0Dämpfung an der Außengrenze
rotation_enabledboolfalseDie Drehung des Arbeitsraums auf die Navigationsrichtung anwenden
scale_enabledboolfalseAnwendung der Arbeitsbereichszoomfunktion auf die Navigationsgeschwindigkeit
collision_detection.enabledbooltrueNavigation entlang der Kollisionsrichtung unterbinden
collision_detection.force_thresholdfloat1.0Größe der für die Kollision erforderlichen äußeren Kraft (N)
collision_detection.inflate_ratiofloat2.0Vergrößerungsfaktor für die Breite des Geschwindigkeitsbereichs während der Kollision (muss ≥ 1,0 sein)
collision_detection.exit_ratiofloat0.7Verzögerungsfaktor – Beibehaltung des Kollisionszustands, bis |ext_force| < force_threshold × exit_ratio。Wertebereich (0, 1];1.0 Anzeige der Verzögerung deaktivieren
3.5 Versteckte Felder

Die folgenden beiden Funktionsgruppen wurden im JSON-Modus der Version 3.5 weggelassen, ihre Implementierung wird jedoch für Version 3.6 neu konzipiert:

  • Avatar – Grenzklammer: Feld avatar_boundary_enabled、avatar_boundary und avatar_boundary_hysteresis。
  • Einschränkungen hinsichtlich der Arbeitsbereichsgrenzen: Feld workspace_bounded、workspace_transition_speed und workspace_transition_ease。

Der Code wird weiterhin mit den Standardwerten kompiliert und ausgeführt, aber der Client kann diese Felder weder über HTTP noch über WebSocket lesen oder schreiben. In Version 3.6 wird die Avatar-Grenze als oberstes Element auf derselben Ebene wie das Bubble-Objekt behandelt. bounds Die Felder werden wieder hinzugefügt, einschließlich der vollständigen Platzierungstransformationen; die Arbeitsbereichsgrenzen werden wieder hinzugefügt, sobald die Fehlerbehebung bezüglich des Zentrums-Jitter-Problems abgeschlossen ist.

Prüfregeln​

  • velocity_zone_width > 0
  • 0 ≤ bump_width < velocity_zone_width
  • max_velocity > 0
  • bump_stiffness ≥ 0
  • spring_inner ≥ 0 und spring_inner ≤ spring_surface ≤ spring_outer
  • wall_stiffness ≥ 0
  • damping_inner ≥ 0 und damping_inner ≤ damping_surface ≤ damping_outer
  • collision_detection.force_threshold > 0
  • collision_detection.inflate_ratio ≥ 1.0
  • collision_detection.exit_ratio Werte im Bereich von (0, 1] innerhalb des Bereichs
  • center.speed ≥ 0

mit ungültigen Parametern POST oder configure.navigation Die Anfrage wird abgelehnt und löst Folgendes aus: invalid-value Ereignis; die vorherige Konfiguration bleibt weiterhin gültig.


Vorfall​

Bezeichnung des VorfallsAuslösezeitpunkt
navigation-startedDie Navigation auf dem Gerät wurde aktiviert
navigation-updatedWenn die Navigation aktiviert ist, wird ihre Konfiguration aktualisiert.
navigation-stoppedDie Navigation wurde angehalten (explizit deaktiviert,DELETE (Anfrage oder Sitzung beendet)
invalid-valueDie Navigationskonfiguration wurde aufgrund einer fehlgeschlagenen Validierung abgelehnt.

Bekannte Einschränkungen​

  • 3.5 Versteckte Arbeitsbereichsgrenzen und Avatar-Grenzen: Diese beiden Funktionsgruppen sind im JSON-Modus nicht vorhanden, da sie für Version 3.6 neu gestaltet werden. Weitere Informationen finden Sie in den Erläuterungen oben unter „Parameterübersicht “.
  • Inhomogene Skalierung + Drehung: Wenn rotation_enabled und scale_enabled Wenn beide Funktionen gleichzeitig aktiviert sind, kommt es zu einer leichten Abweichung in der Geschwindigkeitsrichtung – die Drehung wird nicht auf die Skalierungsachse angewendet.
  • An das Gerät anpassen: Die Größe der Blasen (Radius, Breite des Bereichs) wird nicht entsprechend dem physikalischen Skalierungsfaktor des Geräts angepasst –MInverse und Inverse3 verwenden dieselben absoluten Maße, weshalb sich die Bedienung der beiden Seiten möglicherweise unterscheidet.