3 #ifndef ROBOWFLEX_DART_JOINTS_
4 #define ROBOWFLEX_DART_JOINTS_
6 #include <dart/dynamics/DegreeOfFreedom.hpp>
7 #include <dart/dynamics/RevoluteJoint.hpp>
8 #include <dart/dynamics/PrismaticJoint.hpp>
9 #include <dart/dynamics/FreeJoint.hpp>
10 #include <dart/dynamics/PlanarJoint.hpp>
12 #include <ompl/util/RandomNumbers.h>
51 Joint(
StateSpace *space,
unsigned int skelIndex,
unsigned int jointIndex,
52 unsigned int sizeInSpace,
unsigned int startIndex,
unsigned int numDof);
61 Joint(
StateSpace *space, dart::dynamics::Joint *joint,
unsigned int sizeInSpace,
62 unsigned int startIndex = 0,
unsigned int numDof = 0);
74 Eigen::Ref<Eigen::VectorXd>
getSpaceVars(Eigen::Ref<Eigen::VectorXd> a);
80 Eigen::Ref<const Eigen::VectorXd>
getSpaceVarsConst(
const Eigen::Ref<const Eigen::VectorXd> &a);
115 virtual void setUpperLimits(
const Eigen::Ref<const Eigen::VectorXd> &v);
120 virtual void setLowerLimits(
const Eigen::Ref<const Eigen::VectorXd> &v);
137 virtual double distance(
const Eigen::Ref<const Eigen::VectorXd> &a,
138 const Eigen::Ref<const Eigen::VectorXd> &b)
const = 0;
151 virtual void interpolate(
const Eigen::Ref<const Eigen::VectorXd> &a,
152 const Eigen::Ref<const Eigen::VectorXd> &b,
154 Eigen::Ref<Eigen::VectorXd> c)
const = 0;
170 virtual void sample(Eigen::Ref<Eigen::VectorXd> a)
const = 0;
178 const Eigen::Ref<const Eigen::VectorXd> &near,
236 dart::dynamics::Joint *joint,
237 double low,
double high);
248 dart::dynamics::Joint *joint,
249 unsigned int n,
unsigned int start,
250 Eigen::VectorXd low, Eigen::VectorXd high);
254 void setUpperLimits(
const Eigen::Ref<const Eigen::VectorXd> &v)
override;
255 void setLowerLimits(
const Eigen::Ref<const Eigen::VectorXd> &v)
override;
257 double distance(
const Eigen::Ref<const Eigen::VectorXd> &a,
258 const Eigen::Ref<const Eigen::VectorXd> &b)
const override;
262 void interpolate(
const Eigen::Ref<const Eigen::VectorXd> &a,
263 const Eigen::Ref<const Eigen::VectorXd> &b,
265 Eigen::Ref<Eigen::VectorXd> c)
const override;
267 void enforceBounds(Eigen::Ref<Eigen::VectorXd> a)
const override;
269 bool satisfiesBounds(
const Eigen::Ref<const Eigen::VectorXd> &a)
const override;
271 void sample(Eigen::Ref<Eigen::VectorXd> a)
const override;
273 void sampleNear(Eigen::Ref<Eigen::VectorXd> a,
274 const Eigen::Ref<const Eigen::VectorXd> &near,
275 double r)
const override;
293 double distance(
const Eigen::Ref<const Eigen::VectorXd> &a,
294 const Eigen::Ref<const Eigen::VectorXd> &b)
const override;
298 void interpolate(
const Eigen::Ref<const Eigen::VectorXd> &a,
299 const Eigen::Ref<const Eigen::VectorXd> &b,
301 Eigen::Ref<Eigen::VectorXd> c)
const override;
303 void enforceBounds(Eigen::Ref<Eigen::VectorXd> a)
const override;
305 bool satisfiesBounds(
const Eigen::Ref<const Eigen::VectorXd> &a)
const override;
307 void sample(Eigen::Ref<Eigen::VectorXd> a)
const override;
309 void sampleNear(Eigen::Ref<Eigen::VectorXd> a,
310 const Eigen::Ref<const Eigen::VectorXd> &near,
311 double r)
const override;
329 Eigen::Quaterniond
toQuat(
const Eigen::Ref<const Eigen::VectorXd> &a)
const;
335 void setQuat(Eigen::Ref<Eigen::VectorXd> a,
const Eigen::Quaterniond &q)
const;
337 double distance(
const Eigen::Ref<const Eigen::VectorXd> &a,
338 const Eigen::Ref<const Eigen::VectorXd> &b)
const override;
342 void interpolate(
const Eigen::Ref<const Eigen::VectorXd> &a,
343 const Eigen::Ref<const Eigen::VectorXd> &b,
345 Eigen::Ref<Eigen::VectorXd> c)
const override;
347 void enforceBounds(Eigen::Ref<Eigen::VectorXd> a)
const override;
349 bool satisfiesBounds(
const Eigen::Ref<const Eigen::VectorXd> &a)
const override;
351 void sample(Eigen::Ref<Eigen::VectorXd> a)
const override;
353 void sampleNear(Eigen::Ref<Eigen::VectorXd> a,
354 const Eigen::Ref<const Eigen::VectorXd> &near,
355 double r)
const override;
#define ROBOWFLEX_CLASS_FORWARD(C)
Macro that forward declares a class and defines two shared ptrs types:
Abstract controllable joint for robowflex::darts::StateSpace.
const std::vector< std::size_t > & getIndices() const
Get the indices in the skeleton for this joint.
unsigned int skelIndex_
Index of skeleton.
virtual void setLowerLimits(const Eigen::Ref< const Eigen::VectorXd > &v)
Set the lower limits of a joint.
unsigned int jointIndex_
Index of joint.
unsigned int startIndex_
Start index in joint.
StateSpace * space_
State space this joint is for.
virtual void setJointState(WorldPtr world, const Eigen::Ref< const Eigen::VectorXd > &a) const
Set the state of the joint in world.
virtual Eigen::VectorXd getLowerLimits() const
Get the lower limits of a joint.
std::vector< std::size_t > indices_
Indices this joint corresponds to.
virtual void enforceBounds(Eigen::Ref< Eigen::VectorXd > a) const =0
Enforce bounds on a joint configuration.
virtual bool satisfiesBounds(const Eigen::Ref< const Eigen::VectorXd > &a) const =0
Check if a joint configuration satisfies bounds.
Eigen::Ref< Eigen::VectorXd > getSpaceVars(Eigen::Ref< Eigen::VectorXd > a)
Gets the joint configuration (subvector of variables for this joint) from a configuration.
unsigned int numDof_
Number of DoF this joint controls.
Joint(StateSpace *space, unsigned int skelIndex, unsigned int jointIndex, unsigned int sizeInSpace, unsigned int startIndex, unsigned int numDof)
Constructor.
virtual void interpolate(const Eigen::Ref< const Eigen::VectorXd > &a, const Eigen::Ref< const Eigen::VectorXd > &b, double t, Eigen::Ref< Eigen::VectorXd > c) const =0
Interpolate to a new configuration c which is t from a to b.
std::size_t getJointIndex() const
Get the index of the joint in the skeleton.
unsigned int startInSpace_
Start index in space configuration.
dart::dynamics::Joint * getJoint(WorldPtr world) const
Get the Dart joint from a world.
virtual void getJointState(WorldPtr world, Eigen::Ref< Eigen::VectorXd > a) const
Get the state of the joint in world.
Eigen::Ref< const Eigen::VectorXd > getSpaceVarsConst(const Eigen::Ref< const Eigen::VectorXd > &a)
Gets the subvector of variables for this joint from a configuration.
virtual double distance(const Eigen::Ref< const Eigen::VectorXd > &a, const Eigen::Ref< const Eigen::VectorXd > &b) const =0
Compute the distance between two joint configurations.
unsigned int sizeInSpace_
Size of joint in space configuration.
std::vector< std::string > dofs_
Controlled DoF names.
std::size_t getDimension() const
Get the dimension of this joint.
const std::vector< std::string > & getDofs() const
Get the names of the DoF in the skeleton for this joint.
ompl::RNG & rng_
Random number generator.
virtual void sample(Eigen::Ref< Eigen::VectorXd > a) const =0
Sample a configuration for this joint.
virtual double getMaximumExtent() const =0
Get the maximum extent of this joint (maximum distance).
virtual void sampleNear(Eigen::Ref< Eigen::VectorXd > a, const Eigen::Ref< const Eigen::VectorXd > &near, double r) const =0
Sample a configuration for this joint near another configuration near.
virtual Eigen::VectorXd getUpperLimits() const
Get the upper limits of a joint.
std::size_t getSkeletonIndex() const
Get the index of the skeleton for this joint in the world.
virtual void setUpperLimits(const Eigen::Ref< const Eigen::VectorXd > &v)
Set the upper limits of a joint.
A real vector joint of n dimensions.
void sampleNear(Eigen::Ref< Eigen::VectorXd > a, const Eigen::Ref< const Eigen::VectorXd > &near, double r) const override
Sample a configuration for this joint near another configuration near.
double distance(const Eigen::Ref< const Eigen::VectorXd > &a, const Eigen::Ref< const Eigen::VectorXd > &b) const override
Compute the distance between two joint configurations.
RnJoint(StateSpace *space, dart::dynamics::Joint *joint, double low, double high)
Constructor.
double getMaximumExtent() const override
Get the maximum extent of this joint (maximum distance).
void sample(Eigen::Ref< Eigen::VectorXd > a) const override
Sample a configuration for this joint.
void enforceBounds(Eigen::Ref< Eigen::VectorXd > a) const override
Enforce bounds on a joint configuration.
Eigen::VectorXd high_
Upper bounds.
bool satisfiesBounds(const Eigen::Ref< const Eigen::VectorXd > &a) const override
Check if a joint configuration satisfies bounds.
void setUpperLimits(const Eigen::Ref< const Eigen::VectorXd > &v) override
Set the upper limits of a joint.
void setLowerLimits(const Eigen::Ref< const Eigen::VectorXd > &v) override
Set the lower limits of a joint.
void interpolate(const Eigen::Ref< const Eigen::VectorXd > &a, const Eigen::Ref< const Eigen::VectorXd > &b, double t, Eigen::Ref< Eigen::VectorXd > c) const override
Interpolate to a new configuration c which is t from a to b.
Eigen::VectorXd low_
Lower bounds.
A SO(2) joint. Bounds are from -pi to pi, and wraps.
void sample(Eigen::Ref< Eigen::VectorXd > a) const override
Sample a configuration for this joint.
void enforceBounds(Eigen::Ref< Eigen::VectorXd > a) const override
Enforce bounds on a joint configuration.
void interpolate(const Eigen::Ref< const Eigen::VectorXd > &a, const Eigen::Ref< const Eigen::VectorXd > &b, double t, Eigen::Ref< Eigen::VectorXd > c) const override
Interpolate to a new configuration c which is t from a to b.
void sampleNear(Eigen::Ref< Eigen::VectorXd > a, const Eigen::Ref< const Eigen::VectorXd > &near, double r) const override
Sample a configuration for this joint near another configuration near.
double distance(const Eigen::Ref< const Eigen::VectorXd > &a, const Eigen::Ref< const Eigen::VectorXd > &b) const override
Compute the distance between two joint configurations.
double getMaximumExtent() const override
Get the maximum extent of this joint (maximum distance).
bool satisfiesBounds(const Eigen::Ref< const Eigen::VectorXd > &a) const override
Check if a joint configuration satisfies bounds.
SO2Joint(StateSpace *space, dart::dynamics::Joint *joint, unsigned int index=0)
Constructor.
A SO(3) joint modeled with quaternions.
void interpolate(const Eigen::Ref< const Eigen::VectorXd > &a, const Eigen::Ref< const Eigen::VectorXd > &b, double t, Eigen::Ref< Eigen::VectorXd > c) const override
Interpolate to a new configuration c which is t from a to b.
SO3Joint(StateSpace *space, dart::dynamics::Joint *joint)
Constructor.
void setQuat(Eigen::Ref< Eigen::VectorXd > a, const Eigen::Quaterniond &q) const
Set the joint configuration to a quaternion.
void enforceBounds(Eigen::Ref< Eigen::VectorXd > a) const override
Enforce bounds on a joint configuration.
double getMaximumExtent() const override
Get the maximum extent of this joint (maximum distance).
double distance(const Eigen::Ref< const Eigen::VectorXd > &a, const Eigen::Ref< const Eigen::VectorXd > &b) const override
Compute the distance between two joint configurations.
void sample(Eigen::Ref< Eigen::VectorXd > a) const override
Sample a configuration for this joint.
void setJointState(WorldPtr world, const Eigen::Ref< const Eigen::VectorXd > &a) const override
Set the state of the joint in world.
void getJointState(WorldPtr world, Eigen::Ref< Eigen::VectorXd > a) const override
Get the state of the joint in world.
Eigen::Quaterniond toQuat(const Eigen::Ref< const Eigen::VectorXd > &a) const
Get the quaternion corresponding to the joint configuration.
void sampleNear(Eigen::Ref< Eigen::VectorXd > a, const Eigen::Ref< const Eigen::VectorXd > &near, double r) const override
Sample a configuration for this joint near another configuration near.
bool satisfiesBounds(const Eigen::Ref< const Eigen::VectorXd > &a) const override
Check if a joint configuration satisfies bounds.
An OMPL state space for robowflex::darts::World. Can do motion planning for any of the robots or stru...
A shared pointer wrapper for robowflex::darts::World.
Main namespace. Contains all library classes and functions.