PDA

View Full Version : Experience with iRobot Create and ROS?



Pi Robot
02-17-2011, 10:17 AM
I am continually tempted to pick up an iRobot Create to play with in ROS and I know Fergs has extensive experience in this regard. Some of the reasons I'm interested in the Create are:


it is self-charging
appears to have a decent platform to mount additional hardware
can power a Kinect with the appropriate hack
has lots of existing support in ROS (e.g. http://www.ros.org/wiki/prairiedog)
I already have a Hokuyo LIDAR so I don't need the one on the Neato

Some of the concerns I have are:


How reliable are the encoders and are they good enough for SLAM in ROS. For example, I found this on the Society of Robots (http://www.societyofrobots.com/robot_iRobot_Create_mod.shtml) site:
"The Create does have high resolution encoders (http://www.societyofrobots.com/sensors_encoder.shtml), but I'm not sure what the resolution is because its not in any of the manuals (http://www.irobot.com/sp.cfm?pageid=294). Yet despite the high-resolution encoders, they are still inaccurate. I'm not sure if its dust or what, but the counts were constantly skipping. I wouldn't rely on the encoder at all."
How long does the battery last if running the motors more or less continuously *and* powering the Kinect?
Can you keep a standby battery on hand using an external charger?
Since most people don't have a LIDAR already, does it make better sense to buy a Neato at $400 instead of a self-charging Create (Development package) at $300?

Any thoughts?

--patrick

lnxfergy
02-17-2011, 10:27 AM
I am continually tempted to pick up an iRobot Create to play with in ROS and I know Fergs has extensive experience in this regard. Some of the reasons I'm interested in the Create are:


it is self-charging
appears to have a decent platform to mount additional hardware
can power a Kinect with the appropriate hack
has lots of existing support in ROS (e.g. http://www.ros.org/wiki/prairiedog)
I already have a Hokuyo LIDAR so I don't need the one on the Neato



We love our Creates here at Albany (currently have 6). The support a ridiculous payload and can run for a very long time (even when powering a Kinect). We actually use the brown drivers (http://www.ros.org/wiki/irobot_create_2_1) although WG is working on another set of drivers that have diagnostics, a dashboard, etc for their turtlebot (http://www.ros.org/wiki/create_robot).

I'm not sure to what extent you can use the self charging -- I believe it is actually a demo mode that can be run from within ROS (return to base), but I haven't actually tried it out yet.




Some of the concerns I have are:


How reliable are the encoders and are they good enough for SLAM in ROS. For example, I found this on the Society of Robots (http://www.societyofrobots.com/robot_iRobot_Create_mod.shtml) site:
"The Create does have high resolution encoders (http://www.societyofrobots.com/sensors_encoder.shtml), but I'm not sure what the resolution is because its not in any of the manuals (http://www.irobot.com/sp.cfm?pageid=294). Yet despite the high-resolution encoders, they are still inaccurate. I'm not sure if its dust or what, but the counts were constantly skipping. I wouldn't rely on the encoder at all."
How long does the battery last if running the motors more or less continuously *and* powering the Kinect?
Can you keep a standby battery on hand using an external charger?
Since most people don't have a LIDAR already, does it make better sense to buy a Neato at $400 instead of a self-charging Create (Development package) at $300?

Any thoughts?

--patrick

I have successfully built maps using the Hokuyo and a Create -- and that is here in our featureless, oversized hallways (so maps should be much better in an apartment/home setting). You should get quite a bit of runtime even with the Kinect, I didn't exactly measure, but I think I had it running for upwards of 3hrs with the kinect and a moderate amount of driving.

As for the Neato -- I'm not sure how easily you can tie into the self charging to get it to return to base (since it's not running its own mapping when we are controlling it with ROS, afaik).

-Fergs

Pi Robot
02-17-2011, 11:17 AM
Many thanks Fergs. This is extremely helpful. One followup question: What do you think of using a Roomba (e.g. http://www.ros.org/wiki/Robots/Roomba) instead of the Create? Then at least you get a vacuum cleaner at the same time.

--patrick

lnxfergy
02-17-2011, 10:48 PM
Many thanks Fergs. This is extremely helpful. One followup question: What do you think of using a Roomba (e.g. http://www.ros.org/wiki/Robots/Roomba) instead of the Create? Then at least you get a vacuum cleaner at the same time.

--patrick

I've not used a roomba -- but after using the Neato, I really appreciate the convenient mounting holes found on the cargo bay of the Create.

-Fergs

kwc
02-18-2011, 12:05 AM
The newest Roomba has much better encoders than the Create, but, as Fergs says, it's harder to build on top of. Plus, the Create is *cheap*.

Pi Robot
02-18-2011, 09:03 AM
Thanks guys--Create it is then. I definitely plan to build on top of it so the mounting holes are highly valued. And I guess that little cargo bay could come in handy for coiling cables or putting a small controller board.

A couple of final questions:


Is the command module necessary or useful to use the Create with ROS?
Has anyone used the Bluetooth wireless module (http://store.irobot.com/product/index.jsp?productId=2649971&cp=&sr=1&kw=wireless&origkw=wireless&parentPage=search)? The iRobot web page says it plugs into the Create's "expansion port" but the Owners Manual does not describe such a port anywhere. There are DB9 expansion ports on the Command Module but these are the wrong type to connect to the Bluetooth module.

Thanks!
patrick

lnxfergy
02-18-2011, 09:18 AM
Is the command module necessary or useful to use the Create with ROS?

Nope -- all you'll need that isn't included in the box is a DB9 serial-> USB adapter (about $10 from many online sources)


Has anyone used the Bluetooth wireless module (http://store.irobot.com/product/index.jsp?productId=2649971&cp=&sr=1&kw=wireless&origkw=wireless&parentPage=search)? The iRobot web page says it plugs into the Create's "expansion port" but the Owners Manual does not describe such a port anywhere. There are DB9 expansion ports on the Command Module but these are the wrong type to connect to the Bluetooth module.Thanks!

There is a DB25 expansion port in the cargo bay (to which the command module plugs into, you can't use both a command module and a BAM at the same time) -- that's what they are referring to. (there are some pictures for reference here: http://www.ros.org/wiki/trike).

That said, I've used the BAM module before in a workshop with iRobot, and was not impressed -- it had a LOT of lag. Toss a netbook on the bot with a direct USB connection, and you've got a lot more responsiveness.

-Fergs

Pi Robot
02-18-2011, 09:29 AM
Thanks Fergs. I have 3 or 4 DB9 to USB cables (don't know why I have so many) so I'm good to go there. And since I was going to slide a laptop onto it anyway I'll forego the BAM module.

--patrick

DaveC
02-18-2011, 06:38 PM
As for the Neato -- I'm not sure how easily you can tie into the self charging to get it to return to base (since it's not running its own mapping when we are controlling it with ROS, afaik).

-Fergs

Yes, I'm pretty sure in test mode the XV11 software is totally lobotomized.

The XV11 charging base seems to have some kind of "mechanical bar code" behind an infra-red transparent panel. I think they are scanning for a recognizable picket fence pattern to steer into the charging base. That makes me think it would be interesting to build some fiducials that way.

-dave

Pi Robot
02-19-2011, 07:54 AM
Thanks Dave--I'm really hoping to have the robot self-charge as part of its normal ROS-controlled behavior so that is good to know. Also, it would be nice to use the platform chosen by Willow Garage for their turtlebot so I have ordered a Create and we'll see how it goes!

--patrick

DaveC
02-19-2011, 01:31 PM
The Create has an IR beacon sensor on it that you can get to. Basically, just two detectors on either side of an optical baffle. It's been a while since I looked at the Create stuff, but I'm pretty sure you can read it with the serial protocol. Their charger base has an IR beacon that the Create seeks -- exactly like Camp's Springy-Thingy grab toy.

Pi Robot
02-23-2011, 04:58 PM
We love our Creates here at Albany (currently have 6). The support a ridiculous payload and can run for a very long time (even when powering a Kinect). We actually use the brown drivers (http://www.ros.org/wiki/irobot_create_2_1) although WG is working on another set of drivers that have diagnostics, a dashboard, etc for their turtlebot (http://www.ros.org/wiki/create_robot).
-Fergs

Hey Fergs,

So I just got my Create and fired up the Brown ROS node and presto! I can move the bot, change the color of the LEDs etc. However, how do I turn off the annoying "Star Wars" sounds it makes when it moves???

--patrick

lnxfergy
02-23-2011, 05:06 PM
Hey Fergs,

So I just got my Create and fired up the Brown ROS node and presto! I can move the bot, change the color of the LEDs etc. However, how do I turn off the annoying "Star Wars" sounds it makes when it moves???

--patrick

Stars wars noise? There is a really annoying beeping sound at startup when you initially connect (I haven't explored how to kill that) -- but once you've connected, you shouldn't have any sound. Are you referring to the sound of the motors running (it's a bit loud).

-Fergs

Pi Robot
02-23-2011, 05:17 PM
Holy cow--those are noisy motors! So much for using the Create as a surveillance robot...

--p

lnxfergy
02-23-2011, 05:21 PM
Holy cow--those are noisy motors! So much for using the Create as a surveillance robot...

--p

Interestingly, none of us brought up noise in our evaluations above.......

-Fergs

Pi Robot
02-23-2011, 05:32 PM
I'll have to compare it side by side with Pi Robot tonight on my regular carpeted testing area (a.k.a. the living room). Right now I'm in an office with laminated (fake wood?) floors. I was just expecting something quieter compared to our old Roomba since the Create doesn't have a vacuum cleaner running inside and it is much newer.

--patrick

Pi Robot
02-24-2011, 01:38 PM
So the good news that the motor noise is not quite so loud in a carpeted room, though it still caused the cats to scatter (I'm not kidding, and they have spent their whole lives around robots). Also, it seems to be worse at very slow speeds--the "screeching" pretty much goes away above speeds of 200 or so (using the units of the Brown ROS package).

--patrick

Pi Robot
03-10-2011, 10:04 AM
I have successfully built maps using the Hokuyo and a Create -- and that is here in our featureless, oversized hallways (so maps should be much better in an apartment/home setting). You should get quite a bit of runtime even with the Kinect, I didn't exactly measure, but I think I had it running for upwards of 3hrs with the kinect and a moderate amount of driving.
-Fergs

Hey Fergs,

So I have my Create spinning around the living room with a Hokuyo laser and using gmapping, move_base, etc (launch file below) and I am not getting very good mapping info. Basically, I'm not getting a map at all because the occupancy grid keeps jumping all over the place. Do you have any hints on move_base parameters you had to set for the Create to get decent maps? Also, I seem to have forgotten whether or not I have to run the fake_localization node with gmapping. It doesn't seem to make much difference anyway.

Here is my launch file:



<launch>
<!-- Make sure simulated time is off -->
<param name="/use_sim_time" value="False" />

<!-- Load the robot model -->
<param name="robot_description" command="$(find xacro)/xacro.py '$(find pi_k
inectbot)/urdf/kinectbot.urdf.xacro'" />

<!-- Use the joint state publisher and robot state publisher so we can see t
he robot in RViz. -->
<param name="/use_gui" value="False" />
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_s
tate_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_p
ublisher" />

<!-- Run the map server with a blank map -->
<node name="map_server" pkg="map_server" type="map_server" args="$(find pi_r
obot)/maps/blank_map.yaml"/>

<!-- Run the Hokuyo laser scanner node -->
<node name="hokuyo" pkg="hokuyo_node" type="hokuyo_node">
<remap from="scan" to="base_scan" />
<param name="min_ang" value="-2.0943" />
<param name="hokuyo_node/calibrate_time" value="true" />
<param name="frame_id" value="base_laser" />
</node>

<!-- Launch move_base and load all the costmap parameters for use with the b
ase_local_planner -->
<node pkg="move_base" type="move_base" respawn="false" name="move_base" outp
ut="screen">
<rosparam file="$(find pi_kinectbot)/params/costmap_common_params.yaml"
command="load" ns="global_costmap" />
<rosparam file="$(find pi_kinectbot)/params/costmap_common_params.yaml"
command="load" ns="local_costmap" />
<rosparam file="$(find pi_kinectbot)/params/local_costmap_params.yaml" c
ommand="load" />
<rosparam file="$(find pi_kinectbot)/params/global_costmap_params.yaml"
command="load" />
<rosparam file="$(find pi_kinectbot)/params/base_local_planner_params.ya
ml" command="load" />
</node>

<!-- Fire up gmapping -->
<node name="gmapping" pkg="gmapping" type="slam_gmapping" args="scan:=base_sc
an" output="screen">
<param name="linearUpdate" value="0.1" />
<param name="angularUpdate" value="0.05" />
<param name="xmin" value="-20" />
<param name="ymin" value="-20" />
<param name="xmax" value="20" />
<param name="ymax" value="20" />
<param name="maxUrange" value="6" />
</node>
</launch>
And here are my parameter files:

base_local_planner_params.yaml
TrajectoryPlannerROS:
max_vel_x: 0.25
min_vel_x: 0.075
max_rotational_vel: 0.6
min_in_place_rotational_vel: 0.2
acc_lim_th: 5
acc_lim_x: 3
acc_lim_y: 3
yaw_goal_tolerance: 0.4
xy_goal_tolerance: 0.075
controller_frequency: 5.0
holonomic_robot: false
path_distance_bias: 0.8
goal_distance_bias: 0.3
sim_time: 2.0

costmap_common_params.yaml
obstacle_range: 5.0
raytrace_range: 5.0
#footprint: [[-0.19, 0.17], [0.19, 0.17], [0.19, -0.17], [-0.19, -0.17]]
robot_radius: 0.165
fooprint_padding: 0.01
inflation_radius: 0.55
transform_tolerance: 1.0
observation_sources: base_scan
base_scan: {sensor_frame: base_laser, data_type: LaserScan, topic: base_scan, ma
rking: true, clearing: true}

local_costmap_params.yaml
local_costmap:
global_frame: /odom
robot_base_frame: base_link
update_frequency: 5.0
publish_frequency: 2.0
static_map: false
rolling_window: true
width: 4.0
height: 4.0
resolution: 0.05

global_costmap:
global_frame: /map
robot_base_frame: base_link
update_frequency: 5.0
static_map: true
rolling_window: false

Thanks!
patrick

Pi Robot
03-19-2011, 08:14 AM
I've been playing around with my Create with the Kinect hooked up and powered off the DB25 connector. When recharging the Create, I have been disconnecting the DB25 since I don't want to blow up the Kinect or anything else attached to those pins. I read somewhere about circuit breakers that can be attached to the Create's digital pins to protect the connected components. Does anyone know where to get such a beast? (I tried Googling and struck out.) And the more general question is, do I really need to disconnect the DB25 when recharging?

Thanks,
patrick

DaveC
03-20-2011, 10:27 PM
Which pins are you using on the DB25? It's been a long while since I looked at that connector, but IIRC there are some low current 5V regulated output(s) and some raw 14V-or-so battery outputs. How are you driving the kinect?

Pi Robot
03-23-2011, 08:50 AM
Which pins are you using on the DB25? It's been a long while since I looked at that connector, but IIRC there are some low current 5V regulated output(s) and some raw 14V-or-so battery outputs. How are you driving the kinect?

Hi Dave,

I have pins 12 (battery power) and 25 (GND) connected to a 12V regulator to power the Kinect. I also have pins 10 (batter power also) and 14 (GND) connected to a 5V regulator to power a 4 port USB hub. I've attached the pinout for the DB25 from page 10 of the Create's owner's guide which can be found at http://www.irobot.com/filelibrary/create/Create%20Manual_Final.pdf.

The manual talks about attaching sensors, lights, motors, etc. to these pins but not whether or not you can leave then attached while charging.

--patrick

2557

lnxfergy
03-23-2011, 09:34 AM
Patrick, the Create will recharge with external stuff plugged in -- however that stuff will stay on the whole time you're charging. For the 12V linear regulator, this could be a problem (heat buildup could be really bad).

In our lab I've taped over the charge plug on our kinect bot and just swap the battery into another of our Creates to charge.

As for a circuit breaker, I've certainly seen small PCB-mount DC breakers, but they are usually quite expensive -- you might drop Tully an email and see if he has a P/N and vendor for whatever they used on the turtlebot. Alternatively, you could find a small relay that could be switched by one of the digital IO on the Create (watch the current needs for activating the relay coil so you don't pop the Create IO).

-Fergs

Pi Robot
03-23-2011, 10:57 AM
Thanks Fergs,

I'll send Tully an email. In the meantime, I measured the voltage on the DB25 pins when the charger was plugged in and it came to just under 17V. So this could be a little high depending on the kind of voltage regulators being used for the Kinect and/or other peripherals.

--patrick

Pi Robot
04-26-2011, 11:17 PM
I've attached the pinout for the DB25 from page 10 of the Create's owner's guide which can be found at http://www.irobot.com/filelibrary/create/Create%20Manual_Final.pdf.

The manual talks about attaching sensors, lights, motors, etc. to these pins but not whether or not you can leave them attached while charging.


To protect the Kinect and other electronics powered off the Create's DB25, I have prototyped a circuit using a SPDT relay and 12v regulator that seems to work when I attach it to the Create's cargo bay DB25 as long as I toggle the relay using an external 5V battery pack. Now I want to toggle it using one of the Create's digital output pins. I disconnect the 5V battery pack from the relay pins and attach one relay pin to one of the Create's digital outputs. I connect the other relay pin to the common ground for the rest of the circuit (which is the Create's battery ground). When I set the digital pin to ON using the ROS TurtleBot dashboard, I can measure the 5V across the digital pin and ground. However, it does not switch my relay on. Is there some other way I need to connect the digital output pins to the relay? For example, do I have to use a different ground than the Create's battery ground?

Warning: my understanding of electronics is very basic as you can probably tell from my question.

Thanks!
patrick

2557

lnxfergy
04-26-2011, 11:25 PM
Patrick, got a part number on that relay?

Many traditional relays require quite a bit of current (more than a typical digital IO can output) to activate the coil. An SSR (Solid state relay) can often work off much lower current.

-Fergs

Pi Robot
04-26-2011, 11:30 PM
Ah man, that's what I was afraid of...I'm using this relay from Radio Shack (http://www.tycoelectronics.com/catalog/pn/en/8-1419130-3) (OUAZ-SS-105D,900). The Create's digital output pins are rated at 20mA. Is this too little to power the coil? The specs show the coil as having a resistance of 55 ohms which at 5V would be 90mA?

lnxfergy
04-26-2011, 11:42 PM
Yep, that's likely the problem. I don't think radio shack sells anything that can be switched by a 20ma IO (they used to have a very nice small relay that the Mobile Robotics book used... but I haven't seen one in years).

A digikey search (and looking at SSRs) should track down a more suitable part.

-Fergs

Pi Robot
04-26-2011, 11:48 PM
Looks like I might need something like this:

http://parts.digikey.com/1/parts/758080-relay-ssr-3a-60vdc-spst-no-sip-dmo063.html

But the price of this project is starting to add up since I was going to use 3 relays, one for the Kinect, one for the Dynamixels and one for a USB hub. I don't suppose there is anyway I can use the 5V battery pack I know works with the relays, but use the Create's digital IO to somehow switch *that* voltage on and off without using relays (sounds like a bit of a Catch-22...)

--patrick

Pi Robot
04-26-2011, 11:52 PM
Hold on a minute. Check out this one from SparkFun--only $4.95! Would this do the trick?

http://www.sparkfun.com/products/10636

--p

lnxfergy
04-27-2011, 12:03 AM
Hold on a minute. Check out this one from SparkFun--only $4.95! Would this do the trick?

http://www.sparkfun.com/products/10636

--p

I haven't gotten my hands on any of those yet, but that should be perfect... I actually meant to link to it in my earlier response.

-Fergs

Pi Robot
04-27-2011, 07:22 AM
Hold on a minute. Check out this one from SparkFun--only $4.95! Would this do the trick?

http://www.sparkfun.com/products/10636



Trouble--I was reading through the comments for this part and apparently it can switch an AC load only--not DC. :(

--patrick

tician
04-27-2011, 11:10 AM
If you are placing an order to digikey, it may be worth it just to get a switching regulator instead. As long as the input voltage is greater than 14.5V, you could use the PTN78000 (http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=296-20506-ND) providing up to 1.5A at 12V with a built-in inhibit control. (Okay, bad choice in regulator as the battery on the Create is 14.4V. Feel free to delete this post unless you want it as a monument to my stupidity).

You could connect the !INHIBIT pin directly to one of the digital outputs to control when it is in use (high for enabled, low for disabled). Or you could add a discrete mosfet between the !INHIBIT pin and GND, and connect the gate to the charging pin of the Create to auto-disable the Kinect when charging. Or combine both functions with two discrete mosfets in parallel between the !INHIBIT pin and GND, with one gate connected to the digital output and the other connected to the charging pin (it would always disable the Kinect when charging and also allow you to disable it at any other time you wish). (NOTE: when using the discrete mosfets in this fashion, the control signals are inverted: HIGH for disabled and LOW for enabled).

According to the applications in the data sheet, you only need three external components:
- A 732-Ohm 1% resistor between the Adjust pin and ground (there is a bit of leeway in the actual value used as the data sheet gives two different examples with 732 and 734 Ohm resistors, which is a difference less than half the 1% tolerance).
- A 100-uF capacitor between the output and ground. This can be ceramic, electrolytic, or tantalum, it does not matter much as long as the minimum ripple current rating is at least 150mA.
- An minimum of one 2.2-uF (or greater) ceramic capacitor between the input voltage and GND.

Just a thought.

Pi Robot
04-27-2011, 08:03 PM
Hi Tician,

Thanks for the suggestion. I wasn't aware of this kind of switching regulator--one with an INHIBIT function.

--patrick

tician
04-28-2011, 07:21 PM
I have seen a number of linear regulators as well that offer ENABLE/INHIBIT functions, except the digikey search functions do not generally list it as a selectable parameter so it can take some searching through datasheets. You can use the number of regulated outputs, whether they are fixed or variable, and the number of pins of the package to help limit it to the most likely candidates.

Maximum input voltage of at least 20V with 1.25A+ output capacity for <$4.
Possible linear regulators: here (http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=425-2287-5-ND), here (http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=576-1138-ND), here (http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=576-2208-ND), and here (http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=576-2223-ND) (last two are 1.5A and 3A version of same regulator with additional output error flag signals).

Had a little trouble finding any through-hole DC-DC converters that would actually meet the electrical requirements (Vin: 12~20V for 12V output at >=1.25A) for anything less than $30, but here (http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=811-1868-5-ND) is one for $33 that may work (isolated DC-DC). There are a few non-isolated modules for under $30, but they are mostly buck-converters (step-down voltages) with SMD packages, and most do not really specify the dropout voltage (maximum difference required between input and output voltages for it to function) or specify one too large for the 14.4V battery.

Pi Robot
04-29-2011, 08:30 AM
Cool, thanks for all the links. I might just wait for the TurtleBot kit to come out since WG has already figured this out, at least with one breaker connected to the Kinect. But it's good to know the parts might be out there for a DIY version.

--patrick