本文へスキップ

チュートリアル

各チュートリアルは、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++ GlazeHTTPデバイスの検出、セッションスコープのクエリ
01Inverse3 出力Inverse3Python · C++ · C++ GlazeWebSocketの状態ストリーミング、ゼロフォース・キープアライブ、初回メッセージのハンドシェイク
02VerseGrip 出力有線 VGPython · C++ · C++ Glaze双方向ストリーミング、 probe_orientation キープアライブ、クォータニオン → オイラー変換
03ワイヤレスVG出力WVGPython · C++ · C++ Glazeボタン、バッテリー、ホールセンサー
04こんにちは、フロアInverse3Python · C++ · C++ Glaze最初のハプティック効果 — set_cursor_force ペナルティスプリング
05位置制御Inverse3Python · C++ · C++ Glazeset_cursor_position 操作:ランダムな目的地(C++)またはWASDキーを押して移動(Python)
06結合Inverse3 WVGPython · C++ · C++ Glazeマルチデバイスループ、クォータニオン方向に基づくカーソル操作
07基準座標系とマウントInverse3Python · C++ · C++ Glazeconfigure.basis, configure.preset, ランタイム configure.mount 再定義;プリセットとマウント間の排他性
08HTTPによるリモート設定Inverse3Python · C++ · C++ GlazeHTTP専用セッション間コンフィギュレータ:プロファイルからセッションを検索した後、REST経由でbasis / preset / mountを対話形式でPOSTする
09WS リモートコントロールInverse3Python · 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