ROS stands for Robot Operating System. It has been designed and implemented to help developers when it comes to complex robotics projects. However, with its flexibility, more and more projects unlinked to robotics use it.
It offers plenty of implementation facilities, such as :
Based on CMake, this build system eases the development of nodes.
With Catkin and its build system, using existing packages is simple and intuitive.
A tool that help the management and interactions between several coordinates systems in 3D spaces. Especially useful with robots so that their position is always known in the space without much implementation work by the developer.
A graphical tool to visualize pointclouds, camera images, coordinates systems, robots in 3D space, …
A tool to record metrics from sensors, store them, and play them later again. Very useful to acquire data from production sites and reuse it again in a debug environment.
When it comes to list its advantages, ROS has a long list of pros :
Decoupling : it is simple to divide a complex system in small tasks and make them interacting together.
Ease of implementation : ROS supports many languages, such as C++, Python, but also Lua, and others. All these nodes can interact together through their API, ROSCPP, ROSPY, ROSLUA, …
Reliability : it is possible to detect and restart nodes that would have crashed.
Flexibilitx : with its launching tool, roslaunch, it is easy to start only part of the system, combine nodes together, incorporate debug data in the process, …
Deployment : the system can be deployed on many computers, so that the computing power is increased. This is very helpful when sensors requires a close computer to edge process their data, but also need to interact with another computer on the same subnet.
On the other side, it has some disadvantages :
Learning time and documentation : the time to be confident with ROS is significant, and the documentation lacks of precision when it comes to advanced processes and one has to look quite low in the source code to find some explanations.
Diversity : ROS comes in a multitude of versions, which leads to compatibility problems between packages.
Portability : ROS is currently available only for Linux distributions, but a Windows version is coming (not sure whether that’s a pro or not though ;-))