Zum Hauptinhalt springen

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​

StufeFunktionEinstellungDauerhaft?
BasisOrdnet die Achsen neu zu (z. B. Z-oben → Y-oben)session.configure.basis — siehe Tutorial 08 (HTTP Remote-Konfiguration)Ja
Montage-TransformationPhysischer Montageversatz des Geräts (Armposition, Rotation, Skalierung)configure.mount oder configure.preset — siehe Tutorial 08 (HTTP Remote-Konfiguration)Ja
Workspace-TransformationDrift bei Kamera- bzw. Szenennavigationcommands.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:

VoreinstellungUrsprungspositionAusrichtung des Arms
defaultsGerätebasisVorne (Armvorderseite)
arm_frontGerätebasisVorne
arm_front_centeredWorkspace-MitteVorne
led_frontGerätebasisLED-Seite vorne
led_front_centeredWorkspace-MitteLED-Seite vorne
customManuell — Montage selbst festlegen—

Eine Voreinstellung legt Montage, Basis und Workspace-Ursprung in einem Schritt fest.

Montage direkt festlegen​

{
"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 }
}
}
}
}]
}
mount und preset schließen sich gegenseitig aus

Das 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.

Asymmetrie zwischen Befehl und Snapshot

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.
{
"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 }
}
}
}
}]
}
Die Skalierung beeinflusst die Kraftausgabe — oft in gewünschter Weise

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.

Das Navigationsmodul für automatische Drift verwenden

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.