1.1.2 ROS Design Goals
The division-of-labor approach in robot development enables sharing and collaboration among different R&D teams, improving the efficiency of robot development. To serve this "division of labor", ROS has been designed with the following primary goals:
- Code Reuse: ROS does not aim to be the framework with the most features. Its main goal is to support code reuse in robotics research and development.
- Distributed: ROS is a distributed framework of processes (also called Nodes). Processes in ROS can be distributed across different hosts, which work together to distribute computational load.
- Loose Coupling: Functional modules in ROS are encapsulated in independent packages or meta-packages, making them easy to share. Modules within packages run as nodes, using standard ROS I/O as interfaces. Developers do not need to concern themselves with the internal implementation of modules; understanding the interface rules enables reuse. This achieves point-to-point loose coupling between modules.
- Lean: ROS is designed to be as lean as possible, so that code written for ROS can be used with other robot software frameworks. ROS is easy to integrate with other robot software frameworks; it has already been integrated with OpenRAVE, Orocos, and Player.
- Language Independence: Supports languages including Java, C++, Python, and more. To support more application development and porting, ROS is designed as a language-agnostic framework. It uses a concise, neutral definition language to describe message interfaces between modules, generating target files for the used language during compilation to support message interaction, while also allowing nested use of message interfaces.
- Easy Testing: ROS has a built-in unit/integration testing framework called rostest, making it easy to install and dismantle testing tools.
- Large-Scale Applications: ROS is suitable for large runtime systems and large-scale development processes.
- Rich Componentized Toolkits: ROS can integrate various tools and software into the system in a componentized manner for direct use as components. Examples include RVIZ (3D visualization tool), where developers can display robot models according to ROS-defined interfaces. Components also include simulation environments and message inspection tools.
- Free and Open Source: Large developer community with numerous available packages.