Files
CamUI/README.md
T
Your Name c7174c476e Update README with data descriptions and alignment states; remove old screenshot
- Clarified sections on real and fabricated data in the README.
- Added detailed descriptions of alignment states with corresponding conditions and visual indicators.
- Removed outdated screenshot and added new images for each alignment state (Ready, Aligning, Fault).
2026-05-28 11:21:28 -07:00

60 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Wafer Position Monitor (demo)
PySide6 desktop demo: load NanoBerry edge CSVs from `MASTER_SD/`, fit a wafer circle, show **X / Y / theta** offset and **sigma** vs a calibration baseline. No live camera integrated yet.
**Stack:** Python 3.11+, PySide6, NumPy.
## Quick start
```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
wafer-user # or: python src/wafer_edge/App.py
```
Click **Read Wafer** to load the demo CSVs. Tests: `python -m pytest tests/` (UI smoke needs a display).
## Data
**Real data**`[MASTER_SD/](MASTER_SD/)`: CSV files from actual NanoBerry camera captures. Names: `{S|R}{1|2}{seq}P0.CSV` — local/remote board, SPI camera, 4-digit sequence (e.g. `S10540P0.CSV`).
**Fabricated data**`[DATA/0610/](DATA/)`: Generated test data used by `CsvSource.DEMO_CAMERA_PATHS` (the default demo source). Change that dict or use `parse_csv_filename()` for other captures.
## Calibration
First run creates `baseline.json` (gitignored). Key fields: `center_mm`, `radius_mm` (75), `center_px`, `radius_px` (pixel scale).
## Layout
| Path | Role |
| ----------------------- | --------------------------------- |
| `src/wafer_edge/App.py` | Main window |
| `VisionEngine.py` | Circle fit + offsets (no Qt) |
| `CsvSource.py` | CSV loader |
| `ui/widgets.py` | Plot + metric cards |
| `ui/Theme.qml` | Styles (loaded via `ui/theme.py`) |
**Pipeline:** `DEMO_CAMERA_PATHS``load_camera_records_from_csv()``snapshot_from_records()` → UI.
## Alignment states
The monitor derives one of three states from the fitted circle on every read:
| State | Condition | Dot |
| ------------ | ------------------------------------ | -------- |
| **Ready** | offset ≤ 0.10 mm **and** σ ≤ 0.05 mm | 🟢 green |
| **Aligning** | offset ≤ 0.50 mm **and** σ ≤ 0.20 mm | 🟡 amber |
| **Fault** | offset > 0.50 mm **or** σ > 0.20 mm | 🔴 red |
### Ready — wafer within tolerance
![Ready state](screenshots/state_ready.png)
### Aligning — wafer correcting, noisy cameras
![Aligning state](screenshots/state_aligning.png)
### Fault — wafer out of range
![Fault state](screenshots/state_fault.png)