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

チュートリアル

各チュートリアルは独立したプログラムであり、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.txt FetchContent を通じて取得されます libhv、nlohmann/json 和 glaze,依存関係を手動で設定する必要はありません。

チュートリアル一覧​

#名称設備バリアント学習内容
00機器一覧任意Python · C++ · C++ GlazeHTTP デバイス検出、セッション単位でのクエリ
01印刷Inverse3Inverse3Python · 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マルチデバイスループ、四元数から方向へのカーソル駆動
07Basis と MountInverse3Python · C++ · C++ Glazeconfigure.basis、configure.preset、および実行時の configure.mount オーバーレイ;preset と mount は排他的
08HTTP によるリモート設定Inverse3Python · C++ · C++ GlazeHTTP 専用のセッション横断コンフィギュレータ:プロファイルに基づいてセッションを検出し、REST インタラクティブ POST を通じて /preset/mount へアクセスします。
09WS リモートコントロールInverse3Python · C++ · C++ Glazeリアルタイムワークスペースナビゲーター:まずHTTPセッション/デバイスの検出を行い、その後WebSocketを介して各ティックごとにストリーミング送信する set_transform
10事件—Python · C++ · C++ Glaze10020 ポートのイベントストリームを監視し、レベルや名前によるフィルタリングに対応しています

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

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