An Isaac application is created out of multiple nodes. The navigation stack has the following nodes:
GlobalLocalization: Estimates the pose of the robot in a map only using the current range scan measurement without prior information.
ParticleFilterLocalization: Continuously tracks the pose of the robot using range scan measurements.
GlobalPlanner: Computes a path to a target using the currently known map and other obstacles, such as restricted areas, nearby obstacles, and others. The Global Planner uses the Visibility Graph Algorithm. For a bette performance it is recommended to build a big (dense) graph by increasing the number of random samples. If building the graph is too slow, a pre-build graph can be loaded from a file.
GlobalPlannerSmoother: Improves the Global Planner path using short-cutting and other strategies.
LqrPlanner: Computes an optimal trajectory for the robot to smoothly drive it on a desired path.
DifferentialBaseControl: A basic controller to output the current base command message using the base trajectory plan.
LocalMap: Creates a representation of obstacles around the robot using the range scan measurements.
DifferentialBaseOdometry: Estimates the ego motion of the robot using the odometry estimate from the differential base.
Map: Provides the map of the environment to various other nodes.
ObstacleAtlas: Provides an interface to the list of all the obstacles, including the global map, local maps, restricted areas, and the others.
RobotModel: Provides the range scan model and the differential base model to support computations by various other nodes. The shape of the robot can be described using a list of overlapping circles.
Websight: Publishes various visualization and plot data from all nodes to the web frontend.
Nodes send each other messages as shown by the arrows in the diagram below. Use message passing to separate an application into modular entities. Nodes can be executed in parallel and run periodically or when new messages are received. Some nodes, like the map or the range scan model, do not publish messages but act as a service provider and other nodes link to them directly.
The navigation stack has the following incoming and outgoing message types. In addition to these messages the navigation stack uses a variety of internal messages to communicate between its various nodes.
RangeScanProto: A flat range scan containing the distance to obstacles for in a polar scan around the sensor. This can for example be computed from a LIDAR sensor like the Velodyne Puck.
GoalProto: A message containing the desired goal pose.
DifferentialBaseControl: The desired motion for the differential base produced by the controller. It is smooth and safe and can be used directly to drive the robot.