2 ms·
Re: the "what is ROS?" question asked by many on this thread: Like others have said, ROS includes a serialization protocol with codegen, a pub/sub and RPC mess
by blt 6y ago
Re: the "what is ROS?" question asked by many on this thread:
Like others have said, ROS includes a serialization protocol with codegen, a pub/sub and RPC messaging system with discovery, a build system, a configuration file system, logging system, and a repository of packages using them.
You might ask: why is it popular? One reason: it was started before the current ubiquitous solutions for those things were ubiquitous.
But I think the main reason is: in robotics, we use a lot of semantically complex data like high-dimensional sensor readings, probabilistic models of the world, representations of rotation and angular velocities, etc., and we need to do a lot of things with that data. For example, suppose we use a vision system to identify objects from a camera. We don't just display that information to a user -- it becomes the input to the high level planner, which is its own complex system.
If your object recognition library and your planning library are both pure C++ libraries, then they probably each define their own classes for the datatype "list of (bounding box, object name) pairs". You need to write glue code to use the libraries together.
However, if those libraries are both ROS packages, the idiomatic thing is to publish a package containing only message definitions (like vision_msgs [1]) and have both libraries produce / consume that. This makes it easier to put together complex systems that pass around highly structured data, because you don't have to constantly write glue code to get your libraries to work together.
TL;DR: ROS is popular because it's like a big collection of .proto or .thrift files for complex robotics datatypes that everyone agrees to use in their libraries.
[1] https://index.ros.org/p/vision_msgs https://index.ros.org/p/vision_msgs