チュートリアル
各チュートリアルは独立したプログラムであり、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)の2つのバリエーションが含まれています。ビルドターゲットのうち、Glazeのバリエーションには
-glz接尾辞。 - haply-inverse-python-samples— チュートリアルごとに1つのディレクトリ。
Inverse Service の各バージョンには、2つのリポジトリそれぞれに対応するタグが設定されています。以下のタグをフォローしてください。 release/<version> ブランチを作成し、このドキュメントとバージョンを一致させる。
前提条件
- 逆サービス 実行中(経由 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(
-glz)このバリアントを使用するには、C++20 に対応したコンパイラが必要です。サンプルリポジトリのルートディレクトリにあるCMakeLists.txtFetchContent を通じて取得されますlibhv、nlohmann/json和glaze,依存関係を手動で設定する必要はありません。
チュートリアル一覧
| # | 名称 | 設備 | バリアント | 学習内容 |
|---|---|---|---|---|
| 00 | 機器一覧 | 任意 | Python · C++ · C++ Glaze | HTTP デバイス検出、セッション単位でのクエリ |
| 01 | 印刷Inverse3 | Inverse3 | Python · C++ · C++ Glaze | WebSocket のステートフルストリーミング、ゼロエフォートによる接続維持、最初のメッセージによるハンドシェイク |
| 02 | VerseGripを印刷 | 有線 VG | Python · C++ · C++ Glaze | ストリーミング配信、probe_orientation 保育園探し、四元数 → オイラー角 |
| 03 | ワイヤレス 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 | Basis と Mount | Inverse3 | Python · C++ · C++ Glaze | configure.basis、configure.preset、および実行時の configure.mount オーバーレイ;preset と mount は排他的 |
| 08 | HTTP によるリモート設定 | Inverse3 | Python · C++ · C++ Glaze | HTTP 専用のセッション横断コンフィギュレータ:プロファイルに基づいてセッションを検出し、REST インタラクティブ POST を通じて /preset/mount へアクセスします。 |
| 09 | WS リモートコントロール | Inverse3 | Python · 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