Zum Hauptinhalt springen

03. Drahtloses Drucken mit VerseGrip

Entsprichtdem ModusausTutorial 02, gilt jedoch für den kabellosen VerseGrip – im Streaming-Modus wurden die Tasten (A/B/C) und der Akkustand hinzugefügt.

Du wirst Folgendes lernen:

  • Das für das drahtlose Gerät spezifische Statusfeld auslesen:buttons.{a,b,c}、battery_level、hall
  • wird probe_orientation Mechanismus zur Aufrechterhaltung der Lebensfähigkeit als unabhängiger Beobachter
  • Handshake-Modus mit nur einer ersten Nachricht, wie inTutorial 02

Arbeitsablauf​

  1. Öffnen bis ws://localhost:10001 WebSocket und warte auf den ersten Status-Frame.
  2. von wireless_verse_grip Den ersten „VerseGrip“ aus dem Array abrufen device_id。
  3. Verwendung Sitzungsprofil Erstellen Sie eine Anfrage und fügen Sie für jedes Gerät Folgendes hinzu: probe_orientation Anweisung zur Kinderbetreuung.
  4. Anfrage senden, dann entfernen session Feld – es handelt sich lediglich um einen einmaligen Handshake.
  5. In jedem folgenden Frame werden die Quaternionen in Euler-Winkel umgewandelt und die gedrosselten Telemetriedaten, einschließlich des Tastenstatus und des Ladezustands der Batterie, ausgegeben. In jedem Zyklus wird erneut ein Keep-Alive-Befehl gesendet.

Parameter​

BezeichnungStandardwertVerwendungszweck
URIws://localhost:10001URL des WebSocket-Simulationskanals
PRINT_EVERY_MS100Drosselung der Konsolenausgabe
Name des Sitzungsprofilsco.haply.inverse.tutorials:print-wireless-verse-gripDiese Simulation im „ Haply Hub“ kennzeichnen
Euler-Winkel-Konvention

Die Transformation erfolgt in der intrinsischen Z-X-Y-Reihenfolge (Gierung → Nickung → Rollung), wobei als Koordinatensystem +X right, +Y forward, +Z up。Bitte nichtVerwendung glm::eulerAngles——Es folgt unterschiedlichen Konventionen, weshalb hier ein falsches Ergebnis ausgegeben wird. In allen drei Sprachversionen werden dieselben mathematischen Berechnungen durchgeführt; die Formeln finden Sie im Quellcode.

Wann ist es wirklich notwendig? probe_orientation

probe_orientation Nur in deiner SitzungkeineDies ist nur nützlich, wenn Sie Befehle an Inverse3 senden. Sobald Sie Befehle (Kraft, Position, Drehmoment usw.) an Inverse3 senden, übermittelt der Dienst automatisch in jedem Status-Frame die entsprechenden VerseGrip-Richtungsdaten – ohne dass eine Erkennung erforderlich ist. Verwenden Sie dies nur in eigenständigen Greiferüberwachungstools wie in diesem Tutorial. probe_orientation。

Gelesene Statusfelder​

Aus data.wireless_verse_grip[0].state:

  • orientation — quaternion(w, x, y, z)
  • hall — Messwerte des Hall-Sensors vom Typ „Integer“
  • buttons.a、buttons.b、buttons.c — Boolesche Werte
  • battery_level — Gleitkommazahlen (0,0 – 1,0)
  • transform.rotation — Drehung des Arbeitsraums (quaternion); Position und Skalierung sind für Geräte, die nur eine Ausrichtung haben, nicht anwendbar und werden daher niemals ausgegeben
Teilweise Aktualisierung der Semantik

Wenn transform.rotation entspricht der Einheitsquaternion {w:1,x:0,y:0,z:0} In diesem Fall wird das Feld weggelassen. Bitte geben Sie beim Auslesen einen Standardwert an. Aktivieren serialization/explicit_fields Dieses Feld kann jederzeit empfangen werden.

Senden / Empfangen​

undTutorial 02hat dieselbe Struktur, nur dass wireless_verse_grip Gerätearray. WebSocket empfängt kontinuierlich Status-Frames und sendet Handshake-Informationen sowie probe_orientation Keep-Alive-Befehl; die erste Nachricht enthält das Sitzungsprofil, alle folgenden Frames enthalten lediglich den Keep-Alive-Befehl.

Einzelne asynchrone Schleife.

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["wireless_verse_grip"][0]["device_id"]
request_msg = {
"session": {"configure": {"profile": {
"name": "co.haply.inverse.tutorials:print-wireless-verse-grip"}}},
"wireless_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

Befehlszeilenargumente (Python)​

Die Python-Version akzeptiert dieselben zwei Parameter wieTutorial 01:

  • --full ——Die ursprüngliche JSON-Datenlast soll in formatierter Form ausgegeben werden, nicht als einzeilige Zusammenfassung.
  • --query-config ——Bei jedem Ausfahrzyklus erneut einspritzen session.force_render_full_state, sodass jedes Einzelbild config Blöcke und nicht nur Zustandsinkremente.

--query-config Das ist besonders nützlich für den kabellosen VerseGrip, da config Der Block enthält neben den üblichen Konfigurationsfeldern auch WVG-spezifische sub_type Feld (stylus / prototype / ruko / kingfisher(neu in Version 3.5). Ausführen python 03-haply-inverse-print-wireless-verse-grip.py --full --query-config Man kann dies in Echtzeit beobachten config.sub_type Zusammen mit den anderen Konfigurationswerten aktualisieren.

In der C++-Version stehen diese Parameter nicht zur Verfügung.

Im Lieferumfang des SDK-Installationsprogramms enthalten

Das Tutorial 03 wird ebenfalls zusammen mit dem SDK lokal installiert – bitte im Installationsverzeichnis des Dienstes unter tutorials/03-haply-inverse-print-wireless-verse-grip/ dort suchen.

Quellcode: Python · C++ · C++ Glaze

Verwandte Themen: Tutorial 02 (VG mit Kabel) · Typ (Quaternionen) · Steuerbefehl (probe_orientation) · WebSocket-Protokoll