チュートリアル
各チュートリアルは、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)の両方のバリエーションが含まれています。ビルドターゲットには
-glzGlaze バリアントの接尾辞。 - haply— チュートリアルごとに1つのディレクトリ。
Inverse Serviceの各リリースでは、両方のリポジトリに一致するタグが作成されます。以下の手順に従ってください: release/<version> このドキュメントに対応するバージョンを維持するためにブランチを作成してください。
前提条件
- について 逆サービス が実行中である(以下のいずれかの方法で) Haply または スタンドアロンインストーラー) ポート
10001. - Haply 検出されました。各チュートリアルは特定のデバイスファミリーを対象としています。詳細は以下の表をご覧ください。
- Pythonのチュートリアル:
pip install websockets(チュートリアル04、05、06、07も必要ですkeyboard(Linuxでは、これを行うには管理者権限が必要です)。 - C++チュートリアル: nlohmann バリアントには CMake 3.15 以降および C++11 対応コンパイラ、Glaze には C++20 対応コンパイラが必要です(
-glz) バリエーション。サンプルリポジトリのトップレベルCMakeLists.txt取得libhv,nlohmann/jsonそしてglazeFetchContent 経由 — 手動での依存関係の設定は不要です。
チュートリアル一覧
| # | 名称 | デバイス | バリエーション | 学習内容 |
|---|---|---|---|---|
| 00 | デバイス一覧 | いずれか | Python · C++ · C++ Glaze | HTTPデバイス検出、セッションスコープのクエリ |
| 01 | Inverse3印刷 | Inverse3 | Python · C++ · C++ Glaze | WebSocketの状態ストリーミング、ゼロフォース・キープアライブ、初回メッセージ・ハンドシェイク |
| 02 | VerseGripを印刷 | Wired VG | Python · C++ · C++ Glaze | オリエンテーションのライブ配信、 probe_orientation keepalive、クォータニオン → オイラー |
| 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 | ベース&マウント | Inverse3 | Python · C++ · C++ Glaze | configure.basis, configure.preset、および実行時間 configure.mount オーバーライド;プリセットとマウント間の排他制御 |
| 08 | リモート設定(近日公開予定) | いずれか | Py | HTTP 経由でのリモートデバイス設定;プロファイルによるセッション検出 |
| 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