33#ifndef DART_DYNAMICS_JACOBIANNODE_HPP_
34#define DART_DYNAMICS_JACOBIANNODE_HPP_
37#include <unordered_set>
48class 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;
98 std::size_t _arrayIndex)
const = 0;
122 virtual const std::vector<const DegreeOfFreedom*>
getChainDofs()
const = 0;
145 const Eigen::Vector3d& _offset,
const Frame* _inCoordinatesOf)
const = 0;
155 const Eigen::Vector3d& _offset)
const = 0;
165 const Eigen::Vector3d& _offset,
191 const Frame* _inCoordinatesOf)
const = 0;
204 const Eigen::Vector3d& _offset)
const = 0;
209 const Eigen::Vector3d& _offset,
const Frame* _inCoordinatesOf)
const = 0;
227 const Frame* _inCoordinatesOf)
const = 0;
237 const Eigen::Vector3d& _offset,
257 const Eigen::Vector3d& _offset,
#define DART_DECLARE_CLASS_WITH_VIRTUAL_BASE_END
Definition ClassWithVirtualBase.hpp:44
#define DART_DECLARE_CLASS_WITH_VIRTUAL_BASE_BEGIN
Definition ClassWithVirtualBase.hpp:43
#define DART_DEPRECATED(version)
Definition Deprecated.hpp:51
BodyNode class represents a single node of the skeleton.
Definition BodyNode.hpp:79
DegreeOfFreedom class is a proxy class for accessing single degrees of freedom (aka generalized coord...
Definition DegreeOfFreedom.hpp:55
The Frame class serves as the backbone of DART's kinematic tree structure.
Definition Frame.hpp:58
static Frame * World()
Definition Frame.cpp:73
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:55
virtual math::Jacobian getJacobian(const Eigen::Vector3d &_offset) const =0
Return the generalized Jacobian targeting an offset within the Frame of this JacobianNode.
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:305
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 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 const math::Jacobian & getWorldJacobian() const =0
Return the generalized Jacobian targeting the origin of this JacobianNode.
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:302
bool mIsBodyJacobianSpatialDerivDirty
Dirty flag for spatial time derivative of body Jacobian.
Definition JacobianNode.hpp:296
virtual math::Jacobian getJacobianClassicDeriv(const Frame *_inCoordinatesOf) const =0
A version of getJacobianClassicDeriv() that can return the Jacobian in coordinates of any Frame.
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 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...
virtual const math::Jacobian & getJacobianClassicDeriv() const =0
Return the classical time derivative of the generalized Jacobian targeting the origin of this BodyNod...
virtual DegreeOfFreedom * getDependentDof(std::size_t _index)=0
Get a pointer to the _indexth dependent DegreeOfFreedom for this BodyNode.
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 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 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 const math::Jacobian & getJacobian() const =0
Return the generalized Jacobian targeting the origin of this JacobianNode.
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:290
virtual std::size_t getNumDependentDofs() const =0
Same as getNumDependentGenCoords()
virtual const std::vector< std::size_t > & getDependentGenCoordIndices() const =0
Indices of the generalized coordinates which affect this JacobianNode.
void notifyJacobianDerivUpdate()
Notify this BodyNode and all its descendents that their Jacobian derivatives need to be updated.
Definition JacobianNode.cpp:120
bool mIsWorldJacobianDirty
Dirty flag for world Jacobian.
Definition JacobianNode.hpp:293
virtual const DegreeOfFreedom * getDependentDof(std::size_t _index) const =0
Get a pointer to the _indexth dependent DegreeOfFreedom for this BodyNode.
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...
virtual const std::vector< DegreeOfFreedom * > & getDependentDofs()=0
Return a std::vector of DegreeOfFreedom pointers that this Node depends on.
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:299
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 * > & getDependentDofs() const =0
Return a std::vector of DegreeOfFreedom pointers that this Node depends on.
The Node class is a base class for BodyNode and any object that attaches to a BodyNode.
Definition Node.hpp:81
virtual const std::string & getName() const =0
Get the name of this Node.
virtual const std::string & setName(const std::string &newName)=0
Set the name of this Node.
Eigen::Matrix< double, 6, Eigen::Dynamic > Jacobian
Definition MathTypes.hpp:114
Eigen::Matrix< double, 3, Eigen::Dynamic > AngularJacobian
Definition MathTypes.hpp:113
Eigen::Matrix< double, 3, Eigen::Dynamic > LinearJacobian
Definition MathTypes.hpp:112
Definition BulletCollisionDetector.cpp:65
Definition SharedLibraryManager.hpp:46