Mount- und Workspace-Transformationen
Zwei Transformationen positionieren das Gerät im Anwendungsraum. Das Verständnis der Pipeline hilft Ihnen, die passende auszuwählen.
Koordinaten-Pipeline
| Stufe | Funktion | Einstellung | Dauerhaft? |
|---|---|---|---|
| Basis | Ordnet die Achsen neu zu (z. B. Z-oben → Y-oben) | session.configure.basis — siehe Tutorial 08 (HTTP Remote-Konfiguration) | Ja |
| Montage-Transformation | Physischer Montageversatz des Geräts (Armposition, Rotation, Skalierung) | configure.mount oder configure.preset — siehe Tutorial 08 (HTTP Remote-Konfiguration) | Ja |
| Workspace-Transformation | Drift bei Kamera- bzw. Szenennavigation | commands.set_transform — siehe Tutorial 09 (WebSocket Streaming pro Takt) | Ja (dauerhaft gespeichert) |
Montage-Transformation
Die Montage beschreibt, wo das Gerät physisch steht — seinen Armversatz, Ausrichtung und Skalierung. Sie wird einmal festgelegt (oder wenn sich der physische Aufbau ändert) und zur Laufzeit selten aktualisiert.
Voreinstellungen (Werkskonfigurationen)
Statt die Montage selbst zu berechnen, wählen Sie eine benannte Voreinstellung:
| Voreinstellung | Ursprungsposition | Ausrichtung des Arms |
|---|---|---|
defaults | Gerätebasis | Vorne (Armvorderseite) |
arm_front | Gerätebasis | Vorne |
arm_front_centered | Workspace-Mitte | Vorne |
led_front | Gerätebasis | LED-Seite vorne |
led_front_centered | Workspace-Mitte | LED-Seite vorne |
custom | Manuell — Montage selbst festlegen | — |
Eine Voreinstellung legt Montage, Basis und Workspace-Ursprung in einem Schritt fest.
Montage direkt festlegen
- 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 schließen sich gegenseitig ausDas gleichzeitige Senden beider Angaben in derselben Nachricht ist mehrdeutig — der Dienst lehnt es ab.
Wählen Sie eines: ein benanntes preset (das die Montage für Sie festlegt) oder eine explizite
mount-Transformation.
Beim Senden einer Montage verpacken Sie die Transformation: { "mount": { "transform": { … } } }.
Beim Lesen einer Montage aus dem Snapshot ist sie flach: { "mount": { "position": …, "rotation": …, "scale": … } }.
Das ist so beabsichtigt — Befehle verwenden den einheitlichen command_data-Wrapper, Snapshots
serialisieren die core::transform direkt.
Workspace-Transformation
Die Workspace-Transformation ist eine Laufzeit-Drift, die auf die Montage aufgesetzt wird. Ihr typischer Anwendungsfall ist die Szenennavigation — Schwenken, Drehen oder Zoomen der Ansicht der Anwendung, während das Gerät physisch an Ort und Stelle bleibt.
Sowohl Montage- als auch Workspace-Transformationen sind dauerhaft — der Dienst merkt sich den zuletzt gesendeten Wert. Der Unterschied liegt in Zweck und Leistung:
- Montage ist dafür ausgelegt, einmal gesetzt zu werden und bestehen zu bleiben — sie beschreibt den physischen Aufbau und ist für seltene Aktualisierungen optimiert.
- Workspace-Transformation ist dafür ausgelegt, mit hoher Frequenz gestreamt zu werden (z. B. in jedem Frame während der Kameranavigation) — die interne Pipeline ist für diese Aktualisierungsrate 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 Transformation zurück; DELETE setzt sie auf die Identität zurück.
Die Skalierung der Montage oder des Workspace verändert die Kraft, die das Gerät erzeugt, weil die Skalierung die Eindringtiefe beeinflusst, die zur Berechnung der Kontaktkraft dient. Beispielsweise halbiert eine Skalierung von 2x die Eindringtiefe ungefähr (die virtuelle Szene ist im Verhältnis zum Verfahrweg des Geräts doppelt so groß), sodass die resultierende Kraft ungefähr halb so groß ist wie bei 1x. Umgekehrt verdoppelt eine Skalierung von 0.5x die Kraft ungefähr.
Das ist meist das gewünschte Verhalten: Beim Herauszoomen aus einer haptischen Szene entstehen natürlicherweise schwächere Kontakte (Sie sind „weiter entfernt“), und beim Hineinzoomen werden sie stärker. Wenn das nicht gewünscht ist — etwa wenn die Steifigkeit beim Zoomen des Benutzers konstant bleiben soll —, kompensieren Sie dies, indem Sie Ihre Kraftverstärkungen umgekehrt proportional skalieren.
Wenn Sie kontinuierliche Fortbewegung benötigen (Blasennavigation, Drift mit Geschwindigkeitsregelung),
verwenden Sie das Navigationsmodul, anstatt set_transform in jedem Takt
manuell zu streamen — es übernimmt für Sie die Physik, das haptische
Feedback und die Begrenzung auf den Workspace.