ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

roomba 531 imu data (map building & navigation)

asked 2011-09-22 03:56:39 -0600

rimesime gravatar image

updated 2011-09-22 03:58:16 -0600


I have a roomba 531 and a kinect. I would like to use the navigation stack to build a map and navigate in that map afterwards.

I am currently using the roomba560_node to drive my robot. In the TurtleBot tutorials the turtlebot_node is used which publishes imu data. The roomba560_node, as I understand, does not. Does the roomba 531 have an imu, and is it supported somewhere?

I tried to build a map without using robot_pose_ekf, only using the odom from roomba560_node. I had to publish a static transform odom->base_link. But the map was not usable at all. Do I require an imu to build a map?

Am I missing important components?

Many thanks in advance!

edit retag flag offensive close merge delete


It seems i misunderstood the configuration needed for the nav stack to run. For a correct localization with odometry data, the relation between odom and base_footprint has to be published properly. Now I subscribe to odometry msgs and publish a tf between both frames with x,y,th from these msgs.
rimesime gravatar image rimesime  ( 2011-09-25 00:29:30 -0600 )edit

@rimesime So just out of curiosity, were you able to create a good-enough map only without adding extra sensors?

130s gravatar image 130s  ( 2012-04-18 07:58:09 -0600 )edit

2 Answers

Sort by » oldest newest most voted

answered 2011-09-22 22:15:37 -0600

The Roomba 531 does not have an IMU inside.

You can calibrate the Roomba to improve your odometry. You'll find a define for ROOMBA_PULSES_TO_M in the OpenInterface.h file inside the include folder in the roomba_500_series pkg. You can also tweak ROOMBA_AXLE_LENGTH on the same file which will also influence your odometry.

Still your odometry would greatly improve should you purchase an IMU. As noted earlier the IMU used by the Create cannot be directly connected to the Roomba, you would need to use something like an Arduino to read the values and send them to the host computer. This would also mean a pkg should be created to receive the data in ROS.

Hope this helps!

edit flag offensive delete link more


Could I use an android device (for example galaxy s2) attached to the roomba to publish its gyroscope data? Would that be sufficient to actually improve odometry?
rimesime gravatar image rimesime  ( 2011-09-23 20:28:19 -0600 )edit
I guess using any gyro would help, I don't see any reason for an android device with a gyro not to work, however I'm guessing with all the work involved it would be easier to purchase a analog or I2C/SPI gyro and connect it to an Arduino.
Gonçalo Cabrita gravatar image Gonçalo Cabrita  ( 2011-11-07 21:30:03 -0600 )edit

answered 2011-09-22 05:59:51 -0600

updated 2011-09-23 03:59:14 -0600

The turtlebot uses an external IMU (really its just a gyro), described here. It's used to help correct for rotational errors in the Create's odometry (which are quite bad). So that really depends on how poor the 531's rotational component of its odometry is. You should be able to characterize the error by marking a known position on the floor and commanding your roomba to start and end at that marking through the cmd_vel topic and observing on the odom topic where the roomba thinks it is.

The Create has an ADC onboard to convert the analog signal from the ADXRS613 rate gyro (IMU) used on the turtlebot into a digital signal read from inside the turtlebot_node driver. I'm assuming that the 531 does not have an ADC, so you'd need to buy an off the shelf IMU instead of going through an ADC with a ADXRS613 (unless you felt ambitious and had a arduino handy). Once you had something publishing imu data, you'd then use robot_pose_ekf much in the same way that turtelbot does.

edit flag offensive delete link more

Question Tools


Asked: 2011-09-22 03:56:39 -0600

Seen: 1,094 times

Last updated: Sep 23 '11