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
-glzEs 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ätzlichkeyboardist erforderlich, wofür unter Linux Administratorrechte benötigt werden. In den Tutorials 08 und 09 wirdrequests(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-RepositorysCMakeLists.txtüber FetchContentlibhv,nlohmann/json,glazeDa dies importiert wird, ist keine manuelle Konfiguration der Abhängigkeiten erforderlich.
Liste der Tutorials
| # | Name | Gerät | Veränderung | Lerninhalte |
|---|---|---|---|---|
| 00 | Geräteliste | Alle Geräte | Py · C++ · C++ Glaze | HTTP-Gerätesuche, Abfrage im Sitzungsbereich |
| 01 | Inverse3 Ausgabe | Inverse3 | Py · C++ · C++ Glaze | WebSocket-Status-Streaming, Zero-Force-Keepalive, Handshake bei der ersten Nachricht |
| 02 | VerseGrip-Ausgabe | Kabelgebundenes VG | Py · C++ · C++ Glaze | Richtungs-Streaming, probe_orientation Keep-Alive, Quaternion → Euler-Transformation |
| 03 | Drahtlose VG-Ausgabe | WVG | Py · C++ · C++ Glaze | Tasten, Batterien, Hall-Sensoren |
| 04 | Hallo Floor | Inverse3 | Py · C++ · C++ Glaze | Erster haptischer Effekt — set_cursor_force Torsionsfeder |
| 05 | Positionssteuerung | Inverse3 | Py · C++ · C++ Glaze | set_cursor_position Steuerung: Zufälliger Zielpunkt (C++) oder Bewegung per WASD-Tasten (Python) |
| 06 | Kombination | Inverse3 WVG | Py · C++ · C++ Glaze | Mehrgeräte-Schleife, Cursorsteuerung auf Basis von Quaternion-Richtungen |
| 07 | Referenzkoordinatensystem & Halterung | Inverse3 | Py · C++ · C++ Glaze | configure.basis, configure.preset, Laufzeit configure.mount Definition: Exklusivität zwischen Voreinstellungen und Mounts |
| 08 | HTTP-Fernkonfiguration | Inverse3 | Py · C++ · C++ Glaze | HTTP-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“ |
| 09 | WS-Fernsteuerung | Inverse3 | Py · C++ · C++ Glaze | Echtzeit-Workspace-Navigator: Nach der Erkennung von HTTP-Sitzungen/Geräten über WebSocket bei jedem Tick set_transform Streaming |
| 10 | Veranstaltung | — | Py · C++ · C++ Glaze | Ereignisstrom-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