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

チュートリアル

各チュートリアルは、Inverse Serviceの機能を解説する独立したプログラムです。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>、このドキュメントに適合するバージョンを維持するためです。

前提条件​

  • Der 逆サービス 実行されます(以下のいずれかの方法で) Haply あるいはその スタンドアロンのインストーラー) ポート 10001.
  • 少なくとも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 バリアントには C++20 コンパイラが必要です(-glz). ダイ CMakeLists.txt サンプルリポジトリの最上位レベルにアップロードします libhv, nlohmann/json und glaze FetchContentについて — 依存関係の手動設定は不要です。

チュートリアル一覧​

#名称機器バリエーション学習内容
00機器一覧BeliebigPython · C++ · C++ GlazeHTTPデバイスの検出、セッション関連のクエリ
01号Inverse3Inverse3Python · C++ · C++ GlazeWebSocketの状態ストリーミング、負荷のかからないキープアライブ、最初のメッセージによるハンドシェイク
02VerseGrip版VG(有線)Python · C++ · C++ Glazeオリエンテーション・ストリーミング、キープアライブ経由 probe_orientation, クォータニオン → オイラー表現
03Wireless VG版WVGPython · C++ · C++ Glazeボタン、バッテリー、ホールセンサー
04こんにちは、ボーデンさんInverse3Python · C++ · C++ Glaze最初の触覚効果 — 張力スプリングが set_cursor_force
05位置制御Inverse3Python · C++ · C++ Glaze制御は set_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(POST)を介してベース/プリセット/マウントを対話的に設定する
09WSリモートコントロールInverse3Python · C++ · C++ Glazeリアルタイム・ワークスペース・ナビゲーター:HTTPセッションおよびデバイスの検出、その後、ストリーミングによる set_transform WebSocket経由のTakt
10イベント—Python · C++ · C++ Glazeポート 10020 のイベントストリーム用リスナー、レベル/名によるフィルタリング

Tipp — 触覚ループのベンチマーク​

チュートリアル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