chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,332 @@
|
||||
# OOMWOO Design Document
|
||||
|
||||
> *Working design doc.* This accumulates research-backed design decisions before
|
||||
> they're split into per-module [RFCs](../contributions) and the [RFC backlog](RFC_BACKLOG.md), and/or migrated into
|
||||
> the [README](../README.md). A condensed version of §1 already lives in the
|
||||
> README's [Design research](../README.md#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)](https://www.thesmarthomehookup.com/the-best-300-600-robot-vacuums-they-beat-the-flagships/)
|
||||
|
||||
### 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](../contributions/clean-and-map) 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)](https://vacuumwars.com/best-robot-vacuums-with-obstacle-avoidance/)
|
||||
|
||||
### 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)](https://vacuumwars.com/robot-vacuum-mop-systems/)
|
||||
|
||||
### 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](https://github.com/Hypfer/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* | *Print* | 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](https://xdaforums.com/t/home-made-pogo-pin-charging-dock.2019847/)) + wall adapter + IR-beacon LEDs. Plenty of [DIY precedent](https://www.instructables.com/Roamer-the-Self-Charging-Companion-Robot/). |
|
||||
| *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)](https://vacuumwars.com/vacuum-wars-best-robot-vacuums/). 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)](https://www.ecovacs.com/us/blog/round-vs-square-robot-vacuum). Round wins
|
||||
for a DIY/printable platform:
|
||||
1. Simpler to design, print, and seal.
|
||||
2. Navigates better — rotates in place, backs out the way it came (D-shape
|
||||
complicates every nav/recovery RFC).
|
||||
3. Natural fit for the spinning 2D LiDAR turret.
|
||||
4. Matches the round teardown reference we're porting.
|
||||
5. 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:
|
||||
1. *Basic charging dock* (first release — simplest, MVP-aligned).
|
||||
2. *Auto-empty dock* (dust).
|
||||
3. *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.
|
||||
Reference in New Issue
Block a user