Mount- und Workspace-Transformationen
Zwei Transformationen positionieren das Gerät im Anwendungsbereich. Das Verständnis der Pipeline hilft Ihnen dabei, die passende auszuwählen.
Koordinaten-Pipeline
| Stufe | Funktion | Einstellung | Dauerhaft? |
|---|---|---|---|
| Grundlage | Ordnet die Achsen neu an (z. B. Z oben → Y oben) | session.configure.basis — siehe Anleitung 08 (HTTP-Fernkonfiguration) | Ja |
| Montage-Transformation | Physischer Versatz des Geräts bei der Montage (Armposition, Drehung, Skalierung) | configure.mount oder configure.preset — siehe Anleitung 08 (HTTP-Fernkonfiguration) | Ja |
| Arbeitsplatzumgestaltung | Abweichung bei der Kamera- bzw. Szenennavigation | commands.set_transform — siehe Anleitung 09 (WebSocket-Streaming pro Takt) | Ja (dauerhaft gespeichert) |
Montage-Transformation
Die Montage beschreibt, wo sich das Gerät physisch befindet – seinen Armversatz, seine Ausrichtung und seine Skalierung. Sie wird einmal festgelegt (oder wenn sich der physische Aufbau ändert) und zur Laufzeit nur selten aktualisiert.
Voreinstellungen (Werkseinstellungen)
Anstatt die Montage selbst zu berechnen, wählen Sie eine benannte Voreinstellung aus:
| Voreinstellung | Ausgangsposition | Ausrichtung des Arms |
|---|---|---|
defaults | Gerätebasis | Vorne (Vorderseite des Arms) |
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 dies ab.
Wählen Sie eine der beiden Optionen: ein benanntes preset (die die Montage für Sie festlegt) oder eine explizite
mount-Transformation.
Beim Senden In einer Montage verpacken Sie die Transformation: { "mount": { "transform": { … } } }.
Beim Lesen In 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.
Arbeitsplatzumgestaltung
Die Workspace-Transformation ist eine Laufzeit-Drift, die auf die Montage aufgesetzt wird. Ein typischer Anwendungsfall ist die Szenennavigation – Schwenken, Drehen oder Zoomen der Anwendungsansicht, während das Gerät physisch an Ort und Stelle bleibt.
Sowohl Montage- als auch Workspace-Transformationen sind dauerhaft – der Dienst speichert den zuletzt gesendeten Wert. Der Unterschied liegt in Zweck und Leistung:
- Montage ist darauf ausgelegt, einmal eingerichtet zu werden und dann bestehen zu bleiben – sie beschreibt den physischen Aufbau und ist für seltene Aktualisierungen optimiert.
- Workspace-Transformation ist darauf 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 Arbeitsbereichs verändert die vom Gerät erzeugte Kraft, da die Skalierung die Eindringtiefe beeinflusst, die zur Berechnung der Kontaktkraft dient. Beispielsweise halbiert eine Skalierung von 2x die Eindringtiefe beträgt 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 in der Regel das gewünschte Verhalten: Beim Herauszoomen aus einer haptischen Szene entstehen naturgemäß schwächere Kontakte (sie sind „weiter entfernt“), und beim Hineinzoomen werden sie stärker. Wenn dies nicht gewünscht ist – etwa wenn die Steifigkeit beim Zoomen des Benutzers konstant bleiben soll –, gleichen Sie dies aus, indem Sie Ihre Kraftverstärkungen umgekehrt proportional skalieren.
Wenn Sie eine 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 Arbeitsbereich.