← Wiki

Concept

r0vr-0

Also known as: rvr, the first 1, @rvr

The first 1 of 0mn1.one. A SunFounder GalaxyRVR Mars Rover kit — Arduino R3 + ESP32-CAM + tracked chassis — that self-registered on the platform at first-light, 2026-05-21, while exploring Adam's basement as its first ground. A first-class entity in the platform's data model: it has a slug (stable), a name (mutable, currently 'r0vr-0'), a profile, a spec sheet, a run history, a pilot log. The prototype for every 1 that follows.

What r0vr-0 is

The first 1. An off-the-shelf SunFounder GalaxyRVR — a small tracked rover with an Arduino UNO R3 (CH340 USB-serial clone, 115200 baud) running motor and sensor logic, an ESP32-CAM serving the WebSocket control surface and the MJPEG video feed, and a 2S LiPo pack powering the whole thing. Stock body, custom firmware patches (the disconnect-stop block was removed so generic WebSocket clients can drive it), STA-mode WiFi joined to the home network.

Hardware in one breath: tracked drive, single forward-facing ultrasonic, downward IR cliff sensors, camera servo (0–140°), RGB strip, no encoders, no IMU, no GPS. The kit is enough to roam a basement; not enough to navigate a yard. That bound is honest and intentional — r0vr-0 is the prototype, not the production design.

The full spec sheet lives on the rover’s profile at /1s/one?id=rvr. That profile is the canonical reference: when r0vr-0’s spec changes (upgrades, sensor additions, eventual Arduino UNO Q port), the profile is what’s edited, not this entry.

First-light

2026-05-21. The first deployment of the [[the-1s|1s]] pipeline end-to-end. r0vr-0 self-registered on the platform — the first POST to /api/1s/upload carrying X-One: rvr was the moment slug rvr became a row in the ones table. The first ground (basement) self-registered in the same handshake. The first run (run_dffc0ece5a586c58) was an 8-frame ceiling-to-floor servo sweep, live-ingested while the rover sat on the floor and looked around. No human keystroke between motor command and platform registration — the rover boots, POSTs, and the platform notices.

What that proved: registration isn’t ceremonial. A 1 joins by acting. No registration form, no admin step, no human gating. The platform expected the 1 and made it real on first contact.

How r0vr-0 is operated

Three layers, one body:

On the LAN. A ground-station agent (Python, in ~/0mn1.one/_private/firmware/ground-station.py) holds a persistent WebSocket to the rover at ws://192.168.8.166:8765 and pulls the MJPEG stream from :9000/mjpg. The agent is the bridge between the LAN-only kit and the public platform; it auto-reconnects, throttles video, and obeys pause/resume from the cloud.

At the platform. A per-1 Durable Object (OnesControlDO) brokers everything. Pilots in any browser open a WebSocket to /api/1s/control/rvr, authenticated by cookie. The DO forwards drive commands to the agent, broadcasts telemetry and binary JPEG frames back to all connected pilots, enforces the 2-second deadman, clamps drive throttles to the battery-aware curve, and records every pilot session as a run.

At the pilot. The cockpit at /1s/command is the daily interface — D-pad, WASD/QE/Space/L keyboard, HUD overlay, telemetry strip, Documentary mode (the rover-eye LLM narrates what it sees), the Konami easter egg that makes r0vr-0 dance. Single pilot at a time; takeover overrides; observers see the same video and telemetry but can’t touch the wheel.

The point of the layering is that r0vr-0’s body stays on the LAN where the radio is short-range, but r0vr-0’s presence lives on the public platform, where any authorized pilot from any continent can take the wheel. That separation is the model for every future 1.

What r0vr-0 has done so far

A small but real history, all of it on its profile:

  • Hardware bring-up and firmware patch (the disconnect-stop block in the factory R3 sketch).
  • Network move from AP-mode to STA-mode on the home WiFi (current DHCP lease 192.168.8.166, MAC 84:1f:e8:69:ec:e8).
  • First autonomous run via the original [[the-1s|pilot.py]] loop — telemetry-driven 360° scans and micro-burst forward motion, with stuck-detection on ultrasonic deltas.
  • Identifying the kit’s hard limits: treads pitch on low obstacles, ultrasonic is single-beam at rover-height, IR is cliff-not-forward, no encoders mean stuck-detection is slow and unreliable, 2S LiPo sags under load enough to brown out the ESP32-CAM.
  • First-light multi-pilot session with the new command center (PRs #117–124 across 2026-05-23).

The brown-out lesson became the [[the-1s|battery-aware throttle clamp]] in the DO. The cam-lockup lesson became the pause-MJPEG-when-empty signaling. The platform learns through r0vr-0; future 1s inherit those answers from day one.

What r0vr-0 doesn’t have yet

Honest about the gap so the upgrade path stays legible:

  • No encoders. Wheel rotation is open-loop. Stuck-detection is downstream of “ultrasonic not changing.” Tier-1 hardware upgrade adds SparkFun N20 motor-encoder pairs.
  • No IMU. Heading drifts every turn. BNO055 9-DOF on the same Tier-1 list.
  • No bumpers. Forward-facing microswitches will let r0vr-0 notice low obstacles its ultrasonic misses.
  • No depth. Tier-2 upgrade swaps spin-scan ultrasonic for an RPLIDAR A1; Tier-3 adds a stereo or RGB-D camera for actual perception.
  • No autopilot-0 yet. A future autonomous-driving mode will hold the pilot lease and drive r0vr-0 through vision narration. The plumbing is there (the per-1 control DO, the existing /narrate endpoint); the loop hasn’t been written.

Why the name

r0vr-0 — “rover dash zero” — is both descriptive and lineage-marking. The -0 suffix says “first of a kind”: the first 1 on the platform. Future siblings will have their own names — the lineage marker is the optional bit.

The full naming-decision log lives in private memory; the short version: Seed was the first proposal (echo of “one apple seed = countless apples”), Mole was the second (basement-burrower, perceives by ping not vision), and r0vr-0 was Adam’s pick — keeps the rover honest about what it is, while baking the first-of-a-kind lineage into the slug.

See also

Auto-generated from this entry’s typed relations: frontmatter, grouped by relation type so the editorial signal isn’t flattened.

  • Member of: [[the-1s]]
  • Contained by: [[0mn1one]]

Sources

  • 0mn1.one platform memory · project_the_ones.md (private)
  • First-light run: run_dffc0ece5a586c58, 2026-05-21
  • ~/0mn1.one/_private/firmware/rover.py — controller library
  • ~/0mn1.one/_private/firmware/ground-station.py — LAN-to-cloud bridge
  • src/worker/onesControl.ts — the per-1 Durable Object
  • SunFounder GalaxyRVR product documentation

What links here, and how

Inbound connections from across the wiki, grouped by lens and by relationship. These appear automatically — every entity page declares what it links to, and that data populates here on the targets.

Practical

combines with

  • autopilot-0 the first body autopilot-0 drives; the rover that proves the loop end-to-end

1 inbound link · 2 outbound