これは、1年前にAPIが書き換えられて以来、最大規模のバージョンアップデートです。3.5.0では、統一された3D数学レイヤー、Minverseの完全なサポート、型付きイベントストリーム、完全な設定API、より簡潔なHTTPインターフェースが導入されたほか、この1年間で蓄積されたバグ修正やユーザー体験の改善も盛り込まれています。
見どころ {#highlights}
統一された3D数学レイヤー— 組み合わせ可能な変換パイプラインにより、デバイスの基本座標系(フレーム)、取り付け変換、作業空間変換、ナビゲーション変換のための基本単位を提供し、ローカル、セッション、アプリケーション、および内部空間間の明示的な変換をサポートします。Bubble Navigation— 成形領域(SDF プリミティブ)を通じて大規模な仮想作業空間内をナビゲートし、速度マッピングによる速度制御、知覚遅延を考慮した衝突検出、およびオプションのカーソルへのドリフト機能をサポートしています。HTTP および WebSocket を通じて完全に設定可能で、アプリケーション空間との双方向通信にも対応しています。型付きイベントストリーム— デバイスのライフサイクル、セキュリティアラート、校正、バッテリー、制御レートに関する警告、およびサポート終了の通知専用の WebSocket イベントチャネル。設定 API— HTTP CRUD、型ヒント、値の範囲制限、説明情報をサポートする完全なキーバリュー型設定システムであり、従来のネストされた設定ファイルに取って代わりました。統一されたデバイス設定 — すべてのデバイスが 1 つの 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、減衰、および各セッションの プロフィール 和 基準,現在はいずれも 設定する この際、出力構成のマッピングと一致しているため、送信される内容と読み取られる内容が往復を通じて一致する。カスタマイズ可能なデバイスの設置方法 — 組み込みのワークスペースプリセットから選択可能(デフォルト、腕(前面)、腕の正面中央、フロントLED、led_front_centered),明示的な変換を送信することも可能です。インストール方法を手動で変更すると、デフォルト設定は自動的に カスタム。名前付きコマンドフィールド — 位置、ベクトル、角度、トルク 汎用的なものに取って代わった 価値観 配列。角トルクを設定する に取って代わった set_angular_torque(単数形は現在使われていません)。セッションフレームの拡張 — v3.0 および v3.1 のセッションフレームには、拡張可能な 設定、状態 和 ステータス 対象;新たに追加された出力フィールドには以下が含まれます current_cursor_force、現在のカーソル位置、現在の角トルク、現在の角度位置、制御ドメイン、制御モード、変える、変形速度、さらに充実した config.*、および ステータス・安全(デフォルトでは非表示)。部分変換の更新 — インストール方法、ワークスペースの変換、およびナビゲーション形状については、変更するサブフィールドを送信するだけでよい(位置、回転、スケール)。HTTP {#http}
GET / — サービスバージョン。GET/POST/DELETE /settings および /settings/* — 完全なキーバリュー設定 API。GET /sessions/{session} および GET/POST/DELETE /sessions/{session}/profile。GET /devices?session=<selector> — デバイスの座標を、指定されたセッションのアプリケーション空間に変換します。インデックスベースのデバイスセレクタ — IDを知らなくても、インデックスに基づいて任意のデバイスを特定できます(/inverse3/0/... 最初のInverse3を指定します;inverse... (すべての Inverse シリーズ機器を対象としています)。統一されたリクエスト/レスポンスの構造 — POST/GET リクエストの本文は、WebSocket と同じものを使用します。 command_data JSONの構造。ある転送方式向けに記述されたコードは、別の転送方式でも利用可能です。選択可能なパッケージ構造 — 任意のルートで使用 ?format=json 有効化できます;/設定* 和 GET /home_return デフォルト設定 {OK、エラー、データ}。元の構造が必要な場合は、以下をご利用ください。 ?format=plain。会話セレクタのワイルドカード — プロファイル名に含まれる *(任意の文字列)および ?(1文字)。パーセント記号でデコードされるセレクタ — %2A、%3A など、ルーティングの前にデコードされます。事件 {#events}
で コミュニケーション/イベント/ポート ここでは、専用の WebSocket イベントストリームを提供しています。合計 24 種類のイベントがあり、これにはデバイスのライフサイクル、安全関連イベント(緊急停止、異物検知、失速)、校正失敗、バッテリーアラート、セッション警告、制御レートが低すぎる/著しく低すぎる、入力検証、および使用中止の通知などが含まれます。可観測性 {#observability}
パフォーマンス分析を有効にすると、ログメッセージはレベルに応じて色分けされた上でTracyに転送されます。各 HTTP ハンドラーには、Tracy セクションが設定されています。メインループの計時およびイベントの集計。ログディレクトリとサーバーのホスト名を設定できます(Dockerでの使用に便利です)。バージョン 3.6 がまもなくリリースされます {#coming-in-36}
SDF 触覚エフェクト(SDF HFX)— バージョン 3.5 において基礎的な実装(モジュール、ライフサイクル、モジュールが提供するコマンド/状態のシリアライズ)が完了しており、公開 API はバージョン 3.6 のリリース時に、完全なドキュメントとともに公開される予定です。改善 {#improvements}
力振動フィルタ— 軸ごとの振動検出、8段階の漸進的復帰、ヒステリシスを伴う投票メカニズム、および非対称の解放ウィンドウ。実行時フォースゲートフィルタ — WebSocket または HTTP 経由で利用可能です configure.force_gate.gain 設定を行い、永続化されるデフォルト値を指定します。メインループの最高周波数を32 kHzに引き上げ、精密な用途に対応しました。WebSocketの負荷をさらに軽減 — デフォルトでは、デフォルト値が恒等変換であるサブフィールドは出力から省略されます(位置 = 0、rotation = 単位行列、スケール = 1),これにより負荷を軽減し、旧バージョンの Unity パッケージにおける 4 KB のメッセージ長制限との互換性を回復します。2 つの詳細設定(シリアライズ/明示的なフィールド、シリアライズ/変換の強制完了)必要に応じて、すべてのフィールドを再度有効にすることができます。メインループのジッターを低減— WebSocket メッセージの処理において、JSON の解析およびネットワーク送信中にメインループがブロックされることがなくなりました。また、セッションのスケジューリングが、レスポンスのシリアライズより前に実行されるようになりました。サーバーはデフォルトで localhost のみをリッスンします — ネットワークアクセスを有効にするには、以下を有効にしてください 通信/すべてのインターフェースをバインド 設定。デバイスセレクタのワイルドカードにはプレフィックス構文が採用されています(例: inverse (すべての Inverse シリーズ機器に対応)。ダンピング指令 すでに force_gate 一緒に引っ越す 設定する マッピング中。ローテーションファイルロガーは、従来のロガーに取って代わり、設定可能なディレクトリに対応しています。モジュールが提供するコマンドとステータス— モジュールは、コアスキーマを変更することなく、WebSocketフレームにカスタムコマンド、設定フィールド、およびステータス出力を組み込むことができます。修正 {#fixes}
1年間の不具合修正。そのうち、影響が最も大きかったものを以下に挙げます。
会話の速度が不安定で、特定の条件下で発生します。GripHook(Verse Grip Stopper)は、シミュレーション実行時以外では正常に解放されませんでした。Inverse3 タイムアウトの設定が短すぎるため、起動に時間がかかるデバイスが接続切断のループに陥っています。 Windows でのサービス停止時にクリーンアップが不完全だった— シャットダウン時に HTTP サーバーが必ずしもクリーンアップされるとは限りません。ループの再発生は、サービスが旧バージョンのファームウェアに対してサポートされていないコマンドを送信した際に発生します。Bluetoothデバイスの列挙処理は、Bluetoothアダプタが搭載されたシステム上で大量のログを出力します。サービスを連続して複数回再起動すると、クラッシュする。Ubuntu搭載のノートパソコンで、スリープ/復帰後にワイヤレスVerse Gripレシーバーがフリーズする。「Wireless Verse Grip」ハンドシェイク(Linux および macOS)は、最初の検出試行が失敗した場合、正しくフォールバックするようになりました。macOSのプロファイルの保存場所 — 配置は現在、以下の場所に保存されています ~/Library/Application Support/ であり、誤った道ではない。Linux および macOS における SIGSEGV シグナルの処理— マルチスレッドでのクラッシュ捕捉を有効にすると、プロセスは致命的なシグナルによってループに陥らなくなります。セッション間のコマンド上書き— あるセッションでの設定コマンドが、別のセッションのコマンドによって黙って上書きされることがありましたが、これらは正しくフィルタリングされ、統合されるようになりました。検出コマンドのオーバーライド設定 — 監視セッション(例:Haply Hub)からの送信 プローブの位置 この場合、処理対象のベース/プリセット/プロファイルの変更を黙って上書きすることはなくなります。プロトタイプグリップの表示に関する問題— プロトタイプハードウェアが、カスタムグリップではなく標準グリップとして誤って表示されています。旧バージョンの `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 イベントストリームリスナー。Glaze のバリエーションを追加:各 C++ チュートリアルに新たに追加 cpp-glz/ このバリアントは、既存の nlohmann/json バリアントと並存します。すべてのチュートリアルが書き直されました,v3.1 API(ポート 10001、configure.preset、具名命令フィールド、print_state() 補助関数)。旧版の「Verse Grip Stopper」チュートリアルを削除しました。新しい「Combined」チュートリアルに置き換えられました。公開ドキュメントが更新されました。SDK ガイド、API リファレンス、およびハードウェアのページが含まれています。