Tutorials
Jedes Tutorial ist ein eigenständiges Programm, das eine Funktion des Inverse Service demonstriert. Drei Sprachvarianten werden nebeneinander bereitgestellt, damit Sie Idiome vergleichen und den Stack wählen können, der zu Ihrem Projekt passt:
- Python — der kürzeste und einfachste Einstieg (
websockets+json) - C++ (nlohmann/json) — portabel für C++11, JSON wird zur Laufzeit geparst
- C++ (Glaze) — modern mit C++20, Reflexion zur Kompilierzeit und Parsing ohne Speicherallokation, empfohlen für Echtzeit-Haptikschleifen
Der Quellcode wird in zwei öffentlichen Beispiel-Repositories veröffentlicht:
- haply-inverse-cpp-samples — ein Verzeichnis pro Tutorial mit Varianten für nlohmann/json (C++11) und Glaze (C++20). Build-Ziele haben für die Glaze-Variante das Suffix
-glz. - haply-inverse-python-samples — ein Verzeichnis pro Tutorial.
Jede Version des Inverse Service fixiert in beiden Repositories einen passenden Tag. Folgen Sie dem Branch release/<version>, um bei der Version zu bleiben, die zu dieser Dokumentation passt.
Voraussetzungen
- Der Inverse Service läuft (entweder über den Haply Hub oder den eigenständigen Installer) auf Port
10001. - Mindestens ein Haply-Gerät wird erkannt. Die Tutorials richten sich jeweils an eine bestimmte Gerätefamilie — siehe die Tabelle unten.
- Python-Tutorials:
pip install websockets(die Tutorials 04, 05, 06, 07, 08 und 09 benötigen zusätzlichkeyboard, was unter Linux erhöhte Rechte erfordert; die Tutorials 08 und 09 benötigen außerdemrequests). - C++-Tutorials: CMake 3.15+ und ein C++11-Compiler für die nlohmann-Varianten bzw. C++20 für die Glaze-Varianten (
-glz). DieCMakeLists.txtauf oberster Ebene des Beispiel-Repositories lädtlibhv,nlohmann/jsonundglazeüber FetchContent — eine manuelle Einrichtung der Abhängigkeiten ist nicht nötig.
Tutorial-Liste
| # | Name | Geräte | Varianten | Was Sie lernen |
|---|---|---|---|---|
| 00 | Geräteliste | Beliebig | Py · C++ · C++ Glaze | Erkennung von HTTP-Geräten, sitzungsbezogene Abfragen |
| 01 | Ausgabe Inverse3 | Inverse3 | Py · C++ · C++ Glaze | WebSocket-Zustandsstreaming, Keepalive ohne Kraft, Handshake mit der ersten Nachricht |
| 02 | Ausgabe VerseGrip | VG (kabelgebunden) | Py · C++ · C++ Glaze | Orientierungs-Streaming, Keepalive über probe_orientation, Quaternion → Euler |
| 03 | Ausgabe Wireless VG | WVG | Py · C++ · C++ Glaze | Tasten, Akku, Hall-Sensor |
| 04 | Hallo Boden | Inverse3 | Py · C++ · C++ Glaze | Erster haptischer Effekt — Straffeder über set_cursor_force |
| 05 | Positionssteuerung | Inverse3 | Py · C++ · C++ Glaze | Steuerung über set_cursor_position, zufällige Ziele (C++) oder WASD-Bewegung bei gedrückter Taste (Python) |
| 06 | Kombiniert | Inverse3 + WVG | Py · C++ · C++ Glaze | Schleife für mehrere Geräte, Cursorsteuerung über Quaternion-zu-Richtung |
| 07 | Basis & Mount | Inverse3 | Py · C++ · C++ Glaze | configure.basis, configure.preset sowie Laufzeit-Überschreibungen über configure.mount; gegenseitiger Ausschluss von Preset und Mount |
| 08 | HTTP Remote-Konfiguration | Inverse3 | Py · C++ · C++ Glaze | Nur für HTTP: sitzungsübergreifender Konfigurator — Sitzung anhand des Profils finden und Basis / Preset / Mount interaktiv per REST (POST) setzen |
| 09 | WS-Fernsteuerung | Inverse3 | Py · C++ · C++ Glaze | Echtzeit-Workspace-Navigator: Erkennung von HTTP-Sitzungen und -Geräten, danach Streaming von set_transform pro Takt über WebSocket |
| 10 | Ereignisse | — | Py · C++ · C++ Glaze | Listener für den Ereignisstrom auf Port 10020, Filterung nach Level/Name |
Tipp — Benchmark der Haptikschleife
Tutorial 10 (Events) ist dafür ausgelegt, parallel zu jedem anderen Tutorial ausgeführt zu werden. Wenn --no-hide-rate aktiviert ist, gibt es das Ereignis system-rate-report des Dienstes aus, das die effektive Gerätetaktrate enthält. Vergleichen Sie die Rate der Varianten Python / C++ (nlohmann) / C++ (Glaze) desselben Tutorials, um den Einfluss des Serialisierungs-Overheads auf eine Regelschleife mit etwa 4 kHz zu 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