3#include <ompl/base/StateValidityChecker.h>
4#include <ompl/base/spaces/DubinsStateSpace.h>
5#include <ompl/base/spaces/ReedsSheppStateSpace.h>
6#include <ompl/base/spaces/SE2StateSpace.h>
7#include <ompl/control/Control.h>
8#include <ompl/control/PathControl.h>
9#include <ompl/control/SimpleSetup.h>
10#include <ompl/geometric/PathGeometric.h>
11#include <ompl/geometric/SimpleSetup.h>
12#include <ompl/geometric/planners/rrt/SORRTstar.h>
15#include "steer_functions/G1Clothoid/ClothoidSteering.hpp"
16#include "steer_functions/G1Clothoid/G1ClothoidStateSpace.h"
21#include <ompl/control/ODESolver.h>
23#include <nlohmann/json.hpp>
25namespace ob = ompl::base;
26namespace og = ompl::geometric;
27namespace oc = ompl::control;
31 virtual std::string
name()
const = 0;
40 virtual ob::PlannerStatus
run() = 0;
48 double time{std::numeric_limits<double>::quiet_NaN()};
49 double cost{std::numeric_limits<double>::quiet_NaN()};
59 double time{std::numeric_limits<double>::quiet_NaN()};
60 double cost{std::numeric_limits<double>::quiet_NaN()};
72 virtual og::PathGeometric
solution()
const = 0;
79 std::cout <<
"Checking if the state is valid .. " << std::endl;
82 bool isValid(og::PathGeometric &path)
const {
83 for (
const auto *state : path.getStates())
87 bool isValid(og::PathGeometric &path, std::vector<Point> &collisions)
const {
89 for (
const auto *state : path.getStates())
91 collisions.emplace_back(state);
92 return collisions.empty();
95 bool isValid(ompl::control::PathControl &path,
96 std::vector<Point> &collisions)
const {
98 for (
const auto *state : path.getStates())
100 collisions.emplace_back(state);
101 return collisions.empty();
107 return ss_c->getStateValidityChecker();
109 return ss->getStateValidityChecker();
114 og::SimpleSetup *
ss{
nullptr};
115 oc::SimpleSetup *
ss_c{
nullptr};
ob::SE2StateSpace::StateType State
Definition: Primitives.h:12
Definition: AbstractPlanner.h:29
oc::SimpleSetup * ss_c
Definition: AbstractPlanner.h:115
std::vector< IntermediarySolution > intermediarySolutions
Definition: AbstractPlanner.h:56
std::vector< IntermediaryControlSolution > intermediaryControlSolutions
Definition: AbstractPlanner.h:67
bool isValid(const ob::State *state) const
Definition: AbstractPlanner.h:78
virtual bool hasReachedGoalExactly() const =0
og::SimpleSetup * ss
Definition: AbstractPlanner.h:114
virtual og::PathGeometric solution() const =0
Returns the solution of the planner, which is a sparse PathGeometric.
virtual nlohmann::json getSettings() const
Definition: AbstractPlanner.h:121
static std::string LastCreatedPlannerName
Stores the name of the planner created last.
Definition: AbstractPlanner.h:38
virtual double planningTime() const =0
virtual ~AbstractPlanner()
Definition: AbstractPlanner.cpp:153
virtual std::string name() const =0
og::SimpleSetup * simpleSetup() const
Definition: AbstractPlanner.h:103
bool isValid(og::PathGeometric &path) const
Definition: AbstractPlanner.h:82
bool isValid(ompl::control::PathControl &path, std::vector< Point > &collisions) const
Definition: AbstractPlanner.h:95
bool control_based_
Definition: AbstractPlanner.h:116
virtual ob::PlannerStatus run()=0
virtual std::vector< Point > solutionPath() const
Definition: AbstractPlanner.h:42
ob::StateValidityCheckerPtr getCurrStateValidityCheckerPtr() const
Definition: AbstractPlanner.h:105
virtual ob::Planner * omplPlanner()
Definition: AbstractPlanner.h:120
AbstractPlanner(const std::string &name)
Definition: AbstractPlanner.cpp:7
bool isValid(og::PathGeometric &path, std::vector< Point > &collisions) const
Definition: AbstractPlanner.h:87
Planner
Definition: PlannerSettings.h:16
static std::vector< Point > fromPath(const ompl::geometric::PathGeometric &p, bool interpolate=false)
Definition: Primitives.cpp:25