Planners and controllers are the heart of a navigation task. Recoveries are used to get the robot out of a bad situation or attempt to deal with various forms of issues to make the system fault-tolerant. Smoothers can be used for additional quality improvements of the planned path. In this section, the general concepts around them and their uses in this project are analyzed.
The NAV2 stack includes four different action servers. The planner, behavior, smoother, and controller servers.
These servers are used to host a map of algorithm plugins to complete various tasks. The planner, smoother, and controller servers will be configured at runtime with the names (aliases), and types of algorithms to use. These types are the pluginlib names that will be registered and the names are the aliases for the task. An example would be the DWB controller used with the name FollowPath
, as it follows a reference path. In this case, all parameters for DWB would be placed in that namespage, e.g. FollowPath.<param>
.
For the behavior server, each of the behaviors also contains their own name, however, each each plugin will also expose its own special action server. The behavior server also contains a costmap subscriber to the local costmap.
The task of a planner is to compute a path to compute a path to complete some objective function. The path can also be known as a route, depending on the nomenclature and algorithm selected. The planner will have access to a global environmental representation and sensor data buffered into it. Planners can be written to:
The general task in NAV2 for the planner is to compute a valid, and potentially optimal, path from the current pose to a goal pose.
Controllers, also known as local planners in ROS1, are the way we follow the globally computed path or complete a local task. The controller will have access to a local environment representation to attempt to compute feasible control effort for the base to follow. Many controllers will project the robot forward in space and compute a locally feasible path at each update iteration. Controllers can be written to:
The general task in NAV2 for a controller is to compute a valid control effort to follow the global plan. However, many classes of controllers and local planners exist. It is the goal of this project that all controller algorithms can be plugins in this server for common research and industrial tasks.