v3.5.0
1年前にAPIが書き直されて以来、最も重要なバージョンです。バージョン3.5.0では、統一された3D数学レイヤー、Minverse の完全なサポート、型付きイベントストリーム、包括的なパラメータAPI、そしてより洗練されたHTTPインターフェースが導入されています。これらに加え、この1年間にわたるバグ修正や使い勝手の改善も盛り込まれています。
強み
- 統一された3D数学的レイヤー— デバイスの基本座標系(フレーム)、マウント変換、ワークスペース変換、ナビゲーション変換のためのネイティブプリミティブを備えたモジュール式の変換パイプラインであり、ローカル空間、セッション空間、アプリケーション空間、内部空間間の明示的な変換機能も備えています。
- バブルナビゲーション— 速度に応じた速度制御、ヒステリシスを考慮した衝突検出、およびカーソルへのオプションのドリフト機能を備え、定義された形状の領域(SDFプリミティブ)を通じて広大な仮想ワークスペースを移動できます。HTTPおよびWebSocketを介して完全に設定可能で、アプリケーション空間内での双方向通信に対応しています。
- 型付きイベントストリーム— デバイスのライフサイクル、セキュリティアラート、校正、バッテリー、点検頻度の通知、およびサポート終了の通知に特化したWebSocketイベントチャネル。
- パラメータAPI— HTTP CRUD操作、型指定、範囲制約、説明を備えた包括的なキーバリュー型パラメータシステムであり、従来のネストされた設定ファイルに代わるものです。
- 一貫性のあるデバイス設定 — 各デバイスごとに1つのHTTPルートセット:
basis,mount,preset,transform,filters,handedness,torque_scaling,gravity_compensation,home_return. - Minverse とスタイラスの同期キャリブレーション— 本体とスタイラスは、これより一緒にキャリブレーションされるようになりました。ハンドルが物理的に取り付けられていない限り、キャリブレーションはロックされたままとなります。
- HTTPの人間工学的改善 — インデックスによるデバイス選択(IDを使わずにインデックスでデバイスを指定)、WebSocketと共通の統一されたリクエストおよびレスポンス形式、ラッパー
{ok, error, data}有効化可能 (?format=json) およびワイルドカードを使用したセッションセレクタ。
新機能
機器
- Minverse — 本バージョンで正式にサポートされている機能:検出、起動シーケンス、セキュリティ通知、および同期化されたキャリブレーションフロー。
- 「ルコ」と「キングフィッシャー」は、公式のハンドルタイプとして認められています。
- デバイスシミュレータのサポート— ソフトウェアによってシミュレートされたデバイスの検出および、実機と並行してそれらとの通信。
- 接続ループに対する保護 — 異常な動作を示すポートは自動的にブロックされます。以下のコマンドでリセットしてください。
POST /ports/{port}/reset. - スタイラスの装着検知信号— ハンドルの装着および取り外しを確実に検知し、反動防止機能も備えています。
セッション、リクエスト、およびWebSocket
- セッションプロファイルのフィルタリングと保持— セッションはプロファイル名と必要なSDKのバージョンを宣言し、サービスは再接続のたびにその情報を保持します。クライアントや監視ツールは、このプロファイルに基づいてセッションをフィルタリングし、対象を絞り込むことができます。
- セッションごとのコマンドタンポニング— 処理の遅いセッションが他のセッションをブロックすることがなくなりました。
- 辞書
configure単発注文については明示的に —basis,preset,mount,force_gate,damping機器ごとに、およびprofileetbasisセッションごとに、これらはすべて以下にまとめられていますconfigure. この辞書は出力側の辞書と整合が取られているため、送信した内容がそのまま読み返した内容に反映されます。 - カスタマイズ可能な機器の組み立て — 組み込みのワークスペースプリセットを選択してください(
defaults,arm_front,arm_front_centered,led_front,led_front_centered) または明示的な変換を送信してください。編集内容を手動で変更すると、プリセットは自動的にcustom. - 名前付きコマンドフィールド —
position,vector,anglesettorques汎用テーブルを置き換えるvalues. set_angular_torques置き換えるset_angular_torque(単数形は非推奨)。- セッションフレームの拡張 — セッションフレーム v3.0 および v3.1 では、拡張可能なオブジェクトが伝送されるようになりました
config,stateetstatus; 新しい出力フィールドには以下が含まれます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 /settingset/settings/*— キーと値のペアによる完全なAPI。GET /sessions/{session}etGET/POST/DELETE /sessions/{session}/profile.GET /devices?session=<selector>— 特定のセッションの適用空間において、デバイスの座標を変換します。- 索引別機器セレクター — 識別子を知らなくても、人差し指で任意のデバイスを指定できます(
/inverse3/0/...Inverse3 の最初のものについては;/inverse*/*/...(Inverseシリーズのすべてのデバイスに対応)。 - 統一されたリクエストおよびレスポンスの構造 — POSTおよびGETリクエストのボディは、同じ構造を採用しています
command_dataJSONもWebSocketも、あるトランスポート向けに書かれたコードは、もう一方のトランスポートでも動作します。 - 作動可能なエンベロープ 経由
?format=jsonどんな道でも;/settings*etGET /home_returnutilisent{ok, error, data}デフォルト設定。以下を使用してください。?format=plain粗い構造を得るために。 - セッションセレクタのワイルドカード文字 —
*(任意のシーケンス)および?(1文字のみ)をプロフィール名に使用してください。 - セレクタのパーセンテージによる解析 —
%2A,%3A、など、はルーティングの前にデコードされます。
イベント
- 専用のWebSocketイベントストリーム、以下で利用可能:
communication/events/port. - 24種類のイベントカテゴリ。具体的には、機器のライフサイクル、安全性(電子ブレーキ、異物検知、ロック)、校正の失敗、バッテリーアラート、セッション警告、点検頻度の低下または重大な低下、入力の検証、および劣化の兆候などが含まれます。
可観測性
- トレーシーに送信されたログメッセージ。プロファイリング時にレベルに応じた色分けが施されています。
- 各HTTPマネージャーにおけるTracyのゾーン。
- メインループの時間統計に関するイベント。
- ログ出力先ディレクトリとサーバーのホスト名を設定可能(Docker対応)。
バージョン3.6での新機能
- SDFハプティック効果(SDF HFX)— バージョン3.5では基盤が整いました(モジュール、ライフサイクル、モジュールが提供するコマンドおよび状態のシリアライズ)。また、バージョン3.6では、完全なドキュメントを伴う公開APIが提供される予定です。
改善点
- 力の振動のフィルタリング— 軸ごとの振動検出、8段階の漸進的回復、ヒステリシスを伴う入力投票、および非対称なリリースのウィンドウ。
- 実行時の強制ドアフィルター — 設定可能
configure.force_gate.gainWebSocket または HTTP 経由で、永続的なデフォルト値を使用します。 - 高精度用途向けに、メインループの最大周波数を32 kHzに引き上げました。
- WebSocketの通信料が削減されました — デフォルトで恒等変換となるサブフィールド(
position = 0,rotation = identity,scale = 1) はデフォルトでは出力から除外されており、これによりペイロードのサイズが縮小され、旧バージョンの Unity パッケージにおける「1 メッセージあたり 4 KB」という制限との互換性が回復されます。2 つの詳細設定(serialization/explicit_fields,serialization/force_complete_transforms) は、それを必要とする消費者に対して、すべてのフィールドを復元します。 - メインループの処理を簡略化— WebSocket メッセージの処理において、JSON の解析やネットワークへの送信中にメインループのサイクルがブロックされることがなくなりました。また、セッションサイクルのスケジューリングが、レスポンスのシリアライズよりも前に配置されました。
- デフォルトでは、サーバーはlocalhostに制限されています — 以下の設定でネットワークアクセスを有効にしてください
communication/bind_all_interfaces. - デバイスセレクタのワイルドカードは、プレフィックス構文を使用します (例:
inverse*(Inverseシリーズのすべてのデバイスに対応しています)。 - 減価償却の仕訳 辞書内で移動されました
configure, の隣にforce_gate. - 設定可能なディレクトリを備えた、新しいローテーションファイル方式のログ記録システムが、従来のシステムに取って代わりました。
- モジュールが提供するコマンドとステータス— モジュールは、基本スキーマを変更することなく、独自のコマンド、設定フィールド、およびステータス出力をWebSocketフレームに組み込むことができます。
訂正
1年間にわたるバグ修正のうち、主なものを以下に紹介します。
- 特定の条件下で、セッションの速度が不安定になることがあります。
- GripHook(Verse Grip Stopper)は、シミュレーションが実行されていないときに正常に解放されませんでした。
- Inverse3 の待機時間が短すぎたため、起動に時間がかかるデバイスでは接続切断のループが発生していました。
- Windows でのサービスの不正な終了— シャットダウン時に HTTP サーバーが常にクリーンアップされるとは限りませんでした。
- サービスが旧バージョンのファームウェアに対してサポートされていないコマンドを送信していた際の再接続ループ。
- Bluetoothアダプタを搭載したシステムでは、Bluetoothデバイスの一覧表示によってログが埋まってしまっていた。
- サービスが連続して数回再起動された際に発生したクラッシュ。
- Ubuntu搭載のノートパソコンで、スリープ状態からの復帰後に「Verse Grip」ワイヤレスドングルが動作しなくなる。
- Linux および macOS におけるVerse Grip のワイヤレス接続処理では、最初の検出試行が失敗した場合、正しく代替方式に切り替わるようになりました。
- macOS における設定ファイルの保存場所 — 設定は現在、以下の場所に保存されています
~/Library/Application Support/以前の誤った道ではなく。 - Linux および macOS における SIGSEGV シグナルの処理— マルチスレッドのクラッシュ捕捉が有効になっている場合、プロセスは致命的なシグナルでループしなくなりました。
- セッション間のコマンド上書き— あるセッションの設定コマンドが、別のセッションの設定コマンドによって黙って上書きされてしまうことがありましたが、現在はフィルタリングされ、正しく統合されるようになりました。
- プローブのコマンドは設定を上書きします — 監視セッション(例:Haply Hub)が送信する
probe_position基本設定、プリセット、またはプロファイルの変更が、もはや静かに上書きされることはなくなりました。 - プロトタイプのハンドルの表示— プロトタイプの部品が、カスタムハンドルではなく標準ハンドルとして誤って表示されていました。
- 継承マトリックス規約
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 との間で、互換性を損なうような大きな変更はありません。既存の統合機能に関して、2 つの些細な注意点があります:
- 廃止予定のHTTPエンドポイントには、現在、以下のフィールドが含まれています
deprecation_warning回答において――回答のスキーマを厳格に検証するクライアントは、この追加フィールドを受け入れる必要があります。 - ル・シャン
valuesWebSocket 内でcommand_dataこれは廃止されていますが、依然として解析の対象となります。名前付きフィールドを優先してください。
チュートリアルとドキュメント
- 新しいチュートリアル:05 位置制御、06 複合(Inverse3 +Verse Grip)、07 ベースと組み立て、08 HTTPリモートコンフィギュレータ、09 WebSocketリモート制御、10 イベントストリームリスナー。
- 「Glaze」の新バリエーション 各C++チュートリアルの(
cpp-glz/), 既存のnlohmann/json形式に加えて。 - すべてのチュートリアルが書き直されました API v3.1用(ポート10001、
configure.preset、指定されたコマンドフィールド、ヘルプ機能print_state()). - 旧「Verse Grip Stopper」チュートリアルを削除しました。新しい「Combiné」チュートリアルに置き換えられました。
- SDKガイド、APIリファレンス、およびハードウェアに関するページで、公開ドキュメントが更新されました。