メインコンテンツへ移動

チュートリアル

各チュートリアルは、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). Le CMakeLists.txt サンプルリポジトリのトップレベルから取得する libhv, nlohmann/json et glaze FetchContent 経由:依存関係の手動設定は不要です。

チュートリアル一覧​

#ノム機器バリエーション学習内容
00機器一覧TousPython · C++ · C++ GlazeHTTPデバイスの検出、セッションに限定されたリクエスト
01表示Inverse3Inverse3Python · C++ · C++ GlazeWebSocketの状態の拡散、ゼロオーバーヘッドでの接続維持、最初のメッセージでの初期交換
02Affichage VerseGrip有線VGPython · C++ · C++ Glaze方向性の拡散、とのつながりの維持 probe_orientation, クォータニオンからオイラー表現へ
03ワイヤレスVGディスプレイWVGPython · C++ · C++ Glazeボタン、バッテリー、ホール効果センサー
04こんにちは、フロアInverse3Python · C++ · C++ Glaze最初のハプティック効果:ペナルティスプリング set_cursor_force
05位置制御Inverse3Python · C++ · C++ Glaze管理 set_cursor_position, ランダムなターゲット(C++)またはWASDキーの押し続け(Python)
06コンビネInverse3 WVGPython · C++ · C++ Glazeマルチデバイス対応のブークル、クォータニオンに基づく方向によるカーソル制御
07ベースと取り付けInverse3Python · C++ · C++ Glaze実行時の置換 configure.basis, configure.preset et configure.mount ; プリセットと編集の相互排除
08HTTPによるリモート設定Inverse3Python · C++ · C++ GlazeHTTP専用のセッション間コンフィギュレータ:プロファイルごとのセッション検出、その後、REST経由でPOSTリクエストにより基本設定/プリセット/マウントを対話形式で送信
09リモコン WSInverse3Python · 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