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

03. ワイヤレスVerseGripの配布

チュートリアル02と同じパターンですが、ワイヤレスVerseGrip用です。ストリーミング中の状態でのボタン(A/B/C)とバッテリー残量が表示されます。

学習内容:

手順​

  1. WebSocket 経由で以下のアドレスに接続してください ws://localhost:10001 そして、最初のステータスメッセージが届くのを待ってください。
  2. [選択] device_id Array社初のワイヤレスVerseGrip wireless_verse_grip.
  3. 以下のフォームからお問い合わせください 会議概要 およびデバイス固有のキープアライブにより probe_orientation.
  4. リクエストを送信した後、そのチェックボックスをオフにしてください session — これは唯一無二の握手だ。
  5. 以降の各フレームごとに、クォータニオンをオイラー角に変換し、キーの状態やバッテリー残量を含む、サンプリングレートを下げたテレメトリデータを出力してください。キープアライブは、各クロックごとに再送信してください。

パラメータ​

名称標準Zweck
URIws://localhost:10001シミュレーションチャンネルのWebSocket URL
PRINT_EVERY_MS100コンソール出力の制限
セッションプロファイル名co.haply.inverse.tutorials:print-wireless-verse-gripHaply Hub におけるこのシミュレーションを特定します
オイラーの規約

変換は、アプリケーション座標系において、Z-X-Yの順序(ヨー→ピッチ→ロール)で内部的に行われます。 +X right, +Y forward, +Z up. 使用しないでください glm::eulerAngles — これは別の規約に従っているため、ここでは誤った値が返されます。3つの言語バリエーションはすべて同じ数学的処理を実装しており、その式はソースコードに記載されています。

Wann probe_orientation 実際に必要とされる

probe_orientation これは、セッションが keinen Inverse3 にコマンドを送信します。Inverse3 に信号(力、位置、トルクなど)を送信すると、このサービスはペアリングされた VerseGrip の向きを各ステータスフレームで自動的にストリーミングします。この場合、キープアライブは不要です。以下の方法を使用してください。 probe_orientation このチュートリアルのような、独立したグリップ監視ツールにのみ適用されます。

読み込まれた状態フィールド​

Aus data.wireless_verse_grip[0].state:

  • orientation — quaternion (w, x, y, z)
  • hall — ホールセンサーの整数測定値
  • buttons.a, buttons.b, buttons.c — ブーレの値
  • battery_level — 浮動小数点数 (0.0 – 1.0)
  • transform.rotation — 作業領域の回転 (quaternion); 向きのみを提供するデバイスでは、位置とスケーリングは対象外となり、送信されることはありません
部分更新におけるセマンティクス

transform.rotation 同一性クォータニオンに対して {w:1,x:0,y:0,z:0} に相当します。読み出し時にデフォルト値を指定してください。有効にしてください serialization/explicit_fields、それをいつまでも維持するために。

送信/受信​

「」と同じ構成です チュートリアル 02, 単にデバイス・アレイを用いて wireless_verse_grip. WebSocketのループはステートフレームを受信し、ハンドシェイクおよびキープアライブを probe_orientation 戻る。最初の送信メッセージにはセッションプロファイルが含まれており、それ以降の各フレームにはキープアライブのみが含まれる。

単一の非同期ループ。

async with websockets.connect(URI) as websocket:
while True:
msg = await websocket.recv()
data = json.loads(msg)

if first_message:
first_message = False
device_id = data["wireless_verse_grip"][0]["device_id"]
request_msg = {
"session": {"configure": {"profile": {
"name": "co.haply.inverse.tutorials:print-wireless-verse-grip"}}},
"wireless_verse_grip": [{
"device_id": device_id,
"commands": {"probe_orientation": {}} # empty — keepalive
}]
}

await websocket.send(json.dumps(request_msg))
request_msg.pop("session", None) # one-shot handshake

コマンドラインオプション(Python)​

Python版では、チュートリアル01と同じ2つのフラグを受け付けます:

  • --full — 1行の要約の代わりに、生のJSONペイロードをフォーマットして出力します。
  • --query-config — 各送信ティックごとに追加される session.force_render_full_state を再度追加し、各フレームが config-状態変化だけでなく、ブロックも含まれている。

--query-config VerseGripのワイヤレス版では特に便利で、その理由は config-通常の設定フィールドに加えて、WVG固有のフィールドをブロックする sub_type (stylus / prototype / ruko / kingfisher(3.5以降で追加された)が含まれています。もしあなたが python 03-haply-inverse-print-wireless-verse-grip.py --full --query-config 実行すると、その様子をリアルタイムで追跡できます。 config.sub_type 他の設定値とともに更新されます。

C++の各バリエーションでは、これらのフラグは提供されていません。

SDKインストーラーに同梱されています

チュートリアル 03 は、SDK とともにローカルにインストールされます。以下の場所にあります。 tutorials/03-haply-inverse-print-wireless-verse-grip/ サービスのインストールディレクトリ内。

出典: Python·C++·C++ Glaze

関連トピック: チュートリアル 02(有線 VG) ・ 型(クォータニオン) ・ ステューアコマンド (probe_orientation) ・ WebSocketプロトコル