Open-source robot vacuum you build yourself.
Raspberry Pi · ROS 2 · Docker · Ubuntu · Dev environment
Raspberry Pi software + development software for OOMWOO open-source robot vacuum.
On your Raspberry Pi 4/5 2GB+ run
git clone https://github.com/makerspet/oomwoo-install
source oomwoo-install/ubuntu/install_oomwoo_runtime_jazzy.sh
Measure the onboard runtime before changing the minimum Pi/CM memory profile:
oomwoo-runtime-benchmark record --help
oomwoo-runtime-benchmark compare --helpThe Pi runtime benchmark guide covers repeatable idle, 5 Hz SLAM, and Nav2 runs, ROS 2 composition comparisons, and the measured decision gate for a lower-cost 2 GB target.
The quickest way to try OOMWOO is the ROS 2 development environment in Docker — no robot, GPU, or display required:
docker pull makerspet/oomwoo:jazzy-dev
docker run -d --name oomwoo makerspet/oomwoo:jazzy-dev sleep infinity
docker exec -it oomwoo bash
From there:
- Simulate in Gazebo (headless): Simulate OOMWOO-One in Gazebo with ROS 2 (no hardware needed)
- Write a Hello-World software package
- Install, operate a real (temp placeholder) vacuum cleaner Part 1 and Part 2.
- Simulate temp vacuum cleaner
- Run coverage cleaning (agent quickstart): Headless sim & coverage cleaning for LLM agents
- All tutorials: makerspet.com/learn
- Questions & help: Discord
Run these inside the dev container (docker exec -it oomwoo bash). The default robot
model is oomwoo_one; switch it with kaia config robot.model <package> or a
robot_model:=<package> launch argument.
Simulate in Gazebo
ros2 launch oomwoo_gazebo world.launch.py # with the Gazebo GUI (needs a display)
ros2 launch oomwoo_gazebo world.launch.py headless:=true # headless (Docker / CI, no display)
Drive the robot
ros2 run kaiaai_teleop teleop_keyboard # keyboard teleop
ros2 topic pub -r 10 /cmd_vel geometry_msgs/msg/Twist '{linear: {x: 0.2}}' # or publish velocity
Map & navigate (SLAM) — with a world running, in another terminal
ros2 launch oomwoo_bringup navigation.launch.py use_sim_time:=true slam:=True # build a map
ros2 run nav2_map_server map_saver_cli -f ~/maps/map # save the map
ros2 launch oomwoo_bringup navigation.launch.py use_sim_time:=true map:=~/maps/map.yaml # navigate a saved map
ros2 launch oomwoo_bringup monitor_robot.launch.py use_sim_time:=true # RViz view
Coverage cleaning (headless)
ros2 launch oomwoo_sim_support coverage_regression.launch.py # sim + Nav2 + coverage planner + meter
ros2 topic echo /coverage_meter/ratio # coverage fraction, 0.0 -> 1.0
See the headless sim & coverage cleaning quickstart for the agent/CI workflow.
Inspect sensors
ros2 topic echo /scan # 2D LiDAR
ros2 topic echo /bumper_left/contact ros_gz_interfaces/msg/Contacts # front bumpers
Physical robot (placeholder Proscenic M6 Pro) — see the connect and drive, map & navigate tutorials
kaia config robot.model proscenic_m6pro
ros2 launch proscenic_m6pro bringup.launch.py robot_ip:=<robot-ip>
ros2 launch oomwoo_bringup navigation.launch.py slam:=True
- Rviz shows cleaning plan
ros2 launch oomwoo_bringup monitor_robot.launch.py- add
/coverage_planner/plan, Fixed Frame = map
- reactive navigation for cleaning
- experimental, replaces Nav2 for cleaning tasks
ros2 launch oomwoo_sim_support coverage_regression.launch.py gui:=true \
world:=$(ros2 pkg prefix oomwoo_gazebo)/share/oomwoo_gazebo/worlds/living_room.world \
map:=$(ros2 pkg prefix oomwoo_sim_support)/share/oomwoo_sim_support/maps/living_room.yaml \
x_pose:=0.32 y_pose:=1.59 executor:=reactive
- clean using an existing map; Boustrophedon, clunky, slow, fails often
- packages in makerspet/oomwoo-ros2-tools
- added bumpers, verified working
- added localization (kidnapped robot); not tested
- forked kaiaai_gazebo, kaiaai_bringup to oomwoo_gazebo, oomwoo_bringup
- added a first Raspberry Pi 4/5 4GB runtime install plan
- added simulated CPU-MCU serial I/O placeholder
- added oomwoo-one ROS2 robot description package (simulation only)
- added https://github.com/remakeai/vacuum_ros2_bridge
- LiDAR compute moved to vacuum_ros2_bridge
- added bumper sensors for proscenic-m6pro
- fixed Gazebo living world marble table collision mesh
- added Proscenic M6 Pro robot description
kaia config robot.model proscenic_m6pro
