7 #include <ompl/base/SpaceInformation.h> 8 #include <ompl/base/objectives/PathLengthOptimizationObjective.h> 9 #include <ompl/base/objectives/StateCostIntegralObjective.h> 10 #include <ompl/base/objectives/MaximizeMinClearanceObjective.h> 11 #include <ompl/base/spaces/RealVectorStateSpace.h> 12 #include "ompl/util/Console.h" 13 #include <ompl/geometric/planners/prm/PRMstar.h> 14 #include <ompl/geometric/planners/rrt/RRTstar.h> 15 #include <ompl/base/PlannerDataGraph.h> 18 #include <boost/program_options.hpp> 19 #include <boost/algorithm/string.hpp> 21 #include <boost/graph/adjacency_list.hpp> 22 #include <boost/geometry.hpp> 23 #include <boost/geometry/geometries/point_xy.hpp> 24 #include <boost/geometry/geometries/polygon.hpp> 25 #include <boost/geometry/geometries/linestring.hpp> 27 #include <boost/graph/dijkstra_shortest_paths.hpp> 37 namespace ob = ompl::base;
38 namespace og = ompl::geometric;
39 namespace bg = boost::geometry;
74 return std::make_shared<ob::PathLengthOptimizationObjective>(si);
86 auto obj(std::make_shared<ob::PathLengthOptimizationObjective>(si));
87 obj->setCostThreshold(ob::Cost(1.51));
96 ob::StateCostIntegralObjective(si, true)
107 return ob::Cost(1 / (si_->getStateValidityChecker()->clearance(s) +
108 std::numeric_limits<double>::min()));
120 return std::make_shared<ClearanceObjective>(si);
131 auto obj(std::make_shared<ob::PathLengthOptimizationObjective>(si));
132 obj->setCostToGoHeuristic(&ob::goalRegionCostToGo);
145 auto lengthObj(std::make_shared<ob::PathLengthOptimizationObjective>(si));
146 auto clearObj(std::make_shared<ClearanceObjective>(si));
148 return 10.0*lengthObj + clearObj;
158 auto lengthObj(std::make_shared<ob::PathLengthOptimizationObjective>(si));
159 auto clearObj(std::make_shared<ClearanceObjective>(si));
160 auto opt(std::make_shared<ob::MultiOptimizationObjective>(si));
161 opt->addObjective(lengthObj, 10.0);
162 opt->addObjective(clearObj, 1.0);
164 return ob::OptimizationObjectivePtr(opt);
180 return std::make_shared<og::PRMstar>(si);
185 return std::make_shared<og::RRTstar>(si);
190 OMPL_ERROR(
"Planner-type enum is not implemented in allocation function.");
191 return ob::PlannerPtr();
207 switch (objectiveType)
222 OMPL_ERROR(
"Optimization-objective enum is not implemented in allocation function.");
223 return ob::OptimizationObjectivePtr();
237 for(
auto &iter : poly){
238 bg::append(boost_poly.outer(),
boost_point(iter.x, iter.y));
241 bg::append(boost_poly.outer(),
boost_point(poly[0].x, poly[0].y));
258 ValidityChecker(
const ob::SpaceInformationPtr& si,std::vector<Polygon> obstacle_list ) :
259 ob::StateValidityChecker(si) {obstacles = obstacle_list;}
268 bool isValid(
const ob::State* state)
const override 271 const ob::RealVectorStateSpace::StateType* state2D = state->as<ob::RealVectorStateSpace::StateType>();
272 double x = state2D->values[0];
273 double y = state2D->values[1];
275 for (
Polygon polygon : obstacles) {
277 if (boost::geometry::within(centerPoint, Poly))
ob::OptimizationObjectivePtr getBalancedObjective2(const ob::SpaceInformationPtr &si)
get balanced objective between Path length optimization and Object clearance
Definition: ompl_planning.hpp:143
bool isValid(const ob::State *state) const override
to check if state is valid of not
Definition: ompl_planning.hpp:268
optimalPlanner
Choice of Optimal planner.
Definition: ompl_planning.hpp:45
ValidityChecker(const ob::SpaceInformationPtr &si, std::vector< Polygon > obstacle_list)
Constructor.
Definition: ompl_planning.hpp:258
PRM STAR implementation.
Definition: ompl_planning.hpp:48
ob::OptimizationObjectivePtr getThresholdPathLengthObj(const ob::SpaceInformationPtr &si)
get path length objective with threshold using the space information configured
Definition: ompl_planning.hpp:84
Path length objective.
Definition: ompl_planning.hpp:59
bg::model::d2::point_xy< double > boost_point
Definition: ompl_planning.hpp:40
planningObjective
An enum of the supported optimization objectives.
Definition: ompl_planning.hpp:54
ob::OptimizationObjectivePtr getClearanceObjective(const ob::SpaceInformationPtr &si)
get Obstace clearance objective using the space information configured
Definition: ompl_planning.hpp:118
ob::OptimizationObjectivePtr allocateObjective(const ob::SpaceInformationPtr &si, planningObjective objectiveType)
Allocate objective.
Definition: ompl_planning.hpp:205
ob::PlannerPtr allocatePlanner(ob::SpaceInformationPtr si, optimalPlanner plannerType)
Allocate planner.
Definition: ompl_planning.hpp:174
ClearanceObjective(const ob::SpaceInformationPtr &si)
Definition: ompl_planning.hpp:95
ob::OptimizationObjectivePtr getBalancedObjective1(const ob::SpaceInformationPtr &si)
get balanced objective between Path length optimization, Object clearance and Multi Optimization ...
Definition: ompl_planning.hpp:156
ob::Cost stateCost(const ob::State *s) const override
Definition: ompl_planning.hpp:105
Path length with threshold based objective.
Definition: ompl_planning.hpp:61
boost_polygon convertPolygonToBoostPolygon(const Polygon &poly)
Convert Polygon To Boost polygon.
Definition: ompl_planning.hpp:234
std::vector< Point > Polygon
Polygon(which is a representation of multiple points)
Definition: utils.hpp:58
ob::OptimizationObjectivePtr getPathLengthObjWithCostToGo(const ob::SpaceInformationPtr &si)
get Path length objective with go to heuristic cost using the space information configured ...
Definition: ompl_planning.hpp:129
Path clearance objective.
Definition: ompl_planning.hpp:57
Class to check if new random state is valid or not.
Definition: ompl_planning.hpp:249
ob::OptimizationObjectivePtr getPathLengthObjective(const ob::SpaceInformationPtr &si)
get path length objective using the space information configured
Definition: ompl_planning.hpp:72
Weighted combination obejctive of all the above three or two.
Definition: ompl_planning.hpp:63
std::vector< Polygon > obstacles
Definition: ompl_planning.hpp:253
bg::model::polygon< boost_point > boost_polygon
Definition: ompl_planning.hpp:41
boost::geometry::model::linestring< boost_point > boost_linestring
Definition: ompl_planning.hpp:42
Definition: ompl_planning.hpp:92
RRT Star implementation.
Definition: ompl_planning.hpp:50