Tutorial: introduction to ROS

This is a tutorial to get started ROS, which is the Robot Operation System that is used to write robot software. "It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms." - ROS.org

#tutoriallist #ROS

Do you want to start with ROS? Whether you already know what ROS is or not - here you can find many useful links to find the information you need.

What ROS intends to solve:

Majority of the robots currently used, are programmed using proprietary software which is usually highly specialized for the specific hardware and intended task. This approach lacks standardization and hinders reusability of software, leading to long development times for new projects.

What is ROS?

  • ROS is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot projects across a wide variety of robotic platforms.

  • The ROS framework enables breaking down the software into smaller pieces of code, thereby creating a distributed framework of processes (aka nodes) that are coupled at runtime using the ROS communication infrastructure. Such modularity of code allows replacing certain nodes without hindering the rest of the project.

  • Collaborative robotics software development and reusability of code are at the heart of ROS agenda. The ROS ecosystem now consists of tens of thousands of users worldwide, working in domains ranging from tabletop hobby projects to large industrial automation systems.

What ROS is not:

  • ROS is not an operating system in the conventional sense like Windows or Mac OS. ROS runs on top of an existing OS and is primarily tested on Ubuntu and Mac OS X systems. While a port to Microsoft Windows for ROS is possible, it has not yet been fully explored.

  • ROS is not a programming language . The software in a ROS project is written using languages like python, C++ or Lisp using the corresponding ROS client libraries.

What ROS has to offer:

Communication infrastructure:

A communication system is often one of the first needs that arises when implementing a new robot application. ROS provides inter-process communication, promoting breaking down the code into modular nodes, potentially distributed over multiple devices. In this role, ROS acts as middleware. The ROS middleware provides these communication facilities:

  • Message passing: asynchronous publisher subscriber communication.

  • Remote procedure calls called services: synchronous request-response interactions between processes.

  • Preemptable remote procedure calls called actions: like services except they can report progress before returning the final response, and they can be preempted by the caller.

  • Recording and playback of messages: for debugging and testing of nodes in a manner agnostic of the source of the data.

  • distributed parameter server: a way for nodes to share configuration information through a global key-value store.

Features, libraries for common robot-related functionalities:

ROS provides common robot-specific libraries and tools that will get your robot up and running quickly.

  • Standard robot messages: message definitions for geometric concepts like poses, transforms, and vectors; for sensors like cameras, IMUs and lasers; and for navigation data like odometry, paths, and maps;

  • Coordinate frames’ management and transforms: The tf2 (transform) library helps keep track of the different coordinate frames in the robot and provides the necessary transforms needed to go from one frame to the other at runtime.

  • Standardized robot description: ROS allows for a machine-readable way of describing your robot using URDF (Unified Robot Description Format), which consists of an XML document wherein you describe the physical properties of your robot. Once defined in this way, your robot can be easily used with the tf2 library, rendered in three dimensions for nice visualizations, and used with simulators and motion planners.

  • diagnostics

  • pose estimation, localization, mapping and navigation: There are ROS packages that solve common robotics problems like pose estimation, localization in a map, building a map, and even mobile navigation.

Powerful development toolset:

These tools support probing, debugging, plotting, and visualizing the state of the system being developed.

  • rviz: provides general purpose, three-dimensional visualization of many sensor data types and any URDF-described robot. It allows you to quickly see what your robot sees, and identify problems such as sensor misalignments or robot model inaccuracies.

  • rqt: a Qt-based framework for developing graphical interfaces for your robot. There are out of the box rqt plugins like rqt_graph (to visualize the live communication graph of the robot system), rqt_plot plugin (for runtime plotting of data being published on topics, eg. sensor data.)

  • Command line tools: ROS can be used 100% without a GUI. Probing topics, services, and actions; recording and playing back data and all core functionality is accessible via one of the more than 45 command line tools.

Integration with other libraries, tools and projects :

  • OpenCV: ROS provides tight integration with this premier computer vision library, allowing users to easily feed data published by cameras of various types into OpenCV algorithms.

  • PCL: If you are working with a three-dimensional sensor like the Microsoft Kinect or a scanning laser, then Point Cloud Library and ROS will help you collect, transform, process, visualize, and act upon that rich 3D data.

  • Gazebo: is a 3D indoor and outdoor multi-robot simulator, complete with dynamic and kinematic physics, and a pluggable physics engine. You can develop your application in simulation and then deploy to the physical robot with little or no changes in your code.

  • MoveIt:  is a motion planning library that offers efficient, well-tested implementations of state of the art motion planning algorithms.

What is ROS-Industrial (ROS-I)?

ROS-Industrial is an open-source project that extends the advanced capabilities of ROS to manufacturing automation and robotics.

This raining class curriculum is recommended for new users to both ROS and ROS-Industrial. https://industrial-training-master.readthedocs.io/en/melodic/

This tutorial series includes a page on ROS and ROS-I installation @ this link: https://industrial-training-master.readthedocs.io/en/melodic/_source/session1/ROS-Setup.html

Alternatively, ROS-I installation procedure can be found at the following page:

http://wiki.ros.org/Industrial/Install (As ROS-I is a project building on top of ROS, naturally the installation requires a functioning installation of ROS. Link to ROS installation page is also provided in the above link under prerequisites section.)

Page with links to other ROS courses and workshops: http://wiki.ros.org/Courses

Where to find help and stay updated: