se2ez
goals.h
Go to the documentation of this file.
1 /* Author: Zachary Kingston */
2 
3 #ifndef SE2EZ_PLAN_GOALS_
4 #define SE2EZ_PLAN_GOALS_
5 
6 #include <ompl/base/Constraint.h>
7 #include <ompl/datastructures/NearestNeighborsGNAT.h>
8 #include <ompl/base/goals/GoalLazySamples.h>
9 
10 namespace ompl
11 {
12  namespace base
13  {
14  OMPL_CLASS_FORWARD(WrapperGoal);
15  class WrapperGoalRegion : public GoalRegion
16  {
17  public:
18  WrapperGoalRegion(const SpaceInformationPtr &si, const std::shared_ptr<GoalRegion> &goal);
19 
20  bool isSatisfied(const State *state) const override;
21  bool isSatisfied(const State *state, double *distance) const override;
22  double distanceGoal(const State *state) const override;
23  void print(std::ostream &out = std::cout) const override;
24  void setThreshold(double threshold);
25  double getThreshold() const;
26 
27  private:
29  };
30 
32  class GoalConstraint : public Constraint
33  {
34  public:
36 
37  void function(const ompl::base::State *state, //
38  Eigen::Ref<Eigen::VectorXd> out) const override;
39  void function(const Eigen::Ref<const Eigen::VectorXd> &x, //
40  Eigen::Ref<Eigen::VectorXd> out) const override;
41 
42  double distance(const ompl::base::State *state) const override;
43  bool isSatisfied(const ompl::base::State *state) const override;
44 
45  private:
47  State *state_;
48  };
49 
51  class Foliation : public Constraint
52  {
53  public:
54  Foliation(const unsigned int ambientDim, const unsigned int coDim, const unsigned int leafDim,
55  double tolerance = magic::CONSTRAINT_PROJECTION_TOLERANCE);
56 
57  virtual FoliationPtr copy() const = 0;
58 
59  virtual Eigen::VectorXd getTransversal(const Eigen::Ref<const Eigen::VectorXd> &state) const = 0;
60 
61  virtual ConstraintPtr getLeaf(const Eigen::Ref<const Eigen::VectorXd> &tv) const = 0;
62 
63  virtual FoliationPtr getFrond(const Eigen::Ref<const Eigen::VectorXd> &a,
64  const Eigen::Ref<const Eigen::VectorXd> &b) const = 0;
65 
66  unsigned int getLeafDimension() const;
67  unsigned int getTransverseDimension() const;
68  void setLeafDimension(unsigned int p);
69  void setTransverseDimension(unsigned int t);
70 
71  protected:
72  unsigned int p_; ///< Leaf dimension.
73  unsigned int t_; ///< Transverse dimension.
74  };
75 
78  {
79  public:
80  FoliationIntersection(const unsigned int ambientDim, std::vector<FoliationPtr> foliations,
81  double tolerance = magic::CONSTRAINT_PROJECTION_TOLERANCE);
82 
83  FoliationPtr copy() const override;
84 
85  void function(const Eigen::Ref<const Eigen::VectorXd> &x,
86  Eigen::Ref<Eigen::VectorXd> out) const override;
87 
88  void jacobian(const Eigen::Ref<const Eigen::VectorXd> &x,
89  Eigen::Ref<Eigen::MatrixXd> out) const override;
90 
91  Eigen::VectorXd getTransversal(const Eigen::Ref<const Eigen::VectorXd> &state) const override;
92  ConstraintPtr getLeaf(const Eigen::Ref<const Eigen::VectorXd> &tv) const override;
93  FoliationPtr getFrond(const Eigen::Ref<const Eigen::VectorXd> &a,
94  const Eigen::Ref<const Eigen::VectorXd> &b) const override;
95 
96  protected:
97  void addConstraint(const FoliationPtr &constraint);
98 
99  /** \brief Constituent constraints. */
101  };
102 
104  class ConstraintGoal : public GoalLazySamples
105  {
106  public:
107  ConstraintGoal(const ConstraintPtr &constraint, SpaceInformationPtr si, double threshold = 1e-5);
108  ~ConstraintGoal() override;
109 
110  double distanceGoal(const State *state) const override;
111 
112  protected:
113  bool sample(const GoalLazySamples *gls, State *state);
114  void update(const State *state);
115 
116  Eigen::Ref<Eigen::VectorXd> getVector(State *state) const;
117  const Eigen::Ref<const Eigen::VectorXd> getVectorConst(const State *state) const;
118 
119  const bool isConstrained_;
120  const bool isFoliation_;
121  const ConstraintPtr constraint_;
122  const StateSamplerPtr sampler_;
123 
126 
127  private:
128  const unsigned int tries_{5};
129  const unsigned int maxSample_{100};
130  ConstraintPtr allocateConstraint(const ConstraintPtr &constraint) const;
131  };
132  } // namespace base
133 } // namespace ompl
134 
135 #endif
const std::shared_ptr< GoalRegion > goal_
Definition: goals.h:46
bool isSatisfied(const State *state) const override
Definition: goals.cpp:17
const StateSamplerPtr sampler_
Definition: goals.h:122
void setThreshold(double threshold)
Definition: goals.cpp:37
std::vector< FoliationPtr > foliations_
Constituent constraints.
Definition: goals.h:100
unsigned int t_
Transverse dimension.
Definition: goals.h:73
double distanceGoal(const State *state) const override
Definition: goals.cpp:27
void print(std::ostream &out=std::cout) const override
Definition: goals.cpp:32
const ConstraintPtr constraint_
Definition: goals.h:121
WrapperGoalRegion(const SpaceInformationPtr &si, const std::shared_ptr< GoalRegion > &goal)
Definition: goals.cpp:12
Definition: goals.h:10
double getThreshold() const
Definition: goals.cpp:42
std::shared_ptr< NearestNeighbors< Transition > > transverse_
Definition: goals.h:125
const bool isFoliation_
Definition: goals.h:120
OMPL_CLASS_FORWARD(WrapperGoal)
unsigned int p_
Leaf dimension.
Definition: goals.h:72
const bool isConstrained_
Definition: goals.h:119
const std::shared_ptr< GoalRegion > goal_
Definition: goals.h:28