This first article in the series on open source software for robotic introduces the reader to open source robotics software platforms and focuses on the Robot Operating System (ROS).
Robotics has always lured the young and the old. Visuals of large-scale robotic cranes operating in manufacturing facilities, or futuristic movies in which robots are an integral part of human society, never fail to fire man’s imagination. Robots of fantasy like Terminator, C3P0, R2D2, Wall-E, Rajnikanth’s Robot, and Rosy (the robot maid) have all added to the glamour of this man-made machine.
Of late, there has been a surge in open source robotics software platforms. Of note are Player Project, Robot Operating System (ROS), MORSE (Modular Open Robots Simulation Engine), YARP (Yet Another Robot Platform), MOOS (Mission-Oriented Operating Suite), ORCOS (Open Robot Control Software) and URBI (Universal Real-time Behaviour Interface). Of all these, ROS stands out as the largest integration of such platforms, and allows the user to port in other software and elements from other platforms.
This article will introduce Linux enthusiasts to such platforms, and encourage them to try these out.
The surge in such platforms
The pioneer of the computer revolution, Bill Gates, predicted in 2006 that by the next two decades we will have a “robot in every home”. Gates envisioned that mobile robots and humanoid robots would become part of the urban home and help people in household chores.
In the six years following that remark, some of what Gates prophesised has come true. Vacuum cleaning robots such as Roomba and Scoomba are replacing manual vacuum cleaning; automated wheelchairs for the aid of the disabled have been launched at an experimental level, and robotic assistants like PR2 and Care-O-Bot can do various domestic chores. Robotics has even entered the arena of medicine with state-of-the-art robots like the Da-Vinci and Zeus systems for tele-operated surgeries — and plenty more is being promised in the future.
Every robot is an integration of sleek electronics with versatile software. And various real-life scenarios that may be difficult to realise call for quality simulation. With so much happening in this field of technology, there is a need to set benchmarks in software for the purpose of user friendliness and versatility.
The earliest robotics software with either control or simulation interfaces was usually in two dimensions. Efforts such as Player Project and Kiks (a Matlab plugin) unified the two paradigms; the control interface and the simulation interfaces were merged. Thus, the same code that ran on the robot would also work for the simulation. Similar efforts from Microsoft led to the Microsoft Robotics Developer Studio, which also allowed simulation in three dimensions, and enabled users to design their own robots. However, being a Microsoft product, it never had the opportunity and the reach that open source has.
The route to Robot Operating System (ROS)
ROS was developed by Willow Garage, a consortium of American Universities, in 2007. The motivation was to develop a meta interface for robotics software. ROS embraced open source, and initially forked applications from Player Project and other open source robotic applications. It was stable, easier to install, had good documentation, an easy-to-understand user interface, and behaved more like an operating system.
In the five years of its existence, ROS has had four releases, and has incorporated many interesting open source graphical simulation interfaces and control paradigms. ROS has come to be the tool for many researchers and academics, who have contributed their code to the ROS community. At the time of writing, other than the ROS website, there were other facilities to foster community participation — via forums and meta blogs — very much mimicking the approach of large open source projects such as Ubuntu, Python, Apache, etc.
Brian Gerkey, chief developer of ROS, explains ROS as follows:
ROS = plumbing + tools + capabilities + ecosystem.
Let’s look at each individual component:
- plumbing: ROS provides a publish-subscribe messaging infrastructure designed to support the quick and easy construction of distributed computing systems.
- tools: ROS provides an extensive set of tools to configure, start, introspect, debug, visualise, log, test, and stop distributed computing systems.
- capabilities: ROS provides a broad collection of libraries that implement useful robot functionality, with a focus on mobility, manipulation and perception.
- ecosystem: ROS is supported and improved by a large community, with a strong focus on integration and documentation. ros.org is a one-stop-shop for finding out and learning about the thousands of ROS packages that are available from developers around the world.
ROS is not software but an OS
The installation of ROS can be done online, or by downloading the binaries from their website. As of now, ROS recommends Ubuntu, while other platforms are being tried and tested.
A fun fact is that every ROS release has a tortoise reference (see Figures 1 and 2):
|ROS distribution||Release date|
|Electric Emys||August 30, 2011|
|Diamondback||March 2, 2011|
|C Turtle||August 2, 2011|
|Box Turtle||March 2, 2010|
One of the most striking features of ROS is that it works more like an operating system than an application. All quality simulation and control interfaces employ the client-server architecture; Player Project did that, and ROS has employed much the same. However, the command-line codes in ROS very closely resemble Bash commands. Here are some samples:
|ROS commands||Bash equivalents|
ROS uses nodes that are connected to a master, roscore, which are the clients and server respectively.
Tools for simulation: stage and gazebo
Most of you reading this article will not have access to real robots, and hence simulation will be a nice way to get to know about ROS. Two very popular simulators for 2D and 3D simulations are stage and gazebo, respectively. Both these were part of the Player Project, and were forked and integrated into ROS. Once ROS electric is installed and working on your computer, stage can be installed using the following command:
ROS uses a wrapper,
stageros, which incorporates stage into ROS nodes. The simulations can be run using
roscore (the master) and, in a different terminal window, you can start the stage simulations as follows:
rosrun stage stageros `rospack find stage`/world/willow-erratic.world
That should pop up the screen shown in Figure 3. For a perspective view, click the stage window and press R, and you should be able to see a box-like erratic robot. More details on stage may be found at http://www.ros.org/wiki/stage. Stage is also invaluable in swarm robotics and multi-robot simulations.
An interesting example using stage is plumesim (Figure 9) which can simulate a plume of gas. More details on plumesim can be found at http://www.ros.org/wiki/plumesim/Tutorials. Another recreation is wall-e like model in stage (Figure 10).
Gazebo can be installed in much the same manner, as shown below:
A trial run with an empty world can be done with the following code:
roslaunch gazebo_worlds empty_world.launch
Gazebo provides 3D simulation, and it is more work to design a simulation with it, as compared to working with stage. Also, gazebo demands quality graphical memory, and makes heavy demands on systems resources. More details on gazebo can be found at http://ros.org/wiki/gazebo and http://gazebosim.org/.
Robot models made in Blender or Google SketchUp can easily be imported into gazebo. As an example, have a look at Jeff’s repository, which has a gazebo model (Figure 12) for the Roomba iCreate (Figure 11).
Voila the robots!
Willow Garage introduced ROS into robots designed by their own selves. PR2, the Turtlebot, some of their early releases in Box Turtle and C Turtle had PR2 in the default setting. However, now a host of robots have been using ROS. Nearly all popular commercial robots are using ROS. Academics, entrepreneurs, hobbyists and the industry often come up with their own ROS package for simulation and the controls of that particular robot.
The Turtlebot and Billibot use the Microsoft Kinect, and ROS partially supports the ASUS Xtion. ROS has also developed a package for Android, such that robots can be controlled using only the mobile phone.
Here is a not very comprehensive list of robots using ROS: PR2, Turtlebot, Corobot, Roomba, Care-O-Bot, LEGO Mindstorms, AscTec Pelican/Hummingbird, Shadow Robot and Billibot.
MORSE, YARP, MOOS, ARGoS, etc
Many other platforms and middleware have been developed. ROS has been used in tandem with YARP and MORSE. ARGoS and Swarmanoid are two wonderful software for swarm robotics.
Watch this space for more information on similar platforms and software.
- Bill Gates, “A robot in every home”, in Scientific American, pages 58-65, January 2007
- M Quigley, B Gerkey, K Conley, J Faust, T Foote, J Leibs, E Berger, R Wheeler, and A Y Ng, “ROS: an open source Robot Operating System”, in Proc. Open Source Software workshop of the International Conference on Robotics and Automation (ICRA), 2009.
- R Vaughan, “Massively Multiple Robot Simulations in Stage”, Swarm Intelligence 2 (2-4):189-208, 2008, Springer.
- N Koenig and A Howard, “Design and Use Paradigms for Gazebo, An Open Source Multi-Robot Simulator”, in the IEEE/RSJ International Conference on Intelligent Robots and Systems, 2004
The feature video/image is courtesy of WillowGaragevideo
The author is a member of the faculty with the Department of Mechanical Engineering, Birla Institute of Technology, Mesra, Ranchi. He is a contributor and developer for ROS (Robot Operating System), and his ramblings on mobile robots can be found on his blog.