Zum Hauptinhalt 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 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 -glz ist 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 10001 Was 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ßerdem keyboard ist erforderlich. Hierfür sind unter Linux Administratorrechte erforderlich. In den Tutorials 08 und 09 requests (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-Repositorys CMakeLists.txt Allerdings über FetchContent libhv、nlohmann/json、glaze Um dies zu erhalten, ist keine manuelle Einrichtung der Abhängigkeiten erforderlich.

Übersicht über die Tutorials​

#NameGerätVarianteLerninhalte
00GeräteübersichtbeliebigPy · C++ · C++ GlazeGeräteerkennung über HTTP, Abfragen im Sitzungsbereich
01Inverse3 AusgabeInverse3Py · C++ · C++ GlazeWebSocket-Zustands-Streaming, Keep-Alive ohne zusätzlichen Aufwand, Handshake anhand der ersten Nachricht
02VerseGrip-AusgabeKabel-VGPy · C++ · C++ GlazeStreaming von Körperhaltungen,probe_orientation Keep-Alive durch Quaternionen – Umwandlung in Euler-Winkel
03Drahtloser VG-AusgangWVGPy · C++ · C++ GlazeTasten, Akku, Hall-Sensor
04Hallo FloorInverse3Py · C++ · C++ GlazeDer erste haptische Effekt — set_cursor_force Penalty-Feder nach
05PositionssteuerungInverse3Py · C++ · C++ Glazeset_cursor_position Steuerung über [...], zufällige Zielauswahl (C++) oder Bewegung durch Gedrückthalten der WASD-Tasten (Python)
06KombiniertInverse3 WVGPy · C++ · C++ GlazeCursorsteuerung über mehrere Geräte in einer Schleife und anhand von Quaternionen
07Normen und BefestigungenInverse3Py · C++ · C++ Glazeconfigure.basis、configure.preset、zur Laufzeit configure.mount Überschreibung durch … Voreinstellungen und Mounts schließen sich gegenseitig aus
08HTTP-FernkonfigurationInverse3Py · C++ · C++ GlazeEin 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“.
09WS-FernbedienungInverse3Py · C++ · C++ GlazeEchtzeit-Arbeitsbereichsnavigator: Nach der Erkennung von Sitzungen und Geräten über HTTP erfolgt die Übertragung über WebSocket bei jedem Tick set_transform streamen
10Veranstaltung—Py · C++ · C++ GlazeEreignisstrom-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