Files

First Clean: coverage cleaning with mapping and exploration (ROS2 package)

A ROS2 package for the robot's first clean. The vacuum starts with no map, cleans the whole reachable floor using coverage path planning, builds a map with SLAM while it cleans, and keeps exploring until the map is complete. Because the physical robot isn't built yet, this is a Gazebo simulation.

Status — ready to start work. No need to wait for OOMWOO hardware — develop it in the Gazebo sim (urdf-gazebo-sim) or on the real placeholder Proscenic M6 Pro. Say so in the discussions so we can coordinate.

Scope. This RFC is only the first clean from scratch. Operating on a saved map, docking, recovery, floor-surface handling, and cleaning modes are deliberately out of scope and live in their own RFCs: nav-localize (navigate / localize / resume a saved map), dock-cycle (undock / dock / recharge), recovery-safety (recovery & safety), floor-care (wall/edge following, carpet vs hardwood, mop), and cleaning-jobs (modes, zones, job orchestration). Keep this package focused on producing a complete map and full first-pass coverage; the others build on top of it.

Important References

Request for Contribution - Instructions

  • reproduce the baseline simulation first
  • add coverage cleaning
    • the robot starts with no prior map
    • plan and execute a coverage path that cleans the whole reachable floor (e.g. boustrophedon / back-and-forth, plus corner and wall-edge handling)
    • build the map with SLAM while cleaning (e.g. slam_toolbox or cartographer) — mapping and cleaning happen together, not in separate passes
    • keep exploring frontiers until the map is complete, so no reachable area is missed
    • define and document a clear done condition (full coverage and complete map), then save the map
  • make it robust
    • dynamic obstacles: a person, pet, or object moving into the robot's path must not break coverage or mapping — the robot should replan and continue
    • LiDAR-invisible static obstacles: the LiDAR may report open floor the robot cannot actually reach (glass, objects below the LiDAR plane, thresholds, ledges). Detect these via bumper contact, mark them as obstacles, recover, and replan around them
    • react to bumper events (left switch, right switch, front bumper) published by the urdf-gazebo-sim bumper
    • never get permanently stuck — recover from collisions and wedged situations (a basic local recovery here; the full recovery ladder lives in recovery-safety)
  • test it well
    • start the robot from various initial locations and verify it still achieves full coverage and a complete map
    • add regression tests (headless, CI-friendly) that verify both:
      • map completeness — the built map covers the whole reachable area
      • coverage completeness — the cleaning path covers the whole reachable floor
    • test recovery from dynamic obstacles and from bumper hits on LiDAR-invisible obstacles
  • additional Gazebo worlds (highly valued)
    • create and test extra worlds: multiple rooms, different floorplans, narrow passages, furniture, and LiDAR-invisible obstacles
    • contribute these worlds back — they help everyone test
  • submit a PR (pull request) to contributions/clean-and-map/<your-github-username>/
    • link to ROS2 package(s)
    • instructions, documentation - how to install, run, configure, troubleshoot, test results
    • the Gazebo worlds you added
    • videos of full clean-and-map runs from several start poses
    • announce your submission in Project Discussions
  • iterate with review
  • TBD, expect the RFC to evolve

Acceptance criteria

Objective, measurable. Examples:

  • Starting with no map in the Living Room world, from multiple initial poses, the robot:
    • achieves full coverage of the reachable floor
    • builds a complete map of the reachable area
    • detects a clear done condition and saves the map
  • Robust to dynamic obstacles — a moving obstacle in the path does not break coverage or mapping
  • Robust to LiDAR-invisible static obstacles — bumper contacts are detected, the obstacle is marked and avoided, the robot replans and does not get stuck
  • Reacts correctly to left / right / front bumper events
  • Regression tests pass and verify both map completeness and coverage completeness, runnable headless in CI
  • Works in at least one additional multi-room / different floorplan world
  • Documented and reliably reproducible by someone else
  • TBD, expect criteria to evolve

The maintainer selects among compliant candidates using these criteria. Multiple attempts are welcome and useful even if not selected — modules are swappable, and a non-selected design is still a valid learning exercise and a fallback.