A comprehensive ROS 2 driver and simulation package for iRobot Create 1, Create 2, and Roomba series robots. This project provides both real robot control capabilities and full Gazebo simulation support with teleoperation functionality.
R(OS)oomba is a complete ROS 2 implementation that wraps the C++ library libcreate, which uses iRobot's Open Interface Specification. The project includes robot description files, Gazebo simulation, comprehensive control interfaces, and teleoperation capabilities.
| Feature | Real Robot | Simulation |
|---|---|---|
| Odometry | โ Available | โ Available |
| Drive (v,ฯ) | โ Available | โ Available |
| Joystick Teleoperation | โ Available | โ Available |
| Bumpers | โ Available | |
| Cliff sensors | โ Available | |
| Battery info | โ Available | โ N/A |
| LEDs | โ Available | โ N/A |
| Sound | โ Available | โ N/A |
| Joint States | โ Available | โ Available |
| ROS 2 Control | โ N/A | โ Available |
| Gazebo Integration | โ N/A | โ Available |
| RViz Visualization | โ Available | โ Available |
- Create 1 (Roomba 500 series base)
- Create 2 (Roomba 600/700 series base)
- Roomba 400 series
- Roomba 500 series
- Roomba 600 series
- Roomba 700 series
- Roomba 800 series (confirmed by community)
This project includes a fully configured development container for easy setup:
-
Clone the repository:
git clone https://github.com/your-username/rosoomba.git cd rosoomba -
Open in VS Code:
code . -
When prompted, click "Reopen in Container" or press
Ctrl+Shift+Pand select "Dev Containers: Reopen in Container" -
Wait for the container to build and start (first time may take a few minutes)
-
Build the workspace:
# Use the integrated build task Ctrl+Shift+P โ "Tasks: Run Task" โ "build" # Or manually in terminal ./vscode/tasks/build.sh
The workspace contains several specialized packages:
Core Packages (credits to AutonomyLab)
create_driver- Main ROS 2 driver for real iRobot Create/Roomba robotsrosoomba_msgs- Custom message definitions for Create-specific sensors and commandslibcreate- C++ library for low-level robot communication
rosoomba_bringup- Launch files and configurations for both real and simulated robotsrosoomba_description- URDF robot model, meshes, and visualization componentsrosoomba_gazebo- Gazebo simulation worlds and robot spawn configurations
Launch the complete simulation environment with Gazebo, RViz, and joystick control:
# Source the workspace
source install/setup.bash
# Launch simulation with all components
ros2 launch rosoomba_bringup rosoomba_sim.launch.py
# Launch without RViz (for headless operation)
ros2 launch rosoomba_bringup rosoomba_sim.launch.py rviz:=false- Gazebo - Physics simulation environment
- RViz - 3D visualization and robot state monitoring
- ros2_control - Differential drive controller
- Joy teleoperation - Joystick control interface
- ROS-Gazebo Bridge - Communication between ROS 2 and Gazebo
For controlling actual iRobot Create/Roomba robots:
# For Create 2 (Roomba 600/700 series)
ros2 launch create_bringup create_2.launch
# For Create 1 (Roomba 500 series)
ros2 launch create_bringup create_1.launch
# For Roomba 400 series
ros2 launch create_bringup roomba_400.launchconfig- Path to configuration YAML file (default:create_bringup/config/default.yaml)desc- Enable robot description (default:true)
Example with custom configuration:
ros2 launch create_bringup create_2.launch config:=/path/to/config.yaml desc:=falseConnect a compatible joystick/gamepad and use it to control the robot:
# Launch only teleoperation (for use with existing robot)
ros2 launch rosoomba_bringup joy_teleop.launch.py- Left Stick - Linear velocity (forward/backward)
- Right Stick - Angular velocity (rotation)
- Button mapping - Configurable via
config/joy_config.yaml
Edit src/rosoomba_bringup/config/rosoomba_controllers.yaml to modify:
- PID gains for differential drive controller
- Wheel separation and radius parameters
- Joint names and controller settings
Edit src/rosoomba_bringup/config/gz_bridge.yaml to configure:
- Topic mappings between ROS 2 and Gazebo
- Message type conversions
- Communication interfaces
Edit src/rosoomba_bringup/config/joy_config.yaml to customize:
- Button mappings
- Axis configurations
- Velocity scaling factors
If not using the dev container:
- ROS 2 (Jazzy, Humble, or Iron)
- Gazebo (Garden or later)
- Ubuntu packages:
python3-rosdep,python3-colcon-common-extensions
-
Install dependencies:
sudo apt update sudo apt install python3-rosdep python3-colcon-common-extensions
-
Create workspace:
mkdir -p ~/rosoomba_ws/src cd ~/rosoomba_ws/src
-
Clone repositories:
git clone <this-repo-url> . vcs import < ros2.repos
-
Install ROS dependencies:
cd ~/rosoomba_ws rosdep update rosdep install --from-paths src --ignore-src -r -y
-
Build workspace:
colcon build --symlink-install source install/setup.bash
| Topic | Type | Description |
|---|---|---|
/odom |
nav_msgs/Odometry |
Robot pose and velocity |
/joint_states |
sensor_msgs/JointState |
Wheel joint positions |
/battery/voltage |
std_msgs/Float32 |
Battery voltage |
/battery/current |
std_msgs/Int16 |
Battery current |
/battery/charge |
std_msgs/Float32 |
Battery charge level |
/battery/capacity |
std_msgs/Float32 |
Battery capacity |
/bumper |
rosoomba_msgs/Bumper |
Bumper sensor states |
/cliff |
rosoomba_msgs/Cliff |
Cliff sensor readings |
/mode |
rosoomba_msgs/Mode |
Robot operation mode |
| Topic | Type | Description |
|---|---|---|
/cmd_vel |
geometry_msgs/Twist |
Velocity commands |
/dock |
std_msgs/Empty |
Dock command |
/undock |
std_msgs/Empty |
Undock command |
/define_song |
rosoomba_msgs/DefineSong |
Define custom songs |
/play_song |
rosoomba_msgs/PlaySong |
Play defined songs |
| Topic | Type | Description |
|---|---|---|
/diff_cont/cmd_vel_unstamped |
geometry_msgs/Twist |
Controller velocity input |
/dynamic_joint_states |
control_msgs/DynamicJointState |
Controller joint states |
# Quick build
./vscode/tasks/build.sh
# Clean build
./vscode/tasks/hard_build.sh
# Manual colcon build
colcon build --symlink-install# Run tests
colcon test
# Check test results
colcon test-result --verbose# Run all linters
ament_lint_auto
# Specific linters
ament_cpplint src/
ament_flake8 src/We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow ROS 2 C++ Style Guide
- Use
ament_lint_autofor automated checking - Document all public APIs
This project is licensed under the MIT License - see the LICENSE file for details.
- Jacob Perron - Original ROS 2 port and main development
- Autonomy Lab, Simon Fraser University
- Michael Browne - Roomba 700/800 series testing
- Clyde McQueen - Sound support implementation
- Ben Wolsieffer - JointState publisher, Create 1 description
- Pedro Grojsgold - Initial ROS 2 port
- Josh Gadeken - OI Mode reporting workaround
- libcreate - Core C++ library for iRobot communication
- ROS 2 - Robot Operating System framework
- Gazebo - Physics simulation engine
- ros2_control - Real-time control framework
- Documentation: ROS Wiki
- Support: ROS Answers (tag: create_robot)
- Issues: GitHub Issues
- Original Project: AutonomyLab/create_robot
Happy Robooting! ๐ค