18 KiB
OOMWOO Design Document
Working design doc. This accumulates research-backed design decisions before they're split into per-module RFCs and the RFC backlog, and/or migrated into the README. A condensed version of §1 already lives in the README's Design research section. Expect this to grow as remaining components are researched.
1. Design research — what makes vacuum users happy
We reviewed the 2025–2026 consumer robot vacuum landscape (global + China-sourceable brands, budget → flagship) across RTINGS, VacuumWars, Reddit r/robotvacuums, and reviewer blogs, then adversarially fact-checked the key claims. The point: copy the solutions that correlate with happy users, skip the ones that need commercial scale.
Suction — a sourcing problem, not an engineering one
Real-world cleaning does not track advertised suction (Pa). ~$500 mid-tier models beat flagships in pickup tests. A moderate sealed sourced motor + a good brush + a tight airflow seal matches flagship cleaning — no custom-molded impeller needed. Airflow sealing (bin/fan/brush seams) matters more than raw Pa. (source)
Navigation & "never gets stuck" — the #1 user pain, hardest to replicate
Best obstacle avoidance comes from sensor fusion (LiDAR + a floor-level 3D-ToF or RGB camera + AI object recognition), not any single sensor. LiDAR is structurally blind below its ~10 cm turret, which is exactly why robots eat cables and socks. The Eufy Omni S2 ($1,599) was the only model in one test to pass all 24 obstacles — and it has the full vision stack. Never-stuck is commercial-scale.
- For OOMWOO: v1 leans on the bumper for low/LiDAR-invisible obstacles (this is already how the clean-and-map RFC handles it). Camera + AI vision avoidance is a later / experimental goal, not an MVP promise. Don't position OOMWOO as out-navigating commercial flagships; position it as an open platform to experiment with navigation and vision. (source)
Brush — anti-tangle is what users notice
Rubber beats bristle, and a tapered, one-side-mounted roller resists hair-wrap best (hair tangling is a top complaint). Easy to 3D-print or source compatible.
Mop — dual-spinning is the replicable sweet spot
Performance ladder: flat drag pad (worst) → dual spinning pads (mid) → self-washing roller (best). But the roller mop's "better stains / less residual water" edge was refuted under fact-checking — it's overstated. A 3D-printed dual-spinning mop is competitive and DIY-able; skip the self-washing roller (and its multifunction wash/dry dock) for now. (source)
Dock — basic is DIY-able, full-service is not
A basic charging dock is well within reach (print the housing; source contacts + adapter + IR beacon). Auto-empty / mop-wash / hot-dry all-in-one docks are commercial-scale — defer, or use an off-the-shelf corded vac for emptying.
Cloud-free / local control — the real differentiator
Valetudo gives cloud-free MQTT/REST local control across ~10 brands. Dreame is the most rootable (≈16 models) and the safest donor to study. Cloud-free local operation is OOMWOO's positioning advantage.
Well-loved models worth studying
Eufy Omni S2 (obstacle avoidance), Narwal Flow (roller mop), Ecovacs Deebot T90 Pro Omni (~$499 all-rounder), Dreame X40 Ultra (dual-spinning mop; Dreame = best donor).
Caveats: the top-level dimensions (suction-decoupling, sensor-fusion, mop ladder) are primary-source and verified. Per-model rankings are directional, from single-run reviewer tests. Rootability is per hardware revision — re-verify any specific donor unit before buying to root.
2. Print vs source strategy
Rule of thumb: print geometry, source mechanisms and wear items. Anything with a gearbox, encoder, rubber compound, spring, pump, or bearing is precision you can buy for a few dollars; anything custom-shaped that mates with the OOMWOO chassis, print.
| Component | Source or 3D print | Why / how |
|---|---|---|
| Driving wheel assemblies | Source (whole module) | Complete drive modules (gearmotor + encoder + suspension + rubber tire). 3D print at most an adapter bracket. Why? Requires advanced skill - possibly SLA for gearbox, FDM TPU tire. The #1 "don't print it" part. |
| Universal / caster wheel | Print or source wheel/ball caster. | Likely a simple passive swivel, possibly TPU. |
| Side brush assembly | Hybrid | Source brush + small gearmotor; print the mount. Fit a common replaceable brush. Fixed (not extendable) for v1. |
| Main brush | Source / hybrid | Tapered rubber anti-tangle roller in a common wear-part size; source compatible, or print core + rubber. |
| Bumper | Hybrid | Print floating shroud; source lever microswitches + return springs. |
| Dust bin / water tank | Print body + source guts | Print custom body (mates airflow); source filter (common HEPA size), gasket (or TPU print), latch spring. Water tank adds a sourced pump + solenoid valve + tubing. |
| Mop lift | Hybrid (P2) | Print cam/linkage; source a small servo or geared motor. |
| Mop disposable cloths | Source | Source (easier) or DIY sew. |
| Mop dryer | Source | Source the mop dryer. |
| Enclosure / top shell | Custom cosmetic/structural; no off-the-shelf equivalent. Design for splitting to fit common print beds. | |
| Dock (basic charge) | Print housing + source contacts | Source pogo pins / spring contacts / magnets (magnets can carry 10 A) + wall adapter + IR-beacon LEDs. Plenty of DIY precedent. |
| Auto-empty dock | 3D print enclosure + source bin/fan | Needs its own fan + bin (commercial-scale). Off-the-shelf corded vac bolted to a printed dock is the DIY path. |
| Mop dock | 3D print enclosure + source water tanks/hookups | Needs its own fan + bin (commercial-scale). Off-the-shelf corded vac bolted to a printed dock is the DIY path. |
| Battery, LiDAR, motors, PCB, fasteners, bearings, gaskets | Source | Standard sourced parts (custom PCB + LiDAR aside). |
| Single Board Computer | Source | Raspberry Pi 5 4GB or better for first model. |
| Input/Output board | Custom | No DIY-vacuum I/O PCBs I'm aware of. I'll design a custom PCB for sensors and motor drivers. |
| Cameras, sensors, LiDAR | Source | Color + distance cameras for top-tier obstacle avoidance. IR cliff, side proximity sensors. Ultrasonic carpet sensor. |
Sourcing strategy: deliberately spec sourced wear parts (brushes, filters, wheel modules) in common, abundant sizes so users buy cheap "universal" / Roomba-style replacements anywhere. A selling feature and less inventory to stock.
3. Feature decisions
3.1 Extendable side brush — fixed for v1
The extendable arm (e.g. Roborock FlexiArm) is a genuinely loved feature — best corner-cleaning scores and strong reviews (source). But it's a mechanically complex actuated mechanism. A well-placed fixed side brush captures most of the corner benefit at a fraction of the complexity. Extendable is a great P2+ community mod, not an MVP requirement.
3.2 Body shape — round
D-shape cleans corners/edges better, but the real-world advantage is "smaller than most people expect," and a well-engineered round robot with good side brushes performs as well or better in most homes (source). Round wins for a DIY/printable platform:
- Simpler to design, print, and seal.
- Navigates better — rotates in place, backs out the way it came (D-shape complicates every nav/recovery RFC).
- Natural fit for the spinning 2D LiDAR turret.
- Matches the round teardown reference we're porting.
- Corners are better solved by the side brush (later extendable) than by body shape.
Decision: round body + fixed side brush now, extendable side brush later.
4. Compute (SBC)
v1: Raspberry Pi 5 (4 GB). Chosen to onboard the large Raspberry Pi community — the biggest contributor wedge. Runs ROS2 + LiDAR SLAM + Nav2 comfortably. No on-board NPU.
- ML vision option — Hailo AI HAT. Add the RPi M.2 AI Kit (Hailo-8L, ~13 TOPS) for real-time camera obstacle detection: keeps the entire RPi ecosystem advantage and gains an NPU. Check the board-stack height — a vacuum is only ~10 cm tall and the M.2 HAT adds Z. Evaluate alternatives (Coral USB/M.2 accelerator, or lighter CPU-only models) against the height budget.
- Later: Rockchip RK3588 / RK3576. Orange Pi 5, Radxa Rock 5B, Banana Pi CM5 — built-in 6 TOPS NPU, RKNN toolkit, YOLO ~65 ms/image. Cheaper and integrated, but driver / ROS2 / kernel maturity lags RPi, so it's a later move, not the community-onboarding one.
5. I/O board (custom, JLCPCB)
No off-the-shelf DIY-vacuum I/O board exists, so we design one. It carries an MCU running micro-ROS that talks to the SBC over a fast serial / USB link: the SBC does ROS2 / SLAM / nav / vision; the board does real-time motor + sensor I/O.
MCU: STM32G070RBT6 (LQFP64, ~$0.93 @ 100 pcs) — cheap, lots of peripherals. Pin-budget risk: the full peripheral set below is a lot for 64 pins. Do a pin-allocation spreadsheet before committing. Offload the BLDC fan to an external ESC (1 PWM pin instead of in-MCU FOC) to save pins and complexity. If still tight, consider the STM32G0B1RET6 (same family, more peripherals/RAM) or a 100-pin part.
LiDAR (3irobotix CRL-200S): wires to the I/O board. The board drives the LiDAR motor (MOSFET + closed-loop speed control using the LiDAR's RPM feedback) and passes raw LiDAR data through the MCU to the SBC over the fast serial link. Confirm the MCU UART bandwidth handles the CRL-200S data rate.
Cross-checked peripheral list (your running list + [+] = additions to consider):
Sensors
- 2D LiDAR (CRL-200S) — motor-driven + data passthrough to SBC
- IR cliff / proximity / docking
- Bumper micro-switches (+ optional optical/IR bumper)
- Wheel encoders
- Carpet ultrasonic sensor
- Color camera → connects to the SBC's CSI/USB, not this board
- VL53L7CX distance sensor (I²C)
- Water tank level (full/empty)
- Dust bin present / lid open-closed
- Battery level / fuel gauge
- Dock-connected / charge sense
- IMU
[+]Wheel-drop / lift sensor (robot picked up) — distinct from cliff
Motor drivers
- Main wheels ×2
- Main brush
- Side brush(es)
[+]Mop pad spin motor(s) — for dual-spinning pads (you listed mop lift but not spin)- Mop lift servo
- Water pump (low-side MOSFET)
- Vacuum fan (BLDC) — via external ESC (recommended)
- LiDAR motor (MOSFET, closed-loop)
Power
- Battery connector
- Charging circuit (charge-controller IC)
- Dock contacts
- BMS interface
- Current sense (per-rail and/or per-motor for stall / tangle detection)
- DC-DC converters (5 V for SBC, 3.3 V logic, motor rails)
- Power on/off button + soft-latch power circuit
[+]Protection: reverse-polarity, over-current fuse / eFuse, inrush limiting
Audio / UI
- Speaker amp + connector (audio in from the SBC)
- Mic placeholder
- Power / status LEDs
- Buttons (power, dock, clean)
[+]Buzzer (cheap fallback if the speaker amp is deferred)
Host link: USB or high-speed UART between MCU and SBC, carrying micro-ROS and the LiDAR passthrough — confirm bandwidth covers both.
Scope note: the wash/dry dock has its own controller (ESP32 + WiFi) for its pumps / heater / fan / water-level. Those are not on the robot I/O board.
6. Electrical / sensor BoM sketch
Rough robot BoM at prototype / low-qty China-sourcing prices (compresses at volume). Excludes the dock.
| Item | Qty | ~USD | Notes |
|---|---|---|---|
| Drive wheel modules | 2 | 12–27 | sourced complete module |
| Caster wheel | 1 | 0–3 | print or ball caster |
| Suction blower (BLDC) | 1 | 8–20 | sealed sourced motor |
| Main brush + motor | 1 | 5–12 | tapered rubber roller |
| Side brush + motor | 1–2 | 3–8 | |
| Mop spin motor(s) + pads | 1–2 | 6–15 | mopping models |
| Water pump + valve + tubing | 1 | 4–10 | mopping models |
| Mop lift servo | 1 | 2–6 | mopping models |
| Battery pack (~14.8 V Li-ion) + BMS | 1 | 15–30 | safety review |
| LiDAR (CRL-200S / LDS) | 1 | 30–40 | your cost |
| VL53L7CX ToF | 1 | 8–15 | obstacle detection |
| Color camera | 1 | 5–15 | to SBC |
| IMU | 1 | 2–5 | |
| IR cliff / proximity | 3–4 | 3–8 | |
| Bumper micro-switches | 2–3 | 1–3 | |
| Ultrasonic carpet sensor | 1 | 2–5 | |
| Speaker + amp, mic, LEDs, buttons | — | 3–8 | |
| Custom I/O PCB (JLCPCB assembled, low qty) | 1 | 15–40 | |
| Wiring, connectors, fasteners, magnets, gaskets, filter | — | 12–25 | |
| Printed parts (filament) | — | 5–15 | |
| Robot subtotal (sourced parts) | ~$130–270 | excludes SBC | |
| Raspberry Pi 5 4 GB | 1 | ~60 | |
| Hailo AI HAT (optional, premium vision) | 1 | ~70 |
7. Water system
Robot: an onboard clean-water tank (printed) → solenoid diaphragm pump (what commercial units use) → mop head. For spinning pads, dirty water stays in the pads until the dock washes them.
Dock tiers (where the water complexity lives):
- Auto-empty: dock fan + bin/bag suck the robot's dustbin out through a sealed port. The off-the-shelf-corded-vac approach works here.
- Wash + dry: clean tank + dirty tank (printed) + two pumps + a wash tray/roller + a hot-air blower (heater + fan). Wash must include hot-air dry — wash-without-dry breeds mildew/odor. Needs its own ESP32 + WiFi controller.
- Plumbing hookup: offer as an option on the premium dock (pump + supply/drain lines + valve); default to tank-based (direct plumbing needs pro install). Skip exotic water-recycling (e.g. silver-ion distillation).
- DIY parts are cheap/common: 12 V diaphragm or peristaltic pumps, solenoid valves, silicone tubing, float / capacitive level sensors.
8. Budget target
Target: ~$100–200 sourced parts + Raspberry Pi 5 4 GB, aiming at the capability of a mid-range ($500–600) commercial vacuum.
- Verdict: realistic for the mechanicals + core sensors at the low–mid end, and it
compresses at volume. But mopping + premium obstacle detection (ToF + color camera
- an NPU accelerator) are exactly the line items that push toward / past $200 — the Hailo HAT alone is ~$70. So $100–200 holds for a capable vacuum; "premium vision now" wants a +$70-ish allowance (or defer the NPU to the Rockchip generation).
- Sanity check vs commercial: a $500–600 LiDAR vacuum has roughly a $120–180 FOB BoM at 5,000 MOQ. Our low-qty numbers are coherent — we trade no tooling/molds (3D print) for higher per-part cost (no volume).
- Set builder expectations honestly: total DIY spend (kit + RPi 5 + LiDAR + margin) lands above a commercial unit's BoM. The value proposition is openness, local control, and hackability — not beating Roborock on price.
9. Product lineup — shared base, three dock tiers
One robot base, three dock tiers, released in order:
- Basic charging dock (first release — simplest, MVP-aligned).
- Auto-empty dock (dust).
- Auto-empty + mop-wash + hot-dry dock (the full-service tier).
Notes:
- Mirrors how commercial brands segment (same robot, dock tiers) and fits the swappable-module philosophy.
- The mop hardware (spinning pads + onboard water tank) is an add-on module on the shared base — only the mopping models carry it; the base is otherwise constant.
- The wash+dry dock is almost its own mini-product (pumps, heater, tanks, ESP32). Correctly the last and hardest deliverable after the robot itself.
- Skip a wash-only dock — drying is mandatory (odor).
10. Obstacle detection strategy (premium hardware + community ML)
Targets the #1 user pain (getting stuck / eating cables). Strategy: premium hardware now, ML maturity via community contribution over time.
- Sensors: VL53L7CX multizone ToF (8×8, 90° FoV, ~350 cm — wider FoV than the L5CX's 63°, better coverage) + color camera. The ToF alone detects the low / small / cliff objects the LiDAR is blind to, so v1 gets real "doesn't eat cables" value before any ML matures — de-risks the feature.
- ML: the camera + model is where the NPU matters (Hailo HAT now, Rockchip NPU later); real-time RGB detection won't run well on the RPi 5 CPU.
- Community-labeled household-obstacle dataset is a legitimately novel contribution track — every contributor's home is training data. Treat it as a first-class contribution track alongside the RFCs; it doubles as community-building.
11. Still to research / open decisions
- Battery: chemistry (Li-ion 3S/4S?), specific cells + BMS, charge profile — safety review.
- BLDC fan ESC: select an off-the-shelf ESC vs in-MCU drive.
- Filter: pick a common, abundant filter size as the interface standard.
- Gasket sourcing vs TPU printing for airflow seals.
- Dock docking signal: IR beacon protocol / fiducial / reflective marker.
- Fastener / heat-set insert standard (ties to ARCHITECTURE §5.2).
- Confirm: MCU pin budget, host-link bandwidth (micro-ROS + LiDAR passthrough), Hailo stack height.
- Remaining mechanical parts not yet covered above.