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.
The navigation stack is expected to place a high priority on safety: The robot should not cause any collisions by driving into obstacles. When a valid, collision-free path exists, the robot should be able to find it and navigate safely through it; however, for safety and practical reasons, the robot might not be able to navigate in narrow spaces. Both the Local Planner and Global Planner have parameters that allow you to tune the margin for navigation (i.e. how close the robot can be to obstacles while navigating around them). This margin must be greater than or eqaul to the cell size of the map. See the Tuning the Navigation Stack section for more details.
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/sdk$ bazel run //packages/flatsim/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
Chrome. (Other browsers are not officially supported in this release.) Make sure that the flatsim
application is running when attempting to load that page.
See the Deploying and Running on Jetson section for running the application on Jetson. Ensure the power mode of the Jetson device is set to 0 (MAXN) when deploying flatsim to the device.