GainSec/AutoProber
GitHub: GainSec/AutoProber
硬件黑客的飞针自动化栈,解决从目标发现到安全针脚探测的闭环控制问题。
Stars: 0 | Forks: 0
# 自动探测工具
AutoProber 是硬件黑客的飞针自动化栈,旨在为
你的代理提供从“盘中有新目标”到以安全方式探测单个引脚所需的一切。

演示视频: https://gainsec.com/autoprober-demo-mp4/
## 工作流程
1. 告诉代理导入项目。
2. 连接所有硬件。
3. 告诉代理确认所有部件功能正常。

4. 执行归位和校准。
5. 安装自定义探针和显微镜支架。
6. 告诉代理盘中有新目标。
7. 它将找到目标在盘中的位置,然后逐帧拍摄,
记录 XYZ 坐标,同时标注焊盘、引脚、芯片和其他
有趣特征。

8. 它将把帧拼接在一起并标注地图,包括引脚和
识别出的有趣组件。

9. 它将为你在网页仪表盘上添加探针目标,供你批准或拒绝。

10. 它将探测已批准的目标并报告结果。
所有硬件均可通过网页仪表盘、Python 脚本或代理本身控制。

该仓库是一个自包含的源可用候选发布版本。它包含
Python 控制代码、仪表盘、CAD 文件以及创建你自己的 AutoProber 所需的文档。
## 安全模型
该项目可以移动物理硬件。请将其视为机器控制系统,
而非普通网页应用。
所需的安全设计如下:
- 忽略 GRBL `Pn:P`。CNC 探针引脚不是可信的终点开关。
- 独立的安全终点开关从示波器通道 4 读取。
- 任何运动过程中必须持续监控通道 4。
- 通道 4 的任何触发、模糊电压、CNC 报警或真实的 X/Y/Z 限位引脚
都是停止条件。
- 代理/操作员必须停止并报告。恢复运动不是自动的。
在运行硬件前,请阅读 [docs/safety.md](docs/safety.md) 和 [docs/operations.md](docs/operations.md)。
## 仓库布局
```
apps/ Operator-facing scripts and Flask dashboard entrypoint
autoprober/ Reusable Python package for CNC, scope, microscope, logging, safety
dashboard/ Single-page web dashboard
docs/ Architecture, device references, operations, and safety guidance
cad/ Printable STL files for the current custom toolhead
config/ Example environment/configuration files
AGENTS.md Agent/operator safety rules
LICENSE PolyForm Noncommercial 1.0.0 license and commercial contact
pyproject.toml Python project metadata
uv.lock Locked Python dependency resolution
```
## 硬件栈
经过测试的项目架构使用:
- GRBL 兼容的 3018 风格 CNC 控制器(USB 串口)
- 由 `mjpg_streamer` 提供的 USB 显微镜
- 通过 LAN/SCPI 连接的 Siglent 示波器,用于通道 4 安全监控和
通道 1 测量
- 连接到外部 5V 电源和示波器通道 4 的光学终点开关
- 可选的网络控制插座用于实验室电源控制
- `cad/` 中当前可打印的自定义工具头部件
默认运行时假设已在设备文档中记录。使用前请用你自己的实验室设置替换它们。
如需硬件购物清单,请参见 [docs/BOM.md](docs/BOM.md)。
## 参考部件
这些是用于原型发布的特定部件或部件类别。
在购买前请验证当前列表、尺寸、电压和连接器兼容性。
我的构建:
- [光学终点开关](https://www.amazon.com/dp/B08977QFK5)
- [USB 显微镜](https://www.amazon.com/dp/B00XNYXQHE)
- [SainSmart Genmitsu 3018-PROVer V2](https://www.amazon.com/dp/B07ZFD6SKP)
- [Matter Smart Power Strip](https://www.amazon.com/dp/B0DYDFKJJJ),带独立控制交流插座的智能电源插排,配备 2 个 USB-A 和 2 个 USB-C 端口
- [Siglent SDS1104X-E 示波器](https://www.amazon.com/Siglent-SDS1104X-oscilloscope-channels-standard/dp/B0771N1ZF9)
- 杜邦线
- 笔弹簧或类似轻压缩弹簧
- 用于 `cad/` 中可打印工具头部件的 3D 打印机
可选/可互换:
- [通用示波器探头](https://www.amazon.com/dp/B0827JL1T2)
- USB 电源适配器,5V
- USB 2.0 尾线电缆
## 硬件架构
```
flowchart LR
Operator[Operator] --> Dashboard[Web Dashboard]
Dashboard --> Apps[Python Apps]
Apps --> CNC[GRBL CNC over USB serial]
Apps --> Microscope[USB Microscope via mjpg-streamer]
Apps --> Scope[Oscilloscope over LAN / SCPI]
Apps --> Outlet[Optional LAN Power Outlet]
Endstop[Optical Endstop] --> ScopeC4[Scope C4 Safety Voltage]
Pogo[Pogo Measurement] --> ScopeC1[Scope C1 Measurement]
ScopeC4 --> Apps
ScopeC1 --> Apps
```
## 运行时架构
```
flowchart TD
Preflight[Preflight] --> SafetyCheck{Channel 4 clear?}
SafetyCheck -- no --> Stop[STOP State]
SafetyCheck -- yes --> Motion[Monitored Motion]
Motion --> Monitor[EndstopMonitor thread >= 10 Hz]
Monitor --> C4{C4 clear?}
C4 -- yes --> Capture[Microscope Capture]
C4 -- no --> FeedHold[Immediate feed hold]
FeedHold --> Stop
Capture --> Stitch[Stitch / Map]
Stitch --> Review[Manual Probe Review]
Review --> Approved{Approved target and measured probe offset?}
Approved -- no --> Stop
Approved -- yes --> Probe[Bounded probe motion]
```
## STOP 状态
```
stateDiagram-v2
[*] --> Running
Running --> STOP: C4 triggered / C4 fault / CNC alarm / real limit pin
STOP --> Report: log voltage, status, action
Report --> WaitForOperator: no automatic recovery motion
WaitForOperator --> Running: operator explicitly clears condition
```
## 快速开始
安装依赖:
```
uv sync
```
在已配置硬件主机上启动仪表盘:
```
PYTHONPATH=. python3 apps/dashboard.py
```
仪表盘默认端口为 `5000`。
## 配置
从 [config/autoprober.example.env](config/autoprober.example.env) 开始。
不要发布实验室特定的 IP、主机名、凭据、校准文件或捕获的目标图像,除非你打算公开它们。
重要的运行时值可配置:
- `AUTOPROBER_LOG_PATH`:运行时日志路径
- `AUTOPROBER_RUNTIME_ROOT`:校准、平场和运行时状态目录
- `AUTOPROBER_MICROSCOPE_SNAPSHOT_URL`:显微镜快照端点
- `AUTOPROBER_SCOPE_HOST` / `AUTOPROBER_SCOPE_PORT`:示波器 SCPI 端点
- 仪表盘:Flask 在端口 `5000` 上运行
不要提交包含实验室特定主机、路径或目标数据的本地环境文件。
## 主要工作流程
1. 运行预检检查。
2. 验证通道 4 是否空闲。
3. 仅在物理设置就绪时进行归位和校准。
4. 在监控运动下捕获显微镜帧。
5. 导入或生成目标地图工件以供审查。
6. 手动批准探针候选。
7. 仅在测量并存储显微镜到探针偏移后执行探针运动。
## 排除内容
该候选发布版本有意排除了:
- 试用显微镜捕获和拼接的目标图像
- 上传的参考图像
- 本地备份和归档
- `.venv`、`__pycache__`、Playwright 工件
- 运行时日志、校准缓存、平场图像
- 机器特定的 SSH/部署状态
详细信息请参见 [RELEASE_MANIFEST.md](RELEASE_MANIFEST.md)。
## 许可证
本项目根据 PolyForm Noncommercial License 1.0.0 以源可用方式提供。
你可以在非商业用途下使用、修改和分享本项目。
商业用途需要单独的商业许可。
如需商业许可,请联系:autoprober@gainsecmail.com
## 当前限制
- 显微镜到 Pogo 的 XY 偏移必须在真实探测前测量。
- 校准不得伪造;运行时校准文件应在将要移动的机器上生成。
- 仪表盘是实验室控制工具,不应暴露在不受信任的网络上。
## 负责任使用
本项目旨在对设备和目标进行受控的实验室工作。请勿用于探测、损坏或分析未经许可的系统。
## 作者
[Jon 'GainSec' Gaines](https://gainsec.com/)
标签:CAD设计, CNC运动控制, GRBL, PCB探针, Python控制, Web仪表盘, 代理驱动, 开源硬件, 探针校准, 显微镜测绘, 机器控制, 源码可用, 物理安全, 目标发现, 硬件测试, 硬件黑客, 自动化探针, 自托管, 逆向工具, 飞行探针