33 #ifndef DART_DYNAMICS_JACOBIANNODE_HPP_
34 #define DART_DYNAMICS_JACOBIANNODE_HPP_
37 #include <unordered_set>
47 class DegreeOfFreedom;
48 class InverseKinematics;
65 const std::shared_ptr<InverseKinematics>&
getIK(
bool _createIfNull =
false);
75 std::shared_ptr<const InverseKinematics>
getIK()
const;
80 const std::shared_ptr<InverseKinematics>&
createIK();
90 virtual bool dependsOn(std::size_t _genCoordIndex)
const = 0;
119 virtual const std::vector<const DegreeOfFreedom*>
getChainDofs()
const = 0;
142 const Frame* _inCoordinatesOf)
const = 0;
152 const Eigen::Vector3d& _offset)
const = 0;
162 const Eigen::Vector3d& _offset,
188 const Frame* _inCoordinatesOf)
const = 0;
201 const Eigen::Vector3d& _offset)
const = 0;
206 const Eigen::Vector3d& _offset,
207 const Frame* _inCoordinatesOf)
const = 0;
225 const Frame* _inCoordinatesOf)
const = 0;
235 const Eigen::Vector3d& _offset,
255 const Eigen::Vector3d& _offset,
#define DART_DEPRECATED(version)
Definition: Deprecated.hpp:51
BodyNode class represents a single node of the skeleton.
Definition: BodyNode.hpp:78
DegreeOfFreedom class is a proxy class for accessing single degrees of freedom (aka generalized coord...
Definition: DegreeOfFreedom.hpp:53
The Frame class serves as the backbone of DART's kinematic tree structure.
Definition: Frame.hpp:57
static Frame * World()
Definition: Frame.cpp:72
The InverseKinematics class provides a convenient way of setting up an IK optimization problem.
Definition: InverseKinematics.hpp:76
The JacobianNode class serves as a common interface for BodyNodes and EndEffectors to both be used as...
Definition: JacobianNode.hpp:54
virtual const math::Jacobian & getJacobian() const =0
Return the generalized Jacobian targeting the origin of this JacobianNode.
virtual math::Jacobian getJacobian(const Eigen::Vector3d &_offset) const =0
Return the generalized Jacobian targeting an offset within the Frame of this JacobianNode.
virtual const math::Jacobian & getJacobianClassicDeriv() const =0
Return the classical time derivative of the generalized Jacobian targeting the origin of this BodyNod...
virtual math::Jacobian getJacobian(const Frame *_inCoordinatesOf) const =0
A version of getJacobian() that lets you specify a coordinate Frame to express the Jacobian in.
virtual math::AngularJacobian getAngularJacobian(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the angular Jacobian targeting the origin of this BodyNode.
virtual std::size_t getNumDependentGenCoords() const =0
The number of the generalized coordinates which affect this JacobianNode.
virtual math::Jacobian getJacobianSpatialDeriv(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf) const =0
A version of getJacobianSpatialDeriv(const Eigen::Vector3d&) that allows an arbitrary coordinate Fram...
std::unordered_set< JacobianNode * > mChildJacobianNodes
JacobianNode children that descend from this JacobianNode.
Definition: JacobianNode.hpp:304
virtual const std::vector< const DegreeOfFreedom * > & getDependentDofs() const =0
Return a std::vector of DegreeOfFreedom pointers that this Node depends on.
virtual math::LinearJacobian getLinearJacobian(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the generalized Jacobian targeting an offset within the Frame of this BodyNode.
std::shared_ptr< const InverseKinematics > getIK() const
Get a pointer to an IK module for this JacobianNode.
Definition: JacobianNode.cpp:66
virtual math::Jacobian getJacobianSpatialDeriv(const Eigen::Vector3d &_offset) const =0
Return the spatial time derivative of the generalized Jacobian targeting an offset in the Frame of th...
virtual DegreeOfFreedom * getDependentDof(std::size_t _index)=0
Get a pointer to the _indexth dependent DegreeOfFreedom for this BodyNode.
virtual math::Jacobian getJacobianClassicDeriv(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf=Frame::World()) const =0
A version of getJacobianClassicDeriv() that can compute the Jacobian for an offset within the Frame o...
virtual bool dependsOn(std::size_t _genCoordIndex) const =0
Return true if _genCoordIndex-th generalized coordinate.
std::shared_ptr< InverseKinematics > mIK
Inverse kinematics module which gets lazily created upon request.
Definition: JacobianNode.hpp:301
bool mIsBodyJacobianSpatialDerivDirty
Dirty flag for spatial time derivative of body Jacobian.
Definition: JacobianNode.hpp:295
virtual math::Jacobian getJacobianClassicDeriv(const Frame *_inCoordinatesOf) const =0
A version of getJacobianClassicDeriv() that can return the Jacobian in coordinates of any Frame.
virtual math::LinearJacobian getLinearJacobianDeriv(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf=Frame::World()) const =0
A version of getLinearJacobianDeriv() that can compute the Jacobian for an offset within the Frame of...
const std::shared_ptr< InverseKinematics > & createIK()
Create a new IK module for this JacobianNode.
Definition: JacobianNode.cpp:72
virtual math::Jacobian getJacobian(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf) const =0
A version of getJacobian(const Eigen::Vector3d&) that lets you specify a coordinate Frame to express ...
virtual const DegreeOfFreedom * getDependentDof(std::size_t _index) const =0
Get a pointer to the _indexth dependent DegreeOfFreedom for this BodyNode.
virtual math::Jacobian getJacobianSpatialDeriv(const Frame *_inCoordinatesOf) const =0
A version of getJacobianSpatialDeriv() that can return the Jacobian in coordinates of any Frame.
const std::shared_ptr< InverseKinematics > & getOrCreateIK()
Get a pointer to an IK module for this JacobianNode.
Definition: JacobianNode.cpp:60
void dirtyJacobian()
Notify this BodyNode and all its descendents that their Jacobians need to be updated.
Definition: JacobianNode.cpp:105
virtual const std::vector< DegreeOfFreedom * > & getDependentDofs()=0
Return a std::vector of DegreeOfFreedom pointers that this Node depends on.
virtual const math::Jacobian & getJacobianSpatialDeriv() const =0
Return the spatial time derivative of the generalized Jacobian targeting the origin of this BodyNode.
virtual math::LinearJacobian getLinearJacobian(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the linear Jacobian targeting the origin of this BodyNode.
virtual math::AngularJacobian getAngularJacobianDeriv(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the angular Jacobian time derivative, in terms of any coordinate Frame.
virtual math::LinearJacobian getLinearJacobianDeriv(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the linear Jacobian (classical) time derivative, in terms of any coordinate Frame.
void notifyJacobianUpdate()
Notify this BodyNode and all its descendents that their Jacobians need to be updated.
Definition: JacobianNode.cpp:99
virtual ~JacobianNode()
Virtual destructor.
Definition: JacobianNode.cpp:44
void dirtyJacobianDeriv()
Notify this BodyNode and all its descendents that their Jacobian derivatives need to be updated.
Definition: JacobianNode.cpp:126
virtual std::size_t getDependentGenCoordIndex(std::size_t _arrayIndex) const =0
Return a generalized coordinate index from the array index (< getNumDependentDofs)
bool mIsBodyJacobianDirty
Dirty flag for body Jacobian.
Definition: JacobianNode.hpp:289
virtual std::size_t getNumDependentDofs() const =0
Same as getNumDependentGenCoords()
void notifyJacobianDerivUpdate()
Notify this BodyNode and all its descendents that their Jacobian derivatives need to be updated.
Definition: JacobianNode.cpp:120
virtual const math::Jacobian & getWorldJacobian() const =0
Return the generalized Jacobian targeting the origin of this JacobianNode.
bool mIsWorldJacobianDirty
Dirty flag for world Jacobian.
Definition: JacobianNode.hpp:292
virtual const std::vector< std::size_t > & getDependentGenCoordIndices() const =0
Indices of the generalized coordinates which affect this JacobianNode.
virtual math::Jacobian getWorldJacobian(const Eigen::Vector3d &_offset) const =0
Return the generalized Jacobian targeting an offset in this JacobianNode.
bool mIsWorldJacobianClassicDerivDirty
Dirty flag for the classic time derivative of the Jacobian.
Definition: JacobianNode.hpp:298
void clearIK()
Wipe away the IK module for this JacobianNode, leaving it as a nullptr.
Definition: JacobianNode.cpp:79
virtual const std::vector< const DegreeOfFreedom * > getChainDofs() const =0
Returns a DegreeOfFreedom vector containing the dofs that form a Chain leading up to this JacobianNod...
The Node class is a base class for BodyNode and any object that attaches to a BodyNode.
Definition: Node.hpp:84
virtual const std::string & setName(const std::string &newName)=0
Set the name of this Node.
virtual const std::string & getName() const =0
Get the name of this Node.
Eigen::Matrix< double, 6, Eigen::Dynamic > Jacobian
Definition: MathTypes.hpp:108
Eigen::Matrix< double, 3, Eigen::Dynamic > AngularJacobian
Definition: MathTypes.hpp:107
Eigen::Matrix< double, 3, Eigen::Dynamic > LinearJacobian
Definition: MathTypes.hpp:106
Definition: BulletCollisionDetector.cpp:63
Definition: SharedLibraryManager.hpp:43