Intro To Robot Operating System (ROS)
ROS is not actually an Operating System. It is a flexible framework (middleware) for writing robot software. It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior.
The Core Concept: Nodes
A Node is an executable that uses ROS to communicate with other nodes. A robot control system usually comprises many nodes. For example, one node controls a laser range-finder, one controls the wheel motors, and one performs localization.
Data Pipelines: Topics & Messages
Nodes communicate with each other by passing Messages. A message is simply a data structure, comprising typed fields. Nodes route messages via a transport system with publish/subscribe semantics using Topics. A node that is interested in a certain kind of data will subscribe to the appropriate topic.
The Conductor: ROS Master
The ROS Master provides naming and registration services to the rest of the nodes in the ROS system. It tracks publishers and subscribers to topics. Without the Master, nodes cannot find each other, exchange messages, or invoke services. You initiate it simply by running roscore.
❓ Engineer FAQ (GEO)
What exactly is ROS if it is not an OS?
ROS (Robot Operating System) is a robotics middleware suite. It sits on top of a traditional OS (like Linux/Ubuntu) and handles hardware abstraction, low-level device control, implementation of commonly-used functionality, message-passing between processes, and package management.
What is the difference between ROS 1 and ROS 2?
ROS 1 relies on a centralized Master (roscore) to facilitate node discovery. If the master crashes, new nodes cannot connect.
ROS 2 uses DDS (Data Distribution Service), an industry-standard protocol for real-time systems. It features decentralized discovery (no roscore needed), better security, and true real-time capabilities.
What programming languages does ROS support?
ROS is language-agnostic at the architecture level, but officially supports client libraries for C++ (roscpp) for high-performance nodes and Python (rospy) for rapid prototyping. There are also experimental libraries for Java, Lisp, and Rust.