What is ROS?
ROS (Robot Operating System) is a framework designed for building robotic systems. It is not an actual operating system in the traditional sense, but rather a meta-operating system that runs on top of a host operating system (such as Linux).
It provides a middleware layer that abstracts the hardware and offers a set of services, tools, and libraries to facilitate the development of robot software.
What are the key components of ROS?
The ROS framework is composed of several components, including:
- ROS Core is the central component that provides essential services for communication between ROS nodes in a distributed system, such as message passing, parameter management, and naming.
- ROS Nodes are individual programs that communicate with each other via the ROS Core using a publish-subscribe messaging system.
- ROS Topics enable communication between ROS nodes. They are named buses through which nodes exchange messages. A node can publish messages on a topic, and any interested nodes can subscribe to that topic to receive the messages. Topics follow a publish-subscribe messaging pattern, allowing for asynchronous communication.
- ROS Messages are the data structures used for communication between ROS nodes and define the information exchanged on a topic.
- ROS Services provide a way for nodes to send requests and receive responses. They use a request-response pattern, ensuring a direct exchange of messages. A node can offer a service, specifying a service type that defines the request and response message formats. Other nodes can then call the service to make requests and receive responses.
- ROS Launch files simplify the process of starting multiple nodes and configuring their parameters. A launch file is an XML file that describes the nodes to be executed, their parameters and the connections between them. By using launch files, you can start multiple nodes with a single command, making it easier to manage complex robotic systems.
What platform for ROS Core to choose?
ROS Core can run on a PC , a laptop, a computer or a variety of embedded platforms: NVIDIA Jetson, Raspberry Pi, BeagleBone, Intel NUC, Odroid etc.
The choice between them for running ROS depends on several factors, which are listed below. Here are some recommendations to help you choose between them for running ROS Core:
- Computational requirements: If your robotics application requires high-performance computing, then NVIDIA Jetson or a PC may be the best choice. Both offer high-performance CPUs and GPUs, which are ideal for computationally intensive tasks such as computer vision and machine learning.
- Power consumption: If your robotics application is battery-powered or requires low power consumption, then Raspberry Pi or NVIDIA Jetson may be the best choice. Both offer low power consumption options, and Raspberry Pi is known for its energy efficiency.
- Cost: If cost is a major factor, then Raspberry Pi is the most cost-effective option and is widely used for prototyping and hobby projects. NVIDIA Jetson and PC are more expensive options, but they offer more powerful computing capabilities.
- Form factor: NVIDIA Jetson or Raspberry Pi are most compact and lightweight platforms. Both offer small form factors and are suitable for building compact robotic systems.
So that, choose Raspberry Pi if you need cost-effective option (learn how connect simpleRTK2B/3B boards to a Raspberry Pi) or NVIDIA Jetson if computing capabilities are more important (check out step-by-step tutorial how to connect RTK receiver to NVIDIA Jetson).
What development environment for ROS to choose?
The most commonly used development environments are Ubuntu, ROS development studio (ROSDS), Visual Studio Code, Eclipse, CLion etc.
Ubuntu is well-supported and widely used operating system with large community of users who contribute to the development and support of ROS.
ROS itself is primarily developed and tested on Ubuntu, which means that it is optimized for this platform and most of the ROS packages and libraries are available as pre-built packages for Ubuntu. Just remember that: