33 #ifndef DART_CONSTRAINT_CONTACTCONSTRAINT_HPP_ 34 #define DART_CONSTRAINT_CONTACTCONSTRAINT_HPP_ 36 #include "dart/dynamics/CollisionDetector.hpp" 37 #include "dart/dynamics/ConstraintBase.hpp" 38 #include "dart/math/MathTypes.hpp" 60 const std::string& getType()
const override;
63 static const std::string& getStaticType();
70 static void setErrorAllowance(
double allowance);
73 static double getErrorAllowance();
76 static void setErrorReductionParameter(
double erp);
79 static double getErrorReductionParameter();
82 static void setMaxErrorReductionVelocity(
double erv);
85 static double getMaxErrorReductionVelocity();
88 static void setConstraintForceMixing(
double cfm);
91 static double getConstraintForceMixing();
94 void setFrictionDirection(
const Eigen::Vector3d& dir);
97 const Eigen::Vector3d& getFrictionDirection1()
const;
112 void update()
override;
118 void applyUnitImpulse(std::size_t index)
override;
121 void getVelocityChange(
double* vel,
bool withCfm)
override;
124 void excite()
override;
127 void unexcite()
override;
130 void applyImpulse(
double* lambda)
override;
133 dynamics::SkeletonPtr getRootSkeleton()
const override;
136 void uniteSkeletons()
override;
139 bool isActive()
const override;
141 static double computeFrictionCoefficient(
143 static double computePrimaryFrictionCoefficient(
145 static double computeSecondaryFrictionCoefficient(
147 static double computePrimarySlipCompliance(
149 static double computeSecondarySlipCompliance(
151 static Eigen::Vector3d computeWorldFirstFrictionDir(
153 static double computeRestitutionCoefficient(
157 using TangentBasisMatrix = Eigen::Matrix<double, 3, 2>;
162 void getRelVelocity(
double* relVel);
165 void updateFirstFrictionalDirection();
168 TangentBasisMatrix getTangentBasisMatrixODE(
const Eigen::Vector3d& n);
176 double getPrimarySlipCompliance()
const;
179 void setPrimarySlipCompliance(
double slip);
182 double getSecondarySlipCompliance()
const;
185 void setSecondarySlipCompliance(
double slip);
204 Eigen::Vector3d mFirstFrictionalDirection;
207 double mPrimaryFrictionCoeff;
210 double mSecondaryFrictionCoeff;
213 double mPrimarySlipCompliance;
216 double mSecondarySlipCompliance;
219 double mRestitutionCoeff;
222 bool mIsSelfCollision;
225 Eigen::Matrix<double, 6, Eigen::Dynamic> mSpatialNormalA;
228 Eigen::Matrix<double, 6, Eigen::Dynamic> mSpatialNormalB;
234 std::size_t mAppliedImpulseIndex;
243 static double mErrorAllowance;
247 static double mErrorReductionParameter;
250 static double mMaxErrorReductionVelocity;
255 static double mConstraintForceMixing;
262 #endif // DART_CONSTRAINT_CONTACTCONSTRAINT_HPP_ ConstrainedGroup is a group of skeletons that interact each other with constraints.
Definition: ConstrainedGroup.hpp:57
Constraint is a base class of concrete constraints classes.
Definition: ConstraintBase.hpp:74
ConstraintInfo.
Definition: ConstraintBase.hpp:49
ConstraintSolver manages constraints and computes constraint impulses.
Definition: ConstraintSolver.hpp:56
Definition: Aspect.cpp:40
Definition: ShapeNode.hpp:48
BodyNode class represents a single node of the skeleton.
Definition: BodyNode.hpp:74