メインコンテンツまでスキップ

チュートリアル

各チュートリアルは、Inverse Serviceの機能を1つ示す独立したプログラムです。3つの言語バリアントを並べて提供しているため、書き方を比較し、プロジェクトに合ったスタックを選ぶことができます:

  • Python — 最も短く、最も手軽に始められるエントリーポイント(websockets + json)
  • C++(nlohmann/json) — 移植性の高いC++11、実行時パースのJSON
  • C++(Glaze) — コンパイル時リフレクションとゼロアロケーションのパースを備えた最新のC++20。リアルタイムのハプティックループに推奨

ソースコードは、2つの公開サンプルリポジトリで公開されています:

  • haply-inverse-cpp-samples — チュートリアルごとに1つのディレクトリがあり、nlohmann/json(C++11)版と Glaze(C++20)版の両方を収録しています。ビルドターゲットには、Glaze版用に -glz のサフィックスが付いています。
  • haply-inverse-python-samples — チュートリアルごとに1つのディレクトリがあります。

Inverse Serviceの各リリースでは、両方のリポジトリに対応するタグが固定されています。本ドキュメントと一致するバージョンを使い続けるには、release/<version> ブランチを追跡してください。

前提条件​

  • Inverse Serviceがポート 10001 で実行されていること(Haply Hubまたはスタンドアロンインストーラーのいずれかから起動)。
  • Haplyデバイスが少なくとも1台検出されていること。各チュートリアルは特定のデバイスファミリーを対象としています。下の表を参照してください。
  • 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.txt が、FetchContent 経由で libhv、nlohmann/json、glaze を取得するため、手動での依存関係のセットアップは不要です。

チュートリアル一覧​

#名前デバイスバリアント学べる内容
00デバイス一覧任意Py · C++ · C++ GlazeHTTPによるデバイス検出、セッションスコープのクエリ
01Inverse3 出力Inverse3Py · C++ · C++ GlazeWebSocket の状態ストリーミング、ゼロ力のキープアライブ、最初のメッセージによるハンドシェイク
02VerseGrip 出力有線 VGPy · C++ · C++ Glaze姿勢のストリーミング、probe_orientation によるキープアライブ、クォータニオンからオイラー角への変換
03ワイヤレス VG 出力WVGPy · C++ · C++ Glazeボタン、バッテリー、ホールセンサー
04Hello FloorInverse3Py · C++ · C++ Glaze最初のハプティック効果 — set_cursor_force によるペナルティスプリング
05位置制御Inverse3Py · C++ · C++ Glazeset_cursor_position による制御、ランダムなターゲット(C++)または WASD による長押し移動(Python)
06複合Inverse3 + WVGPy · C++ · C++ Glaze複数デバイスのループ、クォータニオンによる方向でのカーソル駆動
07基準とマウントInverse3Py · C++ · C++ Glazeconfigure.basis、configure.preset、実行時の configure.mount によるオーバーライド。プリセットとマウントの相互排他
08HTTP リモート設定Inverse3Py · C++ · C++ GlazeHTTP専用のセッション横断コンフィギュレーター。プロファイルでセッションを検出し、REST 経由で basis / preset / mount を対話的に POST
09WS リモートコントロールInverse3Py · C++ · C++ Glazeリアルタイムのワークスペースナビゲーター:HTTP によるセッション・デバイスの検出後、WebSocket 経由でティックごとに set_transform をストリーミング
10イベント—Py · 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