Steam Controller 自动充电 – 使用计算机视觉引导至磁吸充电座

Hacker News Top 工具

摘要

一个开源Web应用程序,利用计算机视觉通过光流和WebHID自动将Steam Controller引导至其磁吸充电座。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/03 23:17

FossPrime/Steam-Controller-Auto-Charge

来源:https://github.com/FossPrime/Steam-Controller-Auto-Charge

Steam Controller 自动充电

Steam Controller 自动充电是一个开源网络应用程序,旨在通过光流计算机视觉和 WebHID 遥测技术,自动引导 Steam Controller 插入磁性充电底座。

功能特点

  • 光流追踪: 使用 OpenCV.js 通过顶置摄像头追踪用户在控制器和充电底座上选择的点。
  • WebHID 遥测与触觉导航: 通过 WebHID 本地连接 Triton Controller,传输输入和遥测数据(报告 67)。通过内部双线性谐振驱动器(LRA)发射 70Hz 不对称触觉脉冲,将控制器导航至底座。
  • 接近蠕行模式: 当控制器距离底座 150 像素以内时,自动将触觉脉冲频率降低 50%,确保轻柔的磁吸对接。
  • 电池状态轮询: 拦截报告 ID 121(0x79)以确认磁性充电成功,并解析报告 ID 67(0x43)以显示实时电池百分比和电池电压(mV)。

搭建说明

必要条件

  • Nix 包管理器(https://nixos.org/download):唯一需要的构建依赖,完美支持 Windows、Mac 和 Linux。
  • 支持 WebHID API 的 Chromium 内核浏览器。
  • 指向桌面的顶置网络摄像头。
  1. 将网络摄像头直接安装在桌面上方,镜头朝下。
  2. 使用一条命令启动项目(会自动获取依赖并构建 WASM 模块):
nix-shell --run "npm install && npm run dev"

使用方法

  1. 将网络摄像头直接安装在桌面上方,镜头朝下。
  2. 将 Steam Controller 自动充电底座放在桌面上。
  3. 将 Steam Controller 直立放置在桌面上。
  4. 打开网页界面,点击 连接 Steam Controller 通过 WebHID 配对。
  5. 点击 ✨ 自动追踪 启用自动追踪。按钮将高亮表示已激活,页面重新加载后会自动恢复追踪。再次点击可禁用。
  6. 控制器将基于 Lucas-Kanade 光流循环以及由浏览器内 Rust/WASM CNN 驱动的避障功能,自主导航至底座!

(注:如果你更喜欢手动追踪,仍然可用。只需依次点击底座、控制器顶部和控制器底部。)

架构

  • App.vue:Vue 3 应用逻辑,处理摄像头流、UI 响应、PID 追踪回路以及 OpenCV.js 的 Lucas-Kanade 光流(calcOpticalFlowPyrLK)。
  • steamController.ts:WebHID 抽象类,将标准 API 调用映射为 Steam Controller 的特定字节载荷,用于 LRA 脉冲和电池状态轮询。
  • objectDetector.ts 和 objectWorker.ts:将目标检测卸载到 Web Worker,确保主追踪循环保持流畅。
  • wasm-object-detect/:Rust 实现,编译为 WebAssembly 以实现高性能视觉处理。

致谢

衷心感谢 Very Lazy Pixel 对本项目的启发! 查看他们的视频:https://www.youtube.com/watch?v=g-8S8zk4dn8

许可证

本项目采用 MIT 许可证授权 - 详见 LICENSE 文件。

相似文章

我的Steam游戏机是一根50英尺的HDMI线缆

Hacker News Top

一位开发者分享了他将台式机转变为Steam游戏机的经验,使用一根50英尺的光纤HDMI线缆和Steam Controller 2,运行Bazzite,在电视上获得类似主机的PC游戏体验。