Transformationen von Halterungen und Arbeitsbereichen
Zwei Transformationen bestimmen die Position des Geräts im Anwendungsraum. Wenn man die Pipeline versteht, fällt es leichter, die richtige auszuwählen.
Koordinaten-Pipeline
| Bühne | Funktionen | Einrichtungsanleitung | Dauerhaftigkeit |
|---|---|---|---|
| Basistransformation | Die Achsen neu zuordnen (Beispiel: Z-Achse nach oben → Y-Achse nach oben) | session.configure.basis — Tutorial 08 Siehe (HTTP-Fernkonfiguration) | Ja |
| Befestigungsadapter | Physikalischer Montageversatz des Geräts (Position, Drehung und Skalierung des Arms) | configure.mount oder configure.preset — Tutorial 08 Siehe (HTTP-Fernkonfiguration) | Ja |
| Arbeitsbereichsumwandlung | Drift aufgrund der Navigation zwischen Kamera und Szene | commands.set_transform — Tutorial 09 Siehe (Streaming pro WebSocket-Tick) | Ja (wird beibehalten) |
Befestigungsadapter
DieHalterunggibt an, wo sich das Gerät physisch befindet. Dazu gehören der Versatz des Arms, die Ausrichtung und der Maßstab. Sobald sie einmal festgelegt wurde (sie wird neu eingestellt, wenn der Benutzer die physische Anordnung ändert), wird sie zur Laufzeit so gut wie nie aktualisiert.
Voreinstellungen (Werkseinstellungen)
Anstatt die Montage selbst zu berechnen, wählen Sie bitte eine benannte Voreinstellung aus:
| Voreinstellungen | Anordnung des Ursprungs | Ausrichtung des Arms |
|---|---|---|
defaults | Gerätefuß | Vorne (Vorderseite des Arms) |
arm_front | Gerätefuß | vorwärts |
arm_front_centered | In der Mitte des Arbeitsbereichs | vorwärts |
led_front | Gerätefuß | LED nach vorne gerichtet |
led_front_centered | In der Mitte des Arbeitsbereichs | LED nach vorne gerichtet |
custom | Manuell – Die Verbindung selbst einrichten | — |
Wenn Sie eine Voreinstellung auswählen, werden die Halterung, die Basis-Transformation und der Ursprung des Arbeitsbereichs auf einmal festgelegt.
Die Halterung direkt einstellen
- WebSocket
- HTTP
{
"inverse3": [{
"device_id": "049D",
"configure": {
"mount": {
"transform": {
"position": { "x": 0.0, "y": 0.0, "z": 0.0 },
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 }
}
}
}
}]
}
curl -X POST "http://localhost:10001/inverse3/049D/config/mount?session=:0" \
-H "Content-Type: application/json" \
-d '{"transform":{"position":{"x":0,"y":0,"z":0},"rotation":{"w":1,"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1}}}'
mount und preset können nicht gleichzeitig angegeben werdenDa es zu Unklarheiten führt, wenn beide mit derselben Nachricht gesendet werden, lehnt der Dienst dies ab.
Bitte wählen Sie eine der beiden Optionen aus: Benannt preset(Die Einbindung wird automatisch konfiguriert) oder explizit
mount Umwandlung.
Die HalterungSendenIn diesem Fall wird die Konvertierung wie folgt umschlossen:{ "mount": { "transform": { … } } }。
Aus dem Snapshot ein Volume einbindenEinlesenIn diesem Fall wird ein flaches Format verwendet:{ "mount": { "position": …, "rotation": …, "scale": … } }。
Dies ist beabsichtigt. Die Befehle sind einheitlich command_data Mit dem Wrapper werden die Snapshots core::transform um es direkt zu serialisieren.
Arbeitsbereichsumwandlung
Die Arbeitsbereichstransformationist eine Laufzeitverschiebung, die auf die Montage angewendet wird. Ein typischer Anwendungsfall ist die Navigation innerhalb einer Szene. Das bedeutet, dass die Ansicht der Anwendung verschoben, gedreht und gezoomt wird, während das Gerät physisch an derselben Position verbleibt.
Sowohl die Mount-Konvertierung als auch die Workspace-Konvertierungsind dauerhaft. Der Dienst behält den zuletzt übermittelten Wert bei. Der Unterschied liegt im Zweck und in der Leistung:
- Die Montageist so konzipiert, dass sie nach der einmaligen Einrichtung nicht mehr geändert wird. Sie spiegelt die physische Konfiguration wider und ist für seltene Aktualisierungen optimiert.
- Die Arbeitsbereichskonvertierungist für eine hohe Streaming-Frequenz ausgelegt (Beispiel: während der Kameranavigation bei jedem Einzelbild). Die interne Pipeline ist für diese Aktualisierungsfrequenz optimiert.
- WebSocket
- HTTP
{
"inverse3": [{
"device_id": "049D",
"commands": {
"set_transform": {
"transform": {
"position": { "x": 1.0, "y": 0.0, "z": 0.0 },
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 }
}
}
}
}]
}
curl -X POST "http://localhost:10001/inverse3/049D/state/transform?session=:0" \
-H "Content-Type: application/json" \
-d '{"transform":{"position":{"x":1,"y":0,"z":0},"rotation":{"w":1,"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1}}}'
GET gibt die aktuelle Konvertierung zurück undDELETE wird auf die Identitätstransformation zurückgesetzt.
Wenn Sie die Halterung oder den Arbeitsbereich skalieren, ändert sich die von dem Gerät ausgeübte Zeichenkraft. Die Skalierung wird zur Berechnung der Kontaktkraft herangezogen.Eindringtiefeweil dies Auswirkungen hat. Zum Beispiel 2x Auf dieser Skala halbiert sich die Eindringtiefe (da die virtuelle Szene im Verhältnis zum Bewegungsbereich des Geräts doppelt so groß ist). Infolgedessen beträgt die wahrgenommene Kraft 1x ungefähr zu dem Zeitpunkt, alsdie Hälftewird daraus. Umgekehrt 0.5x Auf dieser Skala verdoppelt sich die Kraft in etwa.
Dies ist in der Regel das gewünschte Verhalten.Wenndie haptische Szeneverkleinert wird, wird der Kontakt auf natürliche Weise schwächer (da sich die Objekte „weiter entfernt“ befinden), undwenn sie vergrößert wird, wird der Kontakt stärker. Sollte dies unerwünscht sein (z. B. wenn die Steifigkeit auch beim Zoomen durch den Benutzer konstant bleiben muss), korrigieren Sie bitte die Kraftverstärkung durch den Kehrwert der Skalierung.
Wenn eine kontinuierliche Bewegung (Bubble-Navigation, Drift durch Geschwindigkeitsregelung) erforderlich ist,
muss manuell set_transform Anstatt jedes Tick zu streamen,Navigationsmodul Bitte verwenden Sie diese Funktion. Sie übernimmt die gesamte Verarbeitung von Physiksimulationen, haptischem Feedback und der Begrenzungsbehandlung des Arbeitsbereichs.