Skip to content

Commit a07eb00

Browse files
kaiaaiclaude
andcommitted
README: tutorials, essential commands, fold in Quickstart, retag
- Tags -> "Cleaning · Docking · Localization · ROS 2 Jazzy · Nav2 · Gazebo". - Add a Tutorials section (4 makerspet.com guides: simulate, first package, headless coverage cleaning, phantom-obstacle fix). - Add an Essential commands quick reference (kaia config, world/navigation/ monitor launches, teleop, bumper echo, map save). - Fold QUICKSTART.md into the README and delete it; reconcile the reproduction paths from the old jayadevrana/oomwoo-m1-ros2 clone to this repo's prebuilt deploy/ scripts in the dev image. Repoint docs/etc/README.md accordingly. - List the new oomwoo_clean package. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent f98ea83 commit a07eb00

3 files changed

Lines changed: 145 additions & 116 deletions

File tree

QUICKSTART.md

Lines changed: 0 additions & 110 deletions
This file was deleted.

README.md

Lines changed: 144 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
*Open-source robot vacuum you build yourself.*
66

7-
ROS 2 Jazzy · Nav2 · Coverage cleaning · Kidnapped-robot localization · Gazebo · Headless CI
7+
Cleaning · Docking · Localization · ROS 2 Jazzy · Nav2 · Gazebo
88

99
![License](https://img.shields.io/badge/license-Apache--2.0-blue)
1010
![Status](https://img.shields.io/badge/status-active-brightgreen)
@@ -20,17 +20,156 @@ map-and-clean live here so they build, test and version together.
2020
## Packages
2121

2222
- **`oomwoo_coverage`** — boustrophedon cell-decomposition coverage cleaning: drives a
23-
full-room sweep through Nav2, with gap-fill and wedge recovery.
23+
full-room sweep through Nav2 (or the reactive executor, `executor:=reactive`), with
24+
gap-fill and wedge recovery.
2425
- **`oomwoo_nav_localize`** — kidnapped-robot relocalization (global correlative
2526
scan-match + AMCL) so the robot can recover its pose from any start position on a
2627
known map.
2728
- **`oomwoo_sim_support`** — everything needed to run *and measure* the above headless
2829
in Gazebo: sim bring-up, a ground-truth pose publisher, the coverage meter, the
2930
kidnap injector, and the CLI regression runners.
31+
- **`oomwoo_clean`** — cleaning-specific navigation and RViz debug tooling
32+
(`cleaning_debug.launch.py`), the home for the from-scratch cleaning rebuild.
3033

31-
See **[QUICKSTART.md](QUICKSTART.md)** to build and run the headless regressions on the
32-
`makerspet/oomwoo:jazzy-dev` image. Milestone design notes and the measured M1/M2
33-
baselines are archived under **[docs/etc/](docs/etc/)**.
34+
## Tutorials
35+
36+
Step-by-step guides on makerspet.com:
37+
38+
- [Simulate OOMWOO-One in Gazebo with ROS 2](https://makerspet.com/blog/simulate-oomwoo-one-robot-vacuum-in-gazebo-with-ros-2/) — bring up the simulation from scratch.
39+
- [Write your first OOMWOO ROS 2 package](https://makerspet.com/blog/write-your-first-oomwoo-ros-2-package/) — a hello-world package in the dev image.
40+
- [Headless sim & coverage cleaning (for LLM agents)](https://makerspet.com/blog/oomwoo-headless-sim-coverage-cleaning-llm-agents/) — run and measure cleaning with no display.
41+
- [The phantom obstacle: teaching OOMWOO to clean near walls](https://makerspet.com/blog/oomwoo-phantom-obstacle-cleaning-fix/) — how the "wedges near furniture" bug was root-caused and fixed.
42+
43+
## Essential commands
44+
45+
Run inside the `makerspet/oomwoo:jazzy-dev` container (each launch in its own
46+
terminal). The default robot model is `oomwoo_one`.
47+
48+
```bash
49+
# select the robot description
50+
kaia config robot.model oomwoo_one
51+
52+
# start the Gazebo simulation
53+
ros2 launch oomwoo_gazebo world.launch.py
54+
55+
# build a map with SLAM while you drive
56+
ros2 launch oomwoo_bringup navigation.launch.py use_sim_time:=true slam:=True
57+
58+
# open RViz to watch the robot and map
59+
ros2 launch oomwoo_bringup monitor_robot.launch.py use_sim_time:=true
60+
61+
# drive with the keyboard
62+
ros2 run kaiaai_teleop teleop_keyboard
63+
64+
# watch the bumpers (contact-tolerant cleaning relies on these)
65+
ros2 topic echo /bumper_left/contact
66+
ros2 topic echo /bumper_right/contact
67+
68+
# save the map you built
69+
ros2 run nav2_map_server map_saver_cli -f ~/maps/map
70+
```
71+
72+
## Quickstart — reproduce the regressions
73+
74+
Copy-paste. Needs Docker on a native **x86-64 Linux** box (not ARM / not an
75+
M-series Mac, and not Docker Desktop on Windows — see the note at the bottom).
76+
Nothing else to install: these packages ship **prebuilt** in the dev image.
77+
78+
### 1. Get the dev image (~10 min, mostly the download)
79+
80+
```bash
81+
# ROS 2 Jazzy + Nav2 + Gazebo + oomwoo_one + these packages, ~9.5 GB
82+
docker pull makerspet/oomwoo:jazzy-dev
83+
84+
# spin it up and get a bash prompt inside (same flow as the makerspet tutorials)
85+
docker run -it --name oom makerspet/oomwoo:jazzy-dev
86+
```
87+
88+
Everything below runs at the **container's bash prompt**. The packages are
89+
already built and sourced — nothing to clone. (Editing them? Rebuild with
90+
`colcon build --symlink-install --packages-select oomwoo_coverage
91+
oomwoo_nav_localize oomwoo_sim_support oomwoo_clean` in `/ros_ws`.)
92+
93+
### 2. Kidnapped-robot test (~4 min)
94+
95+
```bash
96+
bash /ros_ws/src/oomwoo-ros2-tools/deploy/run_reloc_regression.sh
97+
```
98+
99+
Teleports the robot to 10 random spots and recovers each. Prints per-trial lines
100+
and a summary; exits 0 on pass. Expect:
101+
102+
```
103+
RELOC_SUMMARY passed=10/10 success_rate=1.00 target=0.90 ... suite_pass=True
104+
```
105+
106+
### 3. Coverage test (~20 min)
107+
108+
```bash
109+
bash /ros_ws/src/oomwoo-ros2-tools/deploy/run_coverage_regression.sh
110+
```
111+
112+
Sweeps the room, then a gap-fill pass. Prints `COVERAGE_REPORT` lines and a
113+
summary; exits 0 on pass.
114+
115+
### 4. Coverage on the stock living_room (~20 min)
116+
117+
```bash
118+
bash /ros_ws/src/oomwoo-ros2-tools/deploy/run_coverage_livingroom.sh
119+
```
120+
121+
Same harness on the cluttered stock living_room. The room is tight, so efficiency
122+
lands below the open test_room's by design. Note this suite is **variable**
123+
(~50–85 % across runs) and may not meet the 90 % gate the runner enforces — a
124+
known open item on this furniture-dense world (a hard under-furniture pocket
125+
where the robot intermittently wedges), not a regression failure.
126+
127+
### Watching it with the Gazebo GUI
128+
129+
Every simulation runs identically with or without the GUI — one switch:
130+
131+
```bash
132+
ros2 launch oomwoo_sim_support coverage_regression.launch.py gui:=true
133+
```
134+
135+
(Headless is the default; `gui:=true` needs a display, e.g. `docker run` with
136+
X11 forwarding as in the makerspet simulation tutorial.)
137+
138+
### Other vacuum models
139+
140+
The launches follow the kaiaai convention: `kaia config robot.model <package>`
141+
selects the robot description, or pass it explicitly:
142+
143+
```bash
144+
ros2 launch oomwoo_sim_support coverage_regression.launch.py robot_model:=proscenic_m6pro
145+
```
146+
147+
The regression scripts pin `oomwoo_one` by default so results are reproducible.
148+
149+
### Repeat runs / variance
150+
151+
```bash
152+
RUNS=3 bash /ros_ws/src/oomwoo-ros2-tools/deploy/run_coverage_regression.sh
153+
```
154+
155+
Runs the suite 3× and prints min/max/mean/stdev for each metric. Exit codes:
156+
`0` all pass, `1` a run missed its targets, `2` measurement invalid (the meter
157+
detected ground-truth pose teleports — the sim is unstable on that host).
158+
159+
### Notes
160+
161+
- **Host requirement:** the results assume a real x86-64 Linux host (or CI
162+
runner). Docker Desktop on Windows runs inside a WSL2 VM and ARM Macs emulate
163+
x86 — both destabilize Gazebo physics (the ground-truth pose can teleport). The
164+
regression detects that and reports "sim unstable" (exit 2) instead of garbage.
165+
- **Speed:** on 4 vCPU the sim runs ~real-time. On fewer cores it's slower but the
166+
metrics are unaffected (they're measured in sim time).
167+
- **Reports:** JSON lands at `/root/coverage_report.json` and
168+
`/root/reloc_report.json`; live logs at `/tmp/coverage_regression.log.1` etc.
169+
- **Clean up:** `exit` the container, then `docker rm -f oom` on the host.
170+
171+
Milestone design notes and the measured M1/M2 baselines are archived under
172+
**[docs/etc/](docs/etc/)**.
34173

35174
## Credits
36175

docs/etc/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Milestone-specific documents and measurement snapshots from the initial M1/M2
44
delivery of these packages. Kept for provenance; **not** current usage docs — for
5-
building and running see [QUICKSTART.md](../../QUICKSTART.md).
5+
building and running see the [Quickstart in the README](../../README.md#quickstart--reproduce-the-regressions).
66

77
- **`HANDOVER.md`** — the M1/M2 handover notes (design decisions, what was built).
88
- **`results/`** — banked coverage/localization measurement runs (JSON) with their

0 commit comments

Comments
 (0)