3 #ifndef SE2EZ_PLAN_CONSTRAINT_ 4 #define SE2EZ_PLAN_CONSTRAINT_ 7 #include <ompl/base/Constraint.h> 32 void function(
const ompl::base::State *state,
33 Eigen::Ref<Eigen::VectorXd> out)
const override;
34 void function(
const Eigen::Ref<const Eigen::VectorXd> &x,
35 Eigen::Ref<Eigen::VectorXd> out)
const override;
37 void jacobian(
const ompl::base::State *state,
38 Eigen::Ref<Eigen::MatrixXd> out)
const override;
39 void jacobian(
const Eigen::Ref<const Eigen::VectorXd> &x,
40 Eigen::Ref<Eigen::MatrixXd> out)
const override;
42 bool project(ompl::base::State *state)
const override;
43 bool project(Eigen::Ref<Eigen::VectorXd> x)
const override;
45 double distance(
const ompl::base::State *state)
const override;
46 bool isSatisfied(
const ompl::base::State *state)
const override;
48 void setDrawOffset(
const Eigen::Ref<const Eigen::Vector2d> &v);
49 const Eigen::Vector2d &getDrawOffset()
const;
53 const std::string &base,
unsigned int dimension = 1,
unsigned int leaf = 0);
56 getPose(
const ompl::base::State *state)
const;
59 getPose(
const Eigen::Ref<const Eigen::VectorXd> &x)
const;
61 virtual void functionInternal(
const Eigen::Isometry2d &pose,
const Eigen::Isometry2d &base,
62 Eigen::Ref<Eigen::VectorXd> out)
const = 0;
63 virtual void jacobianInternal(
const Eigen::Isometry2d &pose,
const Eigen::Isometry2d &base,
64 const Eigen::MatrixXd &jac,
65 Eigen::Ref<Eigen::MatrixXd> out)
const = 0;
67 Eigen::Vector2d draw_{Eigen::Vector2d::Zero()};
80 const std::string &base,
const Eigen::Vector2d &a,
const Eigen::Vector2d &b);
82 ompl::base::FoliationPtr
copy()
const override;
86 Eigen::VectorXd
getTransversal(
const Eigen::Ref<const Eigen::VectorXd> &state)
const override;
87 ompl::base::ConstraintPtr
getLeaf(
const Eigen::Ref<const Eigen::VectorXd> &tv)
const override;
88 ompl::base::FoliationPtr
getFrond(
const Eigen::Ref<const Eigen::VectorXd> &a,
89 const Eigen::Ref<const Eigen::VectorXd> &b)
const override;
91 void getEndpoints(Eigen::Ref<Eigen::VectorXd> a, Eigen::Ref<Eigen::VectorXd> b,
95 void functionInternal(
const Eigen::Isometry2d &pose,
const Eigen::Isometry2d &base,
96 Eigen::Ref<Eigen::VectorXd> out)
const override;
97 void jacobianInternal(
const Eigen::Isometry2d &pose,
const Eigen::Isometry2d &base,
98 const Eigen::MatrixXd &jac, Eigen::Ref<Eigen::MatrixXd> out)
const override;
121 void getPlace(
const Eigen::Isometry2d &pose,
const Eigen::Isometry2d &base,
Result &r)
const;
123 const Eigen::Vector2d
a_;
124 const Eigen::Vector2d
b_;
125 const Eigen::Vector2d
v_;
133 const std::string &base,
const Eigen::Vector2d &p);
135 ompl::base::FoliationPtr
copy()
const override;
138 Eigen::VectorXd
getTransversal(
const Eigen::Ref<const Eigen::VectorXd> &state)
const override;
139 ompl::base::ConstraintPtr
getLeaf(
const Eigen::Ref<const Eigen::VectorXd> &tv)
const override;
140 ompl::base::FoliationPtr
getFrond(
const Eigen::Ref<const Eigen::VectorXd> &a,
141 const Eigen::Ref<const Eigen::VectorXd> &b)
const override;
143 void getPoint(Eigen::Ref<Eigen::VectorXd> a,
const StatePtr &state)
const;
146 void functionInternal(
const Eigen::Isometry2d &pose,
const Eigen::Isometry2d &base,
147 Eigen::Ref<Eigen::VectorXd> out)
const override;
148 void jacobianInternal(
const Eigen::Isometry2d &pose,
const Eigen::Isometry2d &base,
149 const Eigen::MatrixXd &jac, Eigen::Ref<Eigen::MatrixXd> out)
const override;
152 const Eigen::Vector2d
p_;
159 const std::string &base,
const Eigen::Vector2d &p,
const Eigen::Vector2d &r,
unsigned int exponent = 2);
161 ompl::base::FoliationPtr
copy()
const override;
163 Eigen::VectorXd
getTransversal(
const Eigen::Ref<const Eigen::VectorXd> &state)
const override;
164 ompl::base::ConstraintPtr
getLeaf(
const Eigen::Ref<const Eigen::VectorXd> &tv)
const override;
165 ompl::base::FoliationPtr
getFrond(
const Eigen::Ref<const Eigen::VectorXd> &a,
166 const Eigen::Ref<const Eigen::VectorXd> &b)
const override;
168 void getCircle(Eigen::Ref<Eigen::VectorXd> p, Eigen::Ref<Eigen::VectorXd> r,
double &v,
172 double getAngle(
const Eigen::Isometry2d &frame,
const Eigen::Isometry2d &base)
const;
173 void functionInternal(
const Eigen::Isometry2d &pose,
const Eigen::Isometry2d &base,
174 Eigen::Ref<Eigen::VectorXd> out)
const override;
175 void jacobianInternal(
const Eigen::Isometry2d &pose,
const Eigen::Isometry2d &base,
176 const Eigen::MatrixXd &jac, Eigen::Ref<Eigen::MatrixXd> out)
const override;
179 const Eigen::Vector2d
p_;
180 const Eigen::Vector2d
r_;
ompl::base::ConstraintPtr getLeaf(const Eigen::Ref< const Eigen::VectorXd > &tv) const override
A shared pointer wrapper for se2ez::State.
void getEndpoints(Eigen::Ref< Eigen::VectorXd > a, Eigen::Ref< Eigen::VectorXd > b, const StatePtr &state) const
std::recursive_mutex mutex_
void getPlace(const Eigen::Isometry2d &pose, const Eigen::Isometry2d &base, Result &r) const
void jacobianInternal(const Eigen::Isometry2d &pose, const Eigen::Isometry2d &base, const Eigen::MatrixXd &jac, Eigen::Ref< Eigen::MatrixXd > out) const override
ompl::base::FoliationPtr copy() const override
LineConstraint(const std::string &name, const RobotPtr &robot, const std::string &frame, const std::string &base, const Eigen::Vector2d &a, const Eigen::Vector2d &b)
void functionInternal(const Eigen::Isometry2d &pose, const Eigen::Isometry2d &base, Eigen::Ref< Eigen::VectorXd > out) const override
ompl::base::FoliationPtr getFrond(const Eigen::Ref< const Eigen::VectorXd > &a, const Eigen::Ref< const Eigen::VectorXd > &b) const override
std::map< std::string, ompl::base::ConstraintPtr > loadConstraints(const RobotPtr &robot, const std::string &filename)
A shared pointer wrapper for se2ez::Robot.
Eigen::VectorXd getTransversal(const Eigen::Ref< const Eigen::VectorXd > &state) const override
#define SE2EZ_CLASS_FORWARD(C)