v3.5.1
3.5.1 は、安定性と品質を重視したリリース版です。主な機能は以下の通りです:1↔1Inverse3 + ハンドル設定での自動ペアリング;WebSocket セッションが開かれていない状態では、GET /devices/{id} 最新の動作状態を取得できるようになりました。また、力/位置モードの切り替え時に発生していたキーンという異音が解消され、継続的な高負荷下でも自己調整を行うサービスティックスケジューラが搭載されています。
見どころ
- 1↔1Inverse3 + グリップ取り付け時の自動ペアリング。 Inverse3 とグリップの両方が準備完了状態になると、SDKは自動的にペアリングを登録します。複数のデバイスが存在する環境では、
pen_attachedMinverse との同期により、ロック解除が誤ってルーティングされることがなくなりました。 - セッションを開かなくても、最新の情報を取得できます。
GET /devices/{id}スナップショット。 ファームウェア v7.5 以降の「Inverse3 」「Inverse3x」「Minverse 」は、WebSocket のアクティブ状態に関係なく、20 Hz で動作状態をポーリングするようになりました。v7.5 以前のファームウェアでは、このポーリングをスキップし、警告を 1 回だけ表示していました。 - 力/位置の切り替え時に、キーンという音がしなくなりました。
set_cursor_force↔set_cursor_position切り替えにはスロット排他メカニズムが採用されています。2つのティックの間、各デバイスでは最新の命令のみが保持されます。HARP に記載されていた200 msのアイドル間隔に関する一時的な回避策は、もはや有効ではありません。 - 自己調整型ティックスケジューラ。メインループは負荷に応じて配信レートを自動的に調整し、単一の遅いティックによってコマンドキューが無限に増加することを防ぎます。
- 高負荷下における1入力1出力型のストリーム式復旧。 各セッションにおいて、WS メッセージごとのストリーミング応答は 1/ms に制限されています。上限に達して拒否された場合、前のバッファの内容が再送信されるため、シミュレーションループが
recv()上。
内部の改善
設備
- デバイス別「Inverse3 」↔「VerseGrip」のペアリング登録一覧。
GET|POST|DELETE /devices/{sel}/paired_withこれは、デバイスごとに定義された一対一の対応関係です。POST双方の競合する組み合わせを削除します;DELETE選択した項目を削除します。セレクタは一意の ID として解析される必要があります。 - ファームウェア v7.5 以降における 20 Hz の動作状態ポーリング。
GET /devices/{id}50 msごとに最新の値を返すcursor_position、cursor_velocity、angular_position、angular_velocity;アクティブなセッションを認識しない。 - ワイヤレス VerseGrip の
set_extension_data速度制御。 「古いデータを破棄する/アイドル時に繰り返し送信する」というパイプライン方式を採用し、サービスティックでデータをクリアする――これにより、送信量が多すぎても無線リンクが飽和することはなくなり、送信量が少なすぎても期限切れの値が残留することはなくなる。
会話
- 制御指令(力/位置)のみを含むバッチに対して、WS 受信の高速パスが新たに追加されました。このパスでは、センシングの構成処理パイプラインがスキップされます。
configure/set_profile/ カスタムコマンドも、競合状態の修正ロジックの対象となります。
観測可能性
- ログの出力頻度はポートごとに区別され、継続時間も考慮される。 ブラックリストに登録された各ポートは個別に制御されます。周期的に発生する
"...blacklisted: skipping"ログ行には現在、以下が付加されます(×N),2回のトリガー間の間にサイレントに処理されたティック数を示します。 - WVG 以外のデバイスが検出された場合、ワイヤレス VerseGrip の検出によるログの大量表示は行われなくなりました。
不具合の修正
- 使用
POST /device.config.presetさらに指定するdefaultsあるいはarm_front時,これにより、デバイスのマウント設定が工場出荷時のデフォルト設定にリセットされます(以前は、何も行わないまま処理が終了していました)。basis保持されるため、プリセットの変更後もアプリで設定されたベースは引き続き有効です。 - 一致する configure が、それと同じ WS メッセージ内で到着した場合は、
force_render_full_state欠落したものは返されなくなるconfigブロックのスナップショット——configure のパスは、スナップショット作成前に同期処理が完了します。 - セッションをまたがる
force_render_full_stateこれで、対象セッションの完全なスナップショットが返されます。 A と B は現在、完全なペイロードを受信できるようになった(以前は A はストリームデータのみを受信していた)。 - 当
target_session_id未知の状態では、セッションをまたぐコマンドによってリクエスト・レスポンスのループがハングアップすることはなくなりました。 リクエスト元には、自身のスナップショットと、1つのsession-command-dropped事件(cross-session-unknown-target)。 - Minverse 複数デバイスのキャリブレーションにより、誤ったルーティングが解消されました。 Minverse Aのキャリブレーションにより、Minverse Bのロックが解除されなくなりました。inkwell-successのヘッディングブロードキャストについても、同様の修正が行われました。
- HTTP デバイスセレクタ 承諾
#1234と1234デバイス ID として;セレクタクラス(inverse3、verse_grip)インデックスと組み合わせて使用できます。404 メッセージでは、元のセレクタ式が保持されます。 - ワイヤレス VerseGrip の
readyマークは現在、初期のデバイス情報によるハンドシェイクに依存している——これまでは、一部の再接続経路において、デバイスが自身の情報を完全に報告する前に、このフラグがセットされる可能性がありました。 - keyed-rate-gate でサポートされている設定に対する実行時の変更は、次回ヒット時に有効になるようになりました(以前は、最初の emplace 時に固定され、新しいセッションでのみその変更が適用されていました)。
潜在的な破壊的変更
- HTTPの404エラーメッセージが統一されました,対象範囲は
basis、preset、mount、transform、force_gate:"{type} device #{id} not found"→"no device matches selector '{expr}'"。会話における 404 も同様です。 - 設定項目のワイルドカード
devices/inverse*/...→devices/*inverse/...,フォーススケーリングゲイン、フォースゲートゲイン、制御タイムアウト、およびsafeties/expose_in_snapshot。旧式のパス形式を使用している 3.5.0 の設定ファイルは、バインドできません。 - 設定:グローバル項目のシリアライズは、以下の場所に移動されました。
session/serialization/*(explicit_fields、force_complete_transforms、preview/*)。古いserialization/*このパスは、廃止予定のエイリアスを介して引き続き解決されます。バージョン 4.0 で削除される予定です。 - 動作の変更:各メッセージの WS 応答をティック同期ハンドシェイクに利用するクライアントは、継続的なトラフィック下では、各セッションにつき 1 ミリ秒あたり最大 1 回しか応答を受信しなくなります。設定変更時の完全なスナップショットには影響ありません。
廃止項目
3.5.1 には非推奨項目はありません。プレビューのメインスイッチは、今後リリースされる 3.6 バージョンの「サイレントから警告へ」というパイプラインにおける非推奨インフラストラクチャであり、最初の非推奨化は 3.5.2 で予定されています。