dart
|
#include <Skeleton.hpp>
Classes | |
struct | Configuration |
The Configuration struct represents the joint configuration of a Skeleton. More... | |
struct | DataCache |
struct | DirtyFlags |
Public Types | |
enum | ConfigFlags { CONFIG_NOTHING = 0, CONFIG_POSITIONS = 1 << 1, CONFIG_VELOCITIES = 1 << 2, CONFIG_ACCELERATIONS = 1 << 3, CONFIG_FORCES = 1 << 4, CONFIG_COMMANDS = 1 << 5, CONFIG_ALL = 0xFF } |
using | AspectPropertiesData = detail::SkeletonAspectProperties |
using | AspectProperties = common::Aspect::MakeProperties< AspectPropertiesData > |
using | State = common::Composite::State |
using | Properties = common::Composite::Properties |
![]() | |
using | NameChangedSignal = common::Signal< void(std::shared_ptr< const MetaSkeleton > _skeleton, const std::string &_oldName, const std::string &_newName)> |
![]() | |
using | Impl = EmbedProperties< DerivedT, PropertiesDataT > |
using | Derived = typename Impl::Derived |
using | AspectPropertiesData = typename Impl::AspectPropertiesData |
using | AspectProperties = typename Impl::AspectProperties |
using | Aspect = typename Impl::Aspect |
using | Base = CompositeJoiner< Impl, CompositeBases... > |
Public Member Functions | |
void | integratePositions (double _dt) |
void | integrateVelocities (double _dt) |
Eigen::VectorXd | getPositionDifferences (const Eigen::VectorXd &_q2, const Eigen::VectorXd &_q1) const |
Return the difference of two generalized positions which are measured in the configuration space of this Skeleton. More... | |
Eigen::VectorXd | getVelocityDifferences (const Eigen::VectorXd &_dq2, const Eigen::VectorXd &_dq1) const |
Return the difference of two generalized velocities or accelerations which are measured in the tangent space at the identity. More... | |
void | computeForwardKinematics (bool _updateTransforms=true, bool _updateVels=true, bool _updateAccs=true) |
Compute forward kinematics. More... | |
void | computeForwardDynamics () |
Compute forward dynamics. | |
void | computeInverseDynamics (bool _withExternalForces=false, bool _withDampingForces=false, bool _withSpringForces=false) |
Computes inverse dynamics. More... | |
void | clearConstraintImpulses () |
Clear constraint impulses and cache data used for impulse-based forward dynamics algorithm, where the constraint impulses are spatial constraints on the BodyNodes and generalized constraints on the Joints. More... | |
void | updateBiasImpulse (BodyNode *_bodyNode) |
Update bias impulses. | |
void | updateBiasImpulse (BodyNode *_bodyNode, const Eigen::Vector6d &_imp) |
Update bias impulses due to impulse [_imp] on body node [_bodyNode]. More... | |
void | updateBiasImpulse (BodyNode *_bodyNode1, const Eigen::Vector6d &_imp1, BodyNode *_bodyNode2, const Eigen::Vector6d &_imp2) |
Update bias impulses due to impulse [_imp] on body node [_bodyNode]. More... | |
void | updateBiasImpulse (SoftBodyNode *_softBodyNode, PointMass *_pointMass, const Eigen::Vector3d &_imp) |
Update bias impulses due to impulse[_imp] on body node [_bodyNode]. | |
void | updateVelocityChange () |
Update velocity changes in body nodes and joints due to applied impulse. | |
void | setImpulseApplied (bool _val) |
Set whether this skeleton is constrained. More... | |
bool | isImpulseApplied () const |
Get whether this skeleton is constrained. | |
void | computeImpulseForwardDynamics () |
Compute impulse-based forward dynamics. | |
void | resetUnion () |
Configuration | |
void | setConfiguration (const Configuration &configuration) |
Set the configuration of this Skeleton. | |
Configuration | getConfiguration (int flags=CONFIG_ALL) const |
Get the configuration of this Skeleton. | |
Configuration | getConfiguration (const std::vector< std::size_t > &indices, int flags=CONFIG_ALL) const |
Get the configuration of the specified indices in this Skeleton. | |
State | |
void | setState (const State &state) |
Set the State of this Skeleton [alias for setCompositeState(~)]. | |
State | getState () const |
Get the State of this Skeleton [alias for getCompositeState()]. | |
Properties | |
void | setProperties (const Properties &properties) |
Set all properties of this Skeleton. | |
Properties | getProperties () const |
Get all properties of this Skeleton. | |
void | setProperties (const AspectProperties &properties) |
Set the Properties of this Skeleton. | |
const AspectProperties & | getSkeletonProperties () const |
Get the Properties of this Skeleton. | |
void | setAspectProperties (const AspectProperties &properties) |
Set the AspectProperties of this Skeleton. | |
const std::string & | setName (const std::string &_name) override |
Set name. | |
const std::string & | getName () const override |
Get name. | |
void | enableSelfCollision (bool enableAdjacentBodyCheck=false) |
Deprecated. More... | |
void | disableSelfCollision () |
Deprecated. Please use disableSelfCollisionCheck() instead. | |
void | setSelfCollisionCheck (bool enable) |
Set whether to check self-collision. | |
bool | getSelfCollisionCheck () const |
Return whether self-collision check is enabled. | |
void | enableSelfCollisionCheck () |
Enable self-collision check. | |
void | disableSelfCollisionCheck () |
Disable self-collision check. | |
bool | isEnabledSelfCollisionCheck () const |
Return true if self-collision check is enabled. | |
void | setAdjacentBodyCheck (bool enable) |
Set whether to check adjacent bodies. More... | |
bool | getAdjacentBodyCheck () const |
Return whether adjacent body check is enabled. | |
void | enableAdjacentBodyCheck () |
Enable collision check for adjacent bodies. More... | |
void | disableAdjacentBodyCheck () |
Disable collision check for adjacent bodies. More... | |
bool | isEnabledAdjacentBodyCheck () const |
Return true if self-collision check is enabled including adjacent bodies. | |
void | setMobile (bool _isMobile) |
Set whether this skeleton will be updated by forward dynamics. More... | |
bool | isMobile () const |
Get whether this skeleton will be updated by forward dynamics. More... | |
void | setTimeStep (double _timeStep) |
Set time step. More... | |
double | getTimeStep () const |
Get time step. | |
void | setGravity (const Eigen::Vector3d &_gravity) |
Set 3-dim gravitational acceleration. More... | |
const Eigen::Vector3d & | getGravity () const |
Get 3-dim gravitational acceleration. | |
Structural Properties | |
template<class JointType , class NodeType = BodyNode> | |
std::pair< JointType *, NodeType * > | createJointAndBodyNodePair (BodyNode *_parent=nullptr, const typename JointType::Properties &_jointProperties=typename JointType::Properties(), const typename NodeType::Properties &_bodyProperties=typename NodeType::Properties()) |
Create a Joint and child BodyNode pair of the given types. More... | |
std::size_t | getNumBodyNodes () const override |
Get number of body nodes. | |
std::size_t | getNumRigidBodyNodes () const |
Get number of rigid body nodes. | |
std::size_t | getNumSoftBodyNodes () const |
Get number of soft body nodes. | |
std::size_t | getNumTrees () const |
Get the number of independent trees that this Skeleton contains. | |
BodyNode * | getRootBodyNode (std::size_t _treeIdx=0) |
Get the root BodyNode of the tree whose index in this Skeleton is _treeIdx. | |
const BodyNode * | getRootBodyNode (std::size_t _treeIdx=0) const |
Get the const root BodyNode of the tree whose index in this Skeleton is _treeIdx. | |
Joint * | getRootJoint (std::size_t treeIdx=0u) |
Get the root Joint of the tree whose index in this Skeleton is treeIdx. | |
const Joint * | getRootJoint (std::size_t treeIdx=0u) const |
Get the const root Joint of the tree whose index in this Skeleton is treeIdx. | |
BodyNode * | getBodyNode (std::size_t _idx) override |
Get BodyNode whose index is _idx. | |
const BodyNode * | getBodyNode (std::size_t _idx) const override |
Get const BodyNode whose index is _idx. | |
SoftBodyNode * | getSoftBodyNode (std::size_t _idx) |
Get SoftBodyNode whose index is _idx. | |
const SoftBodyNode * | getSoftBodyNode (std::size_t _idx) const |
Get const SoftBodyNode whose index is _idx. | |
BodyNode * | getBodyNode (const std::string &name) override |
Returns the BodyNode of given name. More... | |
const BodyNode * | getBodyNode (const std::string &name) const override |
Returns the BodyNode of given name. More... | |
SoftBodyNode * | getSoftBodyNode (const std::string &_name) |
Get soft body node whose name is _name. | |
const SoftBodyNode * | getSoftBodyNode (const std::string &_name) const |
Get const soft body node whose name is _name. | |
const std::vector< BodyNode * > & | getBodyNodes () override |
Get all the BodyNodes that are held by this MetaSkeleton. | |
const std::vector< const BodyNode * > & | getBodyNodes () const override |
Get all the BodyNodes that are held by this MetaSkeleton. | |
std::vector< BodyNode * > | getBodyNodes (const std::string &name) override |
Returns all the BodyNodes of given name. More... | |
std::vector< const BodyNode * > | getBodyNodes (const std::string &name) const override |
Returns all the BodyNodes of given name. More... | |
bool | hasBodyNode (const BodyNode *bodyNode) const override |
Returns whether this Skeleton contains bodyNode . | |
std::size_t | getIndexOf (const BodyNode *_bn, bool _warning=true) const override |
Get the index of a specific BodyNode within this ReferentialSkeleton. More... | |
const std::vector< BodyNode * > & | getTreeBodyNodes (std::size_t _treeIdx) |
Get the BodyNodes belonging to a tree in this Skeleton. | |
std::vector< const BodyNode * > | getTreeBodyNodes (std::size_t _treeIdx) const |
Get the BodyNodes belonging to a tree in this Skeleton. | |
std::size_t | getNumJoints () const override |
Get number of Joints. | |
Joint * | getJoint (std::size_t _idx) override |
Get Joint whose index is _idx. | |
const Joint * | getJoint (std::size_t _idx) const override |
Get const Joint whose index is _idx. | |
Joint * | getJoint (const std::string &name) override |
Returns the Joint of given name. More... | |
const Joint * | getJoint (const std::string &name) const override |
Returns the joint of given name. More... | |
std::vector< Joint * > | getJoints () override |
Returns all the joints that are held by this MetaSkeleton. | |
std::vector< const Joint * > | getJoints () const override |
Returns all the joints that are held by this MetaSkeleton. | |
std::vector< Joint * > | getJoints (const std::string &name) override |
Returns all the Joint of given name. More... | |
std::vector< const Joint * > | getJoints (const std::string &name) const override |
Returns all the Joint of given name. More... | |
bool | hasJoint (const Joint *joint) const override |
Returns whether this Skeleton contains join . | |
std::size_t | getIndexOf (const Joint *_joint, bool _warning=true) const override |
Get the index of a specific Joint within this ReferentialSkeleton. More... | |
std::size_t | getNumDofs () const override |
Return the number of degrees of freedom in this skeleton. | |
DegreeOfFreedom * | getDof (std::size_t _idx) override |
Get degree of freedom (aka generalized coordinate) whose index is _idx. | |
const DegreeOfFreedom * | getDof (std::size_t _idx) const override |
Get degree of freedom (aka generalized coordinate) whose index is _idx. | |
DegreeOfFreedom * | getDof (const std::string &_name) |
Get degree of freedom (aka generalized coordinate) whose name is _name. | |
const DegreeOfFreedom * | getDof (const std::string &_name) const |
Get degree of freedom (aka generalized coordinate) whose name is _name. | |
const std::vector< DegreeOfFreedom * > & | getDofs () override |
Get the vector of DegreesOfFreedom for this MetaSkeleton. | |
std::vector< const DegreeOfFreedom * > | getDofs () const override |
Get a vector of const DegreesOfFreedom for this MetaSkeleton. | |
std::size_t | getIndexOf (const DegreeOfFreedom *_dof, bool _warning=true) const override |
Get the index of a specific DegreeOfFreedom within this ReferentialSkeleton. More... | |
const std::vector< DegreeOfFreedom * > & | getTreeDofs (std::size_t _treeIdx) |
Get the DegreesOfFreedom belonging to a tree in this Skeleton. | |
const std::vector< const DegreeOfFreedom * > & | getTreeDofs (std::size_t _treeIdx) const |
Get the DegreesOfFreedom belonging to a tree in this Skeleton. | |
bool | checkIndexingConsistency () const |
This function is only meant for debugging purposes. More... | |
const std::shared_ptr< WholeBodyIK > & | getIK (bool _createIfNull=false) |
Get a pointer to a WholeBodyIK module for this Skeleton. More... | |
const std::shared_ptr< WholeBodyIK > & | getOrCreateIK () |
Get a pointer to a WholeBodyIK module for this Skeleton. More... | |
std::shared_ptr< const WholeBodyIK > | getIK () const |
Get a pointer to a WholeBodyIK module for this Skeleton. More... | |
const std::shared_ptr< WholeBodyIK > & | createIK () |
Create a new WholeBodyIK module for this Skeleton. More... | |
void | clearIK () |
Wipe away the WholeBodyIK module for this Skeleton, leaving it as a nullptr. | |
Support Polygon | |
const math::SupportPolygon & | getSupportPolygon () const |
Get the support polygon of this Skeleton, which is computed based on the gravitational projection of the support geometries of all EndEffectors in this Skeleton that are currently in support mode. More... | |
const math::SupportPolygon & | getSupportPolygon (std::size_t _treeIdx) const |
Same as getSupportPolygon(), but it will only use EndEffectors within the specified tree within this Skeleton. | |
const std::vector< std::size_t > & | getSupportIndices () const |
Get a list of the EndEffector indices that correspond to each of the points in the support polygon. More... | |
const std::vector< std::size_t > & | getSupportIndices (std::size_t _treeIdx) const |
Same as getSupportIndices(), but it corresponds to the support polygon of the specified tree within this Skeleton. | |
const std::pair< Eigen::Vector3d, Eigen::Vector3d > & | getSupportAxes () const |
Get the axes that correspond to each component in the support polygon. More... | |
const std::pair< Eigen::Vector3d, Eigen::Vector3d > & | getSupportAxes (std::size_t _treeIdx) const |
Same as getSupportAxes(), but it corresponds to the support polygon of the specified tree within this Skeleton. | |
const Eigen::Vector2d & | getSupportCentroid () const |
Get the centroid of the support polygon for this Skeleton. More... | |
const Eigen::Vector2d & | getSupportCentroid (std::size_t _treeIdx) const |
Get the centroid of the support polygon for a tree in this Skeleton. More... | |
std::size_t | getSupportVersion () const |
The version number of a support polygon will be incremented each time the support polygon needs to be recomputed. More... | |
std::size_t | getSupportVersion (std::size_t _treeIdx) const |
Same as getSupportVersion(), but it corresponds to the support polygon of the specified tree within this Skeleton. | |
Jacobians | |
math::Jacobian | getJacobian (const JacobianNode *_node) const override |
Get the spatial Jacobian targeting the origin of a BodyNode. More... | |
math::Jacobian | getJacobian (const JacobianNode *_node, const Frame *_inCoordinatesOf) const override |
Get the spatial Jacobian targeting the origin of a BodyNode. More... | |
math::Jacobian | getJacobian (const JacobianNode *_node, const Eigen::Vector3d &_localOffset) const override |
Get the spatial Jacobian targeting an offset in a BodyNode. More... | |
math::Jacobian | getJacobian (const JacobianNode *_node, const Eigen::Vector3d &_localOffset, const Frame *_inCoordinatesOf) const override |
Get the spatial Jacobian targeting an offset in a BodyNode. More... | |
math::Jacobian | getWorldJacobian (const JacobianNode *_node) const override |
Get the spatial Jacobian targeting the origin of a BodyNode. More... | |
math::Jacobian | getWorldJacobian (const JacobianNode *_node, const Eigen::Vector3d &_localOffset) const override |
Get the spatial Jacobian targeting an offset in a BodyNode. More... | |
math::LinearJacobian | getLinearJacobian (const JacobianNode *_node, const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the linear Jacobian targeting the origin of a BodyNode. More... | |
math::LinearJacobian | getLinearJacobian (const JacobianNode *_node, const Eigen::Vector3d &_localOffset, const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the linear Jacobian targeting an offset in a BodyNode. More... | |
math::AngularJacobian | getAngularJacobian (const JacobianNode *_node, const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the angular Jacobian of a BodyNode. More... | |
math::Jacobian | getJacobianSpatialDeriv (const JacobianNode *_node) const override |
Get the spatial Jacobian time derivative targeting the origin of a BodyNode. More... | |
math::Jacobian | getJacobianSpatialDeriv (const JacobianNode *_node, const Frame *_inCoordinatesOf) const override |
Get the spatial Jacobian time derivative targeting the origin of a BodyNode. More... | |
math::Jacobian | getJacobianSpatialDeriv (const JacobianNode *_node, const Eigen::Vector3d &_localOffset) const override |
Get the spatial Jacobian time derivative targeting an offset in a BodyNode. More... | |
math::Jacobian | getJacobianSpatialDeriv (const JacobianNode *_node, const Eigen::Vector3d &_localOffset, const Frame *_inCoordinatesOf) const override |
Get the spatial Jacobian time derivative targeting an offset in a BodyNode. More... | |
math::Jacobian | getJacobianClassicDeriv (const JacobianNode *_node) const override |
Get the spatial Jacobian (classical) time derivative targeting the origin of a BodyNode. More... | |
math::Jacobian | getJacobianClassicDeriv (const JacobianNode *_node, const Frame *_inCoordinatesOf) const override |
Get the spatial Jacobian (classical) time derivative targeting the origin a BodyNode. More... | |
math::Jacobian | getJacobianClassicDeriv (const JacobianNode *_node, const Eigen::Vector3d &_localOffset, const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the spatial Jacobian (classical) time derivative targeting an offset in a BodyNode. More... | |
math::LinearJacobian | getLinearJacobianDeriv (const JacobianNode *_node, const Frame *_inCoordinatesOf=Frame::World()) const override |
of a BodyNode. More... | |
math::LinearJacobian | getLinearJacobianDeriv (const JacobianNode *_node, const Eigen::Vector3d &_localOffset, const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the linear Jacobian (classical) time derivative targeting an offset in a BodyNode. More... | |
math::AngularJacobian | getAngularJacobianDeriv (const JacobianNode *_node, const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the angular Jacobian time derivative of a BodyNode. More... | |
Equations of Motion | |
double | getMass () const override |
Get total mass of the skeleton. More... | |
const Eigen::MatrixXd & | getMassMatrix (std::size_t _treeIdx) const |
Get the mass matrix of a specific tree in the Skeleton. | |
const Eigen::MatrixXd & | getMassMatrix () const override |
Get the Mass Matrix of the MetaSkeleton. | |
const Eigen::MatrixXd & | getAugMassMatrix (std::size_t _treeIdx) const |
Get the augmented mass matrix of a specific tree in the Skeleton. | |
const Eigen::MatrixXd & | getAugMassMatrix () const override |
Get augmented mass matrix of the skeleton. More... | |
const Eigen::MatrixXd & | getInvMassMatrix (std::size_t _treeIdx) const |
Get the inverse mass matrix of a specific tree in the Skeleton. | |
const Eigen::MatrixXd & | getInvMassMatrix () const override |
Get inverse of Mass Matrix of the MetaSkeleton. | |
const Eigen::MatrixXd & | getInvAugMassMatrix (std::size_t _treeIdx) const |
Get the inverse augmented mass matrix of a tree. | |
const Eigen::MatrixXd & | getInvAugMassMatrix () const override |
Get inverse of augmented Mass Matrix of the MetaSkeleton. | |
const Eigen::VectorXd & | getCoriolisForces (std::size_t _treeIdx) const |
Get the Coriolis force vector of a tree in this Skeleton. | |
const Eigen::VectorXd & | getCoriolisForces () const override |
Get Coriolis force vector of the MetaSkeleton's BodyNodes. | |
const Eigen::VectorXd & | getGravityForces (std::size_t _treeIdx) const |
Get the gravity forces for a tree in this Skeleton. | |
const Eigen::VectorXd & | getGravityForces () const override |
Get gravity force vector of the MetaSkeleton. | |
const Eigen::VectorXd & | getCoriolisAndGravityForces (std::size_t _treeIdx) const |
Get the combined vector of Coriolis force and gravity force of a tree. | |
const Eigen::VectorXd & | getCoriolisAndGravityForces () const override |
Get combined vector of Coriolis force and gravity force of the MetaSkeleton. More... | |
const Eigen::VectorXd & | getExternalForces (std::size_t _treeIdx) const |
Get the external force vector of a tree in the Skeleton. | |
const Eigen::VectorXd & | getExternalForces () const override |
Get external force vector of the MetaSkeleton. | |
const Eigen::VectorXd & | getConstraintForces (std::size_t _treeIdx) const |
Get damping force of the skeleton. More... | |
const Eigen::VectorXd & | getConstraintForces () const override |
Get constraint force vector. | |
void | clearExternalForces () override |
Clear the external forces of the BodyNodes in this MetaSkeleton. | |
void | clearInternalForces () override |
Clear the internal forces of the BodyNodes in this MetaSkeleton. | |
void | notifyArticulatedInertiaUpdate (std::size_t _treeIdx) |
Notify that the articulated inertia and everything that depends on it needs to be updated. | |
void | dirtyArticulatedInertia (std::size_t _treeIdx) |
Notify that the articulated inertia and everything that depends on it needs to be updated. | |
void | notifySupportUpdate (std::size_t _treeIdx) |
Notify that the support polygon of a tree needs to be updated. | |
void | dirtySupportPolygon (std::size_t _treeIdx) |
Notify that the support polygon of a tree needs to be updated. | |
double | computeKineticEnergy () const override |
Get the kinetic energy of this MetaSkeleton. | |
double | computePotentialEnergy () const override |
Get the potential energy of this MetaSkeleton. | |
void | clearCollidingBodies () override |
Clear collision flags of the BodyNodes in this MetaSkeleton. | |
Center of Mass Jacobian | |
Eigen::Vector3d | getCOM (const Frame *_withRespectTo=Frame::World()) const override |
Get the Skeleton's COM with respect to any Frame (default is World Frame) | |
Eigen::Vector6d | getCOMSpatialVelocity (const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the Skeleton's COM spatial velocity in terms of any Frame (default is World Frame) | |
Eigen::Vector3d | getCOMLinearVelocity (const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the Skeleton's COM linear velocity in terms of any Frame (default is World Frame) | |
Eigen::Vector6d | getCOMSpatialAcceleration (const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the Skeleton's COM spatial acceleration in terms of any Frame (default is World Frame) | |
Eigen::Vector3d | getCOMLinearAcceleration (const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the Skeleton's COM linear acceleration in terms of any Frame (default is World Frame) | |
math::Jacobian | getCOMJacobian (const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the Skeleton's COM Jacobian in terms of any Frame (default is World Frame) | |
math::LinearJacobian | getCOMLinearJacobian (const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the Skeleton's COM Linear Jacobian in terms of any Frame (default is World Frame) | |
math::Jacobian | getCOMJacobianSpatialDeriv (const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the Skeleton's COM Jacobian spatial time derivative in terms of any Frame (default is World Frame). More... | |
math::LinearJacobian | getCOMLinearJacobianDeriv (const Frame *_inCoordinatesOf=Frame::World()) const override |
Get the Skeleton's COM Linear Jacobian time derivative in terms of any Frame (default is World Frame). More... | |
![]() | |
VersionCounter () | |
Default constructor. | |
virtual std::size_t | incrementVersion () |
Increment the version for this object. | |
virtual std::size_t | getVersion () const |
Get the version number of this object. | |
![]() | |
MetaSkeleton (const MetaSkeleton &)=delete | |
virtual | ~MetaSkeleton ()=default |
Default destructor. | |
MetaSkeletonPtr | cloneMetaSkeleton () const |
Creates an identical clone of this MetaSkeleton. | |
void | setCommand (std::size_t _index, double _command) |
Set a single command. | |
double | getCommand (std::size_t _index) const |
Get a single command. | |
void | setCommands (const Eigen::VectorXd &_commands) |
Set commands for all generalized coordinates. | |
void | setCommands (const std::vector< std::size_t > &_indices, const Eigen::VectorXd &_commands) |
Set commands for a subset of the generalized coordinates. | |
Eigen::VectorXd | getCommands () const |
Get commands for all generalized coordinates. | |
Eigen::VectorXd | getCommands (const std::vector< std::size_t > &_indices) const |
Get commands for a subset of the generalized coordinates. | |
void | resetCommands () |
Set all commands to zero. | |
void | setPosition (std::size_t index, double _position) |
Set the position of a single generalized coordinate. | |
double | getPosition (std::size_t _index) const |
Get the position of a single generalized coordinate. | |
void | setPositions (const Eigen::VectorXd &_positions) |
Set the positions for all generalized coordinates. | |
void | setPositions (const std::vector< std::size_t > &_indices, const Eigen::VectorXd &_positions) |
Set the positions for a subset of the generalized coordinates. | |
Eigen::VectorXd | getPositions () const |
Get the positions for all generalized coordinates. | |
Eigen::VectorXd | getPositions (const std::vector< std::size_t > &_indices) const |
Get the positions for a subset of the generalized coordinates. | |
void | resetPositions () |
Set all positions to zero. | |
void | setPositionLowerLimit (std::size_t _index, double _position) |
Set the lower limit of a generalized coordinate's position. | |
void | setPositionLowerLimits (const Eigen::VectorXd &positions) |
Set the lower limits for all generalized coordinates. | |
void | setPositionLowerLimits (const std::vector< std::size_t > &indices, const Eigen::VectorXd &positions) |
Set the lower limits for a subset of the generalized coordinates. | |
double | getPositionLowerLimit (std::size_t _index) const |
Get the lower limit of a generalized coordinate's position. | |
Eigen::VectorXd | getPositionLowerLimits () const |
Get the lower limits for all generalized coordinates. | |
Eigen::VectorXd | getPositionLowerLimits (const std::vector< std::size_t > &indices) const |
Get the lower limits for a subset of the generalized coordinates. | |
void | setPositionUpperLimit (std::size_t _index, double _position) |
Set the upper limit of a generalized coordainte's position. | |
void | setPositionUpperLimits (const Eigen::VectorXd &positions) |
Set the upper limits for all generalized coordinates. | |
void | setPositionUpperLimits (const std::vector< std::size_t > &indices, const Eigen::VectorXd &positions) |
Set the upper limits for a subset of the generalized coordinates. | |
double | getPositionUpperLimit (std::size_t _index) const |
Get the upper limit of a generalized coordinate's position. | |
Eigen::VectorXd | getPositionUpperLimits () const |
Get the upper limits for all generalized coordinates. | |
Eigen::VectorXd | getPositionUpperLimits (const std::vector< std::size_t > &indices) const |
Get the upper limits for a subset of the generalized coordinates. | |
void | setVelocity (std::size_t _index, double _velocity) |
Set the velocity of a single generalized coordinate. | |
double | getVelocity (std::size_t _index) const |
Get the velocity of a single generalized coordinate. | |
void | setVelocities (const Eigen::VectorXd &_velocities) |
Set the velocities of all generalized coordinates. | |
void | setVelocities (const std::vector< std::size_t > &_indices, const Eigen::VectorXd &_velocities) |
Set the velocities of a subset of the generalized coordinates. | |
Eigen::VectorXd | getVelocities () const |
Get the velocities for all generalized coordinates. | |
Eigen::VectorXd | getVelocities (const std::vector< std::size_t > &_indices) const |
Get the velocities for a subset of the generalized coordinates. | |
void | resetVelocities () |
Set all velocities to zero. | |
void | setVelocityLowerLimit (std::size_t _index, double _velocity) |
Set the lower limit of a generalized coordinate's velocity. | |
void | setVelocityLowerLimits (const Eigen::VectorXd &velocities) |
Set the lower limits for all generalized coordinates's velocity. | |
void | setVelocityLowerLimits (const std::vector< std::size_t > &indices, const Eigen::VectorXd &velocities) |
Set the lower limits for a subset of the generalized coordinates's velocity. | |
double | getVelocityLowerLimit (std::size_t _index) |
Get the lower limit of a generalized coordinate's velocity. | |
Eigen::VectorXd | getVelocityLowerLimits () const |
Get the lower limits for all generalized coordinates's velocity. | |
Eigen::VectorXd | getVelocityLowerLimits (const std::vector< std::size_t > &indices) const |
Get the lower limits for a subset of the generalized coordinates's velocity. | |
void | setVelocityUpperLimit (std::size_t _index, double _velocity) |
Set the upper limit of a generalized coordinate's velocity. | |
void | setVelocityUpperLimits (const Eigen::VectorXd &velocities) |
Set the upper limits for all generalized coordinates's velocity. | |
void | setVelocityUpperLimits (const std::vector< std::size_t > &indices, const Eigen::VectorXd &velocities) |
Set the upper limits for a subset of the generalized coordinates's velocity. | |
double | getVelocityUpperLimit (std::size_t _index) |
Get the upper limit of a generalized coordinate's velocity. | |
Eigen::VectorXd | getVelocityUpperLimits () const |
Get the upper limits for all generalized coordinates's velocity. | |
Eigen::VectorXd | getVelocityUpperLimits (const std::vector< std::size_t > &indices) const |
Get the upper limits for a subset of the generalized coordinates's velocity. | |
void | setAcceleration (std::size_t _index, double _acceleration) |
Set the acceleration of a single generalized coordinate. | |
double | getAcceleration (std::size_t _index) const |
Get the acceleration of a single generalized coordinate. | |
void | setAccelerations (const Eigen::VectorXd &_accelerations) |
Set the accelerations of all generalized coordinates. | |
void | setAccelerations (const std::vector< std::size_t > &_indices, const Eigen::VectorXd &_accelerations) |
Set the accelerations of a subset of the generalized coordinates. | |
Eigen::VectorXd | getAccelerations () const |
Get the accelerations for all generalized coordinates. | |
Eigen::VectorXd | getAccelerations (const std::vector< std::size_t > &_indices) const |
Get the accelerations for a subset of the generalized coordinates. | |
void | resetAccelerations () |
Set all accelerations to zero. | |
void | setAccelerationLowerLimit (std::size_t _index, double _acceleration) |
Set the lower limit of a generalized coordinate's acceleration. | |
void | setAccelerationLowerLimits (const Eigen::VectorXd &accelerations) |
Set the lower limits for all generalized coordinates's acceleration. | |
void | setAccelerationLowerLimits (const std::vector< std::size_t > &indices, const Eigen::VectorXd &accelerations) |
Set the lower limits for a subset of the generalized coordinates's acceleration. | |
double | getAccelerationLowerLimit (std::size_t _index) const |
Get the lower limit of a generalized coordinate's acceleration. | |
Eigen::VectorXd | getAccelerationLowerLimits () const |
Get the lower limits for all generalized coordinates's acceleration. | |
Eigen::VectorXd | getAccelerationLowerLimits (const std::vector< std::size_t > &indices) const |
Get the lower limits for a subset of the generalized coordinates's acceleration. | |
void | setAccelerationUpperLimit (std::size_t _index, double _acceleration) |
Set the upper limit of a generalized coordinate's acceleration. | |
void | setAccelerationUpperLimits (const Eigen::VectorXd &accelerations) |
Set the upper limits for all generalized coordinates's acceleration. | |
void | setAccelerationUpperLimits (const std::vector< std::size_t > &indices, const Eigen::VectorXd &accelerations) |
Set the upper limits for a subset of the generalized coordinates's acceleration. | |
double | getAccelerationUpperLimit (std::size_t _index) const |
Get the upper limit of a generalized coordinate's acceleration. | |
Eigen::VectorXd | getAccelerationUpperLimits () const |
Get the upper limits for all generalized coordinates's acceleration. | |
Eigen::VectorXd | getAccelerationUpperLimits (const std::vector< std::size_t > &indices) const |
Get the upper limits for a subset of the generalized coordinates's acceleration. | |
void | setForce (std::size_t _index, double _force) |
Set the force of a single generalized coordinate. | |
double | getForce (std::size_t _index) const |
Get the force of a single generalized coordinate. | |
void | setForces (const Eigen::VectorXd &_forces) |
Set the forces of all generalized coordinates. | |
void | setForces (const std::vector< std::size_t > &_index, const Eigen::VectorXd &_forces) |
Set the forces of a subset of the generalized coordinates. | |
Eigen::VectorXd | getForces () const |
Get the forces for all generalized coordinates. | |
Eigen::VectorXd | getForces (const std::vector< std::size_t > &_indices) const |
Get the forces for a subset of the generalized coordinates. | |
void | resetGeneralizedForces () |
Set all forces of the generalized coordinates to zero. | |
void | setForceLowerLimit (std::size_t _index, double _force) |
Set the lower limit of a generalized coordinate's force. | |
void | setForceLowerLimits (const Eigen::VectorXd &forces) |
Set the lower limits for all generalized coordinates's force. | |
void | setForceLowerLimits (const std::vector< std::size_t > &indices, const Eigen::VectorXd &forces) |
Set the lower limits for a subset of the generalized coordinates's force. | |
double | getForceLowerLimit (std::size_t _index) const |
Get the lower limit of a generalized coordinate's force. | |
Eigen::VectorXd | getForceLowerLimits () const |
Get the lower limits for all generalized coordinates's force. | |
Eigen::VectorXd | getForceLowerLimits (const std::vector< std::size_t > &indices) const |
Get the lower limits for a subset of the generalized coordinates's force. | |
void | setForceUpperLimit (std::size_t _index, double _force) |
Set the upper limit of a generalized coordinate's force. | |
void | setForceUpperLimits (const Eigen::VectorXd &forces) |
Set the upperlimits for all generalized coordinates's force. | |
void | setForceUpperLimits (const std::vector< std::size_t > &indices, const Eigen::VectorXd &forces) |
Set the upper limits for a subset of the generalized coordinates's force. | |
double | getForceUpperLimit (std::size_t _index) const |
Get the upper limit of a generalized coordinate's force. | |
Eigen::VectorXd | getForceUpperLimits () const |
Get the upper limits for all generalized coordinates's force. | |
Eigen::VectorXd | getForceUpperLimits (const std::vector< std::size_t > &indices) const |
Get the upper limits for a subset of the generalized coordinates's force. | |
Eigen::VectorXd | getVelocityChanges () const |
Get the velocity changes for all the generalized coordinates. | |
void | setJointConstraintImpulses (const Eigen::VectorXd &_impulses) |
Set the constraint impulses for the generalized coordinates. | |
Eigen::VectorXd | getJointConstraintImpulses () const |
Get the constraint impulses for the generalized coordinates. | |
math::Jacobian | getJacobian (const JacobianNode *_node, const JacobianNode *_relativeTo, const Frame *_inCoordinatesOf) const |
Get the spatial Jacobian targeting the origin of a BodyNode relative to another BodyNode in the same Skeleton. More... | |
math::Jacobian | getJacobian (const JacobianNode *_node, const Eigen::Vector3d &_localOffset, const JacobianNode *_relativeTo, const Frame *_inCoordinatesOf) const |
Get the spatial Jacobian targeting an offset in a BodyNode relative to another BodyNode in the same Skeleton. More... | |
math::LinearJacobian | getLinearJacobian (const JacobianNode *_node, const JacobianNode *_relativeTo, const Frame *_inCoordinatesOf=Frame::World()) const |
Get the linear Jacobian targeting the origin of a BodyNode relative to another BodyNode in the same Skeleton. More... | |
math::LinearJacobian | getLinearJacobian (const JacobianNode *_node, const Eigen::Vector3d &_localOffset, const JacobianNode *_relativeTo, const Frame *_inCoordinatesOf=Frame::World()) const |
Get the linear Jacobian targeting an offset in a BodyNode relative to another BodyNode in the same Skeleton. More... | |
math::AngularJacobian | getAngularJacobian (const JacobianNode *_node, const JacobianNode *_relativeTo, const Frame *_inCoordinatesOf=Frame::World()) const |
Get the angular Jacobian of a BodyNode relative to another BodyNode in the same Skeleton. More... | |
math::Jacobian | getJacobianSpatialDeriv (const JacobianNode *_node, const JacobianNode *_relativeTo, const Frame *_inCoordinatesOf) const |
Get the spatial Jacobian time derivative targeting the origin of a BodyNode relative to another BodyNode in the same Skeleton. More... | |
math::Jacobian | getJacobianSpatialDeriv (const JacobianNode *_node, const Eigen::Vector3d &_localOffset, const JacobianNode *_relativeTo, const Frame *_inCoordinatesOf) const |
Get the spatial Jacobian time derivative targeting an offset in a BodyNode relative to another Bodynode in the same Skeleton. More... | |
double | computeLagrangian () const |
Compute and return Lagrangian of this MetaSkeleton. | |
double | getKineticEnergy () const |
Get the kinetic energy of this MetaSkeleton. | |
double | getPotentialEnergy () const |
Get the potential energy of this MetaSkeleton. | |
![]() | |
virtual | ~Subject () |
Destructor will notify all Observers that it is destructing. | |
![]() | |
template<typename... Args> | |
EmbedPropertiesOnTopOf (Args &&... args) | |
Public Attributes | |
std::weak_ptr< Skeleton > | mUnionRootSkeleton |
std::size_t | mUnionSize |
std::size_t | mUnionIndex |
![]() | |
common::SlotRegister< NameChangedSignal > | onNameChanged |
Protected Types | |
using | SpecializedTreeNodes = std::map< std::type_index, std::vector< NodeMap::iterator > * > |
Protected Member Functions | |
Skeleton (const AspectPropertiesData &_properties) | |
Constructor called by create() | |
void | setPtr (const SkeletonPtr &_ptr) |
Setup this Skeleton with its shared_ptr. | |
void | constructNewTree () |
Construct a new tree in the Skeleton. | |
void | registerBodyNode (BodyNode *_newBodyNode) |
Register a BodyNode with the Skeleton. Internal use only. | |
void | registerJoint (Joint *_newJoint) |
Register a Joint with the Skeleton. Internal use only. | |
void | registerNode (NodeMap &nodeMap, Node *_newNode, std::size_t &_index) |
Register a Node with the Skeleton. Internal use only. | |
void | registerNode (Node *_newNode) |
Register a Node with the Skeleton. Internal use only. | |
void | destructOldTree (std::size_t tree) |
Remove an old tree from the Skeleton. | |
void | unregisterBodyNode (BodyNode *_oldBodyNode) |
Remove a BodyNode from the Skeleton. Internal use only. | |
void | unregisterJoint (Joint *_oldJoint) |
Remove a Joint from the Skeleton. Internal use only. | |
void | unregisterNode (NodeMap &nodeMap, Node *_oldNode, std::size_t &_index) |
Remove a Node from the Skeleton. Internal use only. | |
void | unregisterNode (Node *_oldNode) |
Remove a Node from the Skeleton. Internal use only. | |
bool | moveBodyNodeTree (Joint *_parentJoint, BodyNode *_bodyNode, SkeletonPtr _newSkeleton, BodyNode *_parentNode) |
Move a subtree of BodyNodes from this Skeleton to another Skeleton. | |
template<class JointType > | |
JointType * | moveBodyNodeTree (BodyNode *_bodyNode, const SkeletonPtr &_newSkeleton, BodyNode *_parentNode, const typename JointType::Properties &_joint) |
Move a subtree of BodyNodes from this Skeleton to another Skeleton while changing the Joint type of the top parent Joint. More... | |
std::pair< Joint *, BodyNode * > | cloneBodyNodeTree (Joint *_parentJoint, const BodyNode *_bodyNode, const SkeletonPtr &_newSkeleton, BodyNode *_parentNode, bool _recursive) const |
Copy a subtree of BodyNodes onto another Skeleton while leaving the originals intact. | |
template<class JointType > | |
std::pair< JointType *, BodyNode * > | cloneBodyNodeTree (const BodyNode *_bodyNode, const SkeletonPtr &_newSkeleton, BodyNode *_parentNode, const typename JointType::Properties &_joint, bool _recursive) const |
Copy a subtree of BodyNodes onto another Skeleton while leaving the originals intact, but alter the top parent Joint to a new type. | |
std::vector< const BodyNode * > | constructBodyNodeTree (const BodyNode *_bodyNode) const |
Create a vector representation of a subtree of BodyNodes. | |
std::vector< BodyNode * > | constructBodyNodeTree (BodyNode *_bodyNode) |
std::vector< BodyNode * > | extractBodyNodeTree (BodyNode *_bodyNode) |
Create a vector representation of a subtree of BodyNodes and remove that subtree from this Skeleton without deleting them. | |
void | receiveBodyNodeTree (const std::vector< BodyNode *> &_tree) |
Take in and register a subtree of BodyNodes. | |
void | updateTotalMass () |
Update the computation for total mass. | |
void | updateCacheDimensions (DataCache &_cache) |
Update the dimensions for a specific cache. | |
void | updateCacheDimensions (std::size_t _treeIdx) |
Update the dimensions for a tree's cache. | |
void | updateArticulatedInertia (std::size_t _tree) const |
Update the articulated inertia of a tree. | |
void | updateArticulatedInertia () const |
Update the articulated inertias of the skeleton. | |
void | updateMassMatrix (std::size_t _treeIdx) const |
Update the mass matrix of a tree. | |
void | updateMassMatrix () const |
Update mass matrix of the skeleton. | |
void | updateAugMassMatrix (std::size_t _treeIdx) const |
void | updateAugMassMatrix () const |
Update augmented mass matrix of the skeleton. | |
void | updateInvMassMatrix (std::size_t _treeIdx) const |
Update the inverse mass matrix of a tree. | |
void | updateInvMassMatrix () const |
Update inverse of mass matrix of the skeleton. | |
void | updateInvAugMassMatrix (std::size_t _treeIdx) const |
Update the inverse augmented mass matrix of a tree. | |
void | updateInvAugMassMatrix () const |
Update inverse of augmented mass matrix of the skeleton. | |
void | updateCoriolisForces (std::size_t _treeIdx) const |
Update Coriolis force vector for a tree in the Skeleton. | |
void | updateCoriolisForces () const |
Update Coriolis force vector of the skeleton. | |
void | updateGravityForces (std::size_t _treeIdx) const |
Update the gravity force vector of a tree. | |
void | updateGravityForces () const |
Update gravity force vector of the skeleton. | |
void | updateCoriolisAndGravityForces (std::size_t _treeIdx) const |
Update the combined vector for a tree in this Skeleton. | |
void | updateCoriolisAndGravityForces () const |
Update combined vector of the skeleton. | |
void | updateExternalForces (std::size_t _treeIdx) const |
Update external force vector to generalized forces for a tree. | |
void | updateExternalForces () const |
update external force vector to generalized forces. | |
const Eigen::VectorXd & | computeConstraintForces (DataCache &cache) const |
Compute the constraint force vector for a tree. | |
const std::string & | addEntryToBodyNodeNameMgr (BodyNode *_newNode) |
Add a BodyNode to the BodyNode NameManager. | |
const std::string & | addEntryToJointNameMgr (Joint *_newJoint, bool _updateDofNames=true) |
Add a Joint to to the Joint NameManager. | |
void | addEntryToSoftBodyNodeNameMgr (SoftBodyNode *_newNode) |
Add a SoftBodyNode to the SoftBodyNode NameManager. | |
void | updateNameManagerNames () |
![]() | |
void | setVersionDependentObject (VersionCounter *dependent) |
![]() | |
MetaSkeleton () | |
Default constructor. | |
![]() | |
void | sendDestructionNotification () const |
Send a destruction notification to all Observers. More... | |
void | addObserver (Observer *_observer) const |
Add an Observer to the list of Observers. | |
void | removeObserver (Observer *_observer) const |
Remove an Observer from the list of Observers. | |
Protected Attributes | |
std::weak_ptr< Skeleton > | mPtr |
The resource-managing pointer to this Skeleton. | |
std::vector< SoftBodyNode * > | mSoftBodyNodes |
List of Soft body node list in the skeleton. | |
dart::common::NameManager< BodyNode * > | mNameMgrForBodyNodes |
NameManager for tracking BodyNodes. | |
dart::common::NameManager< Joint * > | mNameMgrForJoints |
NameManager for tracking Joints. | |
dart::common::NameManager< DegreeOfFreedom * > | mNameMgrForDofs |
NameManager for tracking DegreesOfFreedom. | |
dart::common::NameManager< SoftBodyNode * > | mNameMgrForSoftBodyNodes |
NameManager for tracking SoftBodyNodes. | |
std::shared_ptr< WholeBodyIK > | mWholeBodyIK |
WholeBodyIK module for this Skeleton. | |
common::aligned_vector< DataCache > | mTreeCache |
DataCache | mSkelCache |
SpecializedTreeNodes | mSpecializedTreeNodes |
double | mTotalMass |
Total mass. | |
bool | mIsImpulseApplied |
Flag for status of impulse testing. | |
std::mutex | mMutex |
![]() | |
std::size_t | mVersion |
![]() | |
NameChangedSignal | mNameChangedSignal |
![]() | |
std::set< Observer * > | mObservers |
List of current Observers. | |
Friends | |
class | BodyNode |
class | SoftBodyNode |
class | Joint |
template<class > | |
class | GenericJoint |
class | DegreeOfFreedom |
class | Node |
class | ShapeNode |
class | EndEffector |
Constructor and Destructor | |
static SkeletonPtr | create (const std::string &_name="Skeleton") |
Create a new Skeleton inside of a shared_ptr. | |
static SkeletonPtr | create (const AspectPropertiesData &properties) |
Create a new Skeleton inside of a shared_ptr. | |
SkeletonPtr | getPtr () |
Get the shared_ptr that manages this Skeleton. | |
ConstSkeletonPtr | getPtr () const |
Get the shared_ptr that manages this Skeleton. | |
SkeletonPtr | getSkeleton () |
Same as getPtr(), but this allows Skeleton to have a similar interface as BodyNode and Joint for template programming. More... | |
ConstSkeletonPtr | getSkeleton () const |
Same as getPtr(), but this allows Skeleton to have a similar interface as BodyNode and Joint for template programming. More... | |
std::mutex & | getMutex () const |
Get the mutex that protects the state of this Skeleton. | |
std::unique_ptr< common::LockableReference > | getLockableReference () const override |
Get the mutex that protects the state of this Skeleton. | |
Skeleton (const Skeleton &)=delete | |
virtual | ~Skeleton () |
Destructor. | |
Skeleton & | operator= (const Skeleton &_other)=delete |
Remove copy operator. | |
SkeletonPtr | clone () const |
Create an identical clone of this Skeleton. More... | |
SkeletonPtr | clone (const std::string &cloneName) const |
Create an identical clone of this Skeleton, except that it has a new name. More... | |
SkeletonPtr | cloneSkeleton () const |
Creates and returns a clone of this Skeleton. | |
SkeletonPtr | cloneSkeleton (const std::string &cloneName) const |
Creates and returns a clone of this Skeleton. | |
MetaSkeletonPtr | cloneMetaSkeleton (const std::string &cloneName) const override |
Creates an identical clone of this MetaSkeleton. | |
class Skeleton
bool dart::dynamics::Skeleton::checkIndexingConsistency | ( | ) | const |
This function is only meant for debugging purposes.
It will verify that all objects held in the Skeleton have the correct information about their indexing.
void dart::dynamics::Skeleton::clearConstraintImpulses | ( | ) |
Clear constraint impulses and cache data used for impulse-based forward dynamics algorithm, where the constraint impulses are spatial constraints on the BodyNodes and generalized constraints on the Joints.
SkeletonPtr dart::dynamics::Skeleton::clone | ( | ) | const |
Create an identical clone of this Skeleton.
SkeletonPtr dart::dynamics::Skeleton::clone | ( | const std::string & | cloneName | ) | const |
Create an identical clone of this Skeleton, except that it has a new name.
void dart::dynamics::Skeleton::computeForwardKinematics | ( | bool | _updateTransforms = true , |
bool | _updateVels = true , |
||
bool | _updateAccs = true |
||
) |
Compute forward kinematics.
In general, this function doesn't need to be called for forward kinematics to update. Forward kinematics will always be computed when it's needed and will only perform the computations that are necessary for what the user requests. This works by performing some bookkeeping internally with dirty flags whenever a position, velocity, or acceleration is set, either internally or by the user.
On one hand, this results in some overhead due to the extra effort of bookkeeping, but on the other hand we have much greater code safety, and in some cases performance can be dramatically improved with the auto- updating. For example, this function is inefficient when only one portion of the BodyNodes needed to be updated rather than the entire Skeleton, which is common when performing inverse kinematics on a limb or on some subsection of a Skeleton.
This function might be useful in a case where the user wants to perform all the forward kinematics computations during a particular time window rather than waiting for it to be computed at the exact time that it's needed.
One example would be a real time controller. Let's say a controller gets encoder data at time t0 but needs to wait until t1 before it receives the force-torque sensor data that it needs in order to compute the output for an operational space controller. Instead of being idle from t0 to t1, it could use that time to compute the forward kinematics by calling this function.
void dart::dynamics::Skeleton::computeInverseDynamics | ( | bool | _withExternalForces = false , |
bool | _withDampingForces = false , |
||
bool | _withSpringForces = false |
||
) |
Computes inverse dynamics.
The inverse dynamics is computed according to the following equations of motion:
\( M(q) \ddot{q} + C(q, \dot{q}) + N(q) - \tau_{\text{ext}} - \tau_d - \tau_s = \tau \)
where \( \tau_{\text{ext}} \), \( \tau_d \), and \( \tau_s \) are external forces, joint damping forces, and joint spring forces projected on to the joint space, respectively. This function provides three flags whether to take into account each forces in computing the joint forces, \( \tau_d \). Not accounting each forces implies that the forces is added to \( \tau \) in order to keep the equation equivalent. If there forces are zero (by setting external forces, damping coeff, spring stiffness zeros), these flags have no effect.
Once this function is called, the joint forces, \( \tau \), can be obtained by calling getForces().
[in] | _withExternalForces | Set true to take external forces into account. |
[in] | _withDampingForces | Set true to take damping forces into account. |
[in] | _withSpringForces | Set true to take spring forces into account. |
const std::shared_ptr< WholeBodyIK > & dart::dynamics::Skeleton::createIK | ( | ) |
Create a new WholeBodyIK module for this Skeleton.
If an IK module already exists in this Skeleton, it will be destroyed and replaced by a brand new one.
std::pair< JointType *, NodeType * > dart::dynamics::Skeleton::createJointAndBodyNodePair | ( | BodyNode * | _parent = nullptr , |
const typename JointType::Properties & | _jointProperties = typename JointType::Properties() , |
||
const typename NodeType::Properties & | _bodyProperties = typename NodeType::Properties() |
||
) |
void dart::dynamics::Skeleton::disableAdjacentBodyCheck | ( | ) |
Disable collision check for adjacent bodies.
This option is effective only when the self-collision check is enabled.
void dart::dynamics::Skeleton::enableAdjacentBodyCheck | ( | ) |
Enable collision check for adjacent bodies.
This option is effective only when the self-collision check is enabled.
void dart::dynamics::Skeleton::enableSelfCollision | ( | bool | enableAdjacentBodyCheck = false | ) |
Deprecated.
Please use enableSelfCollisionCheck() and setAdjacentBodyCheck() instead.
|
overridevirtual |
Get the angular Jacobian of a BodyNode.
You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the angular Jacobian time derivative of a BodyNode.
You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get augmented mass matrix of the skeleton.
This matrix is used in ConstraintDynamics to compute constraint forces. The matrix is M + h*D + h*h*K where D is diagonal joint damping coefficient matrix, K is diagonal joint stiffness matrix, and h is simulation time step.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Returns the BodyNode of given name.
[in] | name | The BodyNode name that want to search. |
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Returns the BodyNode of given name.
[in] | name | The BodyNode name that want to search. |
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Returns all the BodyNodes of given name.
[in] | name | The BodyNode name that want to search. |
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Returns all the BodyNodes of given name.
[in] | name | The BodyNode name that want to search. |
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the Skeleton's COM Jacobian spatial time derivative in terms of any Frame (default is World Frame).
NOTE: Since this is a spatial time derivative, it is only meant to be used with spatial acceleration vectors. If you are using classical linear vectors, then use getCOMLinearJacobianDeriv() instead.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the Skeleton's COM Linear Jacobian time derivative in terms of any Frame (default is World Frame).
NOTE: Since this is a classical time derivative, it is only meant to be used with classical acceleration vectors. If you are using spatial vectors, then use getCOMJacobianSpatialDeriv() instead.
Implements dart::dynamics::MetaSkeleton.
const Eigen::VectorXd & dart::dynamics::Skeleton::getConstraintForces | ( | std::size_t | _treeIdx | ) | const |
Get damping force of the skeleton.
Get constraint force vector for a tree
|
overridevirtual |
Get combined vector of Coriolis force and gravity force of the MetaSkeleton.
Implements dart::dynamics::MetaSkeleton.
const std::shared_ptr< WholeBodyIK > & dart::dynamics::Skeleton::getIK | ( | bool | _createIfNull = false | ) |
Get a pointer to a WholeBodyIK module for this Skeleton.
If _createIfNull is true, then the IK module will be generated if one does not already exist.
std::shared_ptr< const WholeBodyIK > dart::dynamics::Skeleton::getIK | ( | ) | const |
Get a pointer to a WholeBodyIK module for this Skeleton.
Because this is a const function, a new IK module cannot be created if one does not already exist.
|
overridevirtual |
Get the index of a specific BodyNode within this ReferentialSkeleton.
Returns INVALID_INDEX if it is not held in this ReferentialSkeleton. When _warning is true, a warning message will be printed if the BodyNode is not in the MetaSkeleton.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the index of a specific Joint within this ReferentialSkeleton.
Returns INVALID_INDEX if it is not held in this ReferentialSkeleton. When _warning is true, a warning message will be printed if the Joint is not in the MetaSkeleton.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the index of a specific DegreeOfFreedom within this ReferentialSkeleton.
Returns INVALID_INDEX if it is not held in this ReferentialSkeleton. When _warning is true, a warning message will be printed if the DegreeOfFreedom is not in the MetaSkeleton.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the spatial Jacobian targeting the origin of a BodyNode.
The Jacobian is expressed in the Frame of the BodyNode.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the spatial Jacobian targeting the origin of a BodyNode.
You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
|
overridevirtual |
Get the spatial Jacobian targeting an offset in a BodyNode.
The _offset is expected in coordinates of the BodyNode Frame. You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the spatial Jacobian (classical) time derivative targeting the origin of a BodyNode.
The Jacobian is expressed in the World Frame.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the spatial Jacobian (classical) time derivative targeting the origin a BodyNode.
The _offset is expected in coordinates of the BodyNode Frame. You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the spatial Jacobian (classical) time derivative targeting an offset in a BodyNode.
The _offset is expected in coordinates of the BodyNode Frame. You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the spatial Jacobian time derivative targeting the origin of a BodyNode.
The Jacobian is expressed in the Frame of the BodyNode.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the spatial Jacobian time derivative targeting the origin of a BodyNode.
You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
|
overridevirtual |
Get the spatial Jacobian time derivative targeting an offset in a BodyNode.
The _offset is expected in coordinates of the BodyNode Frame. You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Returns the Joint of given name.
[in] | name | The joint name that want to search. |
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Returns the joint of given name.
[in] | name | The joint name that want to search. |
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Returns all the Joint of given name.
This MetaSkeleton can contain multiple Joints with the same name when this MetaSkeleton contains Joints from multiple Skeletons.
[in] | name | The joint name that want to search. |
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Returns all the Joint of given name.
This MetaSkeleton can contain multiple Joints with the same name when this MetaSkeleton contains Joints from multiple Skeletons.
[in] | name | The joint name that want to search. |
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the linear Jacobian targeting the origin of a BodyNode.
You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the linear Jacobian targeting an offset in a BodyNode.
The _offset is expected in coordinates of the BodyNode Frame. You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
of a BodyNode.
The _offset is expected in coordinates of the BodyNode Frame. You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the linear Jacobian (classical) time derivative targeting an offset in a BodyNode.
The _offset is expected in coordinates of the BodyNode Frame. You can specify a coordinate Frame to express the Jacobian in.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get total mass of the skeleton.
The total mass is calculated as BodyNodes are added and is updated as BodyNode mass is changed, so this is a constant-time O(1) operation for the Skeleton class.
Implements dart::dynamics::MetaSkeleton.
const std::shared_ptr< WholeBodyIK > & dart::dynamics::Skeleton::getOrCreateIK | ( | ) |
Get a pointer to a WholeBodyIK module for this Skeleton.
The IK module will be generated if one does not already exist. This function is actually the same as getIK(true).
Eigen::VectorXd dart::dynamics::Skeleton::getPositionDifferences | ( | const Eigen::VectorXd & | _q2, |
const Eigen::VectorXd & | _q1 | ||
) | const |
Return the difference of two generalized positions which are measured in the configuration space of this Skeleton.
If the configuration space is Euclidean space, this function returns _q2 - _q1. Otherwise, it depends on the type of the configuration space.
SkeletonPtr dart::dynamics::Skeleton::getSkeleton | ( | ) |
ConstSkeletonPtr dart::dynamics::Skeleton::getSkeleton | ( | ) | const |
const std::pair< Eigen::Vector3d, Eigen::Vector3d > & dart::dynamics::Skeleton::getSupportAxes | ( | ) | const |
Get the axes that correspond to each component in the support polygon.
These axes are needed in order to map the points on a support polygon into 3D space. If gravity is along the z-direction, then these axes will simply be <1,0,0> and <0,1,0>.
const Eigen::Vector2d & dart::dynamics::Skeleton::getSupportCentroid | ( | ) | const |
Get the centroid of the support polygon for this Skeleton.
If the support polygon is an empty set, the components of this vector will be nan.
const Eigen::Vector2d & dart::dynamics::Skeleton::getSupportCentroid | ( | std::size_t | _treeIdx | ) | const |
Get the centroid of the support polygon for a tree in this Skeleton.
If the support polygon is an empty set, the components of this vector will be nan.
const std::vector< std::size_t > & dart::dynamics::Skeleton::getSupportIndices | ( | ) | const |
Get a list of the EndEffector indices that correspond to each of the points in the support polygon.
const math::SupportPolygon & dart::dynamics::Skeleton::getSupportPolygon | ( | ) | const |
std::size_t dart::dynamics::Skeleton::getSupportVersion | ( | ) | const |
The version number of a support polygon will be incremented each time the support polygon needs to be recomputed.
This number can be used to immediately determine whether the support polygon has changed since the last time you asked for it, allowing you to be more efficient in how you handle the data.
Eigen::VectorXd dart::dynamics::Skeleton::getVelocityDifferences | ( | const Eigen::VectorXd & | _dq2, |
const Eigen::VectorXd & | _dq1 | ||
) | const |
Return the difference of two generalized velocities or accelerations which are measured in the tangent space at the identity.
Since the tangent spaces are vector spaces, this function always returns _dq2 - _dq1.
|
overridevirtual |
Get the spatial Jacobian targeting the origin of a BodyNode.
The Jacobian is expressed in the World Frame.
Implements dart::dynamics::MetaSkeleton.
|
overridevirtual |
Get the spatial Jacobian targeting an offset in a BodyNode.
The _offset is expected in coordinates of the BodyNode Frame. The Jacobian is expressed in the World Frame.
Implements dart::dynamics::MetaSkeleton.
bool dart::dynamics::Skeleton::isMobile | ( | ) | const |
Get whether this skeleton will be updated by forward dynamics.
void dart::dynamics::Skeleton::setAdjacentBodyCheck | ( | bool | enable | ) |
Set whether to check adjacent bodies.
This option is effective only when the self-collision check is enabled.
void dart::dynamics::Skeleton::setGravity | ( | const Eigen::Vector3d & | _gravity | ) |
Set 3-dim gravitational acceleration.
The gravity is used for calculating gravity force vector of the skeleton.
void dart::dynamics::Skeleton::setImpulseApplied | ( | bool | _val | ) |
Set whether this skeleton is constrained.
ConstraintSolver will mark this.
void dart::dynamics::Skeleton::setMobile | ( | bool | _isMobile | ) |
Set whether this skeleton will be updated by forward dynamics.
[in] | _isMobile | True if this skeleton is mobile. |
void dart::dynamics::Skeleton::setTimeStep | ( | double | _timeStep | ) |
Set time step.
This timestep is used for implicit joint damping force.
void dart::dynamics::Skeleton::updateBiasImpulse | ( | BodyNode * | _bodyNode, |
const Eigen::Vector6d & | _imp | ||
) |
Update bias impulses due to impulse [_imp] on body node [_bodyNode].
_bodyNode | Body node contraint impulse, _imp, is applied |
_imp | Constraint impulse expressed in body frame of _bodyNode |
void dart::dynamics::Skeleton::updateBiasImpulse | ( | BodyNode * | _bodyNode1, |
const Eigen::Vector6d & | _imp1, | ||
BodyNode * | _bodyNode2, | ||
const Eigen::Vector6d & | _imp2 | ||
) |
Update bias impulses due to impulse [_imp] on body node [_bodyNode].
_bodyNode1 | Body node contraint impulse, _imp1, is applied |
_imp1 | Constraint impulse expressed in body frame of _bodyNode1 |
_bodyNode2 | Body node contraint impulse, _imp2, is applied |
_imp2 | Constraint impulse expressed in body frame of _bodyNode2 |