Zum Hauptinhalt springen
Version: 3.5.x

02. VerseGrip drucken

Überträgt die Ausrichtung (Quaternion + Z-X-Y-Eulerwinkel), den Hall-Sensor-Pegel und den Tastenstatus vom ersten verkabelten VerseGrip.

Was Sie lernen werden:

  • Lesen quaternion Ausrichtung vom staatlichen Rahmen
  • Umwandlung eines Quaternions in Z-X-Y-Eulerwinkel in Grad (+X nach rechts, +Y nach vorne, +Z nach oben)
  • Verwendung von probe_orientation als eigenständiger Keepalive-Beobachter
  • Das Handshake-Muster „Nur erste Nachricht“ (wie in Tutorial 01)

Arbeitsablauf

  1. Öffne einen WebSocket zu ws://localhost:10001 und auf den ersten Status-Frame warten.
  2. Wähle den ersten kabelgebundenen VerseGrip aus device_id aus dem verse_grip Array.
  3. Erstellen Sie eine Anfrage mit dem Sitzungsprofil und pro Gerät probe_orientation keepalive (ein Befehl für leere Objekte, der den Fluss der Griffausrichtung in Status-Frames aufrechterhält).
  4. Sende die Anfrage und entferne anschließend das session Feld – es handelt sich um einen einmaligen Handshake.
  5. Wandle in jedem nachfolgenden Frame das Quaternion in Eulerwinkel um und gib die gedrosselte Telemetrie aus. Sende das Keepalive bei jedem Tick erneut.

Parameter

NameStandardZweck
URIws://localhost:10001WebSocket-URL des Simulationskanals
PRINT_EVERY_MS100Drosselung der Konsolenausgabe
Name des Sitzungsprofilsco.haply.inverse.tutorials:print-verse-gripIdentifiziert diese Simulation im Haply
Euler-Konvention

Die Umrechnung erfolgt im Anwendungsbezugssystem nach dem intrinsischen Z-X-Y-Schema (Gieren → Nicken → Rollen) +X right, +Y forward, +Z up. Nicht Verwendung glm::eulerAngles — Es folgt einer anderen Konvention und wird hier falsch angezeigt. Alle drei Sprachvarianten verwenden dieselbe mathematische Formel; die Formel findest du im Quellcode.

Wenn probe_orientation tatsächlich benötigt wird

probe_orientation ist nur dann sinnvoll, wenn deine Sitzung nicht Senden Sie einen beliebigen Befehl an einen Inverse3. Sobald Sie einen Befehl an einen Inverse3 senden Inverse3 Kraft, Position, Drehmoment ...), überträgt der Dienst automatisch die Ausrichtung des gekoppelten VerseGrip in jedem Zustandsframe – ganz ohne Sensor. Verwenden Sie probe_orientation nur für eigenständige Tools zur Griffüberwachung wie in diesem Tutorial.

Statusfelder gelesen

Von data.verse_grip[0].state:

  • orientationquaternion (w, x, y, z)
  • hall — Ganzzahliger Messwert des Hall-Sensors
  • button — boolesch

Senden / Empfangen

Die WebSocket-Schleife: einen Status-Frame empfangen, den Handshake aufbauen und zurücksenden + probe_orientation Keepalive. Die erste ausgehende Nachricht enthält das Sitzungsprofil; jeder nachfolgende Frame enthält nur das Keepalive.

Einzelne asynchrone Schleife — recv() → Build-Befehl → send() → Wiederholen.

async with websockets.connect(URI) as websocket:
while True:
msg = await websocket.recv()
data = json.loads(msg)

if first_message:
first_message = False
device_id = data["verse_grip"][0]["device_id"]
request_msg = {
"session": {"configure": {"profile": {
"name": "co.haply.inverse.tutorials:print-verse-grip"}}},
"verse_grip": [{
"device_id": device_id,
"commands": {"probe_orientation": {}} # empty — keepalive
}]
}

await websocket.send(json.dumps(request_msg))
request_msg.pop("session", None) # one-shot handshake

Quelle: Python · C++ · C++ Glaze

Siehe auch: Typen (Quaternionen) · Steuerbefehle (probe_orientation) · WebSocket-Protokoll · Tutorial 03 (Wireless VG)