Haply Inverse SDK 3.5.0 {#haply-inverse-sdk-350}
1年前のAPI改訂以来、これまでで最大規模のリリースとなります。バージョン3.5.0では、統一された3D数学レイヤー、Minverseの完全なサポート、型付きイベントストリーム、完全な設定API、より分かりやすいHTTPインターフェースが導入されています。さらに、この1年間にわたるバグ修正や利便性の向上も盛り込まれています。
見どころ {#highlights}
統一的な3D数学レイヤー— デバイスベース(フレーム)、アセンブリ変換、ワークスペース変換、ナビゲーション変換のための最高水準のプリミティブを備えた、組み合わせ可能な変換パイプライン。また、ローカル空間、セッション空間、アプリケーション空間、内部空間間の明示的な変換もサポートしています。バブルナビゲーション— 速度依存型のレート制御、ヒステリシスを考慮した衝突検出、およびカーソルへのドリフト機能(オプション)を備えた、形状化されたゾーン(SDFプリミティブ)を用いた大規模な仮想ワークスペース内のナビゲーション。HTTPおよびWebSocketを介して完全に設定可能で、App-Spaceを介したラウンドトリップに対応しています。標準化されたイベントストリーム— デバイスのライフサイクル、セキュリティ警告、校正、バッテリー状態、更新頻度の警告、および非推奨機能に関する通知専用のWebSocketイベントチャネル。Settings API— HTTP-CRUD、型ヒント、スコープ制限、説明を備えた完全なキーバリュー型設定システムであり、従来の入れ子構造の構成ファイルに代わるものです。統一されたデバイス設定 — 各デバイスごとに共通のHTTPルーティング設定: 基準, マウント, プリセット, 変える, フィルター, 利き手, トルク・スケーリング, 重力補正, ホームに戻る.Minverseとペンの同期キャリブレーション— デバイスとペンが同時にキャリブレーションされます。グリップが物理的に取り付けられるまで、キャリブレーションはロックされたままになります。HTTPにおける利便性の向上 — インデックスベースのデバイスセレクタ(インデックスでデバイスにアクセスするため、IDは不要)、WebSocketと共通の統一されたリクエストおよびレスポンス形式、オプションで有効化可能な {OK、エラー、データ}-封筒(?format=json) およびワイルドカードセッションセレクタ。新機能 {#new-features}
デバイス {#devices}
Minverse— 本リリースでの公式サポート内容:検出、起動シーケンス、セキュリティ通知、および同期化されたキャリブレーション手順。「Ruko」と「Kingfisher」は、グリップの公式製品タイプとして認識されます。デバイスシミュレータのサポート— 実際のハードウェアに加え、ソフトウェアでシミュレートされたデバイスを認識し、それらと通信する。ループ接続の防止 — 異常な動作を示すポートは自動的にブロックされます。リセットするには POST /ports/{port}/reset.ペン装着用のハートビート機能— グリップの装着および取り外しを、デバウンス機能付きで確実に検知します。セッション、コマンド、WebSocket {#sessions-commands-websocket}
セッションプロファイルのフィルタリングと永続性— セッションでは、プロファイル名と必要なSDKバージョンが指定され、サービスは再接続後もこれらを保持します。クライアントや監視ツールは、このプロファイルに基づいてセッションをフィルタリングし、対象を絞り込んで処理することができます。セッションごとのコマンドバッファ— あるセッションの処理が遅くても、他のセッションの処理を妨げることはなくなりました。単発コマンド用の明示的な `configure` 割り当て — 基準, プリセット, マウント, force_gate, 減衰 1台あたり、および プロフィール und 基準 1回のセッションにつき、現在すべてが 設定する 実行 – 出力構成の割り当てに合わせて調整され、送信された内容と読み取られた内容が一致するようにします。カスタマイズ可能な機器の取り付け — 組み込みのワークスペースプリセットを選択してください(デフォルト, 腕(前面), 腕の正面中央, フロントLED, led_front_centered) または、明示的な変換を送信してください。アセンブリを手動で変更すると、プリセットは自動的に カスタム えーと。名前付きコマンドフィールド — 位置, ベクトル, 角度, トルク ジェネリック配列を置き換える 価値観.角トルクを設定する 置き換えられた set_angular_torque (単数形は現在使われていません)。セッションフレームの拡張 — バージョン v3.0 および v3.1 のセッションフレームには、拡張可能なオブジェクトが含まれるようになりました 設定, 状態 und ステータス; 新しい出力フィールドには以下が含まれます current_cursor_force, 現在のカーソル位置, 現在の角トルク, 現在の角度位置, 制御ドメイン, 制御モード, 変える, 変形速度, より包括的な config.*-フェルダーおよび ステータス・安全 (デフォルトでは非表示)。部分的な変換の更新 — 変更したいサブフィールドのみを送信してください(位置, 回転, スケール) 組み立て、作業領域の変換、およびナビゲーション形式において。HTTP {#http}
GET / — 試験版。GET/POST/DELETE /settings und /settings/* — 完全なキー・バリュー設定API。GET /sessions/{session} und GET/POST/DELETE /sessions/{session}/profile.GET /devices?session=<selector> — 特定のセッションの適用範囲内で、デバイスの座標を変換する。インデックスベースのデバイスセレクタ — 各デバイスのIDを知らなくても、インデックスを使ってそのデバイスにアクセスする(/inverse3/0/... 最初のInverse3 デバイス用; inverse... (Inverseシリーズの全機種に対応)。統一された問い合わせおよび回答のフォーマット — POSTリクエストとGETリクエストのボディは同じものを使用する command_data-WebSocketのようなJSON構造。ある通信プロトコル向けに書かれたコードは、別のプロトコルでも動作します。オプションの封筒 — 以下の方法で有効化可能 ?format=json どのルートでも; /設定* und GET /home_return デフォルトでは使用されます {OK、エラー、データ}. 以下の方法を使用してください ?format=plain 粗構造用。セッションセレクタにおけるワイルドカード — * (任意の文字列)および ? (単一の文字)がプロフィール名に含まれている。パーセント符号付きセレクタ — %2A, %3A など、ルーティングの前にデコードされます。イベント {#events}
専用のWebSocketイベントストリームは コミュニケーション/イベント/ポート.24種類のイベントカテゴリ。これには、デバイスのライフサイクル、セキュリティ(電子ブレーキ、異物検知、閉塞)、校正エラー、バッテリー警告、セッション警告、低レートおよびクリティカルレート、入力検証、および旧式機能に関する通知などが含まれます。オブザーバビリティ {#observability}
プロファイリング時には、ログメッセージがレベルに応じた色分けされてTracyに転送されます。各HTTPハンドラに対するTracy-Zonen。メインループのタイミング統計を含むイベント。設定可能なログディレクトリおよびサーバーホスト名(Dockerに対応)。まもなくバージョン3.6で {#coming-in-36}
SDF Haptic Effects (SDF HFX)— その基礎はバージョン3.5ですでに整備されています(モジュール、ライフサイクル、モジュール側から提供されるコマンドおよび状態データのシリアライズ)。公開APIは、完全なドキュメントとともにバージョン3.6で提供されます。改善点 {#improvements}
動力振動のフィルタリング— 軸ごとの振動検出、8段階の段階的復元、ヒステリシスを伴う入力調整、および非対称な許可ウィンドウ。実行時におけるフォース・ゲート・フィルター — 以下の方法で設定可能 configure.force_gate.gain、WebSocket または HTTP 経由で、永続的なデフォルト値付き。高精度用途向けに、メインループの最大周波数を32 kHzに引き上げました。WebSocketのペイロードを小さくする — 変換—恒等式を初期値とする部分領域 (位置 = 0, rotation = 単位行列, スケール = 1) はデフォルトでは出力されません。これにより、ペイロードサイズが縮小され、旧バージョンのUnityパッケージにおける4KBのメッセージ制限との互換性が回復されます。2つの詳細設定(シリアライズ/明示的なフィールド, シリアライズ/変換の強制完了) これらのフィールドをすべて再度取り込み、それらを必要とするクライアント向けに提供します。メインループのジッターが低減されました。WebSocketメッセージ処理が、JSONの解析やネットワーク送信中にメインループのクロックをブロックしなくなりました。セッションのクロックスケジューリングが、応答のシリアライズ処理の前に移動されました。サーバーはデフォルトで localhost でのみ動作します — ネットワークアクセスは、設定から有効にします 通信/すべてのインターフェースをバインド.デバイスセレクタでのワイルドカードの使用には、プレフィックス構文を使用します (例: inverse (Inverseシリーズのすべてのデバイスに適用されます)。減衰コマンド は、とともに force_gate インダイ 設定する-割り当てが延期されました。ローテーション型ファイルロガーが従来のものを置き換え、設定可能なディレクトリに対応しています。モジュールによって提供されるコマンドと状態— モジュールは、コアスキーマを変更することなく、独自のコマンドを追加したり、フィールドを設定したり、WebSocketフレームに状態出力を挿入したりすることができます。不具合の修正 {#fixes}
1年間を通じて多くの不具合修正が行われましたが、中でも特に効果的だったものを以下に挙げます。
特定の条件下でセッション速度が不安定になる。GripHook(Verse Grip Stopper)は、シミュレーションが実行されていない場合、正常に解放されませんでした。Inverse3-タイムアウトの設定が厳しすぎたため、起動に時間がかかる端末では、接続が切断されるループが発生していました。 Windows でのサービスの不適切な終了— シャットダウン時に HTTP サーバーが必ずしもクリーンアップされなかった。サービスが古いファームウェアバージョンに対して非対応のコマンドを送信した場合、ループを再接続する。Bluetoothアダプタを搭載したシステムでは、Bluetoothデバイスの一覧表示によりログが溢れかえっていた。サービスを連続して複数回再起動すると、クラッシュが発生する。Ubuntu搭載のノートパソコンで、スタンバイから復帰した後にWireless Verse Gripドングルがフリーズする問題。Linux および macOS におけるWireless-Verse-Grip-Handshake は、最初の検出試行が失敗した場合、正しくフォールバック処理を行うようになりました。macOSの設定ファイルの保存場所 — 設定は現在、 ~/Library/Application Support/ 間違ったパスではなく、保存されました。SIGSEGV—Linux および macOS におけるシグナル処理— 複数のスレッドでクラッシュ追跡が有効になっている場合、致命的なシグナルが発生してもプロセスがループに陥らなくなりました。セッション間のコマンド上書き— あるセッションの設定コマンドが、別のセッションのコマンドによって黙って上書きされることがありましたが、これらは現在、正しくフィルタリングされ、統合されるようになりました。プローブコマンドは設定を上書きします — モニタリング・セッション(例:Haply Hub)で、 プローブの位置 Basis / Preset / Profil に対する未反映の変更を、黙って上書きしたり送信したりすることはなくなりました。プロトタイプハンドルの表示— プロトタイプハードウェアが、ユーザー定義ハンドルではなく、誤って標準ハンドルとして表示されていました。まだ移行されていないクライアントについては、以前の `set_basis` 行列の規約が再び適用されます。Inverse3-セッションの切断時に発生 するクラフトインパルスは、もはや残留力のピークを発生させません。高速な接続・切断サイクル中にWebSocketの接続が切断された際のレースコンディション。WebSocketの`session_id` いくつかの送信済みペイロードにおいて、 0 シリアル化されました。Windows では、 --ログレベル さらに、以下と組み合わせて --dev 考慮される(以前は暗黙のうちに デバッグ (リセットされた)。非推奨機能 {#deprecations}
引き続き機能しますが、将来のメジャーバージョンでは削除される予定です。回答には、場合によってはフィールドが含まれることがあります。 非推奨警告.
| 旧式 | 代替 |
|---|---|
| POST /force_scale | POSTinverse |
| 投稿 /重力補正 | POST /{device}/{id}/config/gravity_compensation |
| 投稿 /torque_scaling | POST /{device}/{id}/config/torque_scaling |
| 投稿 /デバイスの利き手 | POST /{device}/{id}/config/handedness |
| POST /serial_enable | POST /settings/communication/serial/enabled |
| POST /experimental/features/グリップ脱落シミュレーションストッパー | Settings API |
| POST /experimental/features/screensaver_enable | Settings API |
| WebSocket command_data.values | 位置, ベクトル, 角度, トルク |
| WebSocket set_angular_torque | 角トルクを設定する |
| WebSocket カーソルの位置を取得 | プローブの位置 |
| WebSocket 座標原点を設定する | configure.preset |
| WebSocket 基底を設定する セッションレベル | configure.basis |
互換性に関する注意事項 {#compatibility-notes}
3.4.19 との間で重大な互換性変更はありません。既存の統合に関する重要度の低い注意事項が 2 件あります:
古いHTTPエンドポイントには、現在、フィールドが含まれています 非推奨警告 回答において――回答スキーマを厳格に検証するクライアントは、この追加フィールドを許可すべきです。その野原 価値観 WebSocket内で command_data これは旧式ですが、引き続き解析されます。できれば名前付きフィールドを使用してください。チュートリアルとドキュメント {#tutorials-documentation}
新しいチュートリアル:05 位置制御、06 複合(Inverse3 +Verse Grip)、07 基本とマウント、08 HTTPリモートコンフィギュレータ、09 WebSocketリモート制御、10 イベントストリームリスナー。新しい釉薬の種類 jedes C++チュートリアル (cpp-glz/) 既存の nlohmann/json 形式に加えて。すべてのチュートリアルを改訂しました v3.1 API 用(ポート 10001、 configure.preset, 指定されたコマンドフィールド、 print_state()-補助機能)。削除:Verse Grip Stopperに関する旧チュートリアル ― 新しい統合チュートリアルに置き換えられました。SDKガイド、APIリファレンス、およびハードウェアのページにある公開ドキュメントが更新されました。