“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
Steam 控制器自动充电:用计算机视觉打造磁吸充电底座
利用计算机视觉和机械臂,为 Steam 控制器实现自动磁吸充电的 DIY 项目。
背景与动机
Steam 控制器是 Valve 推出的一款游戏手柄,其独特的双触控板设计备受部分玩家喜爱。然而,这款控制器已于 2019 年停产,官方配件逐渐稀缺。原版充电方式依赖两节 AA 电池或官方充电底座,但底座早已断货。社区中涌现出各种 DIY 充电方案,但大多需要手动插拔,体验不够优雅。
本文作者受到特斯拉自动充电机器人(蛇形充电臂)的启发,决定利用计算机视觉(CV)和低成本硬件,打造一套能自动识别控制器位置并完成磁吸充电的系统。核心思路是:通过摄像头识别控制器上的特定标记,引导机械臂将磁吸充电头精准对接至控制器上的改装接口。
硬件方案
控制器改装
- 在 Steam 控制器内部加装一个磁吸充电触点(类似 MacBook MagSafe 原理),引出正负极。
- 触点位置固定:位于控制器底部中央,靠近原装充电底座接口处。
- 使用 3D 打印外壳保护改装电路,防止短路。
机械臂
- 使用 U2D2 通信转换器 + Dynamixel XL430-W250 伺服电机(2个),构成一个 2 自由度(2-DOF)平面机械臂。
- 电机额定扭矩 1.5 N·m,精度约 0.088°,足以完成毫米级定位。
- 机械臂末端安装磁吸充电头(公头),通过弹簧缓冲对接冲击。
视觉系统
- 使用 Raspberry Pi 4 作为主控制器,运行 Python 3.9。
- 摄像头:普通的 USB 摄像头(640×480 分辨率,30fps),固定于机械臂上方 40cm 处,俯视拍摄控制器所在平面。
- 控制器表面贴附 ArUco 标记(OpenCV 标准标记,尺寸 5cm × 5cm),作为视觉定位基准。
软件流程
1. 标记检测与位姿估计
- 使用 OpenCV 的
aruco.detectMarkers()函数,从摄像头图像中提取 ArUco 标记的四个角点坐标。 - 通过
aruco.estimatePoseSingleMarkers()计算标记相对于摄像头的 3D 位置(x, y, z)和旋转角度(roll, pitch, yaw)。 - 作者发现,在 40cm 高度下,定位精度约 ±2mm,足以满足磁吸对接需求(磁铁可补偿 ±5mm 偏差)。
2. 坐标变换
- 摄像头坐标系 → 机械臂基座坐标系:通过手眼标定(Hand-Eye Calibration)获得变换矩阵。
- 具体方法:将机械臂移动到已知位置,记录摄像头检测到的标记位置,解算 3×3 旋转矩阵和 3×1 平移向量。
- 标定后,控制器位置可直接映射为机械臂的关节角度(逆运动学求解)。
3. 运动规划
- 采用简单的 PTP(Point-to-Point) 运动:先从初始位置移动到目标点上方 5cm 的预对接位置,然后垂直下降至接触。
- 下降速度控制:前 4cm 以 20mm/s 快速移动,最后 1cm 以 5mm/s 慢速接近,避免碰撞损坏。
- 对接成功后,检测电路中的电流变化(磁吸头接触后充电回路导通),停止机械臂运动并开始充电。
4. 异常处理
- 如果检测不到标记(控制器被遮挡或移出视野),机械臂返回初始位置,等待 5 秒后重试。
- 如果对接失败(电流检测无变化),机械臂抬起 2cm,重新执行视觉定位和对接,最多重试 3 次。
实际效果与局限
成功率
- 在理想光照(室内日光灯,无直射阳光)下,首次对接成功率约 85%(测试 100 次)。
- 失败原因主要是:① 标记部分遮挡(如手部遮挡);② 控制器表面反光导致标记检测失败;③ 机械臂校准漂移(长时间运行后电机发热导致定位偏差)。
速度
- 从启动到完成对接平均耗时 12 秒(包括图像处理、运动规划、执行运动)。
- 其中视觉处理约 0.3 秒,机械臂运动占 11.7 秒。
成本
- 硬件总成本约 $120(Raspberry Pi 4 $35 + 两个 Dynamixel 电机 $60 + U2D2 $15 + 摄像头 $10 + 其他零件)。
- 相比官方充电底座(二手价 $50-$80),成本略高,但实现了自动化。
技术深度分析
为什么选择 ArUco 标记而非深度学习?
- 作者明确表示,传统计算机视觉方法(ArUco)在速度和可靠性上优于轻量级深度学习模型(如 YOLO 检测控制器)。
- ArUco 标记检测仅需几毫秒,且对光照变化鲁棒性较好;而深度学习模型需要 GPU 加速,在 Raspberry Pi 上难以实时运行。
- 局限性:标记必须始终可见,且不能严重倾斜(超过 45 度俯仰角会导致检测失败)。
磁吸充电的工程考量
- 磁铁吸力:选用 N52 钕磁铁(直径 10mm,厚度 3mm),吸力约 500g,足以克服控制器自重(约 300g)。
- 弹簧缓冲:磁吸头后方加装压缩弹簧(线径 0.5mm,自由长度 10mm),允许对接时 ±3mm 的轴向偏差。
- 电气安全:充电电流限制在 500mA(5V 2.5W),低于锂电池充电标准(1A),防止短路起火。
机械臂控制细节
- Dynamixel 电机采用协议 2.0 通信,通过 U2D2 转 USB 连接 Raspberry Pi。
- 使用
dynamixel_sdkPython 库,设置电机为位置控制模式(PID 参数默认)。 - 逆运动学解算:由于只有 2 个自由度,可直接解析求解。假设机械臂连杆长度 L1=10cm, L2=8cm,目标点坐标 (x, y),则关节角度 θ1, θ2 为:
cosθ2 = (x² + y² - L1² - L2²) / (2 * L1 * L2)θ1 = arctan2(y, x) - arctan2(L2 * sinθ2, L1 + L2 * cosθ2)
- 注意:需要检查解的存在性(目标点必须在工作空间内,即半径 2cm 至 18cm 的环形区域)。
社区反响与改进方向
Hacker News 评论中,用户主要讨论了以下几点:
- 实用性疑问:大多数用户认为,手动放上充电底座只需 2 秒,而自动系统需要 12 秒,且成功率并非 100%,似乎“过度工程化”。但作者回应:这是技术验证项目,旨在探索 CV + 机械臂的消费级应用。
- 改进建议:① 使用更精确的摄像头(如 Intel RealSense D435)提高深度信息;② 增加红外接近传感器辅助最后 1cm 对接;③ 支持无线充电(Qi 标准),彻底消除物理接触。
- 安全风险:有用户指出,机械臂移动时可能夹伤手指,建议加装力传感器或安全停止机制。
总结
该项目展示了如何用不到 $120 的硬件和开源软件(OpenCV + Dynamixel SDK)实现一个实用的自动化充电系统。虽然并非完美,但它为 DIY 爱好者提供了一个完整的技术框架:从视觉定位、坐标变换到机械臂控制。对于想学习机器人技术或计算机视觉的开发者,这是一个绝佳的入门项目。
原文链接:https://github.com/FossPrime/Steam-Controller-Auto-Charge