Research Tutorial

How to use irobot create in gazebo with ROS hydro?

I’ve not been able to find any clear examples on how to achieve a simple simulation which involves moving a virtual model of an iRobot Create/Roomba in Gazebo using ROS Hydro. Hence this tutorial.  I’m starting with the very basics, so please bear with me.

Steps :

1. Follow the ROS instruction guidelines for Hydro [follow]
2. Setup your catkin workspace (again instructions in ROS wiki)
3. Download and install standalone gazebo. Instructions here for the ROS compatible version 1.9
4. Start here for tutorials on working with ROS and Gazebo. Complete all the tutorials
5. Download the IRobot Create SDF from the online repo. It is possible to download the entire library of models from
6. Put the “create” folder from the downloaded models into your ~/catkin_ws/src/ directory
7. Insert the differential drive plugin into the model-1_4.sdf file. Some changes had to be made to suit the create sdf. The plugin info can be found in the gazeo ros integration tutorials at I am unable to paste the modified xml markup or attach it. So email me at [email protected] for the file.

Assuming you completed all the steps above, here are the instructions to control the icreate with velocity commands from terminal:

1. From the terminal launch roscore. $roscore
2. Launch gazebo with an empty world. $roslaunch gazebo_ros empty_world.launch
3. In another terminal, spawn the create into the gazebo instance. Change directory to your create model. Then: $rosrun gazebo_ros spawn_model -file ~/catkin_ws/src/create/model-1_4.sdf -sdf -model create
4. Then send commands to make the robot move. $rostopic pub /cmd_vel geometry_msgs/Twist — ‘[1.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1]’

To send motion commands to the Create from code, write a publisher that advertises a geometry_msgs::Twist message with the velocity commands to “/cmd_vel” topic.
Instructions on writing a publisher are here:

#include “ros/ros.h”
#include <math.h>
#include “geometry_msgs/Twist.h”
#include “std_msgs/String.h”

* This tutorial demonstrates simple sending of velocity commands to the IRobot Create in Gazebo.
int main(int argc, char **argv)

ros::init(argc, argv, “CreateController”);

ros::NodeHandle n;

ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>(“/cmd_vel”, 1);

ros::Rate loop_rate(5);

int count = 0;

while (ros::ok())
geometry_msgs::Twist cmd_vel;

cmd_vel.linear.x = 0.5;
cmd_vel.linear.y = 0;
cmd_vel.linear.z = 0;
cmd_vel.angular.x = 0;
cmd_vel.angular.y = 0;
cmd_vel.angular.z = 0.4*sin(count);





return 0;


Recommended Articles