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 better performance, we recommend building 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.
The Isaac SDK global localization component GridSearchLocalizer allows you to use an arbitrary number of LIDAR
devices to perform localization in a known occupancy grid map. Each LIDAR device has an entry in the
flatscan_frames parameter representing its coordinate frame relative to the center of the
robot. There is also a unique channel for each LIDAR device for receiving flatscan messages: These
channels are listed in the
For example, if you have two LIDAR sensors:
- LIDAR 1, with coordinate frame
lidar_1and incoming message channel
- LIDAR 2, with coordinate frame
lidar_2and incoming message channel
The parameters for
GridSearchLocalizer would be as follows:
flatscan_frames: ["lidar_1", "lidar_2"] flatscan_channel_names: ["flatscan_1", "flatscan_2"]
Note that the entries in each list are correlated: The nth entry in
corresponds to the nth entry in
After specifying these parameters, connect the edges from the flatscan sources (i.e. the LIDAR
driver components) to the incoming channels on the
flatscan_2). The localizer component waits until at least one
message is received on each registered channel and all coordinate frames in the
flatscan_frames list are available. It then formulates an optimization problem and solves it
using the GPU.