Getting started with ROS
ROS is an open source, flexible software framework for programming robots. ROS provides a hardware abstraction layer, in which developers can build robotics applications without worrying about the underlying hardware. ROS also provides different software tools to visualize and debug robot data. The core of the ROS framework is a message-passing middleware in which processes can communicate and exchange data with each other even when running from different machines. ROS message passing can be synchronous or asynchronous.
Software in ROS is organized as packages, and it offers good modularity and reusability. Using the ROS message-passing middleware and hardware abstraction layer, developers can create tons of robotic capabilities, such as mapping and navigation (in mobile robots). Almost all capabilities in ROS will be robot agnostic so that all kinds of robots can use it. New robots can directly use this capability package without modifying any code inside the package.
ROS has widespread collaborations in universities, and lots of developers contribute to it. We can say that ROS is a community-driven project supported by developers worldwide. The active developer ecosystem distinguishes ROS from other robotic frameworks.
In short, ROS is the combination of Plumbing (or communication), Tools, Capabilities and Ecosystem. These capabilities are demonstrated in the following figure:
Figure 1: The ROS equation
The ROS project was started in 2007 in Stanford University under the name Switchyard. Later on, in 2008, the development was undertaken by a robotic research start-up called Willow Garage. The major development in ROS happened in Willow Garage. In 2013, the Willow Garage researchers formed the Open Source Robotics Foundation (OSRF). ROS is actively maintained by OSRF now.
Here are links to their websites:
- Willow Garage: http://www.willowgarage.com/
- OSRF: http://www.osrfoundation.org/
ROS distributions
The ROS distributions are very similar to Linux distributions, that is, a versioned set of ROS packages. Each distribution maintains a stable set of core packages up to the end of life (EOL) of the distribution.
The ROS distributions are fully compatible with Ubuntu, and most of the ROS distributions are planned according to the respective Ubuntu versions.
Given here are some of latest ROS distributions recommended for use from the ROS website (http://wiki.ros.org/Distributions):
Figure 2: Latest ROS distributions
The latest ROS distribution is Kinect Kame. We will get support for this distribution up to May 2021. One of the problems with this latest ROS distribution is that most of the packages will not be available on it because it will take time to migrate them from the previous distribution. If you are looking for a stable distribution, you can go for ROS Indigo Igloo, because the distribution started in 2015, and most of the packages are available on this distribution. The ROS Jade Turtle distribution will stop being supported on May 2017, so I do not recommend you use it.
Supported operating systems
The main operating system ROS is tuned for is Ubuntu. ROS distributions are planned according to Ubuntu releases. Other than Ubuntu, it is partially supported by Ubuntu ARM, Debian, Gentoo, Mac OS X, Arch Linux, Android, Windows, and Open Embedded:
Figure 3: OSes supporting ROS
This table shows new ROS distributions and the specific versions of the supporting OSes:
ROS Indigo and Kinetic are long-term support (LTS) distributions, coming with the LTS version of Ubuntu. The advantage of using LTS distribution is that we will get maximum lifespan and support.
Robots and sensors supported by ROS
The ROS framework is one of the successful robotics frameworks, and universities around the globe contribute to it. Because of the active ecosystem and open source nature, ROS is being used in a majority of robots and is compatible with major robotic hardware and software. Here are some of the famous robots completely running on ROS:
Figure 4: Popular robots supported by ROS
The names of the robots listed in the images are Pepper (a), REEM-C (b), TurtleBot (c), Robonaut (d), Universal Robots (e).
The robots supported by ROS are listed at the following link:
The following are links to get ROS packages of robots from:
- Pepper: http://wiki.ros.org/Robots/Pepper
- REEM-C: http://wiki.ros.org/Robots/Robonaut2
- TurtleBot 2: http://wiki.ros.org/Robots/TurtleBot
- Robonaut: http://wiki.ros.org/Robots/Robonaut2
- Universal Robotic arms: http://wiki.ros.org/universal_robot
Some popular sensors supporting ROS are as follows:
Figure 5: Popular robot sensors supported in ROS
The names of the sensors listed in the image are Velodyne (a), ZED Camera (b), Teraranger (c), Xsens (d), Hokuyo Laser range finder (e), and Intel RealSense (f).
The list of sensors supported by ROS is available at the following link:
These are the links to the ROS wiki pages of these sensors:
- Velodyne(a): http://wiki.ros.org/Velodyne
- ZED Camera(b):http://wiki.ros.org/zed-ros-wrapper
- Teraranger(c): http://wiki.ros.org/terarangerone
- Xsens(d): http://wiki.ros.org/terarangerone
- Hokuyo Laser range finder(e): http://wiki.ros.org/hokuyo_node
- Intel real sense(f): http://wiki.ros.org/realsense_camera
Why ROS
The main intention behind building the ROS framework is to become a generic software framework for robots. Even though there was robotics research happening before ROS, most of the software was exclusive to their own robots. Their software may be open source, but it is very difficult to reuse.
Compared to existing robotic frameworks, ROS is outperforming in the following aspects:
- Collaborative development: As we discussed, ROS is open source and free to use for industries and research. Developers can expand the functionalities of ROS by adding packages. Almost all the packages of ROS work on a hardware abstraction layer, so it can be reused easily for other robots. So if one university is good in mobile navigation and other in robotic manipulators, they can contribute that to the ROS community and other developers can reuse their packages and build new applications.
- Language support: The ROS communication framework can be easily implemented in any modern language. It already supports popular languages such as C++, Python, and Lisp, and it has experimental libraries for Java and Lua.
- Library integration: ROS has an interface to many third-party robotics libraries, such as Open Source Computer Vision (Open-CV), Point Cloud Library (PCL), Open-NI, Open-Rave, and Orocos. Developers can work with any of these libraries without much hassle.
- Simulator integration: ROS also has ties to open source simulators such as Gazebo and has a good interface with proprietary simulators such as Webots and V-REP.
- Code testing: ROS offers an inbuilt testing framework called rostest to check code quality and bugs.
- Scalability: The ROS framework is designed to be scalable. We can perform heavy computation tasks with robots using ROS, which can either be placed on the cloud or on heterogeneous clusters.
- Customizability: As we have discussed, ROS is completely open source and free, so one can customize this framework as per the robot's requirement. If we only want to work with the ROS messaging platform, we can remove all the other components and use only that. One can even customize ROS for a specific robot for better performance.
- Community: ROS is a community-driven project, and it is mainly led by OSRF. The large community support is a great plus for ROS, and one can easily start robotics application development.
Given here are the URLs of libraries and simulators integrated with ROS:
- Open-CV: http://wiki.ros.org/vision_opencv
- PCL:http://wiki.ros.org/pcl_ros
- Open-NI: http://wiki.ros.org/openni_launch
- Open-Rave: http://openrave.org/
- Orocos: http://www.orocos.org/
- Webots: https://www.cyberbotics.com/overview
- V-REP: http://www.coppeliarobotics.com/
Let's go through some of the basic concepts of ROS; they can help you get started with ROS projects.