25 m_desiredVelocity(desiredVelocity),
43 unsigned int offset = 6 + (m_bodyA->getLink(
m_linkA).m_dofOffset + linkDoF);
55 m_desiredVelocity(desiredVelocity),
76 return col->getIslandTag();
80 if (m_bodyA->getLink(
m_linkA).m_collider)
82 return m_bodyA->getLink(
m_linkA).m_collider->getIslandTag();
94 return col->getIslandTag();
138 btScalar rhs =
m_kp * positionStabiliationTerm + currentVelocity +
m_kd * velocityError;
148 fillMultiBodyConstraint(constraintRow,
data,
jacobianA(row),
jacobianB(row), dummy, dummy, dummy, dummy, posError,
infoGlobal, -
m_maxAppliedImpulse,
m_maxAppliedImpulse,
false, 1,
false, rhs);
149 constraintRow.m_orgConstraint =
this;
150 constraintRow.m_orgDofIndex = row;
154 switch (m_bodyA->getLink(
m_linkA).m_jointType)
158 constraintRow.m_contactNormal1.setZero();
159 constraintRow.m_contactNormal2.setZero();
161 constraintRow.m_relpos1CrossNormal = revoluteAxisInWorld;
162 constraintRow.m_relpos2CrossNormal = -revoluteAxisInWorld;
169 constraintRow.m_contactNormal1 = prismaticAxisInWorld;
170 constraintRow.m_contactNormal2 = -prismaticAxisInWorld;
171 constraintRow.m_relpos1CrossNormal.setZero();
172 constraintRow.m_relpos2CrossNormal.setZero();
@ MULTIBODY_CONSTRAINT_1DOF_JOINT_MOTOR
btScalar * jacobianB(int row)
void allocateJacobiansMultiDof()
btScalar fillMultiBodyConstraint(btMultiBodySolverConstraint &solverConstraint, btMultiBodyJacobianData &data, btScalar *jacOrgA, btScalar *jacOrgB, const btVector3 &constraintNormalAng, const btVector3 &constraintNormalLin, const btVector3 &posAworld, const btVector3 &posBworld, btScalar posError, const btContactSolverInfo &infoGlobal, btScalar lowerLimit, btScalar upperLimit, bool angConstraint=false, btScalar relaxation=1.f, bool isFriction=false, btScalar desiredVelocity=0, btScalar cfmSlip=0)
btScalar m_maxAppliedImpulse
btScalar * jacobianA(int row)
btMultiBodySolverConstraint
1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and fr...
const btMultibodyLink & getLink(int index) const
SIMD_FORCE_INLINE btVector3 quatRotate(const btQuaternion &rotation, const btVector3 &v)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint int const btContactSolverInfo & infoGlobal
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
SIMD_FORCE_INLINE T & expandNonInitializing()
btScalar m_desiredVelocity
virtual int getIslandIdB() const
btScalar m_desiredPosition
virtual void finalizeMultiDof()
virtual ~btMultiBodyJointMotor()
btMultiBodyJointMotor(btMultiBody *body, int link, btScalar desiredVelocity, btScalar maxMotorImpulse)
This file was written by Erwin Coumans.
virtual void createConstraintRows(btMultiBodyConstraintArray &constraintRows, btMultiBodyJacobianData &data, const btContactSolverInfo &infoGlobal)
virtual int getIslandIdA() const
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset