チュートリアル
各チュートリアルは、Inverse Serviceの1つの機能を紹介するスタンドアロンプログラムです。3つの言語バージョンが並べて提供されているため、各言語の表現方法を比較し、プロジェクトに適した技術スタックを選択することができます:
- Python — 最も短く、最も簡単に始められる入り口 (
websockets+json) - C++ (nlohmann/json)— 移植性に優れた C++11、ランタイム解析方式の JSON
- C++ (Glaze)— コンパイル時のリフレクションとメモリ割り当てを伴わない構文解析をサポートする最新のC++20。リアルタイムのハプティックループに推奨
ソースコードは、2つの公開サンプルリポジトリに公開されています:
- haply — 各チュートリアルごとに1つのディレクトリがあり、nlohmann/json(C++11)およびGlaze(C++20)の両方のバリエーションが含まれています。ビルド対象には、Glazeバリエーション用の
-glz接尾辞が付きます。 - haply-inverse-python-samples— チュートリアルごとに1つのディレクトリがあります。
Inverse Serviceの各リリースでは、2つのリポジトリに対応するタグが固定されます。このドキュメントと一致するバージョンを維持するには、 release/<version> ブランチに従ってください。
前提条件
- ポート
10001から 逆サービス サービスが実行中である必要があります (Haply または スタンドアロンインストーラーで実行)。 - 少なくとも1台のHaply デバイスが検出されている必要があります。各チュートリアルは、特定のデバイスシリーズを対象としています。以下の表をご参照ください。
- Python チュートリアル:
pip install websockets(チュートリアル04、05、06、07、08、09にはさらにkeyboardが必要であり、これにはLinuxでの管理者権限が必要です。チュートリアル08と09にはrequestsも必要です。) - C++ チュートリアル: nlohmann バリアントには、CMake 3.15 以降および C++11 コンパイラが必要です。Glaze(
-glz) この変更には、C++20 コンパイラが必要です。サンプルリポジトリのルートディレクトリCMakeLists.txtFetchContent を通じてlibhv,nlohmann/json,glazeが読み込まれるため、手動での依存関係の設定は必要ありません。
チュートリアル一覧
| # | 名前 | デバイス | 変形 | 学習内容 |
|---|---|---|---|---|
| 00 | デバイス一覧 | すべてのデバイス | Python · C++ · C++ Glaze | HTTPデバイスの検出、セッションスコープのクエリ |
| 01 | Inverse3 出力 | Inverse3 | Python · C++ · C++ Glaze | WebSocketの状態ストリーミング、ゼロフォース・キープアライブ、初回メッセージのハンドシェイク |
| 02 | VerseGrip 出力 | 有線 VG | Python · C++ · C++ Glaze | 双方向ストリーミング、 probe_orientation キープアライブ、クォータニオン → オイラー変換 |
| 03 | ワイヤレスVG出力 | WVG | Python · C++ · C++ Glaze | ボタン、バッテリー、ホールセンサー |
| 04 | こんにちは、フロア | Inverse3 | Python · C++ · C++ Glaze | 最初のハプティック効果 — set_cursor_force ペナルティスプリング |
| 05 | 位置制御 | Inverse3 | Python · C++ · C++ Glaze | set_cursor_position 操作:ランダムな目的地(C++)またはWASDキーを押して移動(Python) |
| 06 | 結合 | Inverse3 WVG | Python · C++ · C++ Glaze | マルチデバイスループ、クォータニオン方向に基づくカーソル操作 |
| 07 | 基準座標系とマウント | Inverse3 | Python · C++ · C++ Glaze | configure.basis, configure.preset, ランタイム configure.mount 再定義;プリセットとマウント間の排他性 |
| 08 | HTTPによるリモート設定 | Inverse3 | Python · C++ · C++ Glaze | HTTP専用セッション間コンフィギュレータ:プロファイルからセッションを検索した後、REST経由でbasis / preset / mountを対話形式でPOSTする |
| 09 | WS リモートコントロール | Inverse3 | Python · C++ · C++ Glaze | リアルタイムワークスペースナビゲーター:HTTPセッション/デバイスの検出後、WebSocket経由でティックごとに set_transform ストリーミング |
| 10 | イベント | — | Python · C++ · C++ Glaze | ポート 10020 のイベントストリームリスナー、レベル/名前のフィルタリング |
ヒント — ハプティック・ループ・ベンチマーク
チュートリアル10(イベント)は、他のチュートリアルと併せて実行するように設計されています。 --no-hide-rate このオプションを有効にすると、サービスの system-rate-report イベントが出力され、これには実際のデバイスのティックレートが含まれます。同じチュートリアルの Python / C++ (nlohmann) / C++ (Glaze) バージョンでレート比較を行うと、約 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