Skip to content
Go to file

Latest commit


Failed to load latest commit information.
Latest commit message
Commit time
Jun 10, 2018
Jun 10, 2018
Jun 10, 2018
Jun 10, 2018
Jun 10, 2018
Dec 11, 2015


ROS driver for iRobot Create 1 and 2. This package wraps the C++ library libcreate, which uses iRobot's Open Interface Specification.

Build Status

TravisCI (Ubuntu Trusty, ROS Indigo and Jade)
Build Status

Supported Robots

Model Support
Create 1 Yes
Create 2 (firmware >= 3.2.6) Yes
Roomba Original Series No
Roomba 400 Series Yes
Roomba 500 Series Yes *
Roomba 600 Series Yes *
Roomba 700 Series Yes +
Roomba 800 Series Yes +
Roomba 900 Series No *

+ Verified by third-party. Please note Odometry Issue #28
* Not verified. Anyone who is able to verify that this driver works or not is encouraged to contact Jacob with their findings or open an issue.


Feature Status
Odometry Available
Safe mode Planned #13
Clean demo Planned #14
Dock demo Available
Drive wheels N/A
Drive (v,w) Available
Brush motors Planned #15
LEDs Available
Digit LEDs Available
Sound Available
Wheeldrop Available
Bumpers Available
Cliff sensor Planned #22
Dirt detect N/A
Omni IR sensor Available
Left IR sensor N/A
Right IR sensor N/A
Battery info Available
Light sensors Available
Corrupt packets Planned
Physical tests Planned
Overcurrent info Planned



  • Internet connection
  • ROS Indigo or Jade
  • Ubuntu packages: python-rosdep, python-catkin-tools
$ sudo apt-get install python-rosdep python-catkin-tools


  1. Create a catkin workspace

    $ cd ~
    $ mkdir -p create_ws/src  
    $ cd create_ws  
    $ catkin init  
  2. Clone this repo

    $ cd ~/create_ws/src
    $ git clone  
  3. Install dependencies

    $ cd ~/create_ws
    $ rosdep update  
    $ rosdep install --from-paths src -i  
  4. Build

    $ cd ~/create_ws
    $ catkin build

USB Permissions

  1. In order to connect to Create over USB, ensure your user is in the dialout group

    $ sudo usermod -a -G dialout $USER
  2. Logout and login for permission to take effect

Running the driver


  1. After compiling from source, don't forget to source your workspace:

    $ source ~/create_ws/devel/setup.bash
  2. Connect computer to Create's 7-pin serial port

  • If using Create 1, ensure that nothing is connected to Create's DB-25 port
  1. Launch one of the existing launch files or adapt them to create your own.

Launch files

For Create 2 (Roomba 600/700 series):

$ roslaunch ca_driver create_2.launch

For Create 1 (Roomba 500 series):

$ roslaunch ca_driver create_1.launch

For Roomba 400 series:

$ roslaunch ca_driver roomba_400.launch

Launch file arguments

  • config - Absolute path to a configuration file (YAML). Default: ca_driver/config/default.yaml
  • desc - Enable robot description (URDF/mesh). Default: true

For example, if you would like to disable the robot description and provide a custom configuration file:

$ roslaunch ca_driver create_2.launch config:=/abs/path/to/config.yaml desc:=false


Name Description Default
dev Device path of robot /dev/ttyUSB0
base_frame The robot's base frame ID base_footprint
odom_frame The robot's odometry frame ID odom
latch_cmd_duration If this many seconds passes without receiving a velocity command the robot stops 0.2
loop_hz Frequency of internal update loop 10.0
publish_tf Publish the transform from odom_frame to base_frame true
robot_model The type of robot being controlled (supported values: ROOMBA_400, CREATE_1 and CREATE_2) CREATE_2
baud Serial baud rate Inferred based on robot model, but is overwritten upon providing a value


Topic Description Type
battery/capacity The estimated charge capacity of the robot's battery (Ah) std_msgs/Float32
battery/charge The current charge of the robot's battery (Ah) std_msgs/Float32
battery/charge_ratio Charge / capacity std_msgs/Float32
battery/charging_state The chargins state of the battery ca_msgs/ChargingState
battery/current Current flowing through the robot's battery (A). Positive current implies charging std_msgs/Float32
battery/temperature The temperature of the robot's battery (degrees Celsius) std_msgs/Int16
battery/voltage Voltage of the robot's battery (V) std_msgs/Float32
bumper Bumper state message (including light sensors on bumpers) ca_msgs/Bumper
clean_button 'clean' button is pressed ('play' button for Create 1) std_msgs/Empty
day_button 'day' button is pressed std_msgs/Empty
hour_button 'hour' button is pressed std_msgs/Empty
minute_button 'minute' button is pressed std_msgs/Empty
dock_button 'dock' button is pressed ('advance' button for Create 1) std_msgs/Empty
spot_button 'spot' button is pressed std_msgs/Empty
ir_omni The IR character currently being read by the omnidirectional receiver. Value 0 means no character is being received std_msgs/UInt16
joint_states The states (position, velocity) of the drive wheel joints sensor_msgs/JointState
mode The current mode of the robot (See OI Spec for details) ca_msgs/Mode
odom Robot odometry according to wheel encoders nav_msgs/Odometry
wheeldrop At least one of the drive wheels has dropped std_msgs/Empty
/tf The transform from the odom frame to base_footprint. Only if the parameter publish_tf is true tf2_msgs/TFMessage


Topic Description Type
cmd_vel Drives the robot's wheels according to a forward and angular velocity geometry_msgs/Twist
debris_led Enable / disable the blue 'debris' LED std_msgs/Bool
spot_led Enable / disable the 'spot' LED std_msgs/Bool
dock_led Enable / disable the 'dock' LED std_msgs/Bool
check_led Enable / disable the 'check robot` LED std_msgs/Bool
power_led Set the 'power' LED color and intensity. Accepts 1 or 2 bytes, the first represents the color between green (0) and red (255) and the second (optional) represents the intensity with brightest setting as default (255) std_msgs/UInt8MultiArray
set_ascii Sets the 4 digit LEDs. Accepts 1 to 4 bytes, each representing an ASCII character to be displayed from left to right std_msgs/UInt8MultiArray
dock Activates the demo docking behaviour. Robot enters Passive mode meaning the user loses control (See OI Spec) std_msgs/Empty
undock Switches robot to Full mode giving control back to the user std_msgs/Empty
define_song Define a song with up to 16 notes. Each note is described by a MIDI note number and a float32 duration in seconds. The longest duration is 255/64 seconds. You can define up to 4 songs (See OI Spec) ca_msgs/DefineSong
play_song Play a predefined song ca_msgs/PlaySong

Commanding your Create

You can move the robot around by sending geometry_msgs/Twist messages to the topic cmd_vel:

linear.x  (+)     Move forward (m/s)
          (-)     Move backward (m/s)
angular.z (+)     Rotate counter-clockwise (rad/s)
          (-)     Rotate clockwise (rad/s)

Velocity limits

-0.5 <= linear.x <= 0.5 and -4.25 <= angular.z <= 4.25


ca_tools comes with a launch file for teleoperating Create with a joystick.

$ roslaunch ca_tools joy_teleop.launch [joy_config:=xbox360]

There exists configuration files for the Xbox 360 wired controller and the Logitech F710 controller. You can adapt these files for your preferred joystick configuration.


Contributing to the development and maintenance of create_autonomy is encouraged. Feel free to open issues or create pull requests on GitHub.


You can’t perform that action at this time.