Subject Guides are currently being updated. Please pardon the look and functionality of some of these guides as they are being revised.

Skip to main content
MSU Logo

Introduction to Robotics: ROS and Linux Information and Tutorials

Introduction to Robotics with Turtlebot 3 and ROS

What is ROS?

About ROS

The Robot Operating System (ROS) is a flexible framework 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 across a wide variety of robotic platforms.

Why? Because creating truly robust, general-purpose robot software is hard. From the robot's perspective, problems that seem trivial to humans often vary wildly between instances of tasks and environments. Dealing with these variations is so hard that no single individual, laboratory, or institution can hope to do it on their own.

As a result, ROS was built from the ground up to encourage collaborative robotics software development. For example, one laboratory might have experts in mapping indoor environments, and could contribute a world-class system for producing maps. Another group might have experts at using maps to navigate, and yet another group might have discovered a computer vision approach that works well for recognizing small objects in clutter. ROS was designed specifically for groups like these to collaborate and build upon each other's work, as is described throughout this site.

ROS Wiki

ROS Tutorials

Non-Beginners: If you're already familiar enough with ROS fuerte or earlier versions and only want to explore the new build system introduced in groovy and used in hydro and later, called catkin, you can go through more in-depth catkin tutorial here. However, going over all basic Beginner Level tutorials is still recommended for all users to get exposed to new features.

If you are new to Linux: You may find it helpful to first do a quick tutorial on common command line tools for linux. A good one is here.



Core ROS Tutorials


Beginner Level


  1. Installing and Configuring Your ROS Environment

    This tutorial walks you through installing ROS and setting up the ROS environment on your computer.

  2. Navigating the ROS Filesystem

    This tutorial introduces ROS filesystem concepts, and covers using the roscd, rosls, and rospack commandline tools.

  3. Creating a ROS Package

    This tutorial covers using roscreate-pkg or catkin to create a new package, and rospack to list package dependencies.

  4. Building a ROS Package

    This tutorial covers the toolchain to build a package.

  5. Understanding ROS Nodes

    This tutorial introduces ROS graph concepts and discusses the use of roscorerosnode, and rosrun commandline tools.

  6. Understanding ROS Topics

    This tutorial introduces ROS topics as well as using the rostopic and rqt_plot commandline tools.

  7. Understanding ROS Services and Parameters

    This tutorial introduces ROS services, and parameters as well as using the rosservice and rosparam commandline tools.

  8. Using rqt_console and roslaunch

    This tutorial introduces ROS using rqt_console and rqt_logger_level for debugging and roslaunch for starting many nodes at once. If you use ROS fuerte or ealier distros where rqt isn't fully available, please see this page with this page that uses old rx based tools.

  9. Using rosed to edit files in ROS

    This tutorial shows how to use rosed to make editing easier.

  10. Creating a ROS msg and srv

    This tutorial covers how to create and build msg and srv files as well as the rosmsg, rossrv and roscp commandline tools.

  11. Writing a Simple Publisher and Subscriber (C++)

    This tutorial covers how to write a publisher and subscriber node in C++.

  12. Writing a Simple Publisher and Subscriber (Python)

    This tutorial covers how to write a publisher and subscriber node in python.

  13. Examining the Simple Publisher and Subscriber

    This tutorial examines running the simple publisher and subscriber.

  14. Writing a Simple Service and Client (C++)

    This tutorial covers how to write a service and client node in C++.

  15. Writing a Simple Service and Client (Python)

    This tutorial covers how to write a service and client node in python.

  16. Examining the Simple Service and Client

    This tutorial examines running the simple service and client.

  17. Recording and playing back data

    This tutorial will teach you how to record data from a running ROS system into a .bag file, and then to play back the data to produce similar behavior in a running system.

  18. Getting started with roswtf

    Basic introduction to the roswtf tool.

  19. Navigating the ROS wiki

    This tutorial discusses the layout of the ROS wiki ( and talks about how to find what you want to know.

  20. Where Next?

    This tutorial discusses options for getting to know more about using ROS on real or simulated robots.

Now that you have completed the beginner level tutorials please answer this short questionnaire.


Intermediate Level

More client API tutorials can be found in the relevant package (roscpprospyroslisp)


  1. Creating a ROS package by hand.

    This tutorial explains how to manually create a ROS package.

  2. Managing System dependencies

    This explains how to use rosdep to install system dependencies.

  3. Roslaunch tips for large projects

    This tutorial describes some tips for writing roslaunch files for large projects. The focus is on how to structure launch files so they may be reused as much as possible in different situations. We'll use the 2dnav_pr2 package as a case study.

  4. Running ROS across multiple machines

    This tutorial explains how to start a ROS system using two machines. It explains the use of ROS_MASTER_URI to configure multiple machines to use a single master.

  5. Defining Custom Messages

    This tutorial will show you how to define your own custom message data types using the ROS Message Description Language.

  6. Using a C++ class in Python

    This tutorial illustrates a way to use a C++ class with ROS messages in Python.

  7. Packaging your ROS project as a snap

    This tutorial covers how to package and deploy your ROS project as a snap.

  8. How to Write a Tutorial

    This tutorial covers useful template and macros for writing tutorials, along with example tutorials that are available for guidance on


ROS Standards


Tutorials for Other ROS Libraries


Tutorials for Libraries with ROS Interfaces


External ROS Resources


External Tutorials


External Seminar/Lecture


Using ROS on your custom Robot


Wiki: ROS/Tutorials (last edited 2017-10-02 13:01:46 by B.N.Berrevoets)

UNIX and Linux

UNIX Tutorial for Beginners

A beginners guide to the Unix and Linux operating system. Eight simple tutorials which cover the basics of UNIX / Linux commands.

UNIX and Linux books
If you wish to continue learning Unix, here is a list of good Unix and Linux books, ranging from beginners to advanced.


Introduction to the UNIX Operating System

  • What is UNIX?
  • Files and processes
  • The Directory Structure
  • Starting an UNIX terminal

Tutorial One

  • Listing files and directories
  • Making Directories
  • Changing to a different Directory
  • The directories . and ..
  • Pathnames
  • More about home directories and pathnames

Tutorial Two

  • Copying Files
  • Moving Files
  • Removing Files and directories
  • Displaying the contents of a file on the screen
  • Searching the contents of a file

Tutorial Three

  • Redirection
  • Redirecting the Output
  • Redirecting the Input
  • Pipes

Tutorial Four

  • Wildcards
  • Filename Conventions
  • Getting Help

Tutorial Five

  • File system security (access rights)
  • Changing access rights
  • Processes and Jobs
  • Listing suspended and background processes
  • Killing a process

Tutorial Six

  • Other Useful UNIX commands

Tutorial Seven

  • Compiling UNIX software packages
  • Download source code
  • Extracting source code
  • Configuring and creating the Makefile
  • Building the package
  • Running the software
  • Stripping unnecessary code

Tutorial Eight

  • UNIX variables
  • Environment variables
  • Shell variables
  • Using and setting variables

Recommended UNIX and Linux books


  • This tutorial is available for download so you can work offline. You can also copy and modify it for your own site. Please read the terms and conditions.

Useful Links

  • Links to other UNIX resources.

Creative Commons License
This tutorial is licensed under a Creative Commons License.

Page access, 19 October 2001