Documentation Status

Cannot load information on name: navigation, distro: indigo, which means that it is not yet in our index. Please see this page for information on how to submit your repository to our index.



The Navigation Stack is fairly simple on a conceptual level. It takes in information from odometry and sensor streams and outputs velocity commands to send to a mobile base. Use of the Navigation Stack on an arbitrary robot, however, is a bit more complicated. As a pre-requisite for navigation stack use, the robot must be running ROS, have a tf transform tree in place, and publish sensor data using the correct ROS Message types. Also, the Navigation Stack needs to be configured for the shape and dynamics of a robot to perform at a high level. To help with this process, this manual is meant to serve as a guide to typical Navigation Stack set-up and configuration.

Hardware Requirements

While the Navigation Stack is designed to be as general purpose as possible, there are three main hardware requirements that restrict its use:

  1. It is meant for both differential drive and holonomic wheeled robots only. It assumes that the mobile base is controlled by sending desired velocity commands to achieve in the form of: x velocity, y velocity, theta velocity.
  2. It requires a planar laser mounted somewhere on the mobile base. This laser is used for map building and localization.
  3. The Navigation Stack was developed on a square robot, so its performance will be best on robots that are nearly square or circular. It does work on robots of arbitrary shapes and sizes, but it may have difficulty with large rectangular robots in narrow spaces like doorways.


The following documentation assumes familiarity with the Robot Operating System. Documentation on ROS can be found here: ROS Documentation

Report a Bug


List of Robots Using the Navigation Stack


  1. Setting up your robot using tf

    This tutorial provides a guide to set up your robot to start using tf.

  2. Setup the Navigation Stack for TurtleBot

    Provides a first glimpse of navigation configuration for your robot, with references to other much more comprehensive tutorials.

  3. SLAM Map Building with TurtleBot

    How to generate a map using gmapping

  4. Autonomous Navigation of a Known Map with TurtleBot

    This tutorial describes how to use the TurtleBot with a previously known map.

  5. Basic Navigation Tuning Guide

    This guide seeks to give some standard advice on how to tune the ROS Navigation Stack on a robot. This guide is in no way comprehensive, but should give some insight into the process. I'd also encourage folks to make sure they've read the ROS Navigation Tutorial before this post as it gives a good overview on setting the navigation stack up on a robot wheras this guide just gives advice on the process.

  6. Setup and Configuration of the Navigation Stack on a Robot

    This tutorial provides step-by-step instructions for how to get the navigation stack running on a robot. Topics covered include: sending transforms using tf, publishing odometry information, publishing sensor data from a laser over ROS, and basic navigation stack configuration.

  7. Using rviz with the Navigation Stack

    This tutorial provides a guide to using rviz with the navigation stack to initialize the localization system, send goals to the robot, and view the many visualizations that the navigation stack publishes over ROS.

  8. Navigation with Robotino

    Autonomous navigation of a known map with Robotino

  9. Writing A Global Path Planner As Plugin in ROS

    In this tutorial, I will present the steps for writing and using a global path planner in ROS. The first thing to know is that to add a new global path planner to ROS, the new path planner must adhere to the nav_core::BaseGlobalPlanner C++ interface defined in nav_core package. Once the global path planner is written, it must be added as a plugin to ROS so that it can be used by the move_base package. In this tutorial, I will provide all the steps starting from writing the path planner class until deploying it as a plugin. I will use Turtlebot as an example of robot to deploy the new path planner.

  10. Publishing Odometry Information over ROS

    This tutorial provides an example of publishing odometry information for the navigation stack. It covers both publishing the nav_msgs/Odometry message over ROS, and a transform from a "odom" coordinate frame to a "base_link" coordinate frame over tf.

  11. Mapping with Robotino

    Explains how to build a map with Robotino using gmapping

  12. Publishing Sensor Streams Over ROS

    This tutorial provides examples of sending two types of sensor streams, sensor_msgs/LaserScan messages and sensor_msgs/PointCloud messages over ROS.

  13. Sending Goals to the Navigation Stack

    The Navigation Stack serves to drive a mobile base from one location to another while safely avoiding obstacles. Often, the robot is tasked to move to a goal location using a pre-existing tool such as rviz in conjunction with a map. For example, to tell the robot to go to a particular office, a user could click on the location of the office in a map and the robot would attempt to go there. However, it is also important to be able to send the robot goals to move to a particular location using code, much like rviz does under the hood. For example, code to plug the robot in might first detect the outlet, then tell the robot to drive to a location a foot away from the wall, and then attempt to insert the plug into the outlet using the arm. The goal of this tutorial is to provide an example of sending the navigation stack a simple goal from user code.

Wiki: navigation (last edited 2013-09-04 19:50:23 by DavidLu)