33 #ifndef DART_DYNAMICS_JACOBIANNODE_HPP_ 34 #define DART_DYNAMICS_JACOBIANNODE_HPP_ 37 #include <unordered_set> 39 #include "dart/dynamics/Frame.hpp" 40 #include "dart/dynamics/Node.hpp" 41 #include "dart/dynamics/SmartPointer.hpp" 47 class DegreeOfFreedom;
48 class InverseKinematics;
53 DART_DECLARE_CLASS_WITH_VIRTUAL_BASE_BEGIN
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;
132 virtual const math::Jacobian&
getJacobian()
const = 0;
136 virtual math::Jacobian
getJacobian(
const Frame* _inCoordinatesOf)
const = 0;
140 virtual math::Jacobian
getJacobian(
const Eigen::Vector3d& _offset)
const = 0;
145 const Eigen::Vector3d& _offset,
const Frame* _inCoordinatesOf)
const = 0;
155 const Eigen::Vector3d& _offset)
const = 0;
160 const Frame* _inCoordinatesOf = Frame::World())
const = 0;
165 const Eigen::Vector3d& _offset,
166 const Frame* _inCoordinatesOf = Frame::World())
const = 0;
171 const Frame* _inCoordinatesOf = Frame::World())
const = 0;
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,
238 const Frame* _inCoordinatesOf = Frame::World())
const = 0;
247 const Frame* _inCoordinatesOf = Frame::World())
const = 0;
257 const Eigen::Vector3d& _offset,
258 const Frame* _inCoordinatesOf = Frame::World())
const = 0;
263 const Frame* _inCoordinatesOf = Frame::World())
const = 0;
302 std::shared_ptr<InverseKinematics>
mIK;
307 DART_DECLARE_CLASS_WITH_VIRTUAL_BASE_END
312 #endif // DART_DYNAMICS_JACOBIANNODE_HPP_ bool mIsBodyJacobianSpatialDerivDirty
Dirty flag for spatial time derivative of body Jacobian.
Definition: JacobianNode.hpp:296
std::shared_ptr< InverseKinematics > mIK
Inverse kinematics module which gets lazily created upon request.
Definition: JacobianNode.hpp:302
virtual const std::string & setName(const std::string &newName)=0
Set the name of this Node.
virtual bool dependsOn(std::size_t _genCoordIndex) const =0
Return true if _genCoordIndex-th generalized coordinate.
virtual const std::vector< std::size_t > & getDependentGenCoordIndices() const =0
Indices of the generalized coordinates which affect this JacobianNode.
The Node class is a base class for BodyNode and any object that attaches to a BodyNode.
Definition: Node.hpp:79
virtual math::AngularJacobian getAngularJacobian(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the angular Jacobian targeting the origin of this BodyNode.
The Frame class serves as the backbone of DART's kinematic tree structure.
Definition: Frame.hpp:57
void notifyJacobianUpdate()
Notify this BodyNode and all its descendents that their Jacobians need to be updated.
Definition: JacobianNode.cpp:99
bool mIsWorldJacobianClassicDerivDirty
Dirty flag for the classic time derivative of the Jacobian.
Definition: JacobianNode.hpp:299
const std::shared_ptr< InverseKinematics > & createIK()
Create a new IK module for this JacobianNode.
Definition: JacobianNode.cpp:72
virtual const math::Jacobian & getJacobian() const =0
Return the generalized Jacobian targeting the origin of this JacobianNode.
std::shared_ptr< const InverseKinematics > getIK() const
Get a pointer to an IK module for this JacobianNode.
Definition: JacobianNode.cpp:66
void dirtyJacobianDeriv()
Notify this BodyNode and all its descendents that their Jacobian derivatives need to be updated...
Definition: JacobianNode.cpp:126
virtual math::AngularJacobian getAngularJacobianDeriv(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the angular Jacobian time derivative, in terms of any coordinate Frame.
bool mIsWorldJacobianDirty
Dirty flag for world Jacobian.
Definition: JacobianNode.hpp:293
virtual std::size_t getNumDependentGenCoords() const =0
The number of the generalized coordinates which affect this JacobianNode.
Definition: Aspect.cpp:40
The JacobianNode class serves as a common interface for BodyNodes and EndEffectors to both be used as...
Definition: JacobianNode.hpp:54
void clearIK()
Wipe away the IK module for this JacobianNode, leaving it as a nullptr.
Definition: JacobianNode.cpp:79
virtual DegreeOfFreedom * getDependentDof(std::size_t _index)=0
Get a pointer to the _indexth dependent DegreeOfFreedom for this BodyNode.
JacobianNode(BodyNode *bn)
Constructor.
Definition: JacobianNode.cpp:85
void notifyJacobianDerivUpdate()
Notify this BodyNode and all its descendents that their Jacobian derivatives need to be updated...
Definition: JacobianNode.cpp:120
virtual const std::vector< DegreeOfFreedom * > & getDependentDofs()=0
Return a std::vector of DegreeOfFreedom pointers that this Node depends on.
virtual const math::Jacobian & getJacobianClassicDeriv() const =0
Return the classical time derivative of the generalized Jacobian targeting the origin of this BodyNod...
bool mIsBodyJacobianDirty
Dirty flag for body Jacobian.
Definition: JacobianNode.hpp:290
virtual std::size_t getDependentGenCoordIndex(std::size_t _arrayIndex) const =0
Return a generalized coordinate index from the array index (< getNumDependentDofs) ...
const std::shared_ptr< InverseKinematics > & getOrCreateIK()
Get a pointer to an IK module for this JacobianNode.
Definition: JacobianNode.cpp:60
virtual ~JacobianNode()
Virtual destructor.
Definition: JacobianNode.cpp:44
void dirtyJacobian()
Notify this BodyNode and all its descendents that their Jacobians need to be updated.
Definition: JacobianNode.cpp:105
virtual std::size_t getNumDependentDofs() const =0
Same as getNumDependentGenCoords()
BodyNode class represents a single node of the skeleton.
Definition: BodyNode.hpp:74
DegreeOfFreedom class is a proxy class for accessing single degrees of freedom (aka generalized coord...
Definition: DegreeOfFreedom.hpp:54
virtual const math::Jacobian & getJacobianSpatialDeriv() const =0
Return the spatial time derivative of the generalized Jacobian targeting the origin of this BodyNode...
virtual const math::Jacobian & getWorldJacobian() 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...
virtual math::LinearJacobian getLinearJacobian(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the linear Jacobian targeting the origin of this BodyNode.
std::unordered_set< JacobianNode * > mChildJacobianNodes
JacobianNode children that descend from this JacobianNode.
Definition: JacobianNode.hpp:305
virtual const std::string & getName() const =0
Get the name of this Node.
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...