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 Schreibweisen vergleichen und den für Ihr Projekt geeigneten Stack auswählen:
- Python — Der kürzeste und einfachste Einstieg (
websockets+json) - C++ (nlohmann/json) – Plattformunabhängiges C++11 mit JSON-Parsing zur Laufzeit
- C++ (Glaze) – Modernstes C++20 mit Reflection zur Kompilierungszeit und Zero-Allocation-Parsing. Empfohlen für haptische Echtzeit-Schleifen.
Der Quellcode ist in zwei öffentlichen Beispiel-Repositorys verfügbar:
- haply — Für jedes Tutorial gibt es ein eigenes Verzeichnis, das sowohl die nlohmann/json-Version (C++11) als auch die Glaze-Version (C++20) enthält. Als Build-Ziel gilt für die Glaze-Version
-glzist mit dem Suffix versehen. - haply-inverse-python-samples — Für jedes Tutorial gibt es ein eigenes Verzeichnis.
In jeder Version von Inverse Service sind die Tags für beide Repositorys fest vorgegeben. Um weiterhin die Version zu verwenden, die mit diesem Dokument übereinstimmt,release/<version> Bitte verfolgen Sie den Zweig.
Voraussetzungen
- Inverser Dienstist ein Port
10001Was dort ausgeführt wird (Haply HuboderStandalone-Installationsprogramm(Starten über eine der beiden Optionen). - Es sollte mindestens ein Haply-Gerät erkannt worden sein. Die einzelnen Tutorials beziehen sich auf bestimmte Gerätefamilien. Bitte beachten Sie die folgende Tabelle.
- Python-Tutorial:
pip install websockets(In den Tutorials 04, 05, 06, 07, 08 und 09 wird außerdemkeyboardist erforderlich. Hierfür sind unter Linux Administratorrechte erforderlich. In den Tutorials 08 und 09requests(ist ebenfalls erforderlich). - C++-Tutorial: Für die nlohmann-Version sind CMake 3.15 oder höher sowie ein C++11-kompatibler Compiler erforderlich, für Glaze (
-glz) Für diese Version ist ein C++20-kompatibler Compiler erforderlich. Im obersten Verzeichnis des Beispiel-RepositorysCMakeLists.txtAllerdings über FetchContentlibhv、nlohmann/json、glazeUm dies zu erhalten, ist keine manuelle Einrichtung der Abhängigkeiten erforderlich.
Übersicht über die Tutorials
| # | Name | Gerät | Variante | Lerninhalte |
|---|---|---|---|---|
| 00 | Geräteübersicht | beliebig | Py · C++ · C++ Glaze | Geräteerkennung über HTTP, Abfragen im Sitzungsbereich |
| 01 | Inverse3 Ausgabe | Inverse3 | Py · C++ · C++ Glaze | WebSocket-Zustands-Streaming, Keep-Alive ohne zusätzlichen Aufwand, Handshake anhand der ersten Nachricht |
| 02 | VerseGrip-Ausgabe | Kabel-VG | Py · C++ · C++ Glaze | Streaming von Körperhaltungen,probe_orientation Keep-Alive durch Quaternionen – Umwandlung in Euler-Winkel |
| 03 | Drahtloser VG-Ausgang | WVG | Py · C++ · C++ Glaze | Tasten, Akku, Hall-Sensor |
| 04 | Hallo Floor | Inverse3 | Py · C++ · C++ Glaze | Der erste haptische Effekt — set_cursor_force Penalty-Feder nach |
| 05 | Positionssteuerung | Inverse3 | Py · C++ · C++ Glaze | set_cursor_position Steuerung über [...], zufällige Zielauswahl (C++) oder Bewegung durch Gedrückthalten der WASD-Tasten (Python) |
| 06 | Kombiniert | Inverse3 WVG | Py · C++ · C++ Glaze | Cursorsteuerung über mehrere Geräte in einer Schleife und anhand von Quaternionen |
| 07 | Normen und Befestigungen | Inverse3 | Py · C++ · C++ Glaze | configure.basis、configure.preset、zur Laufzeit configure.mount Überschreibung durch … Voreinstellungen und Mounts schließen sich gegenseitig aus |
| 08 | HTTP-Fernkonfiguration | Inverse3 | Py · C++ · C++ Glaze | Ein speziell für HTTP entwickelter, sitzungsübergreifender Konfigurator. Er erkennt Sitzungen anhand von Profilen und sendet interaktiv POST-Anfragen über REST an „basis“, „preset“ und „mount“. |
| 09 | WS-Fernbedienung | Inverse3 | Py · C++ · C++ Glaze | Echtzeit-Arbeitsbereichsnavigator: Nach der Erkennung von Sitzungen und Geräten über HTTP erfolgt die Übertragung über WebSocket bei jedem Tick set_transform streamen |
| 10 | Veranstaltung | — | Py · C++ · C++ Glaze | Ereignisstrom-Listener für Port 10020. Filterung nach Ebene und Name |
Tipp – Benchmark für haptische Schleifen
Tutorial 10 (Ereignis) ist so konzipiert, dass es parallel zu jedem anderen Tutorial durchgeführt werden kann.--no-hide-rate Wenn Sie diese Option aktivieren, wird der Dienst system-rate-report Es wird ein Ereignis ausgegeben. Dieses Ereignis enthält die effektive Tick-Rate des Geräts. Vergleichen Sie die Raten zwischen den verschiedenen Varianten dieses Tutorials (Python / C++ (nlohmann) / C++ (Glaze)) und überprüfen Sie den Einfluss des Serialisierungs-Overheads auf den Regelkreis bei etwa 4 kHz.
# 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