Zum Haupttext springen

Tutorial

Jedes Tutorial ist ein eigenständiges Programm, das eine bestimmte Funktion von Inverse Service veranschaulicht. Da jeweils drei Sprachvarianten nebeneinander bereitgestellt werden, können Sie die syntaktischen Ausdrucksweisen vergleichen und den für Ihr Projekt geeigneten Technologie-Stack auswählen:

  • Python — Der kürzeste und einfachste Einstieg (websockets + json)
  • C++ (nlohmann/json) – Hochportables C++11, JSON mit Laufzeit-Parsing
  • C++ (Glaze) – Unterstützt Reflection zur Kompilierungszeit und Parsing ohne Speicherzuweisung gemäß dem aktuellen C++20-Standard; empfohlen für Echtzeit-Haptik-Schleifen

Der Quellcode ist in zwei öffentlichen Beispiel-Repositories veröffentlicht:

  • haply — Für jedes Tutorial gibt es ein eigenes Verzeichnis, das sowohl die Varianten nlohmann/json (C++11) als auch Glaze (C++20) enthält. Zu den Build-Zielen gehört für die Glaze-Variante -glz Es wird eine Endung angehängt.
  • haply-inverse-python-samples — Für jedes Tutorial gibt es ein eigenes Verzeichnis.

Jede Veröffentlichung von Inverse Service ist mit einem entsprechenden Tag in beiden Repositories verknüpft. Um die mit diesem Dokument übereinstimmende Version beizubehalten, release/<version> Bitte folgen Sie dem Zweig.

Voraussetzungen​

  • Hafen 10001aus Inverser Dienst Der Dienst muss ausgeführt werden (Haply Hub oder Standalone-Installationsprogramm(ausführen).
  • Es muss mindestens ein Gerät vom Typ „ Haply “ erkannt werden. Jedes Tutorial ist auf eine bestimmte Geräteserie ausgerichtet. Bitte beachten Sie die folgende Tabelle.
  • Python-Tutorial: pip install websockets (In den Tutorials 04, 05, 06, 07, 08 und 09 gibt es zusätzlich keyboardist erforderlich, wofür unter Linux Administratorrechte benötigt werden. In den Tutorials 08 und 09 wird requests(Das ist ebenfalls erforderlich.)
  • C++-Tutorial: Für die nlohmann-Variante sind CMake 3.15 oder höher sowie ein C++11-Compiler erforderlich, für Glaze(-glz) Für diese Variante ist ein C++20-Compiler erforderlich. Die oberste Ebene des Beispiel-Repositorys CMakeLists.txtüber FetchContent libhv, nlohmann/json, glazeDa dies importiert wird, ist keine manuelle Konfiguration der Abhängigkeiten erforderlich.

Liste der Tutorials​

#NameGerätVeränderungLerninhalte
00GerätelisteAlle GerätePy · C++ · C++ GlazeHTTP-Gerätesuche, Abfrage im Sitzungsbereich
01Inverse3 AusgabeInverse3Py · C++ · C++ GlazeWebSocket-Status-Streaming, Zero-Force-Keepalive, Handshake bei der ersten Nachricht
02VerseGrip-AusgabeKabelgebundenes VGPy · C++ · C++ GlazeRichtungs-Streaming, probe_orientation Keep-Alive, Quaternion → Euler-Transformation
03Drahtlose VG-AusgabeWVGPy · C++ · C++ GlazeTasten, Batterien, Hall-Sensoren
04Hallo FloorInverse3Py · C++ · C++ GlazeErster haptischer Effekt — set_cursor_force Torsionsfeder
05PositionssteuerungInverse3Py · C++ · C++ Glazeset_cursor_position Steuerung: Zufälliger Zielpunkt (C++) oder Bewegung per WASD-Tasten (Python)
06KombinationInverse3 WVGPy · C++ · C++ GlazeMehrgeräte-Schleife, Cursorsteuerung auf Basis von Quaternion-Richtungen
07Referenzkoordinatensystem & HalterungInverse3Py · C++ · C++ Glazeconfigure.basis, configure.preset, Laufzeit configure.mount Definition: Exklusivität zwischen Voreinstellungen und Mounts
08HTTP-FernkonfigurationInverse3Py · C++ · C++ GlazeHTTP-spezifischer Session-Konfigurator: Suche eine Session anhand eines Profils und sende anschließend interaktiv über REST einen POST-Befehl für „basis“, „preset“ und „mount“
09WS-FernsteuerungInverse3Py · C++ · C++ GlazeEchtzeit-Workspace-Navigator: Nach der Erkennung von HTTP-Sitzungen/Geräten über WebSocket bei jedem Tick set_transform Streaming
10Veranstaltung—Py · C++ · C++ GlazeEreignisstrom-Listener für Port 10020, Filterung nach Stufe/Name

Tipp – Haptic-Loop-Benchmark​

Tutorial 10 (Ereignis) ist so konzipiert, dass es zusammen mit anderen Tutorials ausgeführt wird. --no-hide-rate Wenn Sie diese Option aktivieren, wird der Dienst system-rate-report Es wird ein Ereignis ausgegeben, das die tatsächliche Taktfrequenz des Geräts enthält. Vergleicht man die Frequenzen in den Python-/C++- (nlohmann) bzw. C++- (Glaze) Varianten desselben Tutorials, lässt sich der Einfluss des Serialisierungs-Overheads auf den Regelkreis bei etwa 4 kHz beobachten.

# Terminal 1 — pick a tutorial variant
./04-haply-inverse-hello-floor # C++ nlohmann
./04-haply-inverse-hello-floor-glz # C++ Glaze
python 04-haply-inverse-hello-floor.py # Python

# Terminal 2 — watch the rate
./10-haply-inverse-events --no-hide-rate