What is Robot Navigation and what is ROS Navigation Stack?
In our daily life, we are familiar with GPS navigation. If we set a destination on the navigation device, the navigation helps us to calculate distance and travel time from start point to the destination. Intelligent navigation system helps us to reach the destination by following optimal path (based on distance and travel time due to variations in traffic) among multiple paths as we may have seen on Google map. Similarly, navigation is essential and inseparable part of mobile robots. Navigation is basically autonomous movement of robot to a defined destination. But before starting to move to a define destination, it is important to have the map of the environment and to know what is the current location of the robot in a given environment. It is also important to determine the optimal rout among multiple routes and to avoid obstacles (such as walls, furniture, and people etc.) while moving towards its destination.
The ROS Navigation Stack
The ROS Navigation Stack is a set of ROS nodes and algorithms which are used to autonomously move a robot from one location to another location, avoiding all obstacles in its way. The Navigation Stack comprises an implementation of several navigation related algorithms (such as mapping, self-localization, path planning, obstacle avoidance etc.) which help us to perform autonomous navigation of a mobile robot.
The working of navigation stack can be explained in simple words by describing the input it takes and the output it generates. Primarily, it takes as input the current location of the robot, the desired location (destination/ goal position), the odometry data of the robot (e.g. wheel encoders, GPS, IMU etc.), and also sensor data (such as from Laser/Lidar etc.). Then it will generate the velocity commands as an output which will be send to mobile robot base in order to move robot from current position to the specified goal position.
Hence, the main purpose of the navigation stack is to move a mobile robot autonomously from position A to position B without getting lost and assuring obstacle avoidance.
Following is the image of a navigation stack setup. In the setup, the “map_server” node is used to retrieve the map of the environment. While, “amcl” node is used to determine the current location of the node. Then on the basis of the information provided by map_server, amcl, transforms, odometry source and sensor data, global planner and local planner determine the optimal route from start position to the goal position. Then move_base node sends velocity commands to base controller in order to move the robot from start point to its destination.
(The image is taken from http://wiki.ros.org/navigation/Tutorials/RobotSetup)
This small article is just to give you a flavor of mobile robot navigation. We will go through in detail with these concepts while learning mobile robot navigation in future blogs.