メインコンテンツへスキップ

チュートリアル

各チュートリアルは、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の各リリースでは、両方のリポジトリに対応するタグが固定されています。本ドキュメントと一致するバージョンを引き続き使用するには、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.txt しかし、FetchContent 経由で 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