Einbindung und Arbeitsbereichskonvertierung
Zwei Transformationen legen die Position des Geräts im Anwendungsraum fest. Das Verständnis der Pipeline hilft dabei, die richtige Transformation auszuwählen.
Koordinaten-Pipeline
| Schritt | Rolle | Einrichtungsanleitung | Dauerhafte Speicherung |
|---|---|---|---|
| Referenzkoordinatensystem | Achsen neu zuordnen (z. B. Z-up → Y-up) | session.configure.basis — Tutorial 08 (HTTP-Fernkonfiguration) | Ja |
| Mount-Konvertierung | Physikalischer Montageversatz des Geräts (Armposition, Drehung, Skalierung) | configure.mount oder configure.preset — Tutorial 08 (HTTP-Fernkonfiguration) | Ja |
| Arbeitsbereichswechsel | Drift aufgrund von Kamera- und Szenenwechseln | commands.set_transform — Tutorial 09 (WebSocket-Streaming im Tick-by-Tick-Modus) | Ja (Wert beibehalten) |
Mount-Konvertierung
„Mount“ bezeichnet die physische Position, an der sich das Gerät befindet. Das umfasst also den Armversatz, die Ausrichtung und den Maßstab. Diese Werte werden einmalig festgelegt (oder wenn der Benutzer die physische Installationskonfiguration ändert) und werden zur Laufzeit kaum aktualisiert.
Voreinstellungen (Werkseinstellungen)
Anstatt die Mount-Werte selbst zu berechnen, wählen Sie bitte eine benannte Voreinstellung aus:
| Voreinstellungen | Anordnung am Ursprung | Krebsrichtung |
|---|---|---|
defaults | Gerätehalterung | Vorderseite (Vorderseite des Arms) |
arm_front | Gerätehalterung | vorne |
arm_front_centered | Arbeitsbereichsorientiert | vorne |
led_front | Gerätehalterung | LED-Seite vorne |
led_front_centered | Arbeitsbereichsorientiert | LED-Seite vorne |
custom | Manuell – Halterung selbst einstellen | — |
Mit der Voreinstellung werden Halterung, Referenzkoordinatensystem und Arbeitsbereichsursprung gleichzeitig festgelegt.
Direkte Konfiguration des Mounts
- 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}}}'
mountWow presetsind sich gegenseitig ausschließendWenn Sie beide Angaben in derselben Nachricht senden, ist die Bedeutung nicht eindeutig, weshalb der Dienst dies ablehnt.
Bitte wählen Sie eine der beiden Optionen aus: benannt preset(Mount wird automatisch eingerichtet) oder explizit
mount Umrechnung.
Mount Senden Die Zeitangabe muss in Anführungszeichen gesetzt werden: { "mount": { "transform": { … } } }.
Einbinden aus dem Snapshot Lesen Es handelt sich um eine flache Struktur ohne Verkleidung: { "mount": { "position": …, "rotation": …, "scale": … } }.
Dies ist beabsichtigt. Der Befehl ist integriert in command_data Verwende den Wrapper, und der Snapshot ist core::transformweil es direkt serialisiert wird.
Arbeitsbereichswechsel
Die Arbeitsbereichstransformation ist eine Laufzeitverschiebung, die auf das Mount angewendet wird. Ein typischer Anwendungsfall ist die Szenennavigation. Das bedeutet, dass die Ansicht der Anwendung verschoben, gedreht oder vergrößert bzw. verkleinert wird, während das Gerät physisch an Ort und Stelle bleibt.
Sowohl die Mount- als auch die Workspace-Konvertierung sind dauerhaft. Der Dienst speichert den zuletzt übermittelten Wert. Der Unterschied liegt in der Verwendung und der Leistung:
- Ein Mountist so konzipiert, dass er einmal eingerichtet bleibt und unverändert bleibt. Erstellt die physische Installationskonfiguration dar und ist darauf optimiert, nur selten aktualisiert zu werden.
- Die Arbeitsbereichskonvertierungist für ein Streaming mit hoher Frequenz ausgelegt (z. B. bei jedem Einzelbild während der Kamerabewegung). Die interne Pipeline ist auf diesen Aktualisierungszyklus 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}}}'
GETgibt die aktuelle Umwandlung zurück und, DELETEwird auf die Identitätsabbildung (Identität) zurückgesetzt.
Wenn Sie eine Halterung oder einen Arbeitsbereich skalieren, ändert sich die von der Vorrichtung erzeugte Renderkraft. Dies liegt daran, dass sich die Skalierung auf die **Eindringtiefe (penetration depth)** auswirkt, die für die Berechnung der Kontaktkraft herangezogen wird. Zum Beispiel 2x Durch die Skalierung wird die Eindringtiefe ungefähr um die Hälfte reduziert (da die virtuelle Szene im Vergleich zum Bewegungsbereich des Geräts doppelt so groß wird). Daher beträgt die resultierende Kraft 1xEin grober Eindruck der Kraft, die man dort spürt die Hälfteist. Umgekehrt 0.5x Der Maßstab verdoppelt die Kraft ungefähr.
Dies ist in der Regel das gewünschte Verhalten. Wenndie haptische Szene verkleinert wird, wird der Kontakt auf natürliche Weise schwächer (der Zustand „weiter entfernt“), und wenn sie vergrößert wird, wird der Kontakt stärker. Sofern dies nicht dem gewünschten Verhalten entspricht – beispielsweise wenn die Steifigkeit während des Vergrößerns oder Verkleinerns konstant bleiben soll –, sollten Sie dies durch eine umgekehrte Skalierung der Kraftverstärkung (Gain) ausgleichen.
Wenn eine kontinuierliche Bewegung (Bubble-Navigation, geschwindigkeitsgesteuertes Driften) erforderlich ist, dann bei jedem Tick set_transformanstatt es manuell zu streamen NavigationsmodulVerwenden Sie dieses Modul. Es übernimmt die physikalische Simulation, das haptische Feedback und die Verarbeitung der Arbeitsbereichsgrenzen.