The library allows you to - pre-process the inputs for your global planners, - chain multiple global planners together, - post-process the output form the global planners.
The goal is to separate auxiliary functions from the implementation of the global planners. Additionally the library allows you to create a "planner-chain" - a feature successfully used in the moveit framework.
The project consists of two components. The gpp_interface defines two additional plugin-types: PrePlanning and PostPlanning plugins. The gpp_plugin implements the pipeline which will load and run these pre- and post-planning plugins together with global-planner plugins.
Before going into the details how to use and configure this library, we will first define some terminology.
Since the naming may be already confusing (plugins, plugins, plugins), we will refer to the plugins loaded by the GppPlugin as its child-plugins.
Those child-plugins are grouped together accordingly to their interfaces. The pre-planning group contains child-plugins implementing the gpp_interface::PrePlanningInterface; The post-planning group contains child-plugins implementing the gpp_interface::PostPlanningInterface; The planning group accepts child-plugins implementing either the nav_core::BaseGlobalPlanner or mbf_costmap_core::CostmapPlanner interfaces.
The pipeline concept is illustrated above.
GppPlugin::makePlan, the GppPlugin will invoke its child-plugins.
The execution of those child-plugins is sequentially, going from the pre- over the planning- to the post-planning group.
The result from each child-plugin is passed on the the next.
Build or Install
ROS-noetic users can install the packages via apt:
sudo apt udpate sudo apt install ros-noetic-gpp-interface ros-noetic-gpp-plugin
If you want to build the packages from source, then follow the standard-way for ros-packages and run:
cd ~catkin_ws/src git clone https://github.com/dorezyuk/gpp.git catkin build gpp_plugin