navigation: amcl | base_local_planner | carrot_planner | clear_costmap_recovery | costmap_2d | fake_localization | map_server | move_base | move_base_msgs | nav_core | nav_view | navfn | robot_pose_ekf | rotate_recovery | voxel_grid
- Tutorials
- Troubleshooting
- Releases
- Change List
- Roadmap
- Reviews (Doc reviewed)
Used by (18)
Stack Summary
A 2D navigation stack that takes in information from odometry, sensor streams, and a goal pose and outputs safe velocity commands that are sent to a mobile base.
- Author: Maintained by Eitan Marder-Eppstein eitan@willowgarage.com
- License: BSD,LGPL (amcl)
- Repository: ros-pkg (https://code.ros.org/svn/ros-pkg)
Contents
Overview
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:
- 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.
- It requires a planar laser mounted somewhere on the mobile base. This laser is used for map building and localization.
- 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.
Documentation
The following documentation assumes familiarity with the Robot Operating System. Documentation on ROS can be found here: ROS Documentation
Report a Bug
Use trac to report bugs or request features
Tutorials
- Setting up your robot using tf
This tutorial provides a guide to set up your robot to start using tf.
- 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.
- Running the object pickup pipeline
- 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.
- 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.
- 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.
- 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.
Related Applications






