EnviroBot Documentation
Competition: EnviroBot Environmental Robotics Challenge | Strategy: RC-first, autonomy as stretch goal
System Overview
EnviroBot is a two-component system:
1. Robot — ESP32-based differential-drive rover. Driven entirely by remote control — a phone joystick page served over the robot's own WiFi AP. Collects 12 environmental measurements (4 water turbidity + 8 soil moisture) and outputs structured JSON.
2. Web Platform — Next.js application on Cloudflare Workers (envirobot.yerielph.workers.dev). Documents the project, replays run data in 2D/3D (Visualiser), browses the firmware source (Code Browser) and CAD model (CAD Viewer), and lets the team edit all of it from Content Admin — see Platform Overview.
Judged data output is arduino/tools/live_plot.py — a matplotlib live table + labelled charts on a connected laptop (a rulebook §4.6 approved format), plus a samples.csv. Serial output is the always-on fallback. See Operating Guide.
Competition Quick Reference
| Parameter | Value |
|---|---|
| Testing Day | Thursday 30 July (W9) — inspection + measurement run + robot assessment |
| Closing Night | Friday 31 July, 5–9pm — case competition presentation |
| Run time limit | 8 minutes maximum (−5 pts if exceeded) |
| Required measurements | 12 total: 4 water turbidity + 8 soil moisture |
| Arena | Square, 1500 × 1500 mm, four 750 × 750 mm terrain quadrants |
| Max score | 100 points across 6 judging categories |
Scoring Summary
| # | Category | Points |
|---|---|---|
| 1 | Technical Measurement Performance | 30 |
| 2 | Data Output & Visualisation | 10 |
| 3 | Build Quality & Workmanship | 5 |
| 4 | Innovation & Engineering Design | 10 |
| 5 | Robot Aesthetics | 5 |
| 6 | Closing Night Case Competition | 40 |
| Total | 100 |
Note: The official rulebook contains a scoring inconsistency in section headers. The table above totals correctly to 100 and is treated as authoritative (confirmation requested from organisers). Cat 6 (Case Competition, 40 pts) is the single highest-weight category — presentation prep is not optional.
Deductions
| Infraction | Penalty |
|---|---|
| Prohibited component installed | −10 pts or disqualification |
| Run exceeds 8-minute limit | −5 pts |
| Pre-loaded or hardcoded sensor data | Cat 1 and Cat 2 zeroed |
| Arena surface damage | −5 pts per incident |
Why RC-First
The rulebook explicitly permits remote-controlled robots, and that is what this robot is — there is no autonomous mode in the firmware. With no wheel encoders and no IMU, coordinate-accurate autonomous navigation was never achievable, so the effort went into the path that actually produces accurate, correctly-labelled data: an operator driving and tagging each sample’s sector by eye. An ultrasonic collision guard backs the operator up by cutting forward drive before an impact.
Arena Layout
Square arena, 1500 x 1500 mm, raised dark timber walls
+y +---------------------------+---------------------------+
^ | S1: URBAN | S2: FIELD |
| | (grey concrete/asphalt) | (green turf) |
| | * soil <> water | <> water * soil |
| | * soil | * soil |
+---------------------------+---------------------------+ --> +x
| S3: DESERT | S4: STONE |
| (tan sand) | (grey gravel/cobble) |
| <> water * soil | * soil <> water |
| * soil | * soil |
+---------------------------+---------------------------+
Origin = arena centre, so each quadrant is 750 x 750 mm.
<> = water slot (RECESSED - a wheel trap, never drive over one)
* = soil disc
No walls between quadrants - the boundary is the terrain surface change.
The four outer walls are the only physical barriers.
Zone positions are spread out deliberately and are not published in advance.
| Sector | Position | Terrain |
|---|---|---|
| S1 | Top-left | Urban |
| S2 | Top-right | Field |
| S3 | Bottom-left | Desert |
| S4 | Bottom-right | Stone |
Confirm the quadrant→terrain mapping on Testing Day and update
TERRAINS[]indata_logger.cppif the arena is laid out differently. The operator picks the sector on the RC page, where each button carries its terrain name — so a mis-numbered table mislabels every sample in that quadrant.
Documentation Map
Web Platform
| Section | Contents |
|---|---|
| Platform Overview | Stack, route map, content pipeline, deploy, secrets |
| Visualiser | /viz — load a run, 2D/3D replay, playback controls, payload logs |
| Code Browser | /code — public firmware source viewer, copy/download |
| CAD Viewer | /design — 3D model preview, supported formats |
| Content Admin | /admin — login, editing docs/code/design/runs, API reference |
Robot Hardware & Firmware
| Section | Contents |
|---|---|
| Hardware | Real BOM, pin assignments, power rails, turbidity divider + ultrasonic wiring |
| Operating Guide | Flashing, boot, run clock, the RC run procedure, live data station, troubleshooting |
| Navigation | RC procedure, collision guard, position estimation limits |
| Sensors | Turbidity (voltage divider), soil moisture, ultrasonic collision guard |
| Calibration | Pre-competition calibration for every constant in config.h |
| Runtime Config | Edit tuning values from the test page without recompiling |
| RC & Communications | WiFi AP, HTTP protocol, RC page, diagnostics page |
| JSON Schema | Frozen run data format — visualiser depends on exact fields |
Competition
| Section | Contents |
|---|---|
| Scoring | Full rubric, deductions, per-category strategy |
| Competition Guide | Day 1 pitch, Day 2 prep plan, argument template |
| Inspection Checklist | Pre-run and pre-presentation checklists |
| Rules | Key competition rules from the official rulebook |