# Introduction¶

A navigation stack must perform the following high-level functions:

• Mapping is used to automatically create a map of the operational environment. The map is both used for localization, but also for path planning. It can be annotated by a human with additional features such as to forbid the robot to navigate to certain areas, for example..
• Localization to estimate the current pose of the robot in a pre-built map. Localization needs to work both globally, i.e. when the current pose of the robot is completely unknown for example after the robot was switched on and needs to be computed only based on the current measurements, and locally, i.e. when the pose of the robot is already approximately known and current measurements are used to refine the estimate.
• Obstacle Avoidance A local map around the robot is created with obstacles which the robot should not hit. This local map is continuously updated using the latest measurements and used to safely navigate the robot around unexpected obstacles. Obstacles can also be combined into clusters which can be tracked over time, classified with semantic labels, and predicted into the future.
• Planning Given the desired target goal, the map of the environment and the immediate obstacles surrounding the robot a plan is created which safely navigates the robot to the desired target. This happens both globally, i.e. using a graph-based search algorithm to compute a shortest path from current pose to the target, and locally, i.e. using an optimization algorithm to compute a trajectory of optimal control commands to follow the desired path.

## Getting Started¶

Follow the instructions of the Setup document to make sure you system is setup properly. Make sure you are aware which version of Isaac you are using and preferably always use the latest available version.

The best way to get familiar with the navigation stack is running it in simulation. The easiest way to do this is via flatsim. The flatsim application uses a simple range scan simulation together with the full navigation stack. Run the flatsim application with the following command:

bob@desktop:~/isaac\$ bazel run //apps/flatsim


By default the robot will roams around, driving from one random point to the next.

To see what is happening, open the visualization frontend at http://localhost:3000 in Chrome. (Other browsers are not officially supported in this release.) Make sure that the flatsim application is running when attempting to load that page.