|
1 | 1 | # RealityScanRig3000 |
2 | 2 |
|
3 | | -**RealityScanRig3000** is an ESP32-S3 powered scanning rig controller for automated photogrammetry capture workflows. |
| 3 | +RealityScanRig3000 is an ESP32-S3 firmware + web UI for automated dual-axis photogrammetry capture. |
4 | 4 |
|
5 | | -Created and maintained by **Superwutz**. |
| 5 | +The project is designed for end users first: |
| 6 | +- Install from a website over USB |
| 7 | +- Run and configure from a browser UI |
| 8 | +- Update firmware from the UI (OTA) |
6 | 9 |
|
7 | | -This project was built **largely in collaboration with AI** (design, coding, refactoring, and documentation), with human validation and iterative testing. |
| 10 | +No IDE is required for normal installation and updates. |
8 | 11 |
|
9 | | ---- |
| 12 | +## Main Features |
10 | 13 |
|
11 | | -## What This Project Does |
| 14 | +- Browser-based control UI hosted by the ESP32 |
| 15 | +- Dual-axis sequence engine (rotation + tilt) |
| 16 | +- Preset-driven scan profiles |
| 17 | +- Live status, progress, and error indicators |
| 18 | +- Manual motion controls |
| 19 | +- OTA update flow from the Settings screen |
| 20 | +- Web installer for first-time flashing |
12 | 21 |
|
13 | | -RealityScanRig3000 controls a dual-axis turntable and camera trigger workflow through a browser-based UI: |
| 22 | +## Supported Hardware |
14 | 23 |
|
15 | | -- Rotation + tilt scan sequencing |
16 | | -- Preset-based scan profiles |
17 | | -- Live status, progress, and segment visualization |
18 | | -- Manual axis controls |
19 | | -- BLE auto-recovery during scan interruptions |
20 | | -- OTA firmware update directly from the UI |
| 24 | +- ESP32-S3 board (`esp32-s3-devkitc-1` target) |
| 25 | +- Revopoint Dual-axis Turntable |
21 | 26 |
|
22 | | -The goal is practical, repeatable, low-friction scanning for end users without requiring a full embedded toolchain. |
| 27 | +## Quick Start (End Users) |
23 | 28 |
|
24 | | -Primary target hardware: |
25 | | -- **Revopoint Dual-axis Turntable** |
26 | | - https://www.revopoint3d.com/products/dual-axis-turntable |
| 29 | +1. Open the installer page in desktop Chrome or Edge: |
| 30 | + `https://superwutz.github.io/RealityScanRig3000/` |
| 31 | +2. Connect your ESP32 board by USB. |
| 32 | +3. Click `Install` and choose the serial device. |
| 33 | +4. Wait for flash + reboot. |
| 34 | +5. Open the rig UI at: |
| 35 | + - `http://scanrig.local` |
| 36 | + - or the IP shown by your router |
27 | 37 |
|
28 | | ---- |
| 38 | +## Firmware Updates (OTA) |
29 | 39 |
|
30 | | -## Key Features |
| 40 | +After initial USB install, updates are done directly in the UI: |
31 | 41 |
|
32 | | -- **Browser UI on device** (ESP32 serves HTML/CSS/JS itself) |
33 | | -- **Dual-axis scan sequencer** with tilt/rotation step logic |
34 | | -- **Live progress views**: |
35 | | - - top-down rotation ring |
36 | | - - side-view tilt arc |
37 | | - - compressed full-sequence bar |
38 | | -- **Error segment marking** in progress views (BLE/TCP/WiFi issues) |
39 | | -- **Manual control block** (rotation/tilt/zero/stop/snap) |
40 | | -- **BLE auto-connect + heartbeat + recover** |
41 | | -- **OTA update endpoint** (`/api/update`) |
42 | | -- **Web-installer export flow** for non-technical end users |
| 42 | +1. Open the rig UI. |
| 43 | +2. Go to `Settings` -> `Firmware Update`. |
| 44 | +3. Click `Check Updates`. |
| 45 | +4. If a newer release is available, click `Update Now`. |
43 | 46 |
|
44 | | ---- |
| 47 | +The board reboots automatically after a successful update. |
45 | 48 |
|
46 | | -## Hardware + Software Stack |
| 49 | +You can also upload a local firmware file via `Upload Firmware (.bin)`. |
47 | 50 |
|
48 | | -- **MCU**: ESP32-S3 (`esp32-s3-devkitc-1` target) |
49 | | -- **Framework**: Arduino (PlatformIO) |
50 | | -- **BLE**: NimBLE-Arduino |
51 | | -- **Web server**: ESPAsyncWebServer + AsyncTCP |
52 | | -- **Frontend**: Embedded static assets in firmware (`src/web_assets.h`) |
53 | | - |
54 | | ---- |
55 | | - |
56 | | -## End User Quick Start (No IDE) |
57 | | - |
58 | | -### 1) Install via browser (USB) |
59 | | - |
60 | | -Use the official installer page: |
61 | | - |
62 | | -https://superwutz.github.io/RealityScanRig3000/ |
63 | | - |
64 | | -User flow: |
65 | | -1. Open the installer page in Chrome or Edge (desktop). |
66 | | -2. Connect your ESP32 board with a USB data cable. |
67 | | -3. Click `Install` and select the board's serial device. |
68 | | -4. Wait until flashing finishes and the board reboots. |
69 | | -5. Open rig UI at `http://scanrig.local` (or router-assigned DHCP IP). |
70 | | - |
71 | | ---- |
72 | | - |
73 | | -## OTA Updates (From Rig UI) |
74 | | - |
75 | | -After first install, updates can be done from the UI: |
76 | | - |
77 | | -1. Open rig UI |
78 | | -2. Console section: |
79 | | - - `Check Updates` (manifest-based) |
80 | | - - `Update Now` (downloads `firmware.bin` and uploads OTA) |
81 | | -3. Device reboots automatically after successful update |
82 | | - |
83 | | -You can still upload a local `.bin` manually via `Upload Firmware (.bin)`. |
84 | | - |
85 | | -Default OTA manifest endpoint in firmware: |
| 51 | +Default update manifest URL: |
86 | 52 |
|
87 | 53 | `https://superwutz.github.io/RealityScanRig3000/manifest.json` |
88 | 54 |
|
89 | | -If you need a custom endpoint, override `SCANRIG_UPDATE_MANIFEST_URL` in `src/secrets.local.h`. |
90 | | - |
91 | | -Release policy and commands are documented in `RELEASE.md`. |
92 | | - |
93 | | ---- |
| 55 | +## Network Configuration (No IDE) |
94 | 56 |
|
95 | | ---- |
| 57 | +Wi-Fi and static IP can be configured directly in the UI: |
96 | 58 |
|
97 | | -## WiFi + Secrets |
| 59 | +1. Open `Settings` -> `Network` |
| 60 | +2. Enter SSID/password |
| 61 | +3. Optionally enable static IPv4 |
| 62 | +4. Save (or Save + Reboot) |
98 | 63 |
|
99 | | -Do **not** commit real credentials. |
| 64 | +If STA connection is unavailable, the device can fall back to AP mode. |
100 | 65 |
|
101 | | -Use: |
102 | | -- `src/secrets.example.h` (placeholders, tracked) |
103 | | -- `src/secrets.local.h` (real values, ignored) |
| 66 | +## Privacy and Credentials |
104 | 67 |
|
105 | | ---- |
| 68 | +Do not commit real credentials. |
106 | 69 |
|
107 | | -## Technical Notes |
| 70 | +- `src/secrets.example.h` is tracked and contains placeholders. |
| 71 | +- `src/secrets.local.h` is ignored and intended for private values. |
108 | 72 |
|
109 | | -- Core firmware lives in `src/main.cpp` |
110 | | -- Embedded UI lives in: |
111 | | - - source workspace: `.tmp_ui/` |
112 | | - - compiled/embedded form: `src/web_assets.h` |
113 | | -- UI and firmware communicate via WebSocket (`/`) using compact JSON messages |
114 | | -- Sequencer state machine handles: |
115 | | - - tilt send/wait |
116 | | - - rotate send/wait |
117 | | - - settle/snap/cooldown |
118 | | - - recover on disconnect |
| 73 | +## Developer Notes |
119 | 74 |
|
120 | | ---- |
| 75 | +For release workflow details, see `RELEASE.md`. |
121 | 76 |
|
122 | | -## Disclaimers |
| 77 | +Core files: |
| 78 | +- Firmware: `src/main.cpp` |
| 79 | +- Embedded web assets: `src/web_assets.h` |
| 80 | +- Web installer template: `deploy/web-installer/index.html` |
| 81 | +- Published installer/OTA artifacts: `docs/` |
123 | 82 |
|
124 | | -### Safety + Liability |
125 | | - |
126 | | -This project is provided **as-is**, without warranty of any kind. |
127 | | -Use at your own risk. |
128 | | - |
129 | | -You are responsible for: |
130 | | -- safe electrical wiring |
131 | | -- safe operation around moving hardware |
132 | | -- protecting camera and rig equipment |
133 | | -- validating all firmware behavior before production use |
| 83 | +## Security Reporting |
134 | 84 |
|
135 | | -Neither **Superwutz** nor contributors are liable for equipment damage, data loss, injury, or any consequential damages. |
| 85 | +Please report security issues privately first. |
136 | 86 |
|
137 | | -### Compliance |
| 87 | +See `SECURITY.md` for disclosure instructions. |
138 | 88 |
|
139 | | -You are responsible for complying with local laws and regulations regarding: |
140 | | -- electronics operation |
141 | | -- radio/BLE usage |
142 | | -- photography and data capture |
| 89 | +## Safety Disclaimer |
143 | 90 |
|
144 | | -### Professional Use |
| 91 | +This project is provided as-is and without warranty. |
145 | 92 |
|
146 | | -This is not a certified industrial safety controller. |
147 | | -Do not use it where hardware failure can create safety-critical outcomes. |
148 | | - |
149 | | ---- |
150 | | - |
151 | | -## Credits |
152 | | - |
153 | | -- Project lead: **Superwutz** |
154 | | -- Built largely with AI-assisted development workflows |
155 | | -- Open-source libraries: NimBLE-Arduino, ESPAsyncWebServer, AsyncTCP, PlatformIO ecosystem |
156 | | - |
157 | | ---- |
| 93 | +You are responsible for: |
| 94 | +- Safe electrical wiring |
| 95 | +- Safe operation around moving hardware |
| 96 | +- Validation before production use |
| 97 | +- Compliance with local regulations |
158 | 98 |
|
159 | 99 | ## License |
160 | 100 |
|
161 | | -This project is licensed under the **MIT License**. |
162 | | -See `LICENSE` for the full text. |
| 101 | +MIT License. See `LICENSE`. |
0 commit comments