
2026/07/04 7:39
Steam Controller の自動充電:CV を用いたパワートランスファーによる磁気チャージングパックへの給電
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
このオープンソースアプリケーションは、ウェブカメラと Web 技術のみを用いて Steam Controller を充電用パッドへ自動で誘導し、外部ハードウェアや複雑なドライバーの必要性を排除します。コンピュータビジョンと WebHID API を組み合わせることで、システムはコントローラーに直接通信し、非対称なハプティックパルスによって精密な磁気ドッキングを実行します。重要な点は、「近接クリープモード」を採用しており、デバイスが充電器に近づくと動作を減速させ、衝撃による損傷を防ぐことです。ソフトウェアはリアルタイムでバッテリーデータをインターセプトし、ブラウザインタフェース自体に電圧と充電進行状況を表示します。既存のクリエイティブプロジェクトに触発されたこの解決策は、Chromium ブラウザおよび WebAssembly モジュールを活用することで、オブジェクト回避のような高度なロジックをクライアントサイド全体で実行します。Windows、Mac、Linux すべてで統一ビルドシステム(Nix)経由で互換性を備えおり、開発者からゲーマーまで充電プロセスを簡素化し、日常的なデバイスの保守を簡単かつワンクリック操作に変革するなど、アクセス可能でブラウザネイティブな自動化への重要な転換をもたらします。
本文
Steam Controller 自動充電システム (AutoDock)
光流法を用いたコンピュータービジョンと WebHID テレメトリを活用し、Steam コントローラーを磁気充電パッドに自動的に誘導・ドッキングさせることを目的としたオープンソースのウェブアプリケーションです。
🌟 主な特徴
- 光学フロー追跡: Overhead カメラを通じて、コントローラーおよび充電パッド上の指定点を OpenCV.js を用いて追跡します。
- WebHID テレメトリとハプティックナビゲーション: WebHID API を介して Triton コントローラーにネイティブ接続し、入力情報およびレポート ID 67 のテレメトリをストリーミングします。内部のデュアル Linear Resonant Actuators (LRAs) を駆動し、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 自動充電用パッド を設置します。
- Steam コントローラーをアップライトにしてデスクの上に置きます。
- ウェブインターフェースを開き、「Steam コントローラー接続」をクリックして WebHID を介してペアリングします。
- 「✨ Auto-Track」ボタンをクリックして自動追跡を起動します。
- ボタンが有効な状態で点灯中は、ページリロード後にも自動的に追跡が再開されます。
- 再度クリックすると自動追跡を解除できます。
ナビゲーションについて
コントローラーは、ブラウザ上で動作する Rust/WASM CNN を用いた物体回避機能を組み合わせた Lucas-Kanade 光流法ループにより、パッドに向かって自律的にナビゲートします。
⚠️ 注意: マニュアル追跡も可能です。 好みの方法で、以下の順序でクリックするだけで追跡を開始できます。
- パッドをクリック
- コントローラーの上部をクリック
- コントローラーの下部をクリック
🏗️ アーキテクチャ
: カメラストリームの処理、UI のリアクティビティ、PID 制御ループ、および OpenCV.js ベースの Lucas-Kanade 光流法(App.vue
)のロジックを担当します。calcOpticalFlowPyrLK
: WebHID の抽象化クラスです。標準的な API コールを Steam コントローラー固有のバイトペイロード(LRA パルス送信やバッテリーポーリングなど)にマッピングします。steamController.ts
&objectDetector.ts
: 物体検出処理を Web Worker にオフロードすることで、メインの追跡ループを滑らかに保ちます。objectWorker.ts
: Rust で実装し WebAssembly にコンパイルされた高速な視覚処理モジュールです。wasm-object-detect/
🙏 謝辞
本プロジェクトに触発を与えてくださった Very Lazy Pixel に心から感謝申し上げます。
📜 ライセンス
本プロジェクトは MIT ライセンスの下でライセンスされています。詳細については
LICENSE ファイルをご参照ください。