Blog‎ > ‎Miscellaneous‎ > ‎

Introduction to ROS In 2 Minutes

What is ROS?

The robotics community has made stirring progress in recent years. Reliable and inexpensive robot hardware from terrestrial mobile robots, to unmanned aerial vehicles, to humanoids is more widely available than ever before. Perhaps even more impressively, the community has also developed algorithms that help those robots run with increasing levels of autonomy. Despite this rapid progress, robots do still present some significant challenges for software developers. In this post,we talk about a software platform called Robot Operating System, or ROS, one that is intended to ease out some of these difficulties. By its formal description:

            “ROS is an open-source, meta-operating system for your robot. It provides the services you would expect from an operating system, including hardware abstraction, low-level device control, implementation of commonly-used functionality, message-passing between processes, and package management. It also provides tools and libraries for obtaining, building, writing, and running code across multiple computers.”

How does ROS help?
ROS offers the following functionalities to the developer:

  1. Code Reusability

  1. Language Independence: Implementation in C++, Python and Lisp, concurrently.

  1. Scalability: ROS is appropriate for systems with large runtime and complex development processes.

  1. Subsystem decoupling: Critical systems can be made independent from other processes.

The primary objective of ROS is to support code reuse in robotics research and development, for which it incorporates a packaging architecture. Again, remember that ROS is not an Operating System as the name may mislead, but just a framework supported by the concepts of an OS.

It provides functionality for hardware abstraction, device drivers, communication between process threads over multiple machines, tools for testing and visualization, and much more.

Okay, but still, why ROS?

Here's some more reasons why you should seriously consider using ROS for your next project :

  • Resourceful packages

ROS comes with ready to implement packages for various algorithms and tasks, like SLAM (Simultaneous Localization and Mapping) and AMCL (Adaptive Monte Carlo Localization) which can be used for performing autonomous navigation in mobile robots and the MoveIt package for motion planning of robot manipulators. Plus, these capabilities are in their best form of implementation, so ROS let's you avoid reinventing the wheel for your use-case.

  • Visualization tools

ROS has plenty of tools for debugging, visualizing, and performing simulation. The tools such as rqt gui, RViz and Gazebo are some of the strongest open source tools for debugging, visualization, and simulation. Only a few frameworks with such plethora of tools exist.

  • Support for high-end sensors and actuators

ROS is packed with device drivers and interface packages of various sensors and actuators in robotics. The high-end sensors include LIDARs, Laser scanners, depth cameras (like the Microsoft Kinect, Asus Xtion etc.), and actuators such as Dynamixel servos.

  • Inter-platform operability

The ROS communication architecture allows information exchange between different nodes. These nodes can be programmed in any language that supports ROS client libraries. We can write high performance nodes in C++ or C and other nodes in Python or Java. This kind of flexibility is rare in other frameworks.

  • Modularity

One of the issues that can occur in most of the standalone robotic applications is that if any of the threads of main code goes down, the entire robot functioning may halt or misbehave. ROS comes handy in such situations since we are running separate nodes for each process and even if one node crashes, the entire system won’t.

  • Concurrent resource handling

Handling a hardware resource by more than two processes is always a problem. Imagine we want to process an image from a camera for face detection and motion detection, we can either write the code as a single entity that can do both, or we can write a multi-threaded code for concurrency. If we want to add more than two features in threads, the application behavior will get complex and will be difficult to debug. But in ROS, we can access the device parameters using ROS topics from the ROS drivers. Any number of ROS nodes can subscribe to the image message from the ROS camera driver and each node can perform different functionalities, thus reducing complexity.

  • Active community

When we choose a library or software framework, especially from an open source community, one of the main factors that needs to be checked before using it is its support and developer community. Some tools provide good support and some tools don’t. In case of ROS, the developer community is active.

So that's it for today, folks. We'll probably take a deeper dive into the internal structure and working of ROS packages in another post. But for all those pumped-up eager souls who can't wait to get started with this handy framework, check out the links below:

  • Setup and get started with learning how to use ROS here : ROS Wiki

-Awadhut Thube