プログラミング
Steam Controller Auto-Charge – CV を使用して磁気充電ドックへ誘導
Steam Controller Auto-Charge – pilot to magnetic charging puck using CV (github.com)
要約
Steam Controller Auto-Charge は、オープンソースのウェブアプリケーションです。これは、コンピュータビジョン(光学フロー)と WebHID テレメトリを使用して、Steam Controller を磁気充電ドックへ自動的に誘導します。光学フロー追跡、触覚フィードバックによるナビゲーション、バッテリー状態のポーリングなどの機能を備えています。
全文翻訳
Steam Controller Auto-Charge
Steam Controller Auto-Charge は、光学フローコンピュータビジョンと WebHID テレメトリを使用して、Steam Controller を磁気充電ドックへ自動的に誘導するように設計されたオープンソースのウェブアプリケーションです。
機能
光学フロー追跡: OpenCV.js を利用して、オーバーヘッドカメラ経由でコントローラーと充電ドック上のユーザー選択ポイントを追跡します。
WebHID テレメトリ & 触覚ナビゲーション: WebHID を介して Triton Controller にネイティブに接続し、入力とテレメトリ(レポート 67)をストリーミングします。内部デュアルリニア共振アクチュエータ(LRA)を介して 70Hz の非対称触覚パルスを発火させることで、コントローラーをドックへナビゲートします。
近接クリープモード: コントローラーがドックから 150 ピクセル以内に近づくと、触覚パルス周波数を 50% 自動的にカットし、穏やかな磁気ドッキングを保証します。
バッテリー状態ポーリング: レポート ID 121(0x79)をインターセプトして磁気充電の成功を確認し、レポート ID 67(0x43)を解析してライブバッテリー残量とバッテリーセル電圧(mV)を表示します。
セットアップ要件
Nix パッケージマネージャー: 必要なビルド依存関係はこれだけです。Windows、Mac、Linux でシームレスに動作します。
WebHID API をサポートする Chromium ベースのブラウザ。
デスクを見下ろすオーバーヘッドウェブカメラ。
ウェブカメラをデスクの上に直接設置します。
単一のコマンドでプロジェクトを開始します(これにより依存関係が自動的に取得され、WASM モジュールがビルドされます):
nix-shell --run "npm install && npm run dev"
使用方法
ウェブカメラをデスクの上に直接設置します。
Steam Controller Auto-Charge ドックをデスクに置きます。
Steam Controller をデスクに立てて置きます。
ウェブインターフェースを開き、「Connect Steam Controller」をクリックして WebHID 経由でペアリングします。
「✨ Auto-Track」をクリックして自動追跡を開始します。ボタンがハイライトされてアクティブであることが示され、ページ再読み込み時に自動的に追跡が再開されます。解除するには再度クリックします。
コントローラーは、オブジェクト回避機能を備えた Lucas-Kanade 光学フローループと、ブラウザ内 Rust/WASM CNN を使用して、自律的にドックへナビゲートします。(注:手動追跡も引き続き利用可能です。ドックをクリックし、次にコントローラーの上部、次にコントローラーの下部をクリックしてください)。
アーキテクチャ
App.vue: カメラストリーム、UI 反応性、PID 追跡ループ、および OpenCV.js Lucas-Kanade 光学フロー(calcOpticalFlowPyrLK)を処理する Vue 3 アプリケーションロジック。
steamController.ts: 標準 API 呼び出しを、LRA パルスとバッテリー状態ポーリングの Steam Controller の特定のバイトペイロードにマッピングする WebHID 抽象クラス。
objectDetector.ts & objectWorker.ts: オブジェクト検出を Web Worker にオフロードし、メイン追跡ループがスムーズに動作するようにします。
wasm-object-detect/: 高性能な画像処理のために WebAssembly にコンパイルされた Rust 実装。
謝辞
Very Lazy Pixel に、このプロジェクトのインスピレーションを与えてくれたことに多大な感謝を捧げます!彼らのビデオはこちらでご覧いただけます: https://www.youtube.com/watch?v=g-8S8zk4dn8
ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細は LICENSE ファイルをご覧ください。