For navigation of robot we use ROS navigation package.
Graph of move_base node can be seen on image below.
In this instance amcl is not required, since robot localization is carried out with robot_localization package. map_server node is not present, instead nav_msgs/OccupancyGrid message is published by robot node.
sensor sources represents sensor_msgs/LaserScan message, which is generated by robot node. sensor transforms are handled by robot node. robot_controller is represented by node base controller.
move base node generate robot path based on costmap. Costmap is generated by considering static map (nav_msgs/OccupancyGrid message published by robot node) and LIDAR sensor (sensor_msgs/LaserScan message published by robot node). Example of Costmap can be seen below. Based on costmap global path is generated. For possible algorithems used for global path generation see link.
Local path is generated by considering global path, odometry of mobile robot and velocity constraints.
To send goal to move_base node one can use RVIZ tool to send 2D nav goal. To send goal from program see simple_navigation_goal.cpp . Detailed explenation can be found on C/C++ and Python.
Navigation parameters can be changed by modifying spawn_robot.launch / spawn_robot_gazebo.launch and configuration files: base_local_planner_params.yaml , costmap_common_params.yaml , global_costmap_params.yaml , local_costmap_params.yaml , move_base_params.yaml .