Transformationen in der Montage und im Arbeitsbereich
Zwei Transformationen ordnen das Gerät im Anwendungsraum ein. Wenn Sie die Verarbeitungskette verstehen, können Sie die richtige auswählen.
Koordinatenverarbeitungskette
| Etappe | Rolle | Wie lässt sie sich definieren? | Bleibt das so? |
|---|---|---|---|
| Basis | Weist die Achsen neu zu (z. B. Z nach oben → Y nach oben) | session.configure.basis — siehe Tutorial 08 (HTTP-Fernkonfiguration) | Ja |
| Montageumwandlung | Physikalische Versätze bei der Montage des Geräts (Armposition, Drehung, Maßstab) | configure.mount ou configure.preset — siehe Tutorial 08 (HTTP-Fernkonfiguration) | Ja |
| Umgestaltung des Arbeitsbereichs | Navigationsabweichung der Kamera oder der Szene | commands.set_transform — siehe Tutorial 09 (kontinuierliche WebSocket-Übertragung in jedem Zyklus) | Ja (dauerhaft) |
Montageumwandlung
Die Montage beschreibt, wo sich das Gerät physisch befindet – seinen Armversatz, seine Ausrichtung und seinen Maßstab. Sie wird einmalig definiert (oder wenn der Benutzer die physische Konfiguration ändert) und während der Ausführung nur selten aktualisiert.
Voreinstellungen (Werkseinstellungen)
Anstatt die Montage selbst zu berechnen, wählen Sie eine Voreinstellung mit dem Namen:
| Voreinstellung | Lage des Ursprungs | Ausrichtung des Arms |
|---|---|---|
defaults | Geräteunterteil | Nach vorne (Vorderseite des Arms) |
arm_front | Geräteunterteil | Vorwärts |
arm_front_centered | Arbeitsbereichszentrum | Vorwärts |
led_front | Geräteunterteil | LED-Seite nach vorne |
led_front_centered | Arbeitsbereichszentrum | LED-Seite nach vorne |
custom | Handbuch – Die Montage selbst vornehmen | — |
Mit einer Voreinstellung lassen sich die Montage, die Basis und der Ursprung des Arbeitsbereichs in einem Schritt festlegen.
Die 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 et preset schließen sich gegenseitig ausBeides in derselben Nachricht zu senden, ist mehrdeutig: Der Dienst lehnt dies ab.
Wählen Sie eines davon aus: eines preset nommé (der die Montage für Sie festlegt) oder eine
Transformation mount ausdrücklich.
Wenn Sie senden Sie In einer Montage fassen Sie die Verwandlung zusammen: { "mount": { "transform": { … } } }.
Wenn Sie Lesen Sie Eine Montage aus dem Schnappschuss – er ist abgeflacht: { "mount": { "position": …, "rotation": …, "scale": … } }.
Das ist beabsichtigt: Die Befehle verwenden die einheitliche Hüllkurve command_data ; die Momentaufnahmen
werden direkt serialisiert core::transform.
Umgestaltung des Arbeitsbereichs
Die Transformation des Arbeitsbereichs ist eine Ausführungsableitung, die über die Montage angewendet wird. Ein typischer Anwendungsfall ist die Navigation innerhalb der Szene (Schwenken, Drehen oder Zoomen in der Anwendungsansicht), während das Gerät physisch an Ort und Stelle bleibt.
Sowohl die Einrichtung als auch die Umgestaltung des Arbeitsbereichs sind persistent: Der Dienst speichert den letzten Wert, den Sie gesendet haben. Der Unterschied liegt in der Nutzung und der Leistung:
- Die Konfiguration ist so konzipiert, dass sie einmal festgelegt wird und dann unverändert bleibt; sie beschreibt die physikalische Anordnung und ist für seltene Aktualisierungen optimiert.
- Die Transformation des Arbeitsraums ist für eine hohe Aktualisierungsfrequenz ausgelegt (beispielsweise bei jedem Bild während der Kamerabewegung); die interne Verarbeitungskette 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 ausgegebene Kraft, da sie sich auf die Eindringtiefe die zur Berechnung der Kontaktkraft verwendet wird. Beispielsweise eine Skala von 2x reduziert die Eindringtiefe um etwa die Hälfte (die virtuelle Szene ist im Verhältnis zum Hub der Kamera doppelt so groß), sodass die erzielte Kraft etwa die Hälfte weniger als die, die man bei 1x. Umgekehrt gilt eine Skala von 0.5x verdoppelt die Kraft ungefähr.
Dies ist in der Regel das gewünschte Verhalten: Ein Herauszoomen in einer haptischen Szene führt naturgemäß zu schwächeren Berührungsreaktionen (Sie sind „weiter entfernt“), während ein Heranzoomen diese verstärkt. Wenn dies nicht Ihren Vorstellungen entspricht (beispielsweise wenn die Steifigkeit beim Zoomen des Benutzers konstant bleiben soll), gleichen Sie dies aus, indem Sie die Kraftverstärkungen umgekehrt skalieren.
Wenn Sie eine kontinuierliche Bewegung benötigen (Blasennavigation, geschwindigkeitsgesteuerte Drift),
verwenden Sie die Modul „Navigation“ anstatt manuell zu versenden
set_transform Bei jedem Tick: Es übernimmt für Sie die Physik, das haptische Feedback
und die Abgrenzung des Arbeitsbereichs.