v3.5.0
これは、1年前のAPI刷新以来、これまでで最も大規模なバージョンアップとなります。バージョン3.5.0では、統一された3D数学レイヤー、Minverse の完全なサポート、型付きイベントストリーム、完全な設定API、そしてより分かりやすくなったHTTPインターフェースが導入されています。さらに、この1年間で多くのバグ修正や使い勝手の改善も行われました。
見どころ
- 統一的な3D数学レイヤー– デバイスベース(フレーム)、マウント変換、ワークスペース変換、ナビゲーション変換のための完全なプリミティブを備えた、組み合わせ可能な変換パイプライン。また、ローカル空間、セッション空間、アプリケーション空間、内部空間間の明示的な変換もサポートしています。
- バブルナビゲーション– 速度依存のレート制御、ヒステリシスを考慮した衝突検出、およびカーソルへのドリフト機能(オプション)を備えた、成形ゾーン(SDFプリミティブ)を用いた大規模な仮想ワークスペース内でのナビゲーション。HTTPおよびWebSocketを介して完全に設定可能で、App-Spaceを介したラウンドトリック通信に対応しています。
- 標準化されたイベントストリーム– デバイスのライフサイクル、セキュリティ警告、校正、バッテリー状態、レートに関する警告、および非推奨機能に関する通知専用のWebSocketイベントチャネル。
- Settings-API– HTTP-CRUD、型ヒント、範囲制限、説明を備えた完全なキーバリュー型設定システムであり、従来のネストされた設定ファイルに代わるものです。
- 統一されたデバイス設定 – 各デバイスごとに共通のHTTPルーティングセット:
basis,mount,preset,transform,filters,handedness,torque_scaling,gravity_compensation,home_return. - Minverse とペンの同期キャリブレーション– デバイスとペンが同時にキャリブレーションされるようになりました。グリップが物理的に取り付けられるまで、キャリブレーションはロックされたままとなります。
- HTTPの利便性向上 – インデックスベースのデバイスセレクタ(インデックスを介してデバイスにアクセスするため、IDは不要)、WebSocketと共通の統一されたリクエスト/レスポンス構造、オプションで有効化可能な
{ok, error, data}-封筒(?format=json) およびワイルドカード・セッション・セレクタ。
新機能
機器
- Minverse – 本バージョンで正式にサポートされている機能:検知、待機手順、セキュリティ通知、および同期化された校正手順。
- 「Ruko」と「Kingfisher」は、公式のグリップ製品タイプとして認識されるようになりました。
- デバイスシミュレータのサポート– ソフトウェアでシミュレートされたデバイスを、実際のハードウェアと同様に認識・制御することができます。
- ループ接続の防止 – 不正なポートは自動的にブロックされます。リセットするには、
POST /ports/{port}/reset. - タッチ検出用のハートビート機能– デバウンス機能により、グリップの装着や取り外しを確実に検出します。
セッション、コマンド、およびWebSocket
- セッションプロファイルのフィルタリングと永続性– セッションはプロファイル名と必要なSDKバージョンを指定します。サービスは、再接続後もこれら両方を記憶します。クライアントや監視ツールは、このプロファイルに基づいてセッションをフィルタリングし、対象を絞って処理することができます。
- セッションごとのコマンドバッファ– 1つのセッションの処理が遅くても、他のセッションの処理を妨げることはなくなります。
- エクスプリジート
configure-単発コマンド用マップ –basis,preset,mount,force_gate,damping1台あたり、およびprofileundbasis各セッションごとに、すべてがconfigure渡され、出力設定マップに合わせて調整されているため、送信された内容と読み取られた内容が一致します。 - カスタマイズ可能なデバイス用マウント – 組み込みのワークスペースプリセットを選択してください(
defaults,arm_front,arm_front_centered,led_front,led_front_centered) または、明示的な変換を送信してください。マウント設定を手動で変更すると、プリセットは自動的にcustom. - 名前付きコマンドフィールド –
position,vector,angles,torquesジェネリック配列を置き換えるvalues. set_angular_torques置き換えられたset_angular_torque(単数形は現在使われていません)。- セッションフレームの拡張 – バージョン v3.0 および v3.1 のセッションフレームには、拡張可能な
config-,state- およびstatus-オブジェクト;新しい出力フィールドには以下が含まれますcurrent_cursor_force,current_cursor_position,current_angular_torques,current_angular_position,control_domain,control_mode,transform,transform_velocity, より詳細なconfig.*-フェルダーとstatus.safety(デフォルトでは非表示)。 - 部分変換・更新 – 変更したいサブフィールドのみを送信してください(
position,rotation,scale)、マウント、ワークスペース変換、およびナビゲーション形式について。
HTTP
GET /– 試用版。GET/POST/DELETE /settingsund/settings/*– キーと値のペアに対応した完全な設定API。GET /sessions/{session}undGET/POST/DELETE /sessions/{session}/profile.GET /devices?session=<selector>– デバイスの座標を、指定されたセッションのアプリケーション空間に変換します。- インデックスベースのデバイスセレクタ – IDを知らなくても、インデックスを指定して任意のデバイスにアクセスできます(
/inverse3/0/...まずはInverse3;/inverse*/*/...(Inverseシリーズの全デバイスに対応)。 - 統一された問い合わせ・回答の構成 – POSTリクエストとGETリクエストは同じものを使用します
command_data-WebSocketなどのJSON構造。あるトランスポート用に書かれたコードは、別のトランスポートでも動作します。 - オプションで有効化可能なエンベロープ über
?format=jsonどのルートでも;/settings*undGET /home_returnデフォルトでは使用されます{ok, error, data}. 以下の方法を使用してください?format=plain骨組み用。 - セッションセレクタにおけるワイルドカード –
*(任意の文字列)および?(1文字)をプロフィール名に使用すること。 - パーセント記法によるセレクタ –
%2A,%3Aなど、ルーティングの前にデコードされます。
イベント
- 独自のWebSocketイベントストリームを
communication/events/port. - 24種類のイベントカテゴリ。これには、機器のライフサイクル、安全性(電子ブレーキ、異物検知、ロック)、校正エラー、バッテリー警告、セッション警告、制御レートが低または危機的な状態、入力検証、および廃止予定の機能に関する通知などが含まれます。
可観測性
- プロファイリング時には、ログメッセージがレベルに応じた色分けされてTracyに転送されます。
- 各HTTPハンドラに対するTracy-Zonen。
- メインループのタイミング統計を含むイベント。
- 設定可能なログディレクトリおよびサーバーホスト名(Dockerに対応)。
バージョン3.6の見通し
- SDF Haptic Effects (SDF HFX)– 基礎部分はすでに3.5で実装済み(モジュール、ライフサイクル、モジュールが提供するコマンドおよび状態のシリアライズ)であり、完全なドキュメントを備えた公開APIは3.6で提供される予定です。
改善点
- 力振動のフィルタリング– 軸ごとの振動検出、8段階の段階的復元、ヒステリシスを伴う入力調整、および非対称な有効化ウィンドウ。
- 実行時におけるフォース・ゲート・フィルター – 以下の方法で設定可能
configure.force_gate.gainWebSocket または HTTP 経由で、デフォルト値が永続的に保存されます。 - 高精度用途向けに、メインループの最大周波数を32 kHzに引き上げました。
- WebSocketのペイロードの小型化 – 変換 - 既定値として恒等値を持つサブフィールド (
position = 0,rotation = identity,scale = 1) はデフォルトでは出力されません。これにより、ペイロードサイズが縮小され、旧バージョンのUnityパッケージにおける4KBのメッセージ制限との互換性が回復されます。2つの詳細設定(serialization/explicit_fields,serialization/force_complete_transforms) これらのフィールドをすべて復元し、それらを必要とするアプリケーションで利用できるようにします。 - メインループのジッターが低減されました。WebSocketメッセージの処理において、JSONの解析中やネットワーク送信中にメインループのクロックがブロックされることがなくなりました。セッションのクロックスケジューリングが、応答のシリアライズ処理の前に移動されました。
- サーバーはデフォルトでは、localhost 経由でのみアクセス可能です – ネットワークアクセスを行うには、以下の設定を有効にしてください
communication/bind_all_interfaces. - デバイスセレクタでのワイルドカードには、プレフィックス構文を使用します (例:
inverse*(Inverseシリーズのすべてのデバイスに適用されます)。 - 減衰コマンド は、とともに
force_gateインダイconfigure-地図を移動しました。 - ローテーション方式のファイルロガーが従来のものを置き換えます。ディレクトリは設定可能です。
- モジュールが提供するコマンドと状態– モジュールは、コアスキーマを変更することなく、独自のコマンド、設定フィールド、および状態出力をWebSocketフレームに組み込むことができます。
不具合の修正
不具合の修正に明け暮れた1年。最も効果的だった修正を以下に挙げます。
- 特定の条件下でセッションの速度が不安定になる。
- GripHook(Verse Grip Stopper)は、シミュレーションが実行されていない場合、正常に解放されませんでした。
- Inverse3-タイムアウトの設定が厳しすぎたため、起動に時間がかかるデバイスで接続ループが発生していました。
- Windows でのサービスの不適切な終了— シャットダウン時に HTTP サーバーが必ずしもクリーンアップされなかった。
- サービスが古いファームウェアバージョンに対して非対応のコマンドを送信した場合の再接続ループ。
- Bluetoothアダプタを搭載したシステムでは、Bluetoothデバイスの一覧表示によりログが溢れかえってしまった。
- サービスを連続して再起動すると、クラッシュが発生する。
- Ubuntu搭載ノートPCにおいて、スリープ状態からの復帰後にワイヤレスVerse-Gripドングルがフリーズする問題。
- Linux および macOS におけるワイヤレス Verse Grip のハンドシェイクは、最初の検出試行が失敗した場合、正しくフォールバック処理を行うようになりました。
- macOS 設定ファイルの保存場所 — 設定は現在、
~/Library/Application Support/誤ったパスに保存されてしまいました。 - Linux および macOS における SIGSEGV シグナルの処理— 複数のスレッドでクラッシュ追跡が有効になっている場合、致命的なシグナルが発生してもプロセスがループしなくなる。
- セッション間のコマンドの上書き— あるセッションからの設定コマンドが、別のセッションからのコマンドによって黙って上書きされてしまうことがありましたが、これらは現在、正しくフィルタリングされ、統合されるようになりました。
- プローブコマンドは設定を上書きします — 監視セッション(例:Haply Hub)など、
probe_positionBasis / Preset / プロファイルに対する未反映の変更を、黙って上書きしなくなりました。 - プロトタイプハンドルの表示— プロトタイプハードウェアが、ユーザー定義ハンドルではなく、誤って標準ハンドルとして表示されていました。
- 時代遅れのマトリックス表記法である
set_basisまだ移行されていないクライアントについては、再度考慮されます。 - Inverse3 の「セッションの切断」時のクラフトインパルスは、もはや残留力のピークを発生させません。
- WebSocketの接続が切断された際、接続と切断が短時間に連続して行われると、レースコンディションが発生する。
- WebSocket
session_idいくつかの送信済みペイロードにおいて、0シリアル化されました。 - Windowsでは、
--log-levelさらに、以下との組み合わせもご利用いただけます--dev考慮される(以前は暗黙のうちにdebug(リセットされた)。
廃止された要素
引き続き機能しますが、将来のメジャーバージョンでは削除される予定です。回答には、場合によってはフィールドが含まれることがあります。 deprecation_warning.
| 旧版 | エルザッツ |
|---|---|
POST /force_scale | POST /settings/devices/inverse*/filters/force_scale/gain |
POST /gravity_compensation | POST /{device}/{id}/config/gravity_compensation |
POST /torque_scaling | POST /{device}/{id}/config/torque_scaling |
POST /device_handedness | POST /{device}/{id}/config/handedness |
POST /serial_enable | POST /settings/communication/serial/enabled |
POST /experimental/features/grip_dropped_simulation_stopper | 設定 API |
POST /experimental/features/screensaver_enable | 設定 API |
WebSocket command_data.values | position, vector, angles, torques |
WebSocket set_angular_torque | set_angular_torques |
WebSocket probe_cursor_position | probe_position |
WebSocket set_coordinate_origin | configure.preset |
WebSocket セッションレベル set_basis | configure.basis |
互換性に関する注意事項
3.4.19と比較して、重大な互換性破綻(Breaking Changes)はありません。既存の統合に関する2つの注意点が挙げられます:
- 古いHTTPエンドポイントには、現在、フィールドが含まれています
deprecation_warning回答において — 回答スキーマを厳格に検証するクライアントは、この追加フィールドを許可すべきです。 - その野原
valuesWebSocket内でcommand_dataこれは旧式ですが、引き続き解析されます。できれば名前付きフィールドを使用してください。
チュートリアルとドキュメント
- 新しいチュートリアル: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リファレンス、およびハードウェアの各ページにわたって、公開ドキュメントが更新されました。