Zum Hauptinhalt springen

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:

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ätzlich keyboard, was unter Linux erhöhte Rechte erfordert; die Tutorials 08 und 09 benötigen außerdem requests).
  • C++-Tutorials: CMake 3.15+ und ein C++11-Compiler für die nlohmann-Varianten bzw. C++20 für die Glaze-Varianten (-glz). Die CMakeLists.txt auf oberster Ebene des Beispiel-Repositories lädt libhv, nlohmann/json und glaze über FetchContent — eine manuelle Einrichtung der Abhängigkeiten ist nicht nötig.

Tutorial-Liste​

#NameGeräteVariantenWas Sie lernen
00GerätelisteBeliebigPy · C++ · C++ GlazeErkennung von HTTP-Geräten, sitzungsbezogene Abfragen
01Ausgabe Inverse3Inverse3Py · C++ · C++ GlazeWebSocket-Zustandsstreaming, Keepalive ohne Kraft, Handshake mit der ersten Nachricht
02Ausgabe VerseGripVG (kabelgebunden)Py · C++ · C++ GlazeOrientierungs-Streaming, Keepalive über probe_orientation, Quaternion → Euler
03Ausgabe Wireless VGWVGPy · C++ · C++ GlazeTasten, Akku, Hall-Sensor
04Hallo BodenInverse3Py · C++ · C++ GlazeErster haptischer Effekt — Straffeder über set_cursor_force
05PositionssteuerungInverse3Py · C++ · C++ GlazeSteuerung über set_cursor_position, zufällige Ziele (C++) oder WASD-Bewegung bei gedrückter Taste (Python)
06KombiniertInverse3 + WVGPy · C++ · C++ GlazeSchleife für mehrere Geräte, Cursorsteuerung über Quaternion-zu-Richtung
07Basis & MountInverse3Py · C++ · C++ Glazeconfigure.basis, configure.preset sowie Laufzeit-Überschreibungen über configure.mount; gegenseitiger Ausschluss von Preset und Mount
08HTTP Remote-KonfigurationInverse3Py · C++ · C++ GlazeNur für HTTP: sitzungsübergreifender Konfigurator — Sitzung anhand des Profils finden und Basis / Preset / Mount interaktiv per REST (POST) setzen
09WS-FernsteuerungInverse3Py · C++ · C++ GlazeEchtzeit-Workspace-Navigator: Erkennung von HTTP-Sitzungen und -Geräten, danach Streaming von set_transform pro Takt über WebSocket
10Ereignisse—Py · C++ · C++ GlazeListener 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