33#ifndef DART_DYNAMICS_DETAIL_GenericJoint_HPP_
34#define DART_DYNAMICS_DETAIL_GenericJoint_HPP_
36#include "dart/config.hpp"
43#define GenericJoint_REPORT_DIM_MISMATCH(func, arg) \
45 dterr << "[GenericJoint::" #func "] Mismatch beteween size of " \
46 << #arg " [" << arg.size() << "] and the number of " \
47 << "DOFs [" << getNumDofs() << "] for Joint named [" \
48 << this->getName() << "].\n"; \
52#define GenericJoint_REPORT_OUT_OF_RANGE(func, index) \
54 dterr << "[GenericJoint::" << #func << "] The index [" << index \
55 << "] is out of range for Joint named [" << this->getName() \
56 << "] which has " << this->getNumDofs() << " DOFs.\n"; \
60#define GenericJoint_REPORT_UNSUPPORTED_ACTUATOR(func) \
62 dterr << "[GenericJoint::" #func "] Unsupported actuator type (" \
63 << Joint::mAspectProperties.mActuatorType << ") for Joint [" \
64 << this->getName() << "].\n"; \
68#define GenericJoint_SET_IF_DIFFERENT(mField, value) \
69 if (value == Base::mAspectProperties.mField) \
71 Base::mAspectProperties.mField = value; \
72 Joint::incrementVersion();
84template <
class ConfigSpaceT>
88template <
class ConfigSpaceT>
91 for (
auto i = 0u; i < NumDofs; ++i)
96template <
class ConfigSpaceT>
104template <
class ConfigSpaceT>
112template <
class ConfigSpaceT>
115 setCommands(state.mCommands);
116 setPositionsStatic(state.mPositions);
117 setVelocitiesStatic(state.mVelocities);
118 setAccelerationsStatic(state.mAccelerations);
119 setForces(state.mForces);
123template <
class ConfigSpaceT>
127 for (
auto i = 0u; i < NumDofs; ++i)
130 setPositionLowerLimit(i,
properties.mPositionLowerLimits[i]);
131 setPositionUpperLimit(i,
properties.mPositionUpperLimits[i]);
132 setInitialPosition(i,
properties.mInitialPositions[i]);
133 setVelocityLowerLimit(i,
properties.mVelocityLowerLimits[i]);
134 setVelocityUpperLimit(i,
properties.mVelocityUpperLimits[i]);
135 setInitialVelocity(i,
properties.mInitialVelocities[i]);
136 setAccelerationLowerLimit(i,
properties.mAccelerationLowerLimits[i]);
137 setAccelerationUpperLimit(i,
properties.mAccelerationUpperLimits[i]);
138 setForceLowerLimit(i,
properties.mForceLowerLimits[i]);
139 setForceUpperLimit(i,
properties.mForceUpperLimits[i]);
141 setRestPosition(i,
properties.mRestPositions[i]);
142 setDampingCoefficient(i,
properties.mDampingCoefficients[i]);
148template <
class ConfigSpaceT>
157template <
class ConfigSpaceT>
167template <
class ConfigSpaceT>
170 if (
nullptr == other)
177template <
class ConfigSpaceT>
186template <
class ConfigSpaceT>
198template <
class ConfigSpaceT>
210template <
class ConfigSpaceT>
217template <
class ConfigSpaceT>
221 if (NumDofs <=
index)
223 dterr <<
"[GenericJoint::setDofName] Attempting to set the name of DOF "
224 <<
"index " <<
index <<
", which is out of bounds for the Joint ["
226 <<
"]. We will set the name of DOF index 0 instead.\n";
233 std::string& dofName = Base::mAspectProperties.mDofNames[
index];
239 = this->mChildBodyNode ? this->mChildBodyNode->getSkeleton() :
nullptr;
241 dofName = skel->mNameMgrForDofs.changeObjectName(mDofs[
index],
name);
249template <
class ConfigSpaceT>
252 if (NumDofs <=
index)
262template <
class ConfigSpaceT>
265 if (NumDofs <=
index)
271 return Base::mAspectProperties.mPreserveDofNames[
index];
275template <
class ConfigSpaceT>
280 dterr <<
"[GenericJoint::getDofName] Requested name of DOF index [" <<
index
281 <<
"] in Joint [" << this->getName() <<
"], but that is "
282 <<
"out of bounds (max " << NumDofs - 1
283 <<
"). Returning name of DOF 0.\n";
285 return Base::mAspectProperties.mDofNames[0];
288 return Base::mAspectProperties.mDofNames[
index];
292template <
class ConfigSpaceT>
295 if (
index >= getNumDofs())
301 return mDofs[
index]->mIndexInSkeleton;
305template <
class ConfigSpaceT>
308 if (
index >= getNumDofs())
318template <
class ConfigSpaceT>
321 if (
index >= getNumDofs())
329 Base::mAspectProperties.mForceLowerLimits[
index],
330 Base::mAspectProperties.mForceUpperLimits[
index]);
335 dtwarn <<
"[GenericJoint::setCommand] Attempting to set a non-zero ("
336 << command <<
") command for a PASSIVE joint ["
337 << this->getName() <<
"].\n";
339 this->mAspectState.mCommands[
index] = command;
344 Base::mAspectProperties.mVelocityLowerLimits[
index],
345 Base::mAspectProperties.mVelocityUpperLimits[
index]);
350 dtwarn <<
"[GenericJoint::setCommand] Attempting to set a non-zero ("
351 << command <<
") command for a MIMIC joint [" << this->getName()
356 Base::mAspectProperties.mVelocityLowerLimits[
index],
357 Base::mAspectProperties.mVelocityUpperLimits[
index]);
362 Base::mAspectProperties.mAccelerationLowerLimits[
index],
363 Base::mAspectProperties.mAccelerationUpperLimits[
index]);
368 Base::mAspectProperties.mVelocityLowerLimits[
index],
369 Base::mAspectProperties.mVelocityUpperLimits[
index]);
375 dtwarn <<
"[GenericJoint::setCommand] Attempting to set a non-zero ("
376 << command <<
") command for a LOCKED joint [" << this->getName()
379 this->mAspectState.mCommands[
index] = command;
388template <
class ConfigSpaceT>
391 if (
index >= getNumDofs())
397 return this->mAspectState.mCommands[
index];
401template <
class ConfigSpaceT>
404 if (
static_cast<size_t>(commands.size()) != getNumDofs())
415 Base::mAspectProperties.mForceLowerLimits,
416 Base::mAspectProperties.mForceUpperLimits);
419 if (Vector::Zero() != commands)
421 dtwarn <<
"[GenericJoint::setCommands] Attempting to set a non-zero ("
422 << commands.transpose() <<
") command for a PASSIVE joint ["
423 << this->getName() <<
"].\n";
425 this->mAspectState.mCommands = commands;
430 Base::mAspectProperties.mVelocityLowerLimits,
431 Base::mAspectProperties.mVelocityUpperLimits);
434 if (Vector::Zero() != commands)
436 dtwarn <<
"[GenericJoint::setCommands] Attempting to set a non-zero ("
437 << commands.transpose() <<
") command for a MIMIC joint ["
438 << this->getName() <<
"].\n";
442 Base::mAspectProperties.mVelocityLowerLimits,
443 Base::mAspectProperties.mVelocityUpperLimits);
448 Base::mAspectProperties.mAccelerationLowerLimits,
449 Base::mAspectProperties.mAccelerationUpperLimits);
454 Base::mAspectProperties.mVelocityLowerLimits,
455 Base::mAspectProperties.mVelocityUpperLimits);
459 if (Vector::Zero() != commands)
461 dtwarn <<
"[GenericJoint::setCommands] Attempting to set a non-zero ("
462 << commands.transpose() <<
") command for a LOCKED joint ["
463 << this->getName() <<
"].\n";
465 this->mAspectState.mCommands = commands;
474template <
class ConfigSpaceT>
477 return this->mAspectState.mCommands;
481template <
class ConfigSpaceT>
484 this->mAspectState.mCommands.setZero();
488template <
class ConfigSpaceT>
491 if (
index >= getNumDofs())
505 this->notifyPositionUpdated();
509template <
class ConfigSpaceT>
518 return getPositionsStatic()[
index];
522template <
class ConfigSpaceT>
525 if (
static_cast<size_t>(positions.size()) != getNumDofs())
531 setPositionsStatic(positions);
535template <
class ConfigSpaceT>
538 return getPositionsStatic();
542template <
class ConfigSpaceT>
556template <
class ConfigSpaceT>
559 if (
index >= getNumDofs())
565 return Base::mAspectProperties.mPositionLowerLimits[
index];
569template <
class ConfigSpaceT>
571 const Eigen::VectorXd& lowerLimits)
573 if (
static_cast<size_t>(lowerLimits.size()) != getNumDofs())
583template <
class ConfigSpaceT>
586 return Base::mAspectProperties.mPositionLowerLimits;
590template <
class ConfigSpaceT>
604template <
class ConfigSpaceT>
607 if (
index >= getNumDofs())
613 return Base::mAspectProperties.mPositionUpperLimits[
index];
617template <
class ConfigSpaceT>
619 const Eigen::VectorXd& upperLimits)
621 if (
static_cast<size_t>(upperLimits.size()) != getNumDofs())
631template <
class ConfigSpaceT>
634 return Base::mAspectProperties.mPositionUpperLimits;
638template <
class ConfigSpaceT>
641 if (
index >= getNumDofs())
647 return std::isfinite(Base::mAspectProperties.mPositionUpperLimits[
index])
648 || std::isfinite(Base::mAspectProperties.mPositionLowerLimits[
index]);
652template <
class ConfigSpaceT>
661 setPosition(
index, Base::mAspectProperties.mInitialPositions[
index]);
665template <
class ConfigSpaceT>
668 setPositionsStatic(Base::mAspectProperties.mInitialPositions);
672template <
class ConfigSpaceT>
674 size_t index,
double initial)
676 if (
index >= getNumDofs())
686template <
class ConfigSpaceT>
689 if (
index >= getNumDofs())
695 return Base::mAspectProperties.mInitialPositions[
index];
699template <
class ConfigSpaceT>
701 const Eigen::VectorXd& initial)
703 if (
static_cast<size_t>(initial.size()) != getNumDofs())
713template <
class ConfigSpaceT>
716 return Base::mAspectProperties.mInitialPositions;
720template <
class ConfigSpaceT>
723 if (this->mAspectState.mPositions == positions)
726 this->mAspectState.mPositions = positions;
727 this->notifyPositionUpdated();
731template <
class ConfigSpaceT>
735 return this->mAspectState.mPositions;
739template <
class ConfigSpaceT>
742 if (this->mAspectState.mVelocities == velocities)
745 this->mAspectState.mVelocities = velocities;
746 this->notifyVelocityUpdated();
750template <
class ConfigSpaceT>
754 return this->mAspectState.mVelocities;
758template <
class ConfigSpaceT>
761 if (this->mAspectState.mAccelerations == accels)
764 this->mAspectState.mAccelerations = accels;
765 this->notifyAccelerationUpdated();
769template <
class ConfigSpaceT>
773 return this->mAspectState.mAccelerations;
777template <
class ConfigSpaceT>
780 if (
index >= getNumDofs())
791 this->notifyVelocityUpdated();
794 this->mAspectState.mCommands[
index] = this->getVelocitiesStatic()[
index];
798template <
class ConfigSpaceT>
807 return getVelocitiesStatic()[
index];
811template <
class ConfigSpaceT>
813 const Eigen::VectorXd& velocities)
815 if (
static_cast<size_t>(velocities.size()) != getNumDofs())
821 setVelocitiesStatic(velocities);
824 this->mAspectState.mCommands = this->getVelocitiesStatic();
828template <
class ConfigSpaceT>
831 return getVelocitiesStatic();
835template <
class ConfigSpaceT>
839 if (
index >= getNumDofs())
849template <
class ConfigSpaceT>
852 if (
index >= getNumDofs())
858 return Base::mAspectProperties.mVelocityLowerLimits[
index];
862template <
class ConfigSpaceT>
864 const Eigen::VectorXd& lowerLimits)
866 if (
static_cast<size_t>(lowerLimits.size()) != getNumDofs())
876template <
class ConfigSpaceT>
879 return Base::mAspectProperties.mVelocityLowerLimits;
883template <
class ConfigSpaceT>
887 if (
index >= getNumDofs())
897template <
class ConfigSpaceT>
900 if (
index >= getNumDofs())
906 return Base::mAspectProperties.mVelocityUpperLimits[
index];
910template <
class ConfigSpaceT>
912 const Eigen::VectorXd& upperLimits)
914 if (
static_cast<size_t>(upperLimits.size()) != getNumDofs())
924template <
class ConfigSpaceT>
927 return Base::mAspectProperties.mVelocityUpperLimits;
931template <
class ConfigSpaceT>
934 if (
index >= getNumDofs())
940 setVelocity(
index, Base::mAspectProperties.mInitialVelocities[
index]);
944template <
class ConfigSpaceT>
947 setVelocitiesStatic(Base::mAspectProperties.mInitialVelocities);
951template <
class ConfigSpaceT>
953 size_t index,
double initial)
955 if (
index >= getNumDofs())
965template <
class ConfigSpaceT>
968 if (
index >= getNumDofs())
974 return Base::mAspectProperties.mInitialVelocities[
index];
978template <
class ConfigSpaceT>
980 const Eigen::VectorXd& initial)
982 if (
static_cast<size_t>(initial.size()) != getNumDofs())
992template <
class ConfigSpaceT>
995 return Base::mAspectProperties.mInitialVelocities;
999template <
class ConfigSpaceT>
1003 if (
index >= getNumDofs())
1014 this->notifyAccelerationUpdated();
1017 this->mAspectState.mCommands[
index] = this->getAccelerationsStatic()[
index];
1021template <
class ConfigSpaceT>
1024 if (
index >= getNumDofs())
1030 return getAccelerationsStatic()[
index];
1034template <
class ConfigSpaceT>
1036 const Eigen::VectorXd& accelerations)
1038 if (
static_cast<size_t>(accelerations.size()) != getNumDofs())
1044 setAccelerationsStatic(accelerations);
1047 this->mAspectState.mCommands = this->getAccelerationsStatic();
1051template <
class ConfigSpaceT>
1054 return getAccelerationsStatic();
1058template <
class ConfigSpaceT>
1062 if (
index >= getNumDofs())
1072template <
class ConfigSpaceT>
1075 if (
index >= getNumDofs())
1081 return Base::mAspectProperties.mAccelerationLowerLimits[
index];
1085template <
class ConfigSpaceT>
1087 const Eigen::VectorXd& lowerLimits)
1089 if (
static_cast<size_t>(lowerLimits.size()) != getNumDofs())
1099template <
class ConfigSpaceT>
1102 return Base::mAspectProperties.mAccelerationLowerLimits;
1106template <
class ConfigSpaceT>
1110 if (
index >= getNumDofs())
1119template <
class ConfigSpaceT>
1122 if (
index >= getNumDofs())
1128 return Base::mAspectProperties.mAccelerationUpperLimits[
index];
1132template <
class ConfigSpaceT>
1134 const Eigen::VectorXd& upperLimits)
1136 if (
static_cast<size_t>(upperLimits.size()) != getNumDofs())
1146template <
class ConfigSpaceT>
1149 return Base::mAspectProperties.mAccelerationUpperLimits;
1153template <
class ConfigSpaceT>
1156 setAccelerationsStatic(Vector::Zero());
1160template <
class ConfigSpaceT>
1163 if (
index >= getNumDofs())
1172 this->mAspectState.mCommands[
index] = this->mAspectState.mForces[
index];
1176template <
class ConfigSpaceT>
1179 if (
index >= getNumDofs())
1185 return this->mAspectState.mForces[
index];
1189template <
class ConfigSpaceT>
1192 if (
static_cast<size_t>(forces.size()) != getNumDofs())
1198 this->mAspectState.mForces = forces;
1201 this->mAspectState.mCommands = this->mAspectState.mForces;
1205template <
class ConfigSpaceT>
1208 return this->mAspectState.mForces;
1212template <
class ConfigSpaceT>
1215 if (
index >= getNumDofs())
1225template <
class ConfigSpaceT>
1228 if (
index >= getNumDofs())
1234 return Base::mAspectProperties.mForceLowerLimits[
index];
1238template <
class ConfigSpaceT>
1240 const Eigen::VectorXd& lowerLimits)
1242 if (
static_cast<size_t>(lowerLimits.size()) != getNumDofs())
1252template <
class ConfigSpaceT>
1255 return Base::mAspectProperties.mForceLowerLimits;
1259template <
class ConfigSpaceT>
1262 if (
index >= getNumDofs())
1272template <
class ConfigSpaceT>
1275 if (
index >= getNumDofs())
1281 return Base::mAspectProperties.mForceUpperLimits[
index];
1285template <
class ConfigSpaceT>
1287 const Eigen::VectorXd& upperLimits)
1289 if (
static_cast<size_t>(upperLimits.size()) != getNumDofs())
1299template <
class ConfigSpaceT>
1302 return Base::mAspectProperties.mForceUpperLimits;
1306template <
class ConfigSpaceT>
1309 this->mAspectState.mForces.setZero();
1312 this->mAspectState.mCommands = this->mAspectState.mForces;
1316template <
class ConfigSpaceT>
1318 size_t index,
double velocityChange)
1320 if (
index >= getNumDofs())
1326 mVelocityChanges[
index] = velocityChange;
1330template <
class ConfigSpaceT>
1333 if (
index >= getNumDofs())
1339 return mVelocityChanges[
index];
1343template <
class ConfigSpaceT>
1346 mVelocityChanges.setZero();
1350template <
class ConfigSpaceT>
1352 size_t index,
double impulse)
1354 if (
index >= getNumDofs())
1360 mConstraintImpulses[
index] = impulse;
1364template <
class ConfigSpaceT>
1367 if (
index >= getNumDofs())
1373 return mConstraintImpulses[
index];
1377template <
class ConfigSpaceT>
1380 mConstraintImpulses.setZero();
1384template <
class ConfigSpaceT>
1387 const Point& point = math::integratePosition<ConfigSpaceT>(
1388 math::toManifoldPoint<ConfigSpaceT>(getPositionsStatic()),
1389 getVelocitiesStatic(),
1392 setPositionsStatic(math::toEuclideanPoint<ConfigSpaceT>(point));
1396template <
class ConfigSpaceT>
1399 setVelocitiesStatic(math::integrateVelocity<ConfigSpaceT>(
1400 getVelocitiesStatic(), getAccelerationsStatic(), dt));
1404template <
class ConfigSpaceT>
1406 const Eigen::VectorXd& q2,
const Eigen::VectorXd& q1)
const
1408 if (
static_cast<size_t>(q1.size()) != getNumDofs()
1409 ||
static_cast<size_t>(q2.size()) != getNumDofs())
1411 dterr <<
"[GenericJoint::getPositionsDifference] q1's size [" << q1.size()
1412 <<
"] or q2's size [" << q2.size() <<
"] must both equal the dof ["
1413 << this->getNumDofs() <<
"] for Joint [" << this->getName() <<
"].\n";
1415 return Eigen::VectorXd::Zero(getNumDofs());
1418 return getPositionDifferencesStatic(q2, q1);
1422template <
class ConfigSpaceT>
1423typename ConfigSpaceT::Vector
1432template <
class ConfigSpaceT>
1435 if (
index >= getNumDofs())
1447template <
class ConfigSpaceT>
1450 if (
index >= getNumDofs())
1456 return Base::mAspectProperties.mSpringStiffnesses[
index];
1460template <
class ConfigSpaceT>
1463 if (
index >= getNumDofs())
1473template <
class ConfigSpaceT>
1476 if (
index >= getNumDofs())
1482 return Base::mAspectProperties.mRestPositions[
index];
1486template <
class ConfigSpaceT>
1489 if (
index >= getNumDofs())
1501template <
class ConfigSpaceT>
1504 if (
index >= getNumDofs())
1510 return Base::mAspectProperties.mDampingCoefficients[
index];
1514template <
class ConfigSpaceT>
1518 if (
index >= getNumDofs())
1530template <
class ConfigSpaceT>
1533 if (
index >= getNumDofs())
1539 return Base::mAspectProperties.mFrictions[
index];
1543template <
class ConfigSpaceT>
1548 = getPositionsStatic() - Base::mAspectProperties.mRestPositions;
1550 const double pe = 0.5
1552 Base::mAspectProperties.mSpringStiffnesses.cwiseProduct(
1559template <
class ConfigSpaceT>
1562 return getRelativeJacobianStatic();
1566template <
class ConfigSpaceT>
1570 if (this->mIsRelativeJacobianDirty)
1572 this->updateRelativeJacobian(
false);
1573 this->mIsRelativeJacobianDirty =
false;
1580template <
class ConfigSpaceT>
1582 const Eigen::VectorXd& positions)
const
1584 return getRelativeJacobianStatic(positions);
1588template <
class ConfigSpaceT>
1592 return getRelativeJacobianTimeDerivStatic();
1596template <
class ConfigSpaceT>
1600 if (this->mIsRelativeJacobianTimeDerivDirty)
1602 this->updateRelativeJacobianTimeDeriv();
1603 this->mIsRelativeJacobianTimeDerivDirty =
false;
1606 return mJacobianDeriv;
1610template <
class ConfigSpaceT>
1612 : mVelocityChanges(
Vector::Zero()),
1613 mImpulses(
Vector::Zero()),
1614 mConstraintImpulses(
Vector::Zero()),
1617 mInvProjArtInertia(
Matrix::Zero()),
1618 mInvProjArtInertiaImplicit(
Matrix::Zero()),
1619 mTotalForce(
Vector::Zero()),
1620 mTotalImpulse(
Vector::Zero())
1622 for (
auto i = 0u; i <
NumDofs; ++i)
1623 mDofs[i] = this->createDofPointer(i);
1631template <
class ConfigSpaceT>
1634 const SkeletonPtr& skel = this->mChildBodyNode->getSkeleton();
1635 for (
auto i = 0u; i < NumDofs; ++i)
1637 Base::mAspectProperties.mDofNames[i]
1638 = skel->mNameMgrForDofs.issueNewNameAndAdd(
1639 mDofs[i]->getName(), mDofs[i]);
1644template <
class ConfigSpaceT>
1647 assert(this->mChildBodyNode);
1648 return this->mChildBodyNode->getBodyForce()
1649 - this->getRelativeJacobianStatic() * this->mAspectState.mForces;
1653template <
class ConfigSpaceT>
1656 this->mSpatialVelocity
1657 = this->getRelativeJacobianStatic() * this->getVelocitiesStatic();
1661template <
class ConfigSpaceT>
1664 this->mSpatialAcceleration = this->getRelativePrimaryAcceleration()
1665 + this->getRelativeJacobianTimeDerivStatic()
1666 * this->getVelocitiesStatic();
1670template <
class ConfigSpaceT>
1673 this->mPrimaryAcceleration
1674 = this->getRelativeJacobianStatic() * this->getAccelerationsStatic();
1678template <
class ConfigSpaceT>
1682 vel.noalias() += getRelativeJacobianStatic() * getVelocitiesStatic();
1689template <
class ConfigSpaceT>
1696 childVelocity, getRelativeJacobianStatic() * getVelocitiesStatic())
1697 + getRelativeJacobianTimeDerivStatic() * getVelocitiesStatic();
1703template <
class ConfigSpaceT>
1707 acc.noalias() += getRelativeJacobianStatic() * getAccelerationsStatic();
1714template <
class ConfigSpaceT>
1719 velocityChange.noalias() += getRelativeJacobianStatic() * mVelocityChanges;
1726template <
class ConfigSpaceT>
1732 return mInvProjArtInertia;
1736template <
class ConfigSpaceT>
1742 return mInvProjArtInertiaImplicit;
1746template <
class ConfigSpaceT>
1756 addChildArtInertiaToDynamic(parentArtInertia, childArtInertia);
1761 addChildArtInertiaToKinematic(parentArtInertia, childArtInertia);
1770template <
class ConfigSpaceT>
1775 JacobianMatrix AIS = childArtInertia * getRelativeJacobianStatic();
1777 PI.noalias() -= AIS * mInvProjArtInertia * AIS.transpose();
1787template <
class ConfigSpaceT>
1794 this->getRelativeTransform().inverse(), childArtInertia);
1798template <
class ConfigSpaceT>
1808 addChildArtInertiaImplicitToDynamic(parentArtInertia, childArtInertia);
1813 addChildArtInertiaImplicitToKinematic(parentArtInertia, childArtInertia);
1822template <
class ConfigSpaceT>
1827 JacobianMatrix AIS = childArtInertia * getRelativeJacobianStatic();
1829 PI.noalias() -= AIS * mInvProjArtInertiaImplicit * AIS.transpose();
1839template <
class ConfigSpaceT>
1846 this->getRelativeTransform().inverse(), childArtInertia);
1850template <
class ConfigSpaceT>
1860 updateInvProjArtInertiaDynamic(artInertia);
1865 updateInvProjArtInertiaKinematic(artInertia);
1874template <
class ConfigSpaceT>
1880 const Matrix projAI = Jacobian.transpose() * artInertia * Jacobian;
1883 mInvProjArtInertia = math::inverse<ConfigSpaceT>(projAI);
1890template <
class ConfigSpaceT>
1898template <
class ConfigSpaceT>
1908 updateInvProjArtInertiaImplicitDynamic(artInertia, timeStep);
1913 updateInvProjArtInertiaImplicitKinematic(artInertia, timeStep);
1922template <
class ConfigSpaceT>
1928 Matrix projAI = Jacobian.transpose() * artInertia * Jacobian;
1931 projAI += (timeStep * Base::mAspectProperties.mDampingCoefficients
1932 + timeStep * timeStep * Base::mAspectProperties.mSpringStiffnesses)
1936 mInvProjArtInertiaImplicit = math::inverse<ConfigSpaceT>(projAI);
1943template <
class ConfigSpaceT>
1951template <
class ConfigSpaceT>
1964 addChildBiasForceToDynamic(
1965 parentBiasForce, childArtInertia, childBiasForce, childPartialAcc);
1970 addChildBiasForceToKinematic(
1971 parentBiasForce, childArtInertia, childBiasForce, childPartialAcc);
1980template <
class ConfigSpaceT>
1992 + getRelativeJacobianStatic() * getInvProjArtInertiaImplicit()
2006 parentBiasForce +=
math::dAdInvT(this->getRelativeTransform(), beta);
2010template <
class ConfigSpaceT>
2022 + getRelativeJacobianStatic() * getAccelerationsStatic());
2035 _parentBiasForce +=
math::dAdInvT(this->getRelativeTransform(), beta);
2039template <
class ConfigSpaceT>
2051 addChildBiasImpulseToDynamic(
2052 parentBiasImpulse, childArtInertia, childBiasImpulse);
2057 addChildBiasImpulseToKinematic(
2058 parentBiasImpulse, childArtInertia, childBiasImpulse);
2067template <
class ConfigSpaceT>
2075 + childArtInertia * getRelativeJacobianStatic()
2076 * getInvProjArtInertia() * mTotalImpulse;
2083 _parentBiasImpulse +=
math::dAdInvT(this->getRelativeTransform(), beta);
2087template <
class ConfigSpaceT>
2096 +=
math::dAdInvT(this->getRelativeTransform(), childBiasImpulse);
2100template <
class ConfigSpaceT>
2104 assert(timeStep > 0.0);
2109 this->mAspectState.mForces = this->mAspectState.mCommands;
2110 updateTotalForceDynamic(bodyForce, timeStep);
2115 this->mAspectState.mForces.setZero();
2116 updateTotalForceDynamic(bodyForce, timeStep);
2119 setAccelerationsStatic(this->mAspectState.mCommands);
2120 updateTotalForceKinematic(bodyForce, timeStep);
2123 setAccelerationsStatic(
2124 (this->mAspectState.mCommands - getVelocitiesStatic()) / timeStep);
2125 updateTotalForceKinematic(bodyForce, timeStep);
2128 setVelocitiesStatic(Vector::Zero());
2129 setAccelerationsStatic(Vector::Zero());
2130 updateTotalForceKinematic(bodyForce, timeStep);
2139template <
class ConfigSpaceT>
2145 = -Base::mAspectProperties.mSpringStiffnesses.cwiseProduct(
2146 getPositionsStatic() - Base::mAspectProperties.mRestPositions
2147 + getVelocitiesStatic() * timeStep);
2150 const Vector dampingForce
2151 = -Base::mAspectProperties.mDampingCoefficients.cwiseProduct(
2152 getVelocitiesStatic());
2155 mTotalForce = this->mAspectState.mForces + springForce + dampingForce
2156 - getRelativeJacobianStatic().transpose() * bodyForce;
2160template <
class ConfigSpaceT>
2168template <
class ConfigSpaceT>
2178 updateTotalImpulseDynamic(bodyImpulse);
2183 updateTotalImpulseKinematic(bodyImpulse);
2192template <
class ConfigSpaceT>
2197 mTotalImpulse = mConstraintImpulses
2198 - getRelativeJacobianStatic().transpose() * bodyImpulse;
2202template <
class ConfigSpaceT>
2210template <
class ConfigSpaceT>
2213 mTotalImpulse.setZero();
2217template <
class ConfigSpaceT>
2227 updateAccelerationDynamic(artInertia, spatialAcc);
2232 updateAccelerationKinematic(artInertia, spatialAcc);
2241template <
class ConfigSpaceT>
2246 setAccelerationsStatic(
2247 getInvProjArtInertiaImplicit()
2249 - getRelativeJacobianStatic().transpose() * artInertia
2250 *
math::AdInvT(this->getRelativeTransform(), spatialAcc)));
2257template <
class ConfigSpaceT>
2266template <
class ConfigSpaceT>
2276 updateVelocityChangeDynamic(artInertia, velocityChange);
2281 updateVelocityChangeKinematic(artInertia, velocityChange);
2290template <
class ConfigSpaceT>
2296 = getInvProjArtInertia()
2298 - getRelativeJacobianStatic().transpose() * artInertia
2299 *
math::AdInvT(this->getRelativeTransform(), velocityChange));
2306template <
class ConfigSpaceT>
2315template <
class ConfigSpaceT>
2319 bool withDampingForces,
2320 bool withSpringForces)
2322 this->mAspectState.mForces
2323 = getRelativeJacobianStatic().transpose() * bodyForce;
2327 if (withDampingForces)
2329 const typename ConfigSpaceT::Vector dampingForces
2330 = -Base::mAspectProperties.mDampingCoefficients.cwiseProduct(
2331 getVelocitiesStatic() + getAccelerationsStatic() * timeStep);
2332 this->mAspectState.mForces -= dampingForces;
2337 if (withSpringForces)
2339 const typename ConfigSpaceT::Vector springForces
2340 = -Base::mAspectProperties.mSpringStiffnesses.cwiseProduct(
2341 getPositionsStatic() - Base::mAspectProperties.mRestPositions
2342 + getVelocitiesStatic() * timeStep
2343 + getAccelerationsStatic() * timeStep * timeStep);
2344 this->mAspectState.mForces -= springForces;
2349template <
class ConfigSpaceT>
2353 bool withDampingForces,
2354 bool withSpringForces)
2366 updateForceID(bodyForce, timeStep, withDampingForces, withSpringForces);
2375template <
class ConfigSpaceT>
2379 mImpulses = getRelativeJacobianStatic().transpose() * bodyImpulse;
2383template <
class ConfigSpaceT>
2397 updateImpulseID(bodyImpulse);
2406template <
class ConfigSpaceT>
2415 updateConstrainedTermsDynamic(timeStep);
2420 updateConstrainedTermsKinematic(timeStep);
2429template <
class ConfigSpaceT>
2432 const double invTimeStep = 1.0 / timeStep;
2434 setVelocitiesStatic(getVelocitiesStatic() + mVelocityChanges);
2435 setAccelerationsStatic(
2436 getAccelerationsStatic() + mVelocityChanges * invTimeStep);
2437 this->mAspectState.mForces.noalias() += mImpulses * invTimeStep;
2442template <
class ConfigSpaceT>
2446 this->mAspectState.mForces.noalias() += mImpulses / timeStep;
2450template <
class ConfigSpaceT>
2458 beta.noalias() += childArtInertia * getRelativeJacobianStatic()
2459 * getInvProjArtInertia() * mInvM_a;
2466 parentBiasForce +=
math::dAdInvT(this->getRelativeTransform(), beta);
2470template <
class ConfigSpaceT>
2478 beta.noalias() += childArtInertia * getRelativeJacobianStatic()
2479 * getInvProjArtInertiaImplicit() * mInvM_a;
2486 parentBiasForce +=
math::dAdInvT(this->getRelativeTransform(), beta);
2490template <
class ConfigSpaceT>
2495 mInvM_a = this->mAspectState.mForces
2496 - getRelativeJacobianStatic().transpose() * bodyForce;
2500template <
class ConfigSpaceT>
2502 Eigen::MatrixXd& _invMassMat,
2508 mInvMassMatrixSegment
2509 = getInvProjArtInertia()
2511 - getRelativeJacobianStatic().transpose() * artInertia
2512 *
math::AdInvT(this->getRelativeTransform(), spatialAcc));
2518 size_t iStart = mDofs[0]->mIndexInTree;
2521 _invMassMat.block<NumDofs, 1>(iStart, _col) = mInvMassMatrixSegment;
2525template <
class ConfigSpaceT>
2527 Eigen::MatrixXd& invMassMat,
2533 mInvMassMatrixSegment
2534 = getInvProjArtInertiaImplicit()
2536 - getRelativeJacobianStatic().transpose() * artInertia
2537 *
math::AdInvT(this->getRelativeTransform(), spatialAcc));
2543 size_t iStart = mDofs[0]->mIndexInTree;
2546 invMassMat.block<NumDofs, 1>(iStart, col) = mInvMassMatrixSegment;
2550template <
class ConfigSpaceT>
2554 acc += getRelativeJacobianStatic() * mInvMassMatrixSegment;
2558template <
class ConfigSpaceT>
2562 return getRelativeJacobianStatic().transpose() * spatial;
#define dterr
Output an error message.
Definition Console.hpp:49
#define dtwarn
Output a warning message.
Definition Console.hpp:46
BodyPropPtr properties
Definition SdfParser.cpp:80
std::string * name
Definition SkelParser.cpp:1697
bool * preserveName
Definition SkelParser.cpp:1696
Eigen::VectorXd velocity
Definition SkelParser.cpp:109
Eigen::VectorXd force
Definition SkelParser.cpp:111
std::size_t index
Definition SkelParser.cpp:1672
Eigen::VectorXd acceleration
Definition SkelParser.cpp:110
double * friction
Definition SkelParser.cpp:1694
Eigen::VectorXd position
Definition SkelParser.cpp:108
AspectProperties mAspectProperties
Aspect::Properties data, directly accessible to your derived class.
Definition EmbeddedAspect.hpp:228
AspectState mAspectState
Aspect::State data, directly accessible to your derived class.
Definition EmbeddedAspect.hpp:415
DegreeOfFreedom class is a proxy class for accessing single degrees of freedom (aka generalized coord...
Definition DegreeOfFreedom.hpp:56
Definition GenericJoint.hpp:49
void setAspectState(const AspectState &state)
Set the AspectState of this GenericJoint.
Definition GenericJoint.hpp:113
void setForceLowerLimits(const Eigen::VectorXd &lowerLimits) override
Definition GenericJoint.hpp:1239
double getCommand(std::size_t index) const override
Definition GenericJoint.hpp:389
typename ConfigSpaceT::Matrix Matrix
Definition GenericJoint.hpp:60
void addChildArtInertiaImplicitToKinematic(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia)
Definition GenericJoint.hpp:1840
Eigen::VectorXd getCommands() const override
Definition GenericJoint.hpp:475
void resetVelocities() override
Definition GenericJoint.hpp:945
const Vector & getPositionsStatic() const
Fixed-size version of getPositions()
Definition GenericJoint.hpp:733
void setAccelerationsStatic(const Vector &accels)
Fixed-size version of setAccelerations()
Definition GenericJoint.hpp:759
void copy(const ThisClass &otherJoint)
Copy the Properties of another GenericJoint.
Definition GenericJoint.hpp:158
void setForceUpperLimits(const Eigen::VectorXd &upperLimits) override
Definition GenericJoint.hpp:1286
void updateTotalImpulseKinematic(const Eigen::Vector6d &bodyImpulse)
Definition GenericJoint.hpp:2203
void setCoulombFriction(std::size_t index, double friction) override
Definition GenericJoint.hpp:1515
const JacobianMatrix & getRelativeJacobianTimeDerivStatic() const
Fixed-size version of getRelativeJacobianTimeDeriv()
Definition GenericJoint.hpp:1598
void setRestPosition(std::size_t index, double q0) override
Definition GenericJoint.hpp:1461
void setAccelerations(const Eigen::VectorXd &accelerations) override
Definition GenericJoint.hpp:1035
void updateTotalImpulse(const Eigen::Vector6d &bodyImpulse) override
Definition GenericJoint.hpp:2169
void updateForceFD(const Eigen::Vector6d &bodyForce, double timeStep, bool withDampingForcese, bool withSpringForces) override
Definition GenericJoint.hpp:2350
const Matrix & getInvProjArtInertiaImplicit() const
Get the inverse of projected articulated inertia for implicit joint damping and spring forces.
Definition GenericJoint.hpp:1738
Eigen::VectorXd getPositionUpperLimits() const override
Definition GenericJoint.hpp:632
void setVelocityUpperLimits(const Eigen::VectorXd &upperLimits) override
Definition GenericJoint.hpp:911
void updateForceID(const Eigen::Vector6d &bodyForce, double timeStep, bool withDampingForces, bool withSpringForces) override
Definition GenericJoint.hpp:2316
Eigen::VectorXd getAccelerationUpperLimits() const override
Definition GenericJoint.hpp:1147
void updateAccelerationKinematic(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc)
Definition GenericJoint.hpp:2258
void updateVelocityChangeDynamic(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &velocityChange)
Definition GenericJoint.hpp:2291
Eigen::VectorXd getVelocityLowerLimits() const override
Definition GenericJoint.hpp:877
void updateInvProjArtInertiaImplicit(const Eigen::Matrix6d &artInertia, double timeStep) override
Definition GenericJoint.hpp:1899
void setVelocityLowerLimits(const Eigen::VectorXd &lowerLimits) override
Definition GenericJoint.hpp:863
void updateConstrainedTermsDynamic(double timeStep)
Definition GenericJoint.hpp:2430
void setPositionLowerLimit(std::size_t index, double position) override
Definition GenericJoint.hpp:543
const GenericJoint< ConfigSpaceT >::JacobianMatrix & getRelativeJacobianStatic() const
Fixed-size version of getRelativeJacobian()
Definition GenericJoint.hpp:1568
void addChildArtInertiaToDynamic(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia)
Definition GenericJoint.hpp:1771
const math::Jacobian getRelativeJacobianTimeDeriv() const override
Definition GenericJoint.hpp:1589
void setVelocities(const Eigen::VectorXd &velocities) override
Definition GenericJoint.hpp:812
void addChildBiasImpulseToKinematic(Eigen::Vector6d &parentBiasImpulse, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasImpulse)
Definition GenericJoint.hpp:2088
void addChildArtInertiaImplicitTo(Eigen::Matrix6d &parentArtInertiaImplicit, const Eigen::Matrix6d &childArtInertiaImplicit) override
Definition GenericJoint.hpp:1799
void setPosition(std::size_t index, double position) override
Definition GenericJoint.hpp:489
void updateVelocityChange(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &velocityChange) override
Definition GenericJoint.hpp:2267
void setCommand(std::size_t index, double command) override
Definition GenericJoint.hpp:319
std::array< DegreeOfFreedom *, NumDofs > mDofs
Array of DegreeOfFreedom objects.
Definition GenericJoint.hpp:679
void setInitialPosition(std::size_t index, double initial) override
Definition GenericJoint.hpp:673
Eigen::VectorXd getForces() const override
Definition GenericJoint.hpp:1206
void resetCommands() override
Definition GenericJoint.hpp:482
void setVelocityChange(std::size_t index, double velocityChange) override
Definition GenericJoint.hpp:1317
typename Base::AspectState AspectState
Definition GenericJoint.hpp:64
void setAccelerationUpperLimits(const Eigen::VectorXd &upperLimits) override
Definition GenericJoint.hpp:1133
void setPartialAccelerationTo(Eigen::Vector6d &partialAcceleration, const Eigen::Vector6d &childVelocity) override
Definition GenericJoint.hpp:1690
double getVelocity(std::size_t index) const override
Definition GenericJoint.hpp:799
Eigen::Vector6d getBodyConstraintWrench() const override
Definition GenericJoint.hpp:1645
void addAccelerationTo(Eigen::Vector6d &acc) override
Definition GenericJoint.hpp:1704
void updateTotalImpulseDynamic(const Eigen::Vector6d &bodyImpulse)
Definition GenericJoint.hpp:2193
void setForce(std::size_t index, double force) override
Definition GenericJoint.hpp:1161
void setInitialVelocity(std::size_t index, double initial) override
Definition GenericJoint.hpp:952
double getForce(std::size_t index) const override
Definition GenericJoint.hpp:1177
void setInitialVelocities(const Eigen::VectorXd &initial) override
Definition GenericJoint.hpp:979
void updateInvProjArtInertiaDynamic(const Eigen::Matrix6d &artInertia)
Definition GenericJoint.hpp:1875
void setPositionUpperLimit(std::size_t index, double position) override
Definition GenericJoint.hpp:591
void updateInvProjArtInertiaImplicitKinematic(const Eigen::Matrix6d &artInertia, double timeStep)
Definition GenericJoint.hpp:1944
const math::Jacobian getRelativeJacobian() const override
Definition GenericJoint.hpp:1560
std::size_t getNumDofs() const override
Definition GenericJoint.hpp:211
void resetForces() override
Definition GenericJoint.hpp:1307
DegreeOfFreedom * getDof(std::size_t index) override
void addChildArtInertiaTo(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia) override
Definition GenericJoint.hpp:1747
Eigen::VectorXd getPositionLowerLimits() const override
Definition GenericJoint.hpp:584
bool isDofNamePreserved(size_t index) const override
Definition GenericJoint.hpp:263
void addVelocityTo(Eigen::Vector6d &vel) override
Definition GenericJoint.hpp:1679
void preserveDofName(size_t index, bool preserve) override
Definition GenericJoint.hpp:250
double getVelocityUpperLimit(std::size_t index) const override
Definition GenericJoint.hpp:898
double getVelocityChange(std::size_t index) const override
Definition GenericJoint.hpp:1331
void updateTotalForce(const Eigen::Vector6d &bodyForce, double timeStep) override
Definition GenericJoint.hpp:2101
void resetConstraintImpulses() override
Definition GenericJoint.hpp:1378
virtual Vector getPositionDifferencesStatic(const Vector &q2, const Vector &q1) const
Fixed-size version of getPositionDifferences()
Definition GenericJoint.hpp:1424
void setVelocity(std::size_t index, double velocity) override
Definition GenericJoint.hpp:778
double getRestPosition(std::size_t index) const override
Definition GenericJoint.hpp:1474
void updateConstrainedTerms(double timeStep) override
Definition GenericJoint.hpp:2407
void integrateVelocities(double dt) override
Definition GenericJoint.hpp:1397
Eigen::VectorXd getPositions() const override
Definition GenericJoint.hpp:536
void addChildBiasImpulseToDynamic(Eigen::Vector6d &parentBiasImpulse, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasImpulse)
Definition GenericJoint.hpp:2068
double getAcceleration(std::size_t index) const override
Definition GenericJoint.hpp:1022
Eigen::VectorXd getVelocities() const override
Definition GenericJoint.hpp:829
Eigen::VectorXd getInitialPositions() const override
Definition GenericJoint.hpp:714
Eigen::VectorXd getPositionDifferences(const Eigen::VectorXd &q2, const Eigen::VectorXd &q1) const override
Definition GenericJoint.hpp:1405
void setPositionLowerLimits(const Eigen::VectorXd &lowerLimits) override
Definition GenericJoint.hpp:570
double getAccelerationUpperLimit(std::size_t index) const override
Definition GenericJoint.hpp:1120
void setForceLowerLimit(size_t index, double force) override
Definition GenericJoint.hpp:1213
void setSpringStiffness(std::size_t index, double k) override
Definition GenericJoint.hpp:1433
void updateRelativePrimaryAcceleration() const override
Definition GenericJoint.hpp:1671
void setProperties(const Properties &properties)
Set the Properties of this GenericJoint.
Definition GenericJoint.hpp:97
double getForceLowerLimit(std::size_t index) const override
Definition GenericJoint.hpp:1226
static constexpr std::size_t NumDofs
Definition GenericJoint.hpp:51
const Vector & getVelocitiesStatic() const
Fixed-size version of getVelocities()
Definition GenericJoint.hpp:752
double getPositionUpperLimit(std::size_t index) const override
Definition GenericJoint.hpp:605
const std::string & getDofName(size_t index) const override
Definition GenericJoint.hpp:276
ThisClass & operator=(const ThisClass &other)
Same as copy(const GenericJoint&)
Definition GenericJoint.hpp:178
double computePotentialEnergy() const override
Definition GenericJoint.hpp:1544
double getSpringStiffness(std::size_t index) const override
Definition GenericJoint.hpp:1448
void setDampingCoefficient(std::size_t index, double coeff) override
Definition GenericJoint.hpp:1487
void updateInvProjArtInertia(const Eigen::Matrix6d &artInertia) override
Definition GenericJoint.hpp:1851
void resetVelocity(std::size_t index) override
Definition GenericJoint.hpp:932
void setPositionsStatic(const Vector &positions)
Fixed-size version of setPositions()
Definition GenericJoint.hpp:721
void addChildBiasForceForInvAugMassMatrix(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce) override
Definition GenericJoint.hpp:2471
void updateConstrainedTermsKinematic(double timeStep)
Definition GenericJoint.hpp:2443
void setAccelerationLowerLimits(const Eigen::VectorXd &lowerLimits) override
Definition GenericJoint.hpp:1086
void setAspectProperties(const AspectProperties &properties)
Set the AspectProperties of this GenericJoint.
Definition GenericJoint.hpp:124
Eigen::VectorXd getForceUpperLimits() const override
Definition GenericJoint.hpp:1300
detail::GenericJointProperties< ConfigSpaceT > Properties
Definition GenericJoint.hpp:63
void updateImpulseFD(const Eigen::Vector6d &bodyImpulse) override
Definition GenericJoint.hpp:2384
GenericJoint(const ThisClass &)=delete
void updateInvProjArtInertiaImplicitDynamic(const Eigen::Matrix6d &artInertia, double timeStep)
Definition GenericJoint.hpp:1923
void updateTotalForceKinematic(const Eigen::Vector6d &bodyForce, double timeStep)
Definition GenericJoint.hpp:2161
void resetTotalImpulses() override
Definition GenericJoint.hpp:2211
void integratePositions(double dt) override
Definition GenericJoint.hpp:1385
void setPositions(const Eigen::VectorXd &positions) override
Definition GenericJoint.hpp:523
void addChildBiasForceToDynamic(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce, const Eigen::Vector6d &childPartialAcc)
Definition GenericJoint.hpp:1981
Eigen::VectorXd getForceLowerLimits() const override
Definition GenericJoint.hpp:1253
double getInitialVelocity(std::size_t index) const override
Definition GenericJoint.hpp:966
Eigen::VectorXd getAccelerations() const override
Definition GenericJoint.hpp:1052
typename ConfigSpaceT::Vector Vector
Definition GenericJoint.hpp:58
void updateVelocityChangeKinematic(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &velocityChange)
Definition GenericJoint.hpp:2307
const Vector & getAccelerationsStatic() const
Fixed-size version of getAccelerations()
Definition GenericJoint.hpp:771
Eigen::VectorXd getInitialVelocities() const override
Definition GenericJoint.hpp:993
void setCommands(const Eigen::VectorXd &commands) override
Definition GenericJoint.hpp:402
Eigen::VectorXd getSpatialToGeneralized(const Eigen::Vector6d &spatial) override
Definition GenericJoint.hpp:2559
typename ConfigSpaceT::JacobianMatrix JacobianMatrix
Definition GenericJoint.hpp:59
void getInvAugMassMatrixSegment(Eigen::MatrixXd &invMassMat, const size_t col, const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc) override
Definition GenericJoint.hpp:2526
double getVelocityLowerLimit(std::size_t index) const override
Definition GenericJoint.hpp:850
void updateImpulseID(const Eigen::Vector6d &bodyImpulse) override
Definition GenericJoint.hpp:2376
void setVelocityLowerLimit(std::size_t index, double velocity) override
Definition GenericJoint.hpp:836
double getInitialPosition(std::size_t index) const override
Definition GenericJoint.hpp:687
void updateAcceleration(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc) override
Definition GenericJoint.hpp:2218
void addChildBiasForceToKinematic(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce, const Eigen::Vector6d &childPartialAcc)
Definition GenericJoint.hpp:2011
void setVelocityUpperLimit(std::size_t index, double velocity) override
Definition GenericJoint.hpp:884
typename ConfigSpaceT::Point Point
Definition GenericJoint.hpp:56
void updateInvProjArtInertiaKinematic(const Eigen::Matrix6d &artInertia)
Definition GenericJoint.hpp:1891
bool hasPositionLimit(std::size_t index) const override
Definition GenericJoint.hpp:639
void setInitialPositions(const Eigen::VectorXd &initial) override
Definition GenericJoint.hpp:700
virtual ~GenericJoint()
Destructor.
Definition GenericJoint.hpp:89
void addChildBiasForceTo(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce, const Eigen::Vector6d &childPartialAcc) override
Definition GenericJoint.hpp:1952
double getCoulombFriction(std::size_t index) const override
Definition GenericJoint.hpp:1531
void addInvMassMatrixSegmentTo(Eigen::Vector6d &acc) override
Definition GenericJoint.hpp:2551
void setConstraintImpulse(std::size_t index, double impulse) override
Definition GenericJoint.hpp:1351
void resetPosition(std::size_t index) override
Definition GenericJoint.hpp:653
double getForceUpperLimit(size_t index) const override
Definition GenericJoint.hpp:1273
void registerDofs() override
Definition GenericJoint.hpp:1632
void addVelocityChangeTo(Eigen::Vector6d &velocityChange) override
Definition GenericJoint.hpp:1715
const std::string & setDofName(std::size_t index, const std::string &name, bool preserveName=true) override
Definition GenericJoint.hpp:218
void setAccelerationUpperLimit(std::size_t index, double acceleration) override
Definition GenericJoint.hpp:1107
double getDampingCoefficient(std::size_t index) const override
Definition GenericJoint.hpp:1502
typename Base::AspectProperties AspectProperties
Definition GenericJoint.hpp:65
void setPositionUpperLimits(const Eigen::VectorXd &upperLimits) override
Definition GenericJoint.hpp:618
Eigen::VectorXd getAccelerationLowerLimits() const override
Definition GenericJoint.hpp:1100
void updateTotalForceDynamic(const Eigen::Vector6d &bodyForce, double timeStep)
Definition GenericJoint.hpp:2140
void setVelocitiesStatic(const Vector &velocities)
Fixed-size version of setVelocities()
Definition GenericJoint.hpp:740
void updateRelativeSpatialAcceleration() const override
Definition GenericJoint.hpp:1662
void updateRelativeSpatialVelocity() const override
Definition GenericJoint.hpp:1654
void setForceUpperLimit(size_t index, double force) override
Definition GenericJoint.hpp:1260
size_t getIndexInTree(size_t index) const override
Definition GenericJoint.hpp:306
Eigen::VectorXd getVelocityUpperLimits() const override
Definition GenericJoint.hpp:925
void setAccelerationLowerLimit(size_t index, double acceleration) override
Definition GenericJoint.hpp:1059
double getPosition(std::size_t index) const override
Definition GenericJoint.hpp:510
void addChildArtInertiaImplicitToDynamic(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia)
Definition GenericJoint.hpp:1823
double getAccelerationLowerLimit(std::size_t index) const override
Definition GenericJoint.hpp:1073
void addChildBiasImpulseTo(Eigen::Vector6d &parentBiasImpulse, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasImpulse) override
Definition GenericJoint.hpp:2040
double getPositionLowerLimit(std::size_t index) const override
Definition GenericJoint.hpp:557
void updateAccelerationDynamic(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc)
Definition GenericJoint.hpp:2242
void resetPositions() override
Definition GenericJoint.hpp:666
void addChildBiasForceForInvMassMatrix(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce) override
Definition GenericJoint.hpp:2451
void getInvMassMatrixSegment(Eigen::MatrixXd &invMassMat, const size_t col, const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc) override
Definition GenericJoint.hpp:2501
Properties getGenericJointProperties() const
Get the Properties of this GenericJoint.
Definition GenericJoint.hpp:150
const Matrix & getInvProjArtInertia() const
Get the inverse of the projected articulated inertia.
Definition GenericJoint.hpp:1728
void setForces(const Eigen::VectorXd &forces) override
Definition GenericJoint.hpp:1190
void updateTotalForceForInvMassMatrix(const Eigen::Vector6d &bodyForce) override
Definition GenericJoint.hpp:2491
void resetAccelerations() override
Definition GenericJoint.hpp:1154
void setAcceleration(std::size_t index, double acceleration) override
Definition GenericJoint.hpp:1000
void addChildArtInertiaToKinematic(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia)
Definition GenericJoint.hpp:1788
double getConstraintImpulse(std::size_t index) const override
Definition GenericJoint.hpp:1365
size_t getIndexInSkeleton(size_t index) const override
Definition GenericJoint.hpp:293
void resetVelocityChanges() override
Definition GenericJoint.hpp:1344
static constexpr ActuatorType PASSIVE
Definition Joint.hpp:68
static constexpr ActuatorType SERVO
Definition Joint.hpp:69
static constexpr ActuatorType ACCELERATION
Definition Joint.hpp:71
void updateArticulatedInertia() const
Tells the Skeleton to update the articulated inertia if it needs updating.
Definition Joint.cpp:623
static constexpr ActuatorType LOCKED
Definition Joint.hpp:73
static constexpr ActuatorType FORCE
Definition Joint.hpp:67
static constexpr ActuatorType MIMIC
Definition Joint.hpp:70
void setProperties(const Properties &properties)
Set the Properties of this Joint.
Definition Joint.cpp:109
static constexpr ActuatorType VELOCITY
Definition Joint.hpp:72
#define GenericJoint_REPORT_UNSUPPORTED_ACTUATOR(func)
Definition GenericJoint.hpp:60
#define GenericJoint_REPORT_DIM_MISMATCH(func, arg)
Definition GenericJoint.hpp:43
#define GenericJoint_REPORT_OUT_OF_RANGE(func, index)
Definition GenericJoint.hpp:52
#define GenericJoint_SET_IF_DIFFERENT(mField, value)
Definition GenericJoint.hpp:68
Matrix< double, 6, 1 > Vector6d
Definition MathTypes.hpp:49
Matrix< double, 6, 6 > Matrix6d
Definition MathTypes.hpp:50
std::shared_ptr< Skeleton > SkeletonPtr
Definition SmartPointer.hpp:60
T clip(const T &val, const T &lower, const T &upper)
Definition Helpers.hpp:159
Eigen::Matrix< double, 6, Eigen::Dynamic > Jacobian
Definition MathTypes.hpp:114
Eigen::Vector6d AdInvT(const Eigen::Isometry3d &_T, const Eigen::Vector6d &_V)
fast version of Ad(Inv(T), V)
Definition Geometry.cpp:776
Eigen::Vector6d dAdInvT(const Eigen::Isometry3d &_T, const Eigen::Vector6d &_F)
fast version of dAd(Inv(T), F)
Definition Geometry.cpp:850
Eigen::Vector6d ad(const Eigen::Vector6d &_X, const Eigen::Vector6d &_Y)
adjoint mapping
Definition Geometry.cpp:808
Inertia transformInertia(const Eigen::Isometry3d &_T, const Inertia &_I)
Definition Geometry.cpp:1414
bool isNan(double _v)
Returns whether _v is a NaN (Not-A-Number) value.
Definition Helpers.hpp:187
Definition BulletCollisionDetector.cpp:60
Definition GenericJointAspect.hpp:191
Definition GenericJointAspect.hpp:88
EuclideanPoint mInitialPositions
Initial positions.
Definition GenericJointAspect.hpp:102
Vector mInitialVelocities
Initial velocities.
Definition GenericJointAspect.hpp:111
Definition JointAspect.hpp:112