チュートリアル
各チュートリアルは、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)のバリエーションを含みます。コンパイル対象ファイルには、接尾辞
-glz「Glaze」バージョン用。 - haply-inverse-python-samples— チュートリアルごとに1つのディレクトリ。
Inverse Serviceの各バージョンは、2つのリポジトリにそれぞれ対応するタグが設定されています。ブランチをフォローしてください。 release/<version> このドキュメントに対応するバージョンを維持するため。
前提条件
- 逆サービス 現在実行中(経由: Haply ou via le スタンドアロンインストールプログラム) 港で
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). LeCMakeLists.txtサンプルリポジトリのトップレベルから取得するlibhv,nlohmann/jsonetglazeFetchContent 経由:依存関係の手動設定は不要です。
チュートリアル一覧
| # | ノム | 機器 | バリエーション | 学習内容 |
|---|---|---|---|---|
| 00 | 機器一覧 | Tous | Python · C++ · C++ Glaze | HTTPデバイスの検出、セッションに限定されたリクエスト |
| 01 | 表示Inverse3 | Inverse3 | Python · C++ · C++ Glaze | WebSocketの状態の拡散、ゼロオーバーヘッドでの接続維持、最初のメッセージでの初期交換 |
| 02 | Affichage 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 | ベースと取り付け | Inverse3 | Python · C++ · C++ Glaze | 実行時の置換 configure.basis, configure.preset et configure.mount ; プリセットと編集の相互排除 |
| 08 | HTTPによるリモート設定 | Inverse3 | Python · C++ · C++ Glaze | HTTP専用のセッション間コンフィギュレータ:プロファイルごとのセッション検出、その後、REST経由でPOSTリクエストにより基本設定/プリセット/マウントを対話形式で送信 |
| 09 | リモコン WS | Inverse3 | Python · C++ · C++ Glaze | リアルタイムワークスペースナビゲーター:HTTPセッションおよびデバイスの検出、そして配信 set_transform 各サイクルごとにWebSocket経由で |
| 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