チュートリアル
各チュートリアルは、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/jsonundglazeFetchContentについて — 依存関係の手動設定は不要です。
チュートリアル一覧
| # | 名称 | 機器 | バリエーション | 学習内容 |
|---|---|---|---|---|
| 00 | 機器一覧 | Beliebig | Python · C++ · C++ Glaze | HTTPデバイスの検出、セッション関連のクエリ |
| 01 | 号Inverse3 | Inverse3 | Python · C++ · C++ Glaze | WebSocketの状態ストリーミング、負荷のかからないキープアライブ、最初のメッセージによるハンドシェイク |
| 02 | VerseGrip版 | VG(有線) | Python · C++ · C++ Glaze | オリエンテーション・ストリーミング、キープアライブ経由 probe_orientation, クォータニオン → オイラー表現 |
| 03 | Wireless 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(POST)を介してベース/プリセット/マウントを対話的に設定する |
| 09 | WSリモートコントロール | Inverse3 | Python · 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