Skip to content

Repository files navigation

create_robot

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

Build Status

  • ROS Rolling (branch: rolling)
  • ROS Iron (branch: iron)
  • ROS Humble (branch: humble)
  • ROS Foxy (branch: foxy)
  • ROS Noetic (branch: noetic)

Supported Robots

ModelSupport
Create 1Yes
Create 2 (firmware >= 3.2.6)Yes
Roomba Original SeriesNo
Roomba 400 SeriesYes
Roomba 500 SeriesYes *
Roomba 600 SeriesYes *
Roomba 700 SeriesYes +
Roomba 800 SeriesYes +
Roomba 900 SeriesNo *

+ 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.

Features

FeatureStatus
OdometryAvailable
Safe modePlanned #13
Clean demoPlanned #14
Dock demoAvailable
Drive wheelsN/A
Drive (v,w)Available
Brush motorsAvailable
LEDsAvailable
Digit LEDsAvailable
SoundAvailable
WheeldropAvailable
BumpersAvailable
Cliff sensorAvailable
Dirt detectN/A
Omni IR sensorAvailable
Left IR sensorN/A
Right IR sensorN/A
Battery infoAvailable
Light sensorsAvailable
Diagnostics
Corrupt packetsAvailable
Overcurrent infoN/A

Install

Prerequisites

  • Internet connection
  • ROS 2
  • Ubuntu packages: python3-rosdep, python3-colcon-common-extensions
$ sudo apt install python3-rosdep python3-colcon-common-extensions

Compiling

  1. Create a colcon workspace

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

    $ cd~/create_ws/src
    $ git clone https://github.com/autonomylab/create_robot.git
    $ git clone https://github.com/AutonomyLab/libcreate.git
  3. Install dependencies

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

    $ cd~/create_ws
    $ colcon 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

Setup

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

    $ source~/create_ws/install/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):

$ 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.launch

Launch file arguments

  • config - Absolute path to a configuration file (YAML). Default: create_bringup/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:

$ ros2 launch create_bringup create_2.launch config:=/abs/path/to/config.yaml desc:=false

Parameters

NameDescriptionDefault
devDevice path of robot/dev/ttyUSB0
base_frameThe robot's base frame IDbase_footprint
odom_frameThe robot's odometry frame IDodom
latch_cmd_durationIf this many seconds passes without receiving a velocity command the robot stops0.2
loop_hzFrequency of internal update loop10.0
publish_tfPublish the transform from odom_frame to base_frametrue
robot_modelThe type of robot being controlled (supported values: ROOMBA_400, CREATE_1 and CREATE_2)CREATE_2
baudSerial baud rateInferred based on robot model, but is overwritten upon providing a value
oi_mode_workaroundSome Roomba models incorrectly report the current OI mode in their sensor streams. Setting this to true will cause libcreate to decrement the OI mode received in the sensor stream by 1false

Publishers

TopicDescriptionType
battery/capacityThe estimated charge capacity of the robot's battery (Ah)std_msgs/msg/Float32
battery/chargeThe current charge of the robot's battery (Ah)std_msgs/msg/Float32
battery/charge_ratioCharge / capacitystd_msgs/msg/Float32
battery/charging_stateThe chargins state of the batterycreate_msgs/msg/ChargingState
battery/currentCurrent flowing through the robot's battery (A). Positive current implies chargingstd_msgs/msg/Float32
battery/temperatureThe temperature of the robot's battery (degrees Celsius)std_msgs/msg/Int16
battery/voltageVoltage of the robot's battery (V)std_msgs/msg/Float32
bumperBumper state message (including light sensors on bumpers)create_msgs/msg/Bumper
cliffCliff state messagecreate_msgs/msg/Cliff
clean_button'clean' button is pressed ('play' button for Create 1)std_msgs/msg/Empty
day_button'day' button is pressedstd_msgs/msg/Empty
hour_button'hour' button is pressedstd_msgs/msg/Empty
minute_button'minute' button is pressedstd_msgs/msg/Empty
dock_button'dock' button is pressed ('advance' button for Create 1)std_msgs/msg/Empty
spot_button'spot' button is pressedstd_msgs/msg/Empty
ir_omniThe IR character currently being read by the omnidirectional receiver. Value 0 means no character is being receivedstd_msgs/msg/UInt16
joint_statesThe states (position, velocity) of the drive wheel jointssensor_msgs/msg/JointState
modeThe current mode of the robot (See OI Spec for details)create_msgs/msg/Mode
odomRobot odometry according to wheel encodersnav_msgs/msg/Odometry
wheeldropAt least one of the drive wheels has droppedstd_msgs/msg/Empty
/tfThe transform from the odom frame to base_footprint. Only if the parameter publish_tf is truetf2_msgs/msg/TFMessage
diagnosticsInfo about the battery charge, wheeldrop/cliff state, robot mode, and serial connectiondiagnostic_msgs/msg/DiagnosticArray

Subscribers

TopicDescriptionType
cmd_velDrives the robot's wheels according to a forward and angular velocitygeometry_msgs/msg/Twist
debris_ledEnable / disable the blue 'debris' LEDstd_msgs/msg/Bool
spot_ledEnable / disable the 'spot' LEDstd_msgs/msg/Bool
dock_ledEnable / disable the 'dock' LEDstd_msgs/msg/Bool
check_ledEnable / disable the 'check robot` LEDstd_msgs/msg/Bool
power_ledSet 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/msg/UInt8MultiArray
set_asciiSets the 4 digit LEDs. Accepts 1 to 4 bytes, each representing an ASCII character to be displayed from left to rightstd_msgs/msg/UInt8MultiArray
dockActivates the demo docking behaviour. Robot enters Passive mode meaning the user loses control (See OI Spec)std_msgs/msg/Empty
undockSwitches robot to Full mode giving control back to the userstd_msgs/msg/Empty
define_songDefine 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)create_msgs/msg/DefineSong
play_songPlay a predefined songcreate_msgs/msg/PlaySong

Commanding your Create

You can move the robot around by sending geometry_msgs/msg/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

Teleoperation

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

$ ros2 launch create_bringup 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.

Contributions

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

Contributors

Releases

Packages

Used by

Contributors

Languages