Free worldwide shiping on $150+
Simulate OOMWOO-One Robot Vacuum in Gazebo with ROS 2
OOMWOO is an open-source robot vacuum you build yourself. oomwoo-one is the first model. This tutorial gets its ROS 2 simulation running in Gazebo so you can develop mapping, navigation, and cleaning behaviours with no hardware — everything runs in Docker on Ubuntu or Windows.
You’ll get: SLAM mapping, autonomous Nav2 navigation, manual driving, and bumper sensors — the same interfaces the real robot will expose.
Prerequisites
- WLS2 if using Windows
- Docker — Docker Desktop on Windows/macOS x86, Docker Engine on Ubuntu/Linux
- An X server for the GUI windows (Gazebo, RViz)
- Windows: VcXsrv (XLaunch)
- Linux: native X — nothing to install
- No physical robot
1. Start the X server (Windows only)
Launch XLaunch (from VcXsrv) and accept the defaults except:
⚠️ On the “Display settings” page, set Display number =
0(not-1). The Docker container connects tohost.docker.internal:0.0, so the display number must be 0 or no GUI windows will appear.
Also tick “Disable access control” on the “Extra settings” page so the container can connect. Finish the wizard — a tiny X icon appears in your tray.
On Linux, instead allow local Docker to reach your X server:
xhost +local:docker2. Pull the oomwoo Docker image
docker pull makerspet/oomwoo:jazzy-dev3. Start the container
Windows (PowerShell):
docker run --name makerspet -it --rm -v c:\maps:/root/maps -p 8888:8888/udp -p 5555:5555/udp -e DISPLAY=host.docker.internal:0.0 -e LIBGL_ALWAYS_INDIRECT=0 --add-host=host.docker.internal:host-gateway makerspet/oomwoo:jazzy-dev(DISPLAY=...:0.0 matches the XLaunch display 0 from step 1.)
Ubuntu / Linux:
docker run --name makerspet -it --rm -v ~/maps:/root/maps -p 8888:8888/udp -p 5555:5555/udp -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --network host makerspet/oomwoo:jazzy-devNeed more terminals into the same container? Open another PowerShell/terminal and run:
docker exec -it makerspet bash4. Select the oomwoo-one model
Inside the container:
kaia config robot.model oomwoo_one5. Launch the Gazebo world
ros2 launch kaiaai_gazebo world.launch.pyA Gazebo window opens with oomwoo-one in a living-room world.
6. Start SLAM mapping
In a new container shell (docker exec -it makerspet bash):
ros2 launch kaiaai_bringup navigation.launch.py use_sim_time:=true slam:=True7. Open the RViz monitor
ros2 launch kaiaai_bringup monitor_robot.launch.py use_sim_time:=trueWatch the map build as the robot moves.
8. Drive it manually
ros2 run kaiaai_teleop teleop_keyboardUse the keyboard to drive oomwoo-one around and fill in the map.
Follow OOMWOO build
Open-source robot vacuum community build updates
9. Autonomous navigation
In RViz, click “Nav2 Goal” and click-drag a destination — oomwoo-one plans a path and drives there on its own.
10. Check the bumper sensors
ros2 topic echo /bumper_left/contact
ros2 topic echo /bumper_right/contactDrive into a wall and watch the left/right contact events fire.
11. Save your map
ros2 run nav2_map_server map_saver_cli -f ~/maps/mapOn Windows the map lands in c:\maps; on Linux in ~/maps.
What’s next
You now have a full oomwoo-one simulation: SLAM, Nav2, teleop, and bumpers, exactly the interfaces the real robot exposes. In Post 2 you’ll write your first oomwoo ROS 2 package — a node that drives a coverage path *while* mapping — and launch it with ros2 launch.
Want to help build oomwoo? Grab a module from the Requests for Contributions or say hi on Discord.