33#ifndef DART_DYNAMICS_DETAIL_GenericJoint_HPP_
34#define DART_DYNAMICS_DETAIL_GenericJoint_HPP_
38#include "dart/config.hpp"
44#define GenericJoint_REPORT_DIM_MISMATCH( func, arg )\
46 dterr << "[GenericJoint::" #func "] Mismatch beteween size of "\
47 << #arg " [" << arg .size() << "] and the number of "\
48 << "DOFs [" << getNumDofs() << "] for Joint named ["\
49 << this->getName() << "].\n";\
53#define GenericJoint_REPORT_OUT_OF_RANGE( func, index )\
55 dterr << "[GenericJoint::" << #func << "] The index [" << index\
56 << "] is out of range for Joint named [" << this->getName()\
57 << "] which has " << this->getNumDofs() << " DOFs.\n";\
61#define GenericJoint_REPORT_UNSUPPORTED_ACTUATOR( func )\
63 dterr << "[GenericJoint::" # func "] Unsupported actuator type ("\
64 << Joint::mAspectProperties.mActuatorType << ") for Joint ["\
65 << this->getName() << "].\n";\
69#define GenericJoint_SET_IF_DIFFERENT( mField, value )\
70 if( value == Base::mAspectProperties. mField )\
72 Base::mAspectProperties. mField = value;\
73 Joint::incrementVersion();
85template <
class ConfigSpaceT>
89template <
class ConfigSpaceT>
92 for (
auto i = 0u; i < NumDofs; ++i)
97template <
class ConfigSpaceT>
105template <
class ConfigSpaceT>
113template <
class ConfigSpaceT>
116 setCommands(state.mCommands);
117 setPositionsStatic(state.mPositions);
118 setVelocitiesStatic(state.mVelocities);
119 setAccelerationsStatic(state.mAccelerations);
120 setForces(state.mForces);
124template <
class ConfigSpaceT>
128 for (
auto i = 0u; i < NumDofs; ++i)
131 setPositionLowerLimit (i,
properties.mPositionLowerLimits[i] );
132 setPositionUpperLimit (i,
properties.mPositionUpperLimits[i] );
133 setInitialPosition (i,
properties.mInitialPositions[i] );
134 setVelocityLowerLimit (i,
properties.mVelocityLowerLimits[i] );
135 setVelocityUpperLimit (i,
properties.mVelocityUpperLimits[i] );
136 setInitialVelocity (i,
properties.mInitialVelocities[i] );
137 setAccelerationLowerLimit(i,
properties.mAccelerationLowerLimits[i]);
138 setAccelerationUpperLimit(i,
properties.mAccelerationUpperLimits[i]);
139 setForceLowerLimit (i,
properties.mForceLowerLimits[i] );
141 setSpringStiffness (i,
properties.mSpringStiffnesses[i] );
142 setRestPosition (i,
properties.mRestPositions[i] );
143 setDampingCoefficient (i,
properties.mDampingCoefficients[i] );
144 setCoulombFriction (i,
properties.mFrictions[i] );
149template <
class ConfigSpaceT>
158template <
class ConfigSpaceT>
169template <
class ConfigSpaceT>
173 if (
nullptr == other)
180template <
class ConfigSpaceT>
190template <
class ConfigSpaceT>
202template <
class ConfigSpaceT>
214template <
class ConfigSpaceT>
221template <
class ConfigSpaceT>
224 const std::string&
name,
227 if (NumDofs <=
index)
229 dterr <<
"[GenericJoint::setDofName] Attempting to set the name of DOF "
230 <<
"index " <<
index <<
", which is out of bounds for the Joint ["
232 <<
"]. We will set the name of DOF index 0 instead.\n";
239 std::string& dofName = Base::mAspectProperties.mDofNames[
index];
245 = this->mChildBodyNode ? this->mChildBodyNode->getSkeleton() :
nullptr;
247 dofName = skel->mNameMgrForDofs.changeObjectName(mDofs[
index],
name);
255template <
class ConfigSpaceT>
258 if (NumDofs <=
index)
268template <
class ConfigSpaceT>
277 return Base::mAspectProperties.mPreserveDofNames[
index];
281template <
class ConfigSpaceT>
286 dterr <<
"[GenericJoint::getDofName] Requested name of DOF index ["
287 <<
index <<
"] in Joint [" << this->getName() <<
"], but that is "
288 <<
"out of bounds (max " << NumDofs - 1
289 <<
"). Returning name of DOF 0.\n";
291 return Base::mAspectProperties.mDofNames[0];
294 return Base::mAspectProperties.mDofNames[
index];
298template <
class ConfigSpaceT>
308 return mDofs[
index]->mIndexInSkeleton;
312template <
class ConfigSpaceT>
315 if (
index >= getNumDofs())
321 return mDofs[
index]->mIndexInTree;
325template <
class ConfigSpaceT>
328 if (
index >= getNumDofs())
335 Base::mAspectProperties.mForceLowerLimits[
index],
336 Base::mAspectProperties.mForceUpperLimits[
index]);
341 dtwarn <<
"[GenericJoint::setCommand] Attempting to set a non-zero ("
342 << command <<
") command for a PASSIVE joint ["
343 << this->getName() <<
"].\n";
345 this->mAspectState.mCommands[
index] = command;
349 Base::mAspectProperties.mVelocityLowerLimits[
index],
350 Base::mAspectProperties.mVelocityUpperLimits[
index]);
354 Base::mAspectProperties.mAccelerationLowerLimits[
index],
355 Base::mAspectProperties.mAccelerationUpperLimits[
index]);
359 Base::mAspectProperties.mVelocityLowerLimits[
index],
360 Base::mAspectProperties.mVelocityUpperLimits[
index]);
366 dtwarn <<
"[GenericJoint::setCommand] Attempting to set a non-zero ("
367 << command <<
") command for a LOCKED joint [" << this->getName()
370 this->mAspectState.mCommands[
index] = command;
379template <
class ConfigSpaceT>
382 if (
index >= getNumDofs())
388 return this->mAspectState.mCommands[
index];
392template <
class ConfigSpaceT>
394 const Eigen::VectorXd& commands)
396 if (
static_cast<size_t>(commands.size()) != getNumDofs())
405 this->mAspectState.mCommands =
math::clip(commands,
406 Base::mAspectProperties.mForceLowerLimits,
407 Base::mAspectProperties.mForceUpperLimits);
410 if(Vector::Zero() != commands)
412 dtwarn <<
"[GenericJoint::setCommands] Attempting to set a non-zero ("
413 << commands.transpose() <<
") command for a PASSIVE joint ["
414 << this->getName() <<
"].\n";
416 this->mAspectState.mCommands = commands;
420 Base::mAspectProperties.mVelocityLowerLimits,
421 Base::mAspectProperties.mVelocityUpperLimits);
424 this->mAspectState.mCommands =
math::clip(commands,
425 Base::mAspectProperties.mAccelerationLowerLimits,
426 Base::mAspectProperties.mAccelerationUpperLimits);
429 this->mAspectState.mCommands =
math::clip(commands,
430 Base::mAspectProperties.mVelocityLowerLimits,
431 Base::mAspectProperties.mVelocityUpperLimits);
435 if(Vector::Zero() != commands)
437 dtwarn <<
"[GenericJoint::setCommands] Attempting to set a non-zero ("
438 << commands.transpose() <<
") command for a LOCKED joint ["
439 << this->getName() <<
"].\n";
441 this->mAspectState.mCommands = commands;
450template <
class ConfigSpaceT>
453 return this->mAspectState.mCommands;
457template <
class ConfigSpaceT>
460 this->mAspectState.mCommands.setZero();
464template <
class ConfigSpaceT>
467 if (
index >= getNumDofs())
481 this->notifyPositionUpdated();
485template <
class ConfigSpaceT>
488 if (
index >= getNumDofs())
494 return getPositionsStatic()[
index];
498template <
class ConfigSpaceT>
500 const Eigen::VectorXd& positions)
502 if (
static_cast<size_t>(positions.size()) != getNumDofs())
508 setPositionsStatic(positions);
512template <
class ConfigSpaceT>
515 return getPositionsStatic();
519template <
class ConfigSpaceT>
533template <
class ConfigSpaceT>
536 if (
index >= getNumDofs())
542 return Base::mAspectProperties.mPositionLowerLimits[
index];
546template<
class ConfigSpaceT>
548 const Eigen::VectorXd& lowerLimits)
550 if (
static_cast<size_t>(lowerLimits.size()) != getNumDofs())
560template<
class ConfigSpaceT>
563 return Base::mAspectProperties.mPositionLowerLimits;
567template <
class ConfigSpaceT>
571 if (
index >= getNumDofs())
581template <
class ConfigSpaceT>
590 return Base::mAspectProperties.mPositionUpperLimits[
index];
594template<
class ConfigSpaceT>
596 const Eigen::VectorXd& upperLimits)
598 if (
static_cast<size_t>(upperLimits.size()) != getNumDofs())
608template<
class ConfigSpaceT>
611 return Base::mAspectProperties.mPositionUpperLimits;
615template <
class ConfigSpaceT>
618 if (
index >= getNumDofs())
624 return std::isfinite(Base::mAspectProperties.mPositionUpperLimits[
index])
625 || std::isfinite(Base::mAspectProperties.mPositionLowerLimits[
index]);
629template <
class ConfigSpaceT>
632 if (
index >= getNumDofs())
638 setPosition(
index, Base::mAspectProperties.mInitialPositions[
index]);
642template <
class ConfigSpaceT>
645 setPositionsStatic(Base::mAspectProperties.mInitialPositions);
649template <
class ConfigSpaceT>
651 size_t index,
double initial)
653 if (
index >= getNumDofs())
663template <
class ConfigSpaceT>
666 if (
index >= getNumDofs())
672 return Base::mAspectProperties.mInitialPositions[
index];
676template <
class ConfigSpaceT>
678 const Eigen::VectorXd& initial)
680 if (
static_cast<size_t>(initial.size()) != getNumDofs() )
690template <
class ConfigSpaceT>
693 return Base::mAspectProperties.mInitialPositions;
697template <
class ConfigSpaceT>
700 if (this->mAspectState.mPositions == positions)
703 this->mAspectState.mPositions = positions;
704 this->notifyPositionUpdated();
708template <
class ConfigSpaceT>
712 return this->mAspectState.mPositions;
716template <
class ConfigSpaceT>
720 if (this->mAspectState.mVelocities == velocities)
723 this->mAspectState.mVelocities = velocities;
724 this->notifyVelocityUpdated();
728template <
class ConfigSpaceT>
732 return this->mAspectState.mVelocities;
736template <
class ConfigSpaceT>
739 if (this->mAspectState.mAccelerations == accels)
742 this->mAspectState.mAccelerations = accels;
743 this->notifyAccelerationUpdated();
747template <
class ConfigSpaceT>
751 return this->mAspectState.mAccelerations;
755template <
class ConfigSpaceT>
758 if (
index >= getNumDofs())
769 this->notifyVelocityUpdated();
772 this->mAspectState.mCommands[
index] = this->getVelocitiesStatic()[
index];
776template <
class ConfigSpaceT>
779 if (
index >= getNumDofs())
785 return getVelocitiesStatic()[
index];
789template <
class ConfigSpaceT>
791 const Eigen::VectorXd& velocities)
793 if (
static_cast<size_t>(velocities.size()) != getNumDofs())
799 setVelocitiesStatic(velocities);
802 this->mAspectState.mCommands = this->getVelocitiesStatic();
806template <
class ConfigSpaceT>
809 return getVelocitiesStatic();
813template <
class ConfigSpaceT>
817 if (
index >= getNumDofs())
827template <
class ConfigSpaceT>
830 if (
index >= getNumDofs())
836 return Base::mAspectProperties.mVelocityLowerLimits[
index];
840template<
class ConfigSpaceT>
842 const Eigen::VectorXd& lowerLimits)
844 if (
static_cast<size_t>(lowerLimits.size()) != getNumDofs())
854template<
class ConfigSpaceT>
857 return Base::mAspectProperties.mVelocityLowerLimits;
861template <
class ConfigSpaceT>
865 if (
index >= getNumDofs())
875template <
class ConfigSpaceT>
879 if (
index >= getNumDofs())
885 return Base::mAspectProperties.mVelocityUpperLimits[
index];
889template<
class ConfigSpaceT>
891 const Eigen::VectorXd& upperLimits)
893 if (
static_cast<size_t>(upperLimits.size()) != getNumDofs())
903template<
class ConfigSpaceT>
906 return Base::mAspectProperties.mVelocityUpperLimits;
910template <
class ConfigSpaceT>
913 if (
index >= getNumDofs())
919 setVelocity(
index, Base::mAspectProperties.mInitialVelocities[
index]);
923template <
class ConfigSpaceT>
926 setVelocitiesStatic(Base::mAspectProperties.mInitialVelocities);
930template <
class ConfigSpaceT>
934 if (
index >= getNumDofs())
944template <
class ConfigSpaceT>
947 if (
index >= getNumDofs())
953 return Base::mAspectProperties.mInitialVelocities[
index];
957template <
class ConfigSpaceT>
959 const Eigen::VectorXd& initial)
961 if (
static_cast<size_t>(initial.size()) != getNumDofs() )
971template <
class ConfigSpaceT>
974 return Base::mAspectProperties.mInitialVelocities;
978template <
class ConfigSpaceT>
982 if (
index >= getNumDofs())
993 this->notifyAccelerationUpdated();
996 this->mAspectState.mCommands[
index] = this->getAccelerationsStatic()[
index];
1000template <
class ConfigSpaceT>
1003 if (
index >= getNumDofs())
1009 return getAccelerationsStatic()[
index];
1013template <
class ConfigSpaceT>
1015 const Eigen::VectorXd& accelerations)
1017 if (
static_cast<size_t>(accelerations.size()) != getNumDofs())
1023 setAccelerationsStatic(accelerations);
1026 this->mAspectState.mCommands = this->getAccelerationsStatic();
1030template <
class ConfigSpaceT>
1033 return getAccelerationsStatic();
1037template <
class ConfigSpaceT>
1041 if (
index >= getNumDofs())
1052template <
class ConfigSpaceT>
1056 if (
index >= getNumDofs())
1062 return Base::mAspectProperties.mAccelerationLowerLimits[
index];
1066template<
class ConfigSpaceT>
1068 const Eigen::VectorXd& lowerLimits)
1070 if (
static_cast<size_t>(lowerLimits.size()) != getNumDofs())
1080template<
class ConfigSpaceT>
1083 return Base::mAspectProperties.mAccelerationLowerLimits;
1087template <
class ConfigSpaceT>
1091 if (
index >= getNumDofs())
1102template <
class ConfigSpaceT>
1106 if (
index >= getNumDofs())
1112 return Base::mAspectProperties.mAccelerationUpperLimits[
index];
1116template<
class ConfigSpaceT>
1118 const Eigen::VectorXd& upperLimits)
1120 if (
static_cast<size_t>(upperLimits.size()) != getNumDofs())
1130template<
class ConfigSpaceT>
1133 return Base::mAspectProperties.mAccelerationUpperLimits;
1137template <
class ConfigSpaceT>
1140 setAccelerationsStatic(Vector::Zero());
1144template <
class ConfigSpaceT>
1147 if (
index >= getNumDofs())
1156 this->mAspectState.mCommands[
index] = this->mAspectState.mForces[
index];
1160template <
class ConfigSpaceT>
1163 if (
index >= getNumDofs())
1169 return this->mAspectState.mForces[
index];
1173template <
class ConfigSpaceT>
1176 if (
static_cast<size_t>(forces.size()) != getNumDofs())
1182 this->mAspectState.mForces = forces;
1185 this->mAspectState.mCommands = this->mAspectState.mForces;
1189template <
class ConfigSpaceT>
1192 return this->mAspectState.mForces;
1196template <
class ConfigSpaceT>
1199 if (
index >= getNumDofs())
1209template <
class ConfigSpaceT>
1213 if (
index >= getNumDofs())
1219 return Base::mAspectProperties.mForceLowerLimits[
index];
1223template<
class ConfigSpaceT>
1225 const Eigen::VectorXd& lowerLimits)
1227 if (
static_cast<size_t>(lowerLimits.size()) != getNumDofs())
1237template<
class ConfigSpaceT>
1240 return Base::mAspectProperties.mForceLowerLimits;
1244template <
class ConfigSpaceT>
1247 if (
index >= getNumDofs())
1257template <
class ConfigSpaceT>
1261 if (
index >= getNumDofs())
1267 return Base::mAspectProperties.mForceUpperLimits[
index];
1271template<
class ConfigSpaceT>
1273 const Eigen::VectorXd& upperLimits)
1275 if (
static_cast<size_t>(upperLimits.size()) != getNumDofs())
1285template<
class ConfigSpaceT>
1288 return Base::mAspectProperties.mForceUpperLimits;
1292template <
class ConfigSpaceT>
1295 this->mAspectState.mForces.setZero();
1298 this->mAspectState.mCommands = this->mAspectState.mForces;
1302template <
class ConfigSpaceT>
1304 size_t index,
double velocityChange)
1306 if (
index >= getNumDofs())
1312 mVelocityChanges[
index] = velocityChange;
1316template <
class ConfigSpaceT>
1319 if (
index >= getNumDofs())
1325 return mVelocityChanges[
index];
1329template <
class ConfigSpaceT>
1332 mVelocityChanges.setZero();
1336template <
class ConfigSpaceT>
1340 if (
index >= getNumDofs())
1346 mConstraintImpulses[
index] = impulse;
1350template <
class ConfigSpaceT>
1353 if (
index >= getNumDofs())
1359 return mConstraintImpulses[
index];
1363template <
class ConfigSpaceT>
1366 mConstraintImpulses.setZero();
1370template <
class ConfigSpaceT>
1373 const Point& point = math::integratePosition<ConfigSpaceT>(
1374 math::toManifoldPoint<ConfigSpaceT>(getPositionsStatic()),
1375 getVelocitiesStatic(), dt);
1377 setPositionsStatic(math::toEuclideanPoint<ConfigSpaceT>(point));
1381template <
class ConfigSpaceT>
1384 setVelocitiesStatic(math::integrateVelocity<ConfigSpaceT>(
1385 getVelocitiesStatic(),
1386 getAccelerationsStatic(), dt));
1390template <
class ConfigSpaceT>
1392 const Eigen::VectorXd& q2,
const Eigen::VectorXd& q1)
const
1394 if (
static_cast<size_t>(q1.size()) != getNumDofs()
1395 ||
static_cast<size_t>(q2.size()) != getNumDofs())
1397 dterr <<
"[GenericJoint::getPositionsDifference] q1's size [" << q1.size()
1398 <<
"] or q2's size [" << q2.size() <<
"] must both equal the dof ["
1399 << this->getNumDofs() <<
"] for Joint [" << this->getName() <<
"].\n";
1401 return Eigen::VectorXd::Zero(getNumDofs());
1404 return getPositionDifferencesStatic(q2, q1);
1408template <
class ConfigSpaceT>
1409typename ConfigSpaceT::Vector
1418template <
class ConfigSpaceT>
1421 if (
index >= getNumDofs())
1433template <
class ConfigSpaceT>
1436 if (
index >= getNumDofs())
1442 return Base::mAspectProperties.mSpringStiffnesses[
index];
1446template <
class ConfigSpaceT>
1449 if (
index >= getNumDofs())
1455 if (Base::mAspectProperties.mPositionLowerLimits[
index] > q0
1456 || Base::mAspectProperties.mPositionUpperLimits[
index] < q0)
1458 dtwarn <<
"[GenericJoint::setRestPosition] Value of _q0 [" << q0
1459 <<
"], is out of the limit range ["
1460 << Base::mAspectProperties.mPositionLowerLimits[
index] <<
", "
1461 << Base::mAspectProperties.mPositionUpperLimits[
index]
1462 <<
"] for index [" <<
index <<
"] of Joint [" << this->getName()
1471template <
class ConfigSpaceT>
1474 if (
index >= getNumDofs())
1480 return Base::mAspectProperties.mRestPositions[
index];
1484template <
class ConfigSpaceT>
1488 if (
index >= getNumDofs())
1500template <
class ConfigSpaceT>
1503 if (
index >= getNumDofs())
1509 return Base::mAspectProperties.mDampingCoefficients[
index];
1513template <
class ConfigSpaceT>
1517 if (
index >= getNumDofs())
1529template <
class ConfigSpaceT>
1532 if (
index >= getNumDofs())
1538 return Base::mAspectProperties.mFrictions[
index];
1542template <
class ConfigSpaceT>
1547 = getPositionsStatic() - Base::mAspectProperties.mRestPositions;
1549 const double pe = 0.5 * displacement.dot(
1550 Base::mAspectProperties.mSpringStiffnesses.cwiseProduct(displacement));
1556template <
class ConfigSpaceT>
1560 return getRelativeJacobianStatic();
1564template <
class ConfigSpaceT>
1568 if (this->mIsRelativeJacobianDirty)
1570 this->updateRelativeJacobian(
false);
1571 this->mIsRelativeJacobianDirty =
false;
1578template <
class ConfigSpaceT>
1580 const Eigen::VectorXd& positions)
const
1582 return getRelativeJacobianStatic(positions);
1586template <
class ConfigSpaceT>
1590 return getRelativeJacobianTimeDerivStatic();
1594template <
class ConfigSpaceT>
1598 if (this->mIsRelativeJacobianTimeDerivDirty)
1600 this->updateRelativeJacobianTimeDeriv();
1601 this->mIsRelativeJacobianTimeDerivDirty =
false;
1604 return mJacobianDeriv;
1608template <
class ConfigSpaceT>
1611 : mVelocityChanges(
Vector::Zero()),
1612 mImpulses(
Vector::Zero()),
1613 mConstraintImpulses(
Vector::Zero()),
1616 mInvProjArtInertia(
Matrix::Zero()),
1617 mInvProjArtInertiaImplicit(
Matrix::Zero()),
1618 mTotalForce(
Vector::Zero()),
1619 mTotalImpulse(
Vector::Zero())
1621 for (
auto i = 0u; i <
NumDofs; ++i)
1622 mDofs[i] = this->createDofPointer(i);
1630template <
class ConfigSpaceT>
1633 const SkeletonPtr& skel = this->mChildBodyNode->getSkeleton();
1634 for (
auto i = 0u; i < NumDofs; ++i)
1636 Base::mAspectProperties.mDofNames[i]
1637 = skel->mNameMgrForDofs.issueNewNameAndAdd(mDofs[i]->getName(),
1643template <
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 =
1665 this->getRelativePrimaryAcceleration()
1666 + this->getRelativeJacobianTimeDerivStatic() * this->getVelocitiesStatic();
1670template <
class ConfigSpaceT>
1673 this->mPrimaryAcceleration =
1674 this->getRelativeJacobianStatic() * this->getAccelerationsStatic();
1678template <
class ConfigSpaceT>
1682 vel.noalias() += getRelativeJacobianStatic() * getVelocitiesStatic();
1689template <
class ConfigSpaceT>
1695 partialAcceleration =
math::ad(childVelocity,
1696 getRelativeJacobianStatic() * getVelocitiesStatic())
1697 + getRelativeJacobianTimeDerivStatic() * getVelocitiesStatic();
1703template <
class ConfigSpaceT>
1708 acc.noalias() += getRelativeJacobianStatic() * getAccelerationsStatic();
1715template <
class ConfigSpaceT>
1720 velocityChange.noalias() += getRelativeJacobianStatic() * mVelocityChanges;
1727template <
class ConfigSpaceT>
1733 return mInvProjArtInertia;
1737template <
class ConfigSpaceT>
1743 return mInvProjArtInertiaImplicit;
1747template <
class ConfigSpaceT>
1757 addChildArtInertiaToDynamic(parentArtInertia,
1763 addChildArtInertiaToKinematic(parentArtInertia,
1773template <
class ConfigSpaceT>
1779 JacobianMatrix AIS = childArtInertia * getRelativeJacobianStatic();
1781 PI.noalias() -= AIS * mInvProjArtInertia * AIS.transpose();
1787 this->getRelativeTransform().inverse(), PI);
1791template <
class ConfigSpaceT>
1799 this->getRelativeTransform().inverse(), childArtInertia);
1803template <
class ConfigSpaceT>
1813 addChildArtInertiaImplicitToDynamic(parentArtInertia,
1819 addChildArtInertiaImplicitToKinematic(parentArtInertia,
1829template <
class ConfigSpaceT>
1835 JacobianMatrix AIS = childArtInertia * getRelativeJacobianStatic();
1837 PI.noalias() -= AIS * mInvProjArtInertiaImplicit * AIS.transpose();
1843 this->getRelativeTransform().inverse(), PI);
1847template <
class ConfigSpaceT>
1855 this->getRelativeTransform().inverse(), childArtInertia);
1859template <
class ConfigSpaceT>
1868 updateInvProjArtInertiaDynamic(artInertia);
1873 updateInvProjArtInertiaKinematic(artInertia);
1882template <
class ConfigSpaceT>
1888 const Matrix projAI = Jacobian.transpose() * artInertia * Jacobian;
1891 mInvProjArtInertia = math::inverse<ConfigSpaceT>(projAI);
1898template <
class ConfigSpaceT>
1906template <
class ConfigSpaceT>
1916 updateInvProjArtInertiaImplicitDynamic(artInertia, timeStep);
1921 updateInvProjArtInertiaImplicitKinematic(artInertia, timeStep);
1925 updateInvProjArtInertiaImplicit);
1931template <
class ConfigSpaceT>
1938 Matrix projAI = Jacobian.transpose() * artInertia * Jacobian;
1942 (timeStep * Base::mAspectProperties.mDampingCoefficients
1943 + timeStep * timeStep * Base::mAspectProperties.mSpringStiffnesses).asDiagonal();
1946 mInvProjArtInertiaImplicit = math::inverse<ConfigSpaceT>(projAI);
1953template <
class ConfigSpaceT>
1961template <
class ConfigSpaceT>
1973 addChildBiasForceToDynamic(parentBiasForce,
1981 addChildBiasForceToKinematic(parentBiasForce,
1993template <
class ConfigSpaceT>
2005 + getRelativeJacobianStatic() * getInvProjArtInertiaImplicit()
2018 parentBiasForce +=
math::dAdInvT(this->getRelativeTransform(), beta);
2022template <
class ConfigSpaceT>
2032 + childArtInertia*(childPartialAcc
2033 + getRelativeJacobianStatic()*getAccelerationsStatic());
2045 _parentBiasForce +=
math::dAdInvT(this->getRelativeTransform(), beta);
2049template <
class ConfigSpaceT>
2060 addChildBiasImpulseToDynamic(parentBiasImpulse,
2067 addChildBiasImpulseToKinematic(parentBiasImpulse,
2078template <
class ConfigSpaceT>
2087 + childArtInertia*getRelativeJacobianStatic()
2088 *getInvProjArtInertia()*mTotalImpulse;
2095 _parentBiasImpulse +=
math::dAdInvT(this->getRelativeTransform(), beta);
2099template <
class ConfigSpaceT>
2107 parentBiasImpulse +=
math::dAdInvT(this->getRelativeTransform(), childBiasImpulse);
2111template <
class ConfigSpaceT>
2116 assert(timeStep > 0.0);
2121 this->mAspectState.mForces = this->mAspectState.mCommands;
2122 updateTotalForceDynamic(bodyForce, timeStep);
2126 this->mAspectState.mForces.setZero();
2127 updateTotalForceDynamic(bodyForce, timeStep);
2130 setAccelerationsStatic(this->mAspectState.mCommands);
2131 updateTotalForceKinematic(bodyForce, timeStep);
2134 setAccelerationsStatic(
2135 (this->mAspectState.mCommands - getVelocitiesStatic()) / timeStep );
2136 updateTotalForceKinematic(bodyForce, timeStep);
2139 setVelocitiesStatic(Vector::Zero());
2140 setAccelerationsStatic(Vector::Zero());
2141 updateTotalForceKinematic(bodyForce, timeStep);
2150template <
class ConfigSpaceT>
2157 = -Base::mAspectProperties.mSpringStiffnesses.cwiseProduct(
2158 getPositionsStatic()
2159 - Base::mAspectProperties.mRestPositions
2160 + getVelocitiesStatic() * timeStep);
2163 const Vector dampingForce
2164 = -Base::mAspectProperties.mDampingCoefficients.cwiseProduct(
2165 getVelocitiesStatic());
2168 mTotalForce = this->mAspectState.mForces
2171 - getRelativeJacobianStatic().transpose() * bodyForce;
2175template <
class ConfigSpaceT>
2184template <
class ConfigSpaceT>
2193 updateTotalImpulseDynamic(bodyImpulse);
2198 updateTotalImpulseKinematic(bodyImpulse);
2207template <
class ConfigSpaceT>
2212 mTotalImpulse = mConstraintImpulses
2213 - getRelativeJacobianStatic().transpose() * bodyImpulse;
2217template <
class ConfigSpaceT>
2225template <
class ConfigSpaceT>
2228 mTotalImpulse.setZero();
2232template <
class ConfigSpaceT>
2242 updateAccelerationDynamic(artInertia, spatialAcc);
2247 updateAccelerationKinematic(artInertia, spatialAcc);
2256template <
class ConfigSpaceT>
2262 setAccelerationsStatic( getInvProjArtInertiaImplicit()
2263 * (mTotalForce - getRelativeJacobianStatic().transpose()
2264 *artInertia*
math::AdInvT(this->getRelativeTransform(), spatialAcc)) );
2271template <
class ConfigSpaceT>
2280template <
class ConfigSpaceT>
2290 updateVelocityChangeDynamic(artInertia, velocityChange);
2295 updateVelocityChangeKinematic(artInertia, velocityChange);
2304template <
class ConfigSpaceT>
2311 = getInvProjArtInertia()
2312 * (mTotalImpulse - getRelativeJacobianStatic().transpose()
2313 *artInertia*
math::AdInvT(this->getRelativeTransform(), velocityChange));
2320template <
class ConfigSpaceT>
2329template <
class ConfigSpaceT>
2333 bool withDampingForces,
2334 bool withSpringForces)
2336 this->mAspectState.mForces = getRelativeJacobianStatic().transpose() * bodyForce;
2339 if (withDampingForces)
2341 const typename ConfigSpaceT::Vector dampingForces
2342 = -Base::mAspectProperties.mDampingCoefficients.cwiseProduct(
2343 getVelocitiesStatic());
2344 this->mAspectState.mForces -= dampingForces;
2348 if (withSpringForces)
2350 const typename ConfigSpaceT::Vector springForces
2351 = -Base::mAspectProperties.mSpringStiffnesses.cwiseProduct(
2352 getPositionsStatic()
2353 - Base::mAspectProperties.mRestPositions
2354 + getVelocitiesStatic() * timeStep);
2355 this->mAspectState.mForces -= springForces;
2360template <
class ConfigSpaceT>
2364 bool withDampingForces,
2365 bool withSpringForces)
2376 updateForceID(bodyForce, timeStep, withDampingForces, withSpringForces);
2385template <
class ConfigSpaceT>
2389 mImpulses = getRelativeJacobianStatic().transpose()*bodyImpulse;
2393template <
class ConfigSpaceT>
2406 updateImpulseID(bodyImpulse);
2415template <
class ConfigSpaceT>
2423 updateConstrainedTermsDynamic(timeStep);
2428 updateConstrainedTermsKinematic(timeStep);
2437template <
class ConfigSpaceT>
2441 const double invTimeStep = 1.0 / timeStep;
2443 setVelocitiesStatic(getVelocitiesStatic() + mVelocityChanges);
2444 setAccelerationsStatic(getAccelerationsStatic()
2445 + mVelocityChanges * invTimeStep);
2446 this->mAspectState.mForces.noalias() += mImpulses * invTimeStep;
2451template <
class ConfigSpaceT>
2455 this->mAspectState.mForces.noalias() += mImpulses / timeStep;
2459template <
class ConfigSpaceT>
2467 beta.noalias() += childArtInertia * getRelativeJacobianStatic()
2468 * getInvProjArtInertia() * mInvM_a;
2475 parentBiasForce +=
math::dAdInvT(this->getRelativeTransform(), beta);
2479template <
class ConfigSpaceT>
2487 beta.noalias() += childArtInertia * getRelativeJacobianStatic()
2488 * getInvProjArtInertiaImplicit() * mInvM_a;
2495 parentBiasForce +=
math::dAdInvT(this->getRelativeTransform(), beta);
2499template <
class ConfigSpaceT>
2504 mInvM_a = this->mAspectState.mForces
2505 - getRelativeJacobianStatic().transpose() * bodyForce;
2509template <
class ConfigSpaceT>
2511 Eigen::MatrixXd& _invMassMat,
2517 mInvMassMatrixSegment
2518 = getInvProjArtInertia()
2519 * (mInvM_a - getRelativeJacobianStatic().transpose()
2520 * artInertia *
math::AdInvT(this->getRelativeTransform(), spatialAcc));
2526 size_t iStart = mDofs[0]->mIndexInTree;
2529 _invMassMat.block<NumDofs, 1>(iStart, _col) = mInvMassMatrixSegment;
2533template <
class ConfigSpaceT>
2535 Eigen::MatrixXd& invMassMat,
2541 mInvMassMatrixSegment
2542 = getInvProjArtInertiaImplicit()
2543 * (mInvM_a - getRelativeJacobianStatic().transpose()
2544 * artInertia *
math::AdInvT(this->getRelativeTransform(), spatialAcc));
2550 size_t iStart = mDofs[0]->mIndexInTree;
2553 invMassMat.block<NumDofs, 1>(iStart, col) = mInvMassMatrixSegment;
2557template <
class ConfigSpaceT>
2562 acc += getRelativeJacobianStatic() * mInvMassMatrixSegment;
2566template <
class ConfigSpaceT>
2570 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:1642
bool * preserveName
Definition SkelParser.cpp:1641
Eigen::VectorXd velocity
Definition SkelParser.cpp:108
Eigen::VectorXd force
Definition SkelParser.cpp:110
std::size_t index
Definition SkelParser.cpp:1617
Eigen::VectorXd acceleration
Definition SkelParser.cpp:109
double * friction
Definition SkelParser.cpp:1639
Eigen::VectorXd position
Definition SkelParser.cpp:107
AspectProperties mAspectProperties
Aspect::Properties data, directly accessible to your derived class.
Definition EmbeddedAspect.hpp:237
AspectState mAspectState
Aspect::State data, directly accessible to your derived class.
Definition EmbeddedAspect.hpp:422
DegreeOfFreedom class is a proxy class for accessing single degrees of freedom (aka generalized coord...
Definition DegreeOfFreedom.hpp:53
Definition GenericJoint.hpp:49
void setAspectState(const AspectState &state)
Set the AspectState of this GenericJoint.
Definition GenericJoint.hpp:114
void setForceLowerLimits(const Eigen::VectorXd &lowerLimits) override
Definition GenericJoint.hpp:1224
double getCommand(std::size_t index) const override
Definition GenericJoint.hpp:380
typename ConfigSpaceT::Matrix Matrix
Definition GenericJoint.hpp:61
void addChildArtInertiaImplicitToKinematic(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia)
Definition GenericJoint.hpp:1848
Eigen::VectorXd getCommands() const override
Definition GenericJoint.hpp:451
void resetVelocities() override
Definition GenericJoint.hpp:924
const Vector & getPositionsStatic() const
Fixed-size version of getPositions()
Definition GenericJoint.hpp:710
void setAccelerationsStatic(const Vector &accels)
Fixed-size version of setAccelerations()
Definition GenericJoint.hpp:737
void copy(const ThisClass &otherJoint)
Copy the Properties of another GenericJoint.
Definition GenericJoint.hpp:159
void setForceUpperLimits(const Eigen::VectorXd &upperLimits) override
Definition GenericJoint.hpp:1272
void updateTotalImpulseKinematic(const Eigen::Vector6d &bodyImpulse)
Definition GenericJoint.hpp:2218
void setCoulombFriction(std::size_t index, double friction) override
Definition GenericJoint.hpp:1514
const JacobianMatrix & getRelativeJacobianTimeDerivStatic() const
Fixed-size version of getRelativeJacobianTimeDeriv()
Definition GenericJoint.hpp:1596
void setRestPosition(std::size_t index, double q0) override
Definition GenericJoint.hpp:1447
void setAccelerations(const Eigen::VectorXd &accelerations) override
Definition GenericJoint.hpp:1014
void updateTotalImpulse(const Eigen::Vector6d &bodyImpulse) override
Definition GenericJoint.hpp:2185
void updateForceFD(const Eigen::Vector6d &bodyForce, double timeStep, bool withDampingForcese, bool withSpringForces) override
Definition GenericJoint.hpp:2361
const Matrix & getInvProjArtInertiaImplicit() const
Get the inverse of projected articulated inertia for implicit joint damping and spring forces.
Definition GenericJoint.hpp:1739
Eigen::VectorXd getPositionUpperLimits() const override
Definition GenericJoint.hpp:609
void setVelocityUpperLimits(const Eigen::VectorXd &upperLimits) override
Definition GenericJoint.hpp:890
void updateForceID(const Eigen::Vector6d &bodyForce, double timeStep, bool withDampingForces, bool withSpringForces) override
Definition GenericJoint.hpp:2330
Eigen::VectorXd getAccelerationUpperLimits() const override
Definition GenericJoint.hpp:1131
void updateAccelerationKinematic(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc)
Definition GenericJoint.hpp:2272
void updateVelocityChangeDynamic(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &velocityChange)
Definition GenericJoint.hpp:2305
Eigen::VectorXd getVelocityLowerLimits() const override
Definition GenericJoint.hpp:855
void updateInvProjArtInertiaImplicit(const Eigen::Matrix6d &artInertia, double timeStep) override
Definition GenericJoint.hpp:1907
void setVelocityLowerLimits(const Eigen::VectorXd &lowerLimits) override
Definition GenericJoint.hpp:841
void updateConstrainedTermsDynamic(double timeStep)
Definition GenericJoint.hpp:2438
void setPositionLowerLimit(std::size_t index, double position) override
Definition GenericJoint.hpp:520
const GenericJoint< ConfigSpaceT >::JacobianMatrix & getRelativeJacobianStatic() const
Fixed-size version of getRelativeJacobian()
Definition GenericJoint.hpp:1566
void addChildArtInertiaToDynamic(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia)
Definition GenericJoint.hpp:1774
const math::Jacobian getRelativeJacobianTimeDeriv() const override
Definition GenericJoint.hpp:1588
void setVelocities(const Eigen::VectorXd &velocities) override
Definition GenericJoint.hpp:790
void addChildBiasImpulseToKinematic(Eigen::Vector6d &parentBiasImpulse, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasImpulse)
Definition GenericJoint.hpp:2100
void addChildArtInertiaImplicitTo(Eigen::Matrix6d &parentArtInertiaImplicit, const Eigen::Matrix6d &childArtInertiaImplicit) override
Definition GenericJoint.hpp:1804
void setPosition(std::size_t index, double position) override
Definition GenericJoint.hpp:465
void updateVelocityChange(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &velocityChange) override
Definition GenericJoint.hpp:2281
void setCommand(std::size_t index, double command) override
Definition GenericJoint.hpp:326
std::array< DegreeOfFreedom *, NumDofs > mDofs
Array of DegreeOfFreedom objects.
Definition GenericJoint.hpp:675
void setInitialPosition(std::size_t index, double initial) override
Definition GenericJoint.hpp:650
Eigen::VectorXd getForces() const override
Definition GenericJoint.hpp:1190
void resetCommands() override
Definition GenericJoint.hpp:458
void setVelocityChange(std::size_t index, double velocityChange) override
Definition GenericJoint.hpp:1303
typename Base::AspectState AspectState
Definition GenericJoint.hpp:65
void setAccelerationUpperLimits(const Eigen::VectorXd &upperLimits) override
Definition GenericJoint.hpp:1117
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:777
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:2208
void setForce(std::size_t index, double force) override
Definition GenericJoint.hpp:1145
void setInitialVelocity(std::size_t index, double initial) override
Definition GenericJoint.hpp:931
double getForce(std::size_t index) const override
Definition GenericJoint.hpp:1161
void setInitialVelocities(const Eigen::VectorXd &initial) override
Definition GenericJoint.hpp:958
void updateInvProjArtInertiaDynamic(const Eigen::Matrix6d &artInertia)
Definition GenericJoint.hpp:1883
void setPositionUpperLimit(std::size_t index, double position) override
Definition GenericJoint.hpp:568
void updateInvProjArtInertiaImplicitKinematic(const Eigen::Matrix6d &artInertia, double timeStep)
Definition GenericJoint.hpp:1954
const math::Jacobian getRelativeJacobian() const override
Definition GenericJoint.hpp:1558
std::size_t getNumDofs() const override
Definition GenericJoint.hpp:215
void resetForces() override
Definition GenericJoint.hpp:1293
DegreeOfFreedom * getDof(std::size_t index) override
void addChildArtInertiaTo(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia) override
Definition GenericJoint.hpp:1748
Eigen::VectorXd getPositionLowerLimits() const override
Definition GenericJoint.hpp:561
bool isDofNamePreserved(size_t index) const override
Definition GenericJoint.hpp:269
void addVelocityTo(Eigen::Vector6d &vel) override
Definition GenericJoint.hpp:1679
void preserveDofName(size_t index, bool preserve) override
Definition GenericJoint.hpp:256
double getVelocityUpperLimit(std::size_t index) const override
Definition GenericJoint.hpp:876
double getVelocityChange(std::size_t index) const override
Definition GenericJoint.hpp:1317
void updateTotalForce(const Eigen::Vector6d &bodyForce, double timeStep) override
Definition GenericJoint.hpp:2112
void resetConstraintImpulses() override
Definition GenericJoint.hpp:1364
virtual Vector getPositionDifferencesStatic(const Vector &q2, const Vector &q1) const
Fixed-size version of getPositionDifferences()
Definition GenericJoint.hpp:1410
void setVelocity(std::size_t index, double velocity) override
Definition GenericJoint.hpp:756
double getRestPosition(std::size_t index) const override
Definition GenericJoint.hpp:1472
void updateConstrainedTerms(double timeStep) override
Definition GenericJoint.hpp:2416
void integrateVelocities(double dt) override
Definition GenericJoint.hpp:1382
Eigen::VectorXd getPositions() const override
Definition GenericJoint.hpp:513
void addChildBiasImpulseToDynamic(Eigen::Vector6d &parentBiasImpulse, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasImpulse)
Definition GenericJoint.hpp:2079
double getAcceleration(std::size_t index) const override
Definition GenericJoint.hpp:1001
Eigen::VectorXd getVelocities() const override
Definition GenericJoint.hpp:807
Eigen::VectorXd getInitialPositions() const override
Definition GenericJoint.hpp:691
Eigen::VectorXd getPositionDifferences(const Eigen::VectorXd &q2, const Eigen::VectorXd &q1) const override
Definition GenericJoint.hpp:1391
void setPositionLowerLimits(const Eigen::VectorXd &lowerLimits) override
Definition GenericJoint.hpp:547
double getAccelerationUpperLimit(std::size_t index) const override
Definition GenericJoint.hpp:1103
void setForceLowerLimit(size_t index, double force) override
Definition GenericJoint.hpp:1197
void setSpringStiffness(std::size_t index, double k) override
Definition GenericJoint.hpp:1419
void updateRelativePrimaryAcceleration() const override
Definition GenericJoint.hpp:1671
void setProperties(const Properties &properties)
Set the Properties of this GenericJoint.
Definition GenericJoint.hpp:98
double getForceLowerLimit(std::size_t index) const override
Definition GenericJoint.hpp:1210
static constexpr std::size_t NumDofs
Definition GenericJoint.hpp:52
const Vector & getVelocitiesStatic() const
Fixed-size version of getVelocities()
Definition GenericJoint.hpp:730
double getPositionUpperLimit(std::size_t index) const override
Definition GenericJoint.hpp:582
const std::string & getDofName(size_t index) const override
Definition GenericJoint.hpp:282
ThisClass & operator=(const ThisClass &other)
Same as copy(const GenericJoint&)
Definition GenericJoint.hpp:182
double computePotentialEnergy() const override
Definition GenericJoint.hpp:1543
double getSpringStiffness(std::size_t index) const override
Definition GenericJoint.hpp:1434
void setDampingCoefficient(std::size_t index, double coeff) override
Definition GenericJoint.hpp:1485
void updateInvProjArtInertia(const Eigen::Matrix6d &artInertia) override
Definition GenericJoint.hpp:1860
void resetVelocity(std::size_t index) override
Definition GenericJoint.hpp:911
void setPositionsStatic(const Vector &positions)
Fixed-size version of setPositions()
Definition GenericJoint.hpp:698
void addChildBiasForceForInvAugMassMatrix(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce) override
Definition GenericJoint.hpp:2480
void updateConstrainedTermsKinematic(double timeStep)
Definition GenericJoint.hpp:2452
void setAccelerationLowerLimits(const Eigen::VectorXd &lowerLimits) override
Definition GenericJoint.hpp:1067
void setAspectProperties(const AspectProperties &properties)
Set the AspectProperties of this GenericJoint.
Definition GenericJoint.hpp:125
Eigen::VectorXd getForceUpperLimits() const override
Definition GenericJoint.hpp:1286
detail::GenericJointProperties< ConfigSpaceT > Properties
Definition GenericJoint.hpp:64
void updateImpulseFD(const Eigen::Vector6d &bodyImpulse) override
Definition GenericJoint.hpp:2394
GenericJoint(const ThisClass &)=delete
void updateInvProjArtInertiaImplicitDynamic(const Eigen::Matrix6d &artInertia, double timeStep)
Definition GenericJoint.hpp:1932
void updateTotalForceKinematic(const Eigen::Vector6d &bodyForce, double timeStep)
Definition GenericJoint.hpp:2176
void resetTotalImpulses() override
Definition GenericJoint.hpp:2226
void integratePositions(double dt) override
Definition GenericJoint.hpp:1371
void setPositions(const Eigen::VectorXd &positions) override
Definition GenericJoint.hpp:499
void addChildBiasForceToDynamic(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce, const Eigen::Vector6d &childPartialAcc)
Definition GenericJoint.hpp:1994
Eigen::VectorXd getForceLowerLimits() const override
Definition GenericJoint.hpp:1238
double getInitialVelocity(std::size_t index) const override
Definition GenericJoint.hpp:945
Eigen::VectorXd getAccelerations() const override
Definition GenericJoint.hpp:1031
typename ConfigSpaceT::Vector Vector
Definition GenericJoint.hpp:59
void updateVelocityChangeKinematic(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &velocityChange)
Definition GenericJoint.hpp:2321
const Vector & getAccelerationsStatic() const
Fixed-size version of getAccelerations()
Definition GenericJoint.hpp:749
Eigen::VectorXd getInitialVelocities() const override
Definition GenericJoint.hpp:972
void setCommands(const Eigen::VectorXd &commands) override
Definition GenericJoint.hpp:393
Eigen::VectorXd getSpatialToGeneralized(const Eigen::Vector6d &spatial) override
Definition GenericJoint.hpp:2567
typename ConfigSpaceT::JacobianMatrix JacobianMatrix
Definition GenericJoint.hpp:60
void getInvAugMassMatrixSegment(Eigen::MatrixXd &invMassMat, const size_t col, const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc) override
Definition GenericJoint.hpp:2534
double getVelocityLowerLimit(std::size_t index) const override
Definition GenericJoint.hpp:828
void updateImpulseID(const Eigen::Vector6d &bodyImpulse) override
Definition GenericJoint.hpp:2386
void setVelocityLowerLimit(std::size_t index, double velocity) override
Definition GenericJoint.hpp:814
double getInitialPosition(std::size_t index) const override
Definition GenericJoint.hpp:664
void updateAcceleration(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc) override
Definition GenericJoint.hpp:2233
void addChildBiasForceToKinematic(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce, const Eigen::Vector6d &childPartialAcc)
Definition GenericJoint.hpp:2023
void setVelocityUpperLimit(std::size_t index, double velocity) override
Definition GenericJoint.hpp:862
typename ConfigSpaceT::Point Point
Definition GenericJoint.hpp:57
void updateInvProjArtInertiaKinematic(const Eigen::Matrix6d &artInertia)
Definition GenericJoint.hpp:1899
bool hasPositionLimit(std::size_t index) const override
Definition GenericJoint.hpp:616
void setInitialPositions(const Eigen::VectorXd &initial) override
Definition GenericJoint.hpp:677
virtual ~GenericJoint()
Destructor.
Definition GenericJoint.hpp:90
void addChildBiasForceTo(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce, const Eigen::Vector6d &childPartialAcc) override
Definition GenericJoint.hpp:1962
double getCoulombFriction(std::size_t index) const override
Definition GenericJoint.hpp:1530
void addInvMassMatrixSegmentTo(Eigen::Vector6d &acc) override
Definition GenericJoint.hpp:2558
void setConstraintImpulse(std::size_t index, double impulse) override
Definition GenericJoint.hpp:1337
void resetPosition(std::size_t index) override
Definition GenericJoint.hpp:630
double getForceUpperLimit(size_t index) const override
Definition GenericJoint.hpp:1258
void registerDofs() override
Definition GenericJoint.hpp:1631
void addVelocityChangeTo(Eigen::Vector6d &velocityChange) override
Definition GenericJoint.hpp:1716
const std::string & setDofName(std::size_t index, const std::string &name, bool preserveName=true) override
Definition GenericJoint.hpp:222
void setAccelerationUpperLimit(std::size_t index, double acceleration) override
Definition GenericJoint.hpp:1088
double getDampingCoefficient(std::size_t index) const override
Definition GenericJoint.hpp:1501
typename Base::AspectProperties AspectProperties
Definition GenericJoint.hpp:66
void setPositionUpperLimits(const Eigen::VectorXd &upperLimits) override
Definition GenericJoint.hpp:595
Eigen::VectorXd getAccelerationLowerLimits() const override
Definition GenericJoint.hpp:1081
void updateTotalForceDynamic(const Eigen::Vector6d &bodyForce, double timeStep)
Definition GenericJoint.hpp:2151
void setVelocitiesStatic(const Vector &velocities)
Fixed-size version of setVelocities()
Definition GenericJoint.hpp:717
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:1245
size_t getIndexInTree(size_t index) const override
Definition GenericJoint.hpp:313
Eigen::VectorXd getVelocityUpperLimits() const override
Definition GenericJoint.hpp:904
void setAccelerationLowerLimit(size_t index, double acceleration) override
Definition GenericJoint.hpp:1038
double getPosition(std::size_t index) const override
Definition GenericJoint.hpp:486
void addChildArtInertiaImplicitToDynamic(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia)
Definition GenericJoint.hpp:1830
double getAccelerationLowerLimit(std::size_t index) const override
Definition GenericJoint.hpp:1053
void addChildBiasImpulseTo(Eigen::Vector6d &parentBiasImpulse, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasImpulse) override
Definition GenericJoint.hpp:2050
double getPositionLowerLimit(std::size_t index) const override
Definition GenericJoint.hpp:534
void updateAccelerationDynamic(const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc)
Definition GenericJoint.hpp:2257
void resetPositions() override
Definition GenericJoint.hpp:643
void addChildBiasForceForInvMassMatrix(Eigen::Vector6d &parentBiasForce, const Eigen::Matrix6d &childArtInertia, const Eigen::Vector6d &childBiasForce) override
Definition GenericJoint.hpp:2460
void getInvMassMatrixSegment(Eigen::MatrixXd &invMassMat, const size_t col, const Eigen::Matrix6d &artInertia, const Eigen::Vector6d &spatialAcc) override
Definition GenericJoint.hpp:2510
Properties getGenericJointProperties() const
Get the Properties of this GenericJoint.
Definition GenericJoint.hpp:151
const Matrix & getInvProjArtInertia() const
Get the inverse of the projected articulated inertia.
Definition GenericJoint.hpp:1729
void setForces(const Eigen::VectorXd &forces) override
Definition GenericJoint.hpp:1174
void updateTotalForceForInvMassMatrix(const Eigen::Vector6d &bodyForce) override
Definition GenericJoint.hpp:2500
void resetAccelerations() override
Definition GenericJoint.hpp:1138
void setAcceleration(std::size_t index, double acceleration) override
Definition GenericJoint.hpp:979
void addChildArtInertiaToKinematic(Eigen::Matrix6d &parentArtInertia, const Eigen::Matrix6d &childArtInertia)
Definition GenericJoint.hpp:1792
double getConstraintImpulse(std::size_t index) const override
Definition GenericJoint.hpp:1351
size_t getIndexInSkeleton(size_t index) const override
Definition GenericJoint.hpp:300
void resetVelocityChanges() override
Definition GenericJoint.hpp:1330
static constexpr ActuatorType PASSIVE
Definition Joint.hpp:67
static constexpr ActuatorType SERVO
Definition Joint.hpp:68
static constexpr ActuatorType ACCELERATION
Definition Joint.hpp:69
void updateArticulatedInertia() const
Tells the Skeleton to update the articulated inertia if it needs updating.
Definition Joint.cpp:528
static constexpr ActuatorType LOCKED
Definition Joint.hpp:71
static constexpr ActuatorType FORCE
Definition Joint.hpp:66
void setProperties(const Properties &properties)
Set the Properties of this Joint.
Definition Joint.cpp:103
static constexpr ActuatorType VELOCITY
Definition Joint.hpp:70
#define GenericJoint_REPORT_UNSUPPORTED_ACTUATOR(func)
Definition GenericJoint.hpp:61
#define GenericJoint_REPORT_DIM_MISMATCH(func, arg)
Definition GenericJoint.hpp:44
#define GenericJoint_REPORT_OUT_OF_RANGE(func, index)
Definition GenericJoint.hpp:53
#define GenericJoint_SET_IF_DIFFERENT(mField, value)
Definition GenericJoint.hpp:69
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:145
Eigen::Matrix< double, 6, Eigen::Dynamic > Jacobian
Definition MathTypes.hpp:108
Eigen::Vector6d AdInvT(const Eigen::Isometry3d &_T, const Eigen::Vector6d &_V)
fast version of Ad(Inv(T), V)
Definition Geometry.cpp:714
Eigen::Vector6d dAdInvT(const Eigen::Isometry3d &_T, const Eigen::Vector6d &_F)
fast version of dAd(Inv(T), F)
Definition Geometry.cpp:784
Eigen::Vector6d ad(const Eigen::Vector6d &_X, const Eigen::Vector6d &_Y)
adjoint mapping
Definition Geometry.cpp:744
Inertia transformInertia(const Eigen::Isometry3d &_T, const Inertia &_I)
Definition Geometry.cpp:1311
bool isNan(double _v)
Returns whether _v is a NaN (Not-A-Number) value.
Definition Helpers.hpp:171
Definition BulletCollisionDetector.cpp:63
Definition GenericJointAspect.hpp:178
Definition GenericJointAspect.hpp:87
EuclideanPoint mInitialPositions
Initial positions.
Definition GenericJointAspect.hpp:101
Vector mInitialVelocities
Initial velocities.
Definition GenericJointAspect.hpp:110
Definition JointAspect.hpp:104