GitHub上出现了一个叫Steam Controller Auto-Charge的开源项目。一台顶置摄像头盯着桌面,一块磁吸充电底座和一个Steam手柄摆在下面,浏览器里的代码通过WebHID接口指挥手柄内部的震动马达,一点点把手柄“震”向充电座,直到吸上为止。项目以MIT License开源,技术栈是Vue 3、OpenCV.js和Rust/WASM。

这不是Valve的官方配件,材料里也没有量产计划的痕迹,只是一个个人开源仓库。它的价值不在“帮手柄自动充电”这件事本身,而在于证明了浏览器能不能直接摸到硬件的执行机构——这条边界,平时是驱动程序和原生应用的地盘。

手柄怎么被“震”到充电座上

原理不神秘。摄像头用OpenCV.js的光流算法,实时追踪手柄和充电座在画面里的位置,算出两者的相对偏移。

程序据此通过WebHID发送震动指令,让手柄内部两个非对称线性谐振马达(LRA)以70Hz频率震动,靠这股震动让手柄在桌面上产生细微位移,慢慢挪向目标。

距离小于150像素时,震动频率自动减半,避免手柄“冲”过头。吸上底座后,程序读取Report ID 121确认已进入充电状态,再解析Report 67里的电量百分比和电芯电压。

整套动作是一个视觉反馈加震动执行的闭环。没有电机,没有导轨,全靠“抖”出来的位移。

视觉-震动闭环怎么跑 顶置摄像头 光流追踪位置 70Hz震动脉冲 驱动内部LRA 150像素内降频 轻推避免冲过头 Report 121 确认充电 整个过程无电机、无导轨,靠震动位移+视觉反馈闭环完成

WebHID解决的问题,不是充电

把这套方案和现有的充电对位方式摆在一起看,差别很直白:

方案定位方式硬件基础通用性
手机MagSafe磁环精确对位磁体+固定支架苹果生态内通用
手柄官方充电底座卡口+触点对准机械卡槽仅限对应手柄型号
Steam Controller Auto-Charge摄像头光流追踪+震动微调无电机无导轨只验证过项目描述的这一套手柄和报文组合

前两种靠机械结构解决对位问题,精度高,但换个设备就得换一套支架。这个项目反过来,把“移动”这件事从硬件问题变成了算法问题——不需要额外零件,靠软件层的视觉闭环去凑。

代价也很明显:没有机械精度兜底,追踪一旦失效,手柄可能震歪,也可能一直够不到充电座。材料里没有给出成功率或测试次数,这套方案目前只能算“跑得通”,不能算“跑得稳”。

谁该在意,谁不用管

对硬件黑客来说,这份代码值得抄。它把“读手柄电量”“写马达震动”这两件事的HID报文格式摊开了——Report 121、Report 67是什么意思,直接能拿去改自己的项目,不用重新抓包摸索。

对做WebHID、人机交互实验的开发者来说,更该盯的是它证明了什么:浏览器脚本不需要驱动权限,就能双向读写游戏手柄的硬件层。这条边界如果站得住,值得拿来评估类似的无障碍设备校准、桌面外设自动化场景,要不要用WebHID去做,而不是等一个原生App。

普通玩家不用做任何动作。它不解决无线充电这件事本身,该买充电底座还是买充电底座,这个项目跟消费级配件没关系。

项目依赖Chromium系浏览器的WebHID支持、Nix构建环境、顶置摄像头和特定手柄的报文格式,换一款手柄基本不通用,也没有公开的可靠性数据。

接下来该看的,不是这个项目会不会火,而是有没有人把这套“报文级直控硬件”的思路用到更严肃的场景里——比如辅助设备。WebHID能反向操控执行机构这件事,目前也没看到安全层面的讨论,这本身算不算一个信号,还看不清。