33 #ifndef DART_DYNAMICS_GENERICJOINT_HPP_ 34 #define DART_DYNAMICS_GENERICJOINT_HPP_ 38 #include "dart/dynamics/detail/GenericJointAspect.hpp" 43 class DegreeOfFreedom;
45 template <
class ConfigSpaceT>
47 :
public detail::GenericJointBase<GenericJoint<ConfigSpaceT>, ConfigSpaceT>
50 static constexpr std::size_t NumDofs = ConfigSpaceT::NumDofs;
52 using ThisClass = GenericJoint<ConfigSpaceT>;
53 using Base = detail::GenericJointBase<ThisClass, ConfigSpaceT>;
55 using Point =
typename ConfigSpaceT::Point;
56 using EuclideanPoint =
typename ConfigSpaceT::EuclideanPoint;
57 using Vector =
typename ConfigSpaceT::Vector;
58 using JacobianMatrix =
typename ConfigSpaceT::JacobianMatrix;
59 using Matrix =
typename ConfigSpaceT::Matrix;
61 using UniqueProperties = detail::GenericJointUniqueProperties<ConfigSpaceT>;
62 using Properties = detail::GenericJointProperties<ConfigSpaceT>;
63 using AspectState =
typename Base::AspectState;
64 using AspectProperties =
typename Base::AspectProperties;
66 DART_BAKE_SPECIALIZED_ASPECT_IRREGULAR(
67 typename ThisClass::Aspect, GenericJointAspect)
69 GenericJoint(
const ThisClass&) =
delete;
90 void copy(
const ThisClass& otherJoint);
93 void copy(
const ThisClass* otherJoint);
96 ThisClass&
operator=(
const ThisClass& other);
103 DegreeOfFreedom* getDof(std::size_t index)
override;
106 const DegreeOfFreedom* getDof(std::size_t _index)
const override;
109 std::size_t getNumDofs()
const override;
112 const std::string& setDofName(
114 const std::string& name,
115 bool preserveName =
true)
override;
118 void preserveDofName(
size_t index,
bool preserve)
override;
121 bool isDofNamePreserved(
size_t index)
const override;
124 const std::string& getDofName(
size_t index)
const override;
127 size_t getIndexInSkeleton(
size_t index)
const override;
130 size_t getIndexInTree(
size_t index)
const override;
139 void setCommand(std::size_t index,
double command)
override;
142 double getCommand(std::size_t index)
const override;
145 void setCommands(
const Eigen::VectorXd& commands)
override;
148 Eigen::VectorXd getCommands()
const override;
151 void resetCommands()
override;
160 void setPosition(std::size_t index,
double position)
override;
163 double getPosition(std::size_t index)
const override;
166 void setPositions(
const Eigen::VectorXd& positions)
override;
169 Eigen::VectorXd getPositions()
const override;
172 void setPositionLowerLimit(std::size_t index,
double position)
override;
175 double getPositionLowerLimit(std::size_t index)
const override;
178 void setPositionLowerLimits(
const Eigen::VectorXd& lowerLimits)
override;
181 Eigen::VectorXd getPositionLowerLimits()
const override;
184 void setPositionUpperLimit(std::size_t index,
double position)
override;
187 double getPositionUpperLimit(std::size_t index)
const override;
190 void setPositionUpperLimits(
const Eigen::VectorXd& upperLimits)
override;
193 Eigen::VectorXd getPositionUpperLimits()
const override;
196 bool hasPositionLimit(std::size_t index)
const override;
199 void resetPosition(std::size_t index)
override;
202 void resetPositions()
override;
205 void setInitialPosition(std::size_t index,
double initial)
override;
208 double getInitialPosition(std::size_t index)
const override;
211 void setInitialPositions(
const Eigen::VectorXd& initial)
override;
214 Eigen::VectorXd getInitialPositions()
const override;
253 void setVelocity(std::size_t index,
double velocity)
override;
256 double getVelocity(std::size_t index)
const override;
259 void setVelocities(
const Eigen::VectorXd& velocities)
override;
262 Eigen::VectorXd getVelocities()
const override;
265 void setVelocityLowerLimit(std::size_t index,
double velocity)
override;
268 double getVelocityLowerLimit(std::size_t index)
const override;
271 void setVelocityLowerLimits(
const Eigen::VectorXd& lowerLimits)
override;
274 Eigen::VectorXd getVelocityLowerLimits()
const override;
277 void setVelocityUpperLimit(std::size_t index,
double velocity)
override;
280 double getVelocityUpperLimit(std::size_t index)
const override;
283 void setVelocityUpperLimits(
const Eigen::VectorXd& upperLimits)
override;
286 Eigen::VectorXd getVelocityUpperLimits()
const override;
289 void resetVelocity(std::size_t index)
override;
292 void resetVelocities()
override;
295 void setInitialVelocity(std::size_t index,
double initial)
override;
298 double getInitialVelocity(std::size_t index)
const override;
301 void setInitialVelocities(
const Eigen::VectorXd& initial)
override;
304 Eigen::VectorXd getInitialVelocities()
const override;
313 void setAcceleration(std::size_t index,
double acceleration)
override;
316 double getAcceleration(std::size_t index)
const override;
319 void setAccelerations(
const Eigen::VectorXd& accelerations)
override;
322 Eigen::VectorXd getAccelerations()
const override;
325 void setAccelerationLowerLimit(
size_t index,
double acceleration)
override;
328 double getAccelerationLowerLimit(std::size_t index)
const override;
331 void setAccelerationLowerLimits(
const Eigen::VectorXd& lowerLimits)
override;
334 Eigen::VectorXd getAccelerationLowerLimits()
const override;
337 void setAccelerationUpperLimit(
338 std::size_t index,
double acceleration)
override;
341 double getAccelerationUpperLimit(std::size_t index)
const override;
344 void setAccelerationUpperLimits(
const Eigen::VectorXd& upperLimits)
override;
347 Eigen::VectorXd getAccelerationUpperLimits()
const override;
350 void resetAccelerations()
override;
359 void setForce(std::size_t index,
double force)
override;
362 double getForce(std::size_t index)
const override;
365 void setForces(
const Eigen::VectorXd& forces)
override;
368 Eigen::VectorXd getForces()
const override;
371 void setForceLowerLimit(
size_t index,
double force)
override;
374 double getForceLowerLimit(std::size_t index)
const override;
377 void setForceLowerLimits(
const Eigen::VectorXd& lowerLimits)
override;
380 Eigen::VectorXd getForceLowerLimits()
const override;
383 void setForceUpperLimit(
size_t index,
double force)
override;
386 double getForceUpperLimit(
size_t index)
const override;
389 void setForceUpperLimits(
const Eigen::VectorXd& upperLimits)
override;
392 Eigen::VectorXd getForceUpperLimits()
const override;
395 void resetForces()
override;
404 void setVelocityChange(std::size_t index,
double velocityChange)
override;
407 double getVelocityChange(std::size_t index)
const override;
410 void resetVelocityChanges()
override;
419 void setConstraintImpulse(std::size_t index,
double impulse)
override;
422 double getConstraintImpulse(std::size_t index)
const override;
425 void resetConstraintImpulses()
override;
434 void integratePositions(
double dt)
override;
437 void integrateVelocities(
double dt)
override;
440 Eigen::VectorXd getPositionDifferences(
441 const Eigen::VectorXd& q2,
const Eigen::VectorXd& q1)
const override;
445 const Vector& q2,
const Vector& q1)
const;
454 void setSpringStiffness(std::size_t index,
double k)
override;
457 double getSpringStiffness(std::size_t index)
const override;
460 void setRestPosition(std::size_t index,
double q0)
override;
463 double getRestPosition(std::size_t index)
const override;
466 void setDampingCoefficient(std::size_t index,
double coeff)
override;
469 double getDampingCoefficient(std::size_t index)
const override;
472 void setCoulombFriction(std::size_t index,
double friction)
override;
475 double getCoulombFriction(std::size_t index)
const override;
484 double computePotentialEnergy()
const override;
489 Eigen::Vector6d getBodyConstraintWrench()
const override;
496 const math::Jacobian getRelativeJacobian()
const override;
499 const typename GenericJoint<ConfigSpaceT>::JacobianMatrix&
503 math::Jacobian getRelativeJacobian(
504 const Eigen::VectorXd& _positions)
const override;
508 const Vector& positions)
const = 0;
511 const math::Jacobian getRelativeJacobianTimeDeriv()
const override;
519 GenericJoint(
const Properties& properties);
522 void registerDofs()
override;
536 void updateRelativeSpatialVelocity()
const override;
539 void updateRelativeSpatialAcceleration()
const override;
542 void updateRelativePrimaryAcceleration()
const override;
545 void addVelocityTo(Eigen::Vector6d& vel)
override;
548 void setPartialAccelerationTo(
549 Eigen::Vector6d& partialAcceleration,
550 const Eigen::Vector6d& childVelocity)
override;
553 void addAccelerationTo(Eigen::Vector6d& acc)
override;
556 void addVelocityChangeTo(Eigen::Vector6d& velocityChange)
override;
559 void addChildArtInertiaTo(
560 Eigen::Matrix6d& parentArtInertia,
561 const Eigen::Matrix6d& childArtInertia)
override;
564 void addChildArtInertiaImplicitTo(
565 Eigen::Matrix6d& parentArtInertiaImplicit,
566 const Eigen::Matrix6d& childArtInertiaImplicit)
override;
569 void updateInvProjArtInertia(
const Eigen::Matrix6d& artInertia)
override;
572 void updateInvProjArtInertiaImplicit(
573 const Eigen::Matrix6d& artInertia,
double timeStep)
override;
576 void addChildBiasForceTo(
577 Eigen::Vector6d& parentBiasForce,
578 const Eigen::Matrix6d& childArtInertia,
579 const Eigen::Vector6d& childBiasForce,
580 const Eigen::Vector6d& childPartialAcc)
override;
583 void addChildBiasImpulseTo(
584 Eigen::Vector6d& parentBiasImpulse,
585 const Eigen::Matrix6d& childArtInertia,
586 const Eigen::Vector6d& childBiasImpulse)
override;
589 void updateTotalForce(
590 const Eigen::Vector6d& bodyForce,
double timeStep)
override;
593 void updateTotalImpulse(
const Eigen::Vector6d& bodyImpulse)
override;
596 void resetTotalImpulses()
override;
599 void updateAcceleration(
600 const Eigen::Matrix6d& artInertia,
601 const Eigen::Vector6d& spatialAcc)
override;
604 void updateVelocityChange(
605 const Eigen::Matrix6d& artInertia,
606 const Eigen::Vector6d& velocityChange)
override;
610 const Eigen::Vector6d& bodyForce,
612 bool withDampingForces,
613 bool withSpringForces)
override;
617 const Eigen::Vector6d& bodyForce,
619 bool withDampingForcese,
620 bool withSpringForces)
override;
623 void updateImpulseID(
const Eigen::Vector6d& bodyImpulse)
override;
626 void updateImpulseFD(
const Eigen::Vector6d& bodyImpulse)
override;
629 void updateConstrainedTerms(
double timeStep)
override;
638 void addChildBiasForceForInvMassMatrix(
639 Eigen::Vector6d& parentBiasForce,
640 const Eigen::Matrix6d& childArtInertia,
641 const Eigen::Vector6d& childBiasForce)
override;
644 void addChildBiasForceForInvAugMassMatrix(
645 Eigen::Vector6d& parentBiasForce,
646 const Eigen::Matrix6d& childArtInertia,
647 const Eigen::Vector6d& childBiasForce)
override;
650 void updateTotalForceForInvMassMatrix(
651 const Eigen::Vector6d& bodyForce)
override;
654 void getInvMassMatrixSegment(
655 Eigen::MatrixXd& invMassMat,
657 const Eigen::Matrix6d& artInertia,
658 const Eigen::Vector6d& spatialAcc)
override;
661 void getInvAugMassMatrixSegment(
662 Eigen::MatrixXd& invMassMat,
664 const Eigen::Matrix6d& artInertia,
665 const Eigen::Vector6d& spatialAcc)
override;
668 void addInvMassMatrixSegmentTo(Eigen::Vector6d& acc)
override;
671 Eigen::VectorXd getSpatialToGeneralized(
672 const Eigen::Vector6d& spatial)
override;
678 std::array<DegreeOfFreedom*, NumDofs>
mDofs;
735 Vector mInvMassMatrixSegment;
742 void addChildArtInertiaToDynamic(
743 Eigen::Matrix6d& parentArtInertia,
744 const Eigen::Matrix6d& childArtInertia);
746 void addChildArtInertiaToKinematic(
747 Eigen::Matrix6d& parentArtInertia,
748 const Eigen::Matrix6d& childArtInertia);
750 void addChildArtInertiaImplicitToDynamic(
751 Eigen::Matrix6d& parentArtInertia,
752 const Eigen::Matrix6d& childArtInertia);
754 void addChildArtInertiaImplicitToKinematic(
755 Eigen::Matrix6d& parentArtInertia,
756 const Eigen::Matrix6d& childArtInertia);
758 void updateInvProjArtInertiaDynamic(
const Eigen::Matrix6d& artInertia);
760 void updateInvProjArtInertiaKinematic(
const Eigen::Matrix6d& artInertia);
762 void updateInvProjArtInertiaImplicitDynamic(
763 const Eigen::Matrix6d& artInertia,
double timeStep);
765 void updateInvProjArtInertiaImplicitKinematic(
766 const Eigen::Matrix6d& artInertia,
double timeStep);
768 void addChildBiasForceToDynamic(
769 Eigen::Vector6d& parentBiasForce,
770 const Eigen::Matrix6d& childArtInertia,
771 const Eigen::Vector6d& childBiasForce,
772 const Eigen::Vector6d& childPartialAcc);
774 void addChildBiasForceToKinematic(
775 Eigen::Vector6d& parentBiasForce,
776 const Eigen::Matrix6d& childArtInertia,
777 const Eigen::Vector6d& childBiasForce,
778 const Eigen::Vector6d& childPartialAcc);
780 void addChildBiasImpulseToDynamic(
781 Eigen::Vector6d& parentBiasImpulse,
782 const Eigen::Matrix6d& childArtInertia,
783 const Eigen::Vector6d& childBiasImpulse);
785 void addChildBiasImpulseToKinematic(
786 Eigen::Vector6d& parentBiasImpulse,
787 const Eigen::Matrix6d& childArtInertia,
788 const Eigen::Vector6d& childBiasImpulse);
790 void updateTotalForceDynamic(
791 const Eigen::Vector6d& bodyForce,
double timeStep);
793 void updateTotalForceKinematic(
794 const Eigen::Vector6d& bodyForce,
double timeStep);
796 void updateTotalImpulseDynamic(
const Eigen::Vector6d& bodyImpulse);
798 void updateTotalImpulseKinematic(
const Eigen::Vector6d& bodyImpulse);
800 void updateAccelerationDynamic(
801 const Eigen::Matrix6d& artInertia,
const Eigen::Vector6d& spatialAcc);
803 void updateAccelerationKinematic(
804 const Eigen::Matrix6d& artInertia,
const Eigen::Vector6d& spatialAcc);
806 void updateVelocityChangeDynamic(
807 const Eigen::Matrix6d& artInertia,
const Eigen::Vector6d& velocityChange);
809 void updateVelocityChangeKinematic(
810 const Eigen::Matrix6d& artInertia,
const Eigen::Vector6d& velocityChange);
812 void updateConstrainedTermsDynamic(
double timeStep);
814 void updateConstrainedTermsKinematic(
double timeStep);
822 #include "dart/dynamics/detail/GenericJoint.hpp" 824 #endif // DART_DYNAMICS_GENERICJOINT_HPP_ Vector mTotalImpulse
Total impluse projected on joint space.
Definition: GenericJoint.hpp:725
Matrix mInvProjArtInertia
Inverse of projected articulated inertia.
Definition: GenericJoint.hpp:712
void setVelocitiesStatic(const Vector &velocities)
Fixed-size version of setVelocities()
Definition: GenericJoint.hpp:741
virtual Vector getPositionDifferencesStatic(const Vector &q2, const Vector &q1) const
Fixed-size version of getPositionDifferences()
Definition: GenericJoint.hpp:1425
Vector mTotalForce
Total force projected on joint space.
Definition: GenericJoint.hpp:722
JacobianMatrix mJacobianDeriv
Time derivative of spatial Jacobian expressed in the child body frame.
Definition: GenericJoint.hpp:707
Vector mConstraintImpulses
Generalized constraint impulse.
Definition: GenericJoint.hpp:691
virtual ~GenericJoint()
Destructor.
Definition: GenericJoint.hpp:90
ThisClass & operator=(const ThisClass &other)
Same as copy(const GenericJoint&)
Definition: GenericJoint.hpp:179
Definition: Aspect.cpp:40
void setPositionsStatic(const Vector &positions)
Fixed-size version of setPositions()
Definition: GenericJoint.hpp:722
Vector mImpulses
Generalized impulse.
Definition: GenericJoint.hpp:688
const GenericJoint< ConfigSpaceT >::JacobianMatrix & getRelativeJacobianStatic() const
Fixed-size version of getRelativeJacobian()
Definition: GenericJoint.hpp:1570
const Vector & getAccelerationsStatic() const
Fixed-size version of getAccelerations()
Definition: GenericJoint.hpp:772
Vector mVelocityChanges
Change of generalized velocity.
Definition: GenericJoint.hpp:685
const Matrix & getInvProjArtInertia() const
Get the inverse of the projected articulated inertia.
Definition: GenericJoint.hpp:1730
const Vector & getVelocitiesStatic() const
Fixed-size version of getVelocities()
Definition: GenericJoint.hpp:753
JacobianMatrix mJacobian
Spatial Jacobian expressed in the child body frame.
Definition: GenericJoint.hpp:701
Properties getGenericJointProperties() const
Get the Properties of this GenericJoint.
Definition: GenericJoint.hpp:151
void setProperties(const Properties &properties)
Set the Properties of this GenericJoint.
Definition: GenericJoint.hpp:98
void setAspectState(const AspectState &state)
Set the AspectState of this GenericJoint.
Definition: GenericJoint.hpp:114
void copy(const ThisClass &otherJoint)
Copy the Properties of another GenericJoint.
Definition: GenericJoint.hpp:159
void setAspectProperties(const AspectProperties &properties)
Set the AspectProperties of this GenericJoint.
Definition: GenericJoint.hpp:125
const JacobianMatrix & getRelativeJacobianTimeDerivStatic() const
Fixed-size version of getRelativeJacobianTimeDeriv()
Definition: GenericJoint.hpp:1600
std::array< DegreeOfFreedom *, NumDofs > mDofs
Array of DegreeOfFreedom objects.
Definition: GenericJoint.hpp:678
const Vector & getPositionsStatic() const
Fixed-size version of getPositions()
Definition: GenericJoint.hpp:734
const Matrix & getInvProjArtInertiaImplicit() const
Get the inverse of projected articulated inertia for implicit joint damping and spring forces...
Definition: GenericJoint.hpp:1740
Matrix mInvProjArtInertiaImplicit
Inverse of projected articulated inertia for implicit joint damping and spring forces.
Definition: GenericJoint.hpp:719
void setAccelerationsStatic(const Vector &accels)
Fixed-size version of setAccelerations()
Definition: GenericJoint.hpp:760