5#include <ompl/base/objectives/MaximizeMinClearanceObjective.h>
6#include <ompl/base/objectives/PathLengthOptimizationObjective.h>
7#include <ompl/base/objectives/StateCostIntegralObjective.h>
9#include <ompl/base/SpaceInformation.h>
10#include <ompl/base/spaces/DubinsStateSpace.h>
11#include <ompl/base/spaces/RealVectorStateSpace.h>
12#include <ompl/base/spaces/ReedsSheppStateSpace.h>
13#include <ompl/base/spaces/SE2StateSpace.h>
15#include <ompl/geometric/PathGeometric.h>
16#include <ompl/geometric/PathSimplifier.h>
17#include <ompl/geometric/SimpleSetup.h>
19#include <ompl/control/planners/est/EST.h>
20#include <ompl/control/planners/kpiece/KPIECE1.h>
21#include <ompl/control/planners/pdst/PDST.h>
22#include <ompl/control/planners/rrt/RRT.h>
23#include <ompl/control/planners/sst/SST.h>
34#include "ompl/util/Console.h"
36namespace ob = ompl::base;
37namespace og = ompl::geometric;
38namespace oc = ompl::control;
40template <
class PLANNER>
44 _omplPlanner = ob::PlannerPtr(
new PLANNER(
ss_c->getSpaceInformation()));
48 ob::PlannerStatus
run()
override {
50 ompl::msg::setLogLevel(ompl::msg::LOG_DEV1);
52 ss_c->setPlanner(_omplPlanner);
54 ss_c->getSpaceInformation()->setPropagationStepSize(.1);
55 ss_c->getSpaceInformation()->setMinMaxControlDuration(2, 10);
58 ss_c->getSpaceInformation()->printProperties(std::cout);
60 auto problem =
ss_c->getProblemDefinition();
62 problem->setIntermediateSolutionCallback(
64 const std::vector<const ob::State *> &states,
const ob::Cost cost) {
68 for (
const auto *state : states)
solution.append(state);
78 const ob::PlannerTerminationCondition &ptc_approx =
88 OMPL_INFORM(
"OMPL %s planning status: %s", _omplPlanner->getName().c_str(),
89 solved.asString().c_str());
93 _solution =
ss_c->getSolutionPath();
95 OMPL_WARN(
"No solution found.");
106 std::cout <<
"Setting KinematicCar" << std::endl;
107 auto odeSolver(std::make_shared<oc::ODEBasicSolver<>>(
110 ss_c->setStatePropagator(oc::ODESolver::getStatePropagator(
116 std::cout <<
"Setting kinematicSingleTrackODE" << std::endl;
118 auto odeSolver(std::make_shared<oc::ODEBasicSolver<>>(
119 ss_c->getSpaceInformation(),
122 ss_c->setStatePropagator(oc::ODESolver::getStatePropagator(
128 std::string
name()
const override {
return "FP " + _omplPlanner->getName(); }
132 std::cout <<
"Returning solution << " << std::endl;
133 return og::PathGeometric(
ss_c->getSolutionPath().asGeometric());
137 return ss_c->haveExactSolutionPath();
141 return ss_c->getLastPlanComputationTime();
147 nlohmann::json settings;
148 const auto ¶m_map = _omplPlanner->params().getParams();
149 for (
const auto &[key, value_ptr] : param_map) {
150 settings[key] = value_ptr->getValue();;
156 const ompl::base::ProblemDefinitionPtr &pdef) {
157 return ob::PlannerTerminationCondition(
158 [pdef] {
return pdef->hasApproximateSolution(); });
162 ob::PlannerPtr _omplPlanner;
OMPLControlPlanner< oc::KPIECE1 > FPKPIECEPlanner
Definition: OMPLControlPlanner.hpp:167
OMPLControlPlanner< oc::SST > FPSSTPlanner
Definition: OMPLControlPlanner.hpp:169
OMPLControlPlanner< oc::RRT > FPRRTPlanner
Definition: OMPLControlPlanner.hpp:170
OMPLControlPlanner< oc::PDST > FPPDSTPlanner
Definition: OMPLControlPlanner.hpp:171
OMPLControlPlanner< oc::EST > FPESTPlanner
Definition: OMPLControlPlanner.hpp:168
Definition: AbstractPlanner.h:29
oc::SimpleSetup * ss_c
Definition: AbstractPlanner.h:115
std::vector< IntermediaryControlSolution > intermediaryControlSolutions
Definition: AbstractPlanner.h:67
static std::string LastCreatedPlannerName
Stores the name of the planner created last.
Definition: AbstractPlanner.h:38
Definition: OMPLControlPlanner.hpp:41
og::PathGeometric solution() const override
Returns the solution of the planner, which is a sparse PathGeometric.
Definition: OMPLControlPlanner.hpp:130
bool hasReachedGoalExactly() const override
Definition: OMPLControlPlanner.hpp:136
std::string name() const override
Definition: OMPLControlPlanner.hpp:128
OMPLControlPlanner()
Definition: OMPLControlPlanner.hpp:43
void setStatePropagator()
Set the needed state propagator.
Definition: OMPLControlPlanner.hpp:103
virtual nlohmann::json getSettings() const override
Definition: OMPLControlPlanner.hpp:146
double planningTime() const override
Definition: OMPLControlPlanner.hpp:140
ob::PlannerStatus run() override
Definition: OMPLControlPlanner.hpp:48
ob::Planner * omplPlanner() override
Definition: OMPLControlPlanner.hpp:144
ob::PlannerTerminationCondition approxSolnPlannerTerminationCondition(const ompl::base::ProblemDefinitionPtr &pdef)
Definition: OMPLControlPlanner.hpp:155
Stopwatch implementation to measure elapsed time.
Definition: Stopwatch.hpp:8
void start()
Starts the timer.
Definition: Stopwatch.hpp:15
double elapsed() const
Elapsed time in seconds.
Definition: Stopwatch.hpp:41
@ FORWARD_PROPAGATION_TYPE_KINEMATIC_SINGLE_TRACK
Definition: ForwardPropagation.h:10
@ FORWARD_PROPAGATION_TYPE_KINEMATIC_CAR
Definition: ForwardPropagation.h:9
void kinematicCarODE(const oc::ODESolver::StateType &q, const oc::Control *control, oc::ODESolver::StateType &qdot)
Definition: kinematic_car.hpp:15
void kinematicCarPostIntegration(const ob::State *, const oc::Control *, const double, ob::State *result)
Definition: kinematic_car.hpp:32
void kinematicSingleTrackODE(const oc::ODESolver::StateType &q, const oc::Control *control, oc::ODESolver::StateType &qdot)
Definition: kinematic_single_track.hpp:15
void kinematicSingleTrackPostIntegration(const ob::State *state, const oc::Control *, const double, ob::State *result)
Definition: kinematic_single_track.hpp:36
Planner
Definition: PlannerSettings.h:16
ompl::control::SpaceInformationPtr control_space_info
Definition: PlannerSettings.h:408
PlannerSettings::GlobalSettings::OmplSettings ompl
static PlannerSettings::GlobalSettings settings
Definition: PlannerSettings.h:699