24 #ifndef BT_MULTIBODY_H 25 #define BT_MULTIBODY_H 64 const btVector3 &parentComToThisPivotOffset,
65 const btVector3 &thisPivotToThisComOffset,
66 bool disableParentCollision);
75 const btVector3 &parentComToThisComOffset,
76 const btVector3 &thisPivotToThisComOffset,
77 bool disableParentCollision);
85 const btVector3 &parentComToThisPivotOffset,
86 const btVector3 &thisPivotToThisComOffset,
87 bool disableParentCollision=
false);
94 const btVector3 &parentComToThisPivotOffset,
95 const btVector3 &thisPivotToThisComOffset,
96 bool disableParentCollision=
false);
98 #ifdef BT_MULTIBODYLINK_INCLUDE_PLANAR_JOINTS 105 const btVector3 &parentComToThisComOffset,
106 bool disableParentCollision=
false);
342 sum += delta_vee[i]*multiplier*delta_vee[i]*multiplier;
361 sum += delta_vee[i]*multiplier*delta_vee[i]*multiplier;
362 m_realBuf[i] += delta_vee[i] * multiplier;
385 for (
int dof = 0; dof < 6 +
getNumDofs(); ++dof)
387 m_realBuf[dof] += delta_vee[dof] * multiplier;
546 #ifdef TEST_SPATIAL_ALGEBRA_LAYER 552 int dofOffset = 0, cfgOffset = 0;
555 m_links[bidx].m_dofOffset = dofOffset;
m_links[bidx].m_cfgOffset = cfgOffset;
556 dofOffset +=
m_links[bidx].m_dofCount; cfgOffset +=
m_links[bidx].m_posVarCount;
void calcAccelerationDeltas(const btScalar *force, btScalar *output, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v) const
static T sum(const btAlignedObjectArray< T > &items)
void setupPlanar(int i, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &rotationAxis, const btVector3 &parentComToThisComOffset, bool disableParentCollision=false)
void setCanSleep(bool canSleep)
void setupFixed(int linkIndex, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool disableParentCollision)
void setupRevolute(int linkIndex, btScalar mass, const btVector3 &inertia, int parentIndex, const btQuaternion &rotParentToThis, const btVector3 &jointAxis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool disableParentCollision=false)
btAlignedObjectArray< btMultiBodyLinkCollider * > m_colliders
btAlignedObjectArray< btMatrix3x3 > m_matrixBuf
const btMultibodyLink & getLink(int index) const
BT_DECLARE_ALIGNED_ALLOCATOR()
bool isUsingGlobalVelocities() const
const btVector3 getBaseVel() const
btMultiBodyLinkCollider * getBaseCollider()
void setNumLinks(int numLinks)
btMultiBodyLinkCollider * m_baseCollider
These spatial algebra classes are used for btMultiBody, see BulletDynamics/Featherstone.
void stepPositionsMultiDof(btScalar dt, btScalar *pq=0, btScalar *pqd=0)
btScalar m_maxCoordinateVelocity
void addBaseTorque(const btVector3 &t)
const btVector3 & getLinkForce(int i) const
btScalar getBaseMass() const
btScalar btSqrt(btScalar y)
void setupSpherical(int linkIndex, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool disableParentCollision=false)
btVector3 localDirToWorld(int i, const btVector3 &vec) const
btMatrix3x3 m_cachedInertiaLowerRight
btScalar * getJointVelMultiDof(int i)
void addLinkForce(int i, const btVector3 &f)
void mulMatrix(btScalar *pA, btScalar *pB, int rowsA, int colsA, int rowsB, int colsB, btScalar *pC) const
void setBaseCollider(btMultiBodyLinkCollider *collider)
btScalar getJointPos(int i) const
void btClamp(T &a, const T &lb, const T &ub)
void setupPrismatic(int i, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &jointAxis, const btVector3 &parentComToThisComOffset, const btVector3 &thisPivotToThisComOffset, bool disableParentCollision)
const btVector3 & getBaseTorque() const
bool isPosUpdated() const
void setJointPosMultiDof(int i, btScalar *q)
void applyDeltaVeeMultiDof(const btScalar *delta_vee, btScalar multiplier)
void setWorldToBaseRot(const btQuaternion &rot)
btScalar m_maxAppliedImpulse
btScalar getMaxAppliedImpulse() const
void applyDeltaVee(const btScalar *delta_vee)
void clearForcesAndTorques()
btVector3 getAngularMomentum() const
btMultiBody(int n_links, btScalar mass, const btVector3 &inertia, bool fixedBase, bool canSleep, bool multiDof=false)
void setBaseVel(const btVector3 &vel)
int getNumPosVars() const
btMatrix3x3 m_cachedInertiaTopLeft
const btVector3 & getBaseInertia() const
void setHasSelfCollision(bool hasSelfCollision)
void setMaxCoordinateVelocity(btScalar maxVel)
int size() const
return the number of elements in the array
void setUseGyroTerm(bool useGyro)
btMatrix3x3 m_cachedInertiaLowerLeft
const btVector3 & getLinkTorque(int i) const
void addLinkTorque(int i, const btVector3 &t)
void setCompanionId(int id)
void setBaseOmega(const btVector3 &omega)
void filConstraintJacobianMultiDof(int link, const btVector3 &contact_point, const btVector3 &normal_ang, const btVector3 &normal_lin, btScalar *jac, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m) const
void compTreeLinkVelocities(btVector3 *omega, btVector3 *vel) const
bool hasFixedBase() const
btMultibodyLink & getLink(int index)
void addJointTorque(int i, btScalar Q)
btScalar getLinearDamping() const
void solveImatrix(const btVector3 &rhs_top, const btVector3 &rhs_bot, float result[6]) const
const btVector3 & getRVector(int i) const
bool hasSelfCollision() const
btQuaternion inverse() const
Return the inverse of this quaternion.
void setJointVel(int i, btScalar qdot)
void operator=(const btMultiBody &)
void setJointPos(int i, btScalar q)
void setAngularDamping(btScalar damp)
void checkMotionAndSleepIfRequired(btScalar timestep)
btVector3 can be used to represent 3D points and vectors.
void setLinearDamping(btScalar damp)
btScalar getLinkMass(int i) const
void addBaseForce(const btVector3 &f)
btAlignedObjectArray< btScalar > m_realBuf
void calcAccelerationDeltasMultiDof(const btScalar *force, btScalar *output, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v) const
void updateLinksDofOffsets()
void setMaxAppliedImpulse(btScalar maxImp)
btVector3 getBaseOmega() const
int getCompanionId() const
void fillContactJacobianMultiDof(int link, const btVector3 &contact_point, const btVector3 &normal, btScalar *jac, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m) const
bool m_useGlobalVelocities
btScalar getAngularDamping() const
void resize(int newsize, const T &fillData=T())
void addJointTorqueMultiDof(int i, int dof, btScalar Q)
void applyDeltaVee(const btScalar *delta_vee, btScalar multiplier)
void setBaseInertia(const btVector3 &inertia)
void setPosUpdated(bool updated)
btVector3 worldPosToLocal(int i, const btVector3 &vec) const
const btQuaternion & getParentToLocalRot(int i) const
bool isUsingRK4Integration() const
void fillContactJacobian(int link, const btVector3 &contact_point, const btVector3 &normal, btScalar *jac, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m) const
btAlignedObjectArray< btVector3 > m_vectorBuf
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
void setJointVelMultiDof(int i, btScalar *qdot)
const btMultiBodyLinkCollider * getBaseCollider() const
btVector3 worldDirToLocal(int i, const btVector3 &vec) const
const btVector3 & getLinkInertia(int i) const
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
void stepVelocitiesMultiDof(btScalar dt, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m)
btScalar getJointTorque(int i) const
const btQuaternion & getWorldToBaseRot() const
void setBaseMass(btScalar mass)
void stepPositions(btScalar dt)
int getParent(int link_num) const
const btVector3 & getBasePos() const
btVector3 localPosToWorld(int i, const btVector3 &vec) const
const btVector3 & getBaseForce() const
btAlignedObjectArray< btMultibodyLink > m_links
btScalar * getJointTorqueMultiDof(int i)
void setBasePos(const btVector3 &pos)
void useGlobalVelocities(bool use)
btMatrix3x3 m_cachedInertiaTopRight
btScalar * getJointPosMultiDof(int i)
void useRK4Integration(bool use)
void setBaseWorldTransform(const btTransform &tr)
const btScalar * getVelocityVector() const
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btScalar m_angularDamping
bool getUseGyroTerm() const
void stepVelocities(btScalar dt, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m)
btScalar getMaxCoordinateVelocity() const
btScalar getJointVel(int i) const
btScalar getKineticEnergy() const