The Navigation Stack consists of several modules that work together to enable autonomous navigation:
Odometry Estimator: Estimates the robot’s odometry using wheel and IMU measurements. It uses an Extended Kalman Filter (EKF) to provide an estimate of the robot’s position and orientation, which is used by other modules for localization and planning.
2D Localizer:Uses LIDAR measurements to localize the robot within an occupancy map. The module uses a particle filter to estimate the robot’s position and orientation with respect to the map.
Behavior Executor: Uses a behavior tree to coordinate downstream navigation modules like planners. Generates tasks for regional path planner and the speed decision maker.
Global Route Planner: Creates a high-level plan for the robot’s navigation. The planner uses a waypoint graph to generate a coarse sequence of waypoints connecting the robot’s current location to its destination.
Regional Path Planner: Generates a local plan for the robot’s navigation. The planner uses a hybrid A* search on a locally constructed graph to find a path for the next 50 meters. This path also takes into account dynamic obstacles that are not seen on the map.
Speed Decision Maker: Consumes the path from regional path planners and determines the speed to send to trajectory planner.
Trajectory Planner: Gnerates a trajectory for the robot to follow based on the local plan from the Regional Path Planner. The planner uses an iLQR algorithm to generate a trajectory for the next 5 meters.
Controller: Instructs the robot to follow the trajectory generated by the Trajectory Planner. The controller adjusts the robot’s velocity and steering to keep it on the desired path.