ROS (Robot Operating System) is an open source framework (not a real operating system) for writing robot software. It started in 2007 by Eric Berger and Keenan Wyrobek (they were PhD students at Stanford University) with the goal of simplifying the process of creating complex robot behavior across a wide variety of robotic platforms, which enables software developers with little robotics hardware knowledge to write software for robots. ROS is licensed under the permissive BSD license.
ROS has a lot of components and tools. Some examples for Communications are:
- Message Passing for managing the details of communication between distributed nodes via the anonymous publish/subscribe mechanism.
- Recording and Playback of Messages for asynchronous communications.
- Remote Procedure Calls for synchronous request/response interactions between processes.
- Distributed Parameter System which provides a way for tasks to share configuration information.
ROS provides common robot-specific libraries and tools. Some examples of libraries are:
- Robot Geometry Library which keeps track of where different parts of the robot are with respect to each other.
- Robot Description Language for describing your robot in a machine-readable way. It uses URDF (Unified Robot Description Format), which consists of an XML document in which you describe the physical properties of your robot (lengths of limbs, sizes of wheels, locations of sensors, visual appearance of each part of the robot, ...etc).
- Diagnostics for monitoring the state of your robot.
- Preemptable Remote Procedure Calls
- Pose Estimation, Localization, and Navigation
ROS has also powerful development tools which support introspecting, debugging, plotting, and visualizing the state of the system being developed. There are more than 45 command-line tools and some GUI tools as:
- rviz for 3D visualization of many sensor data types and any URDF-described robot. It can visualize many message types such as laser scans, three-dimensional point clouds, and camera images.
- rqt (Qt-based framework) for developing graphical interfaces for your robot. You can create custom GUIs with the help of built-in rqt plugins as rqt_graph, rqt_plot, rqt_topic, and rqt_publisher. You can also write your own rqt plugins.
Integration with other Libraries
ROS provides powerful integration with other open source libraries as:
- OpenCV (computer vision library) provides many utilities that you can use in your projects. ROS provides tight integration with OpenCV, allowing it be used for camera calibration, monocular image processing, stereo image processing, and depth image processing.
- MoveIt (motion planning library) offers efficient, and well-tested implementations of state of the art planning algorithms. Through its integration with ROS, MoveIt can be used with any ROS-supported robot. Planning data can be visualized with rviz and rqt plugins, and plans can be executed via the ROS control system.
- ROS-Industrial (open-source project that extends capabilities of ROS to manufacturing automation and robotics) repository includes interfaces for common industrial manipulators, grippers, sensors, and device networks. It also provides software libraries for automatic 2D/3D sensor calibration, process path/motion planning, applications like Scan-N-Plan, developer tools like the Qt Creator ROS Plugin, and training curriculum that is specific to the needs of manufacturers.
- Gazebo (3D indoor and outdoor multi-robot simulator) integrates with ROS by providing plugins that support many existing robots and sensors. Because the plugins present the same message interface as the rest of the ROS ecosystem, you can write ROS nodes that are compatible with simulation, logged data, and hardware. You can develop your application in simulation and then deploy to the physical robot with little or no changes in your code.
- PCL (Point Cloud Library) is a perception library focused on the manipulation and processing of 3D data and depth images. PCL provides many point cloud algorithms, including filtering, feature detection, registration, kd-trees, octrees, sample consensus, and more.