36#ifdef BT_USE_DOUBLE_PRECISION
37 #define btMultiBodyData btMultiBodyDoubleData
38 #define btMultiBodyDataName "btMultiBodyDoubleData"
39 #define btMultiBodyLinkData btMultiBodyLinkDoubleData
40 #define btMultiBodyLinkDataName "btMultiBodyLinkDoubleData"
42 #define btMultiBodyData btMultiBodyFloatData
43 #define btMultiBodyDataName "btMultiBodyFloatData"
44 #define btMultiBodyLinkData btMultiBodyLinkFloatData
45 #define btMultiBodyLinkDataName "btMultiBodyLinkFloatData"
66 bool canSleep,
bool deprecatedMultiDof=
true);
77 const btVector3 &parentComToThisPivotOffset,
78 const btVector3 &thisPivotToThisComOffset,
bool deprecatedDisableParentCollision=
true);
87 const btVector3 &parentComToThisPivotOffset,
88 const btVector3 &thisPivotToThisComOffset,
89 bool disableParentCollision);
97 const btVector3 &parentComToThisPivotOffset,
98 const btVector3 &thisPivotToThisComOffset,
99 bool disableParentCollision=
false);
106 const btVector3 &parentComToThisPivotOffset,
107 const btVector3 &thisPivotToThisComOffset,
108 bool disableParentCollision=
false);
116 const btVector3 &parentComToThisComOffset,
117 bool disableParentCollision=
false);
147 return getLink(index).m_collider;
157 int getParent(
int link_num)
const;
170 const btVector3 & getLinkInertia(
int i)
const;
241 btScalar * getJointVelMultiDof(
int i);
242 btScalar * getJointPosMultiDof(
int i);
244 const btScalar * getJointVelMultiDof(
int i)
const ;
245 const btScalar * getJointPosMultiDof(
int i)
const ;
247 void setJointPos(
int i,
btScalar q);
248 void setJointVel(
int i,
btScalar qdot);
249 void setJointPosMultiDof(
int i,
btScalar *q);
250 void setJointVelMultiDof(
int i,
btScalar *qdot);
273 const btVector3 & getRVector(
int i)
const;
303 void clearForcesAndTorques();
304 void clearConstraintForces();
306 void clearVelocities();
313 void addLinkForce(
int i,
const btVector3 &f);
314 void addLinkTorque(
int i,
const btVector3 &t);
321 void addLinkConstraintForce(
int i,
const btVector3 &f);
322 void addLinkConstraintTorque(
int i,
const btVector3 &t);
325void addJointTorque(
int i,
btScalar Q);
326 void addJointTorqueMultiDof(
int i,
int dof,
btScalar Q);
327 void addJointTorqueMultiDof(
int i,
const btScalar *Q);
331 const btVector3 & getLinkForce(
int i)
const;
332 const btVector3 & getLinkTorque(
int i)
const;
333 btScalar getJointTorque(
int i)
const;
334 btScalar * getJointTorqueMultiDof(
int i);
355 void computeAccelerationsArticulatedBodyAlgorithmMultiDof(
btScalar dt,
359 bool isConstraintPass=
false
367 bool isConstraintPass=
false)
385 for (
int dof = 0; dof < 6 +
getNumDofs(); ++dof)
387 m_deltaV[dof] += delta_vee[dof] * multiplier;
394 for (
int dof = 0; dof < 6 +
getNumDofs(); ++dof)
418 for (
int dof = 0; dof < 6 +
getNumDofs(); ++dof)
420 m_realBuf[dof] += delta_vee[dof] * multiplier;
449 void fillConstraintJacobianMultiDof(
int link,
475 void checkMotionAndSleepIfRequired(
btScalar timestep);
549 void finalizeMultiDof();
633 int dofOffset = 0, cfgOffset = 0;
634 for(
int bidx = 0; bidx <
m_links.size(); ++bidx)
636 m_links[bidx].m_dofOffset = dofOffset;
m_links[bidx].m_cfgOffset = cfgOffset;
637 dofOffset +=
m_links[bidx].m_dofCount; cfgOffset +=
m_links[bidx].m_posVarCount;
void btClamp(T &a, const T &lb, const T &ub)
btQuaternion inverse(const btQuaternion &q)
Return the inverse of a quaternion.
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define ATTRIBUTE_ALIGNED16(a)
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
virtual int calculateSerializeBufferSize() const
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
btScalar m_maxCoordinateVelocity
void useRK4Integration(bool use)
void setMaxCoordinateVelocity(btScalar maxVel)
void setupPrismatic(int i, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &jointAxis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool disableParentCollision)
void computeAccelerationsArticulatedBodyAlgorithmMultiDof(btScalar dt, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m, bool isConstraintPass=false)
void setMaxAppliedImpulse(btScalar maxImp)
btAlignedObjectArray< btMultibodyLink > m_links
btAlignedObjectArray< btMatrix3x3 > m_matrixBuf
btMultiBodyLinkCollider * m_baseCollider
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 getUseGyroTerm() const
const btVector3 & getBasePos() const
void setCanSleep(bool canSleep)
void setUseGyroTerm(bool useGyro)
int getCompanionId() const
btScalar getAngularDamping() const
int getUserIndex2() const
btAlignedObjectArray< btVector3 > m_vectorBuf
void addBaseConstraintForce(const btVector3 &f)
btScalar m_maxAppliedImpulse
void setBaseMass(btScalar mass)
void setBaseInertia(const btVector3 &inertia)
btScalar m_angularDamping
void setHasSelfCollision(bool hasSelfCollision)
void setupSpherical(int linkIndex, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool disableParentCollision=false)
void * m_userObjectPointer
void setLinearDamping(btScalar damp)
bool hasSelfCollision() const
void setUserIndex2(int index)
void setBaseVel(const btVector3 &vel)
btMatrix3x3 m_cachedInertiaLowerRight
void setBaseOmega(const btVector3 &omega)
void addBaseTorque(const btVector3 &t)
void useGlobalVelocities(bool use)
btMultiBodyLinkCollider * getLinkCollider(int index)
void setupFixed(int linkIndex, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool deprecatedDisableParentCollision=true)
BT_DECLARE_ALIGNED_ALLOCATOR()
btAlignedObjectArray< btScalar > m_realBuf
btVector3 m_baseConstraintTorque
void operator=(const btMultiBody &)
void setBaseName(const char *name)
memory of setBaseName needs to be manager by user
const btMultibodyLink & getLink(int index) const
btVector3 getBaseOmega() const
void solveImatrix(const btVector3 &rhs_top, const btVector3 &rhs_bot, btScalar result[6]) const
void stepVelocitiesMultiDof(btScalar dt, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m, bool isConstraintPass=false)
stepVelocitiesMultiDof is deprecated, use computeAccelerationsArticulatedBodyAlgorithmMultiDof instea...
void setBasePos(const btVector3 &pos)
const btVector3 & getBaseTorque() const
bool m_useGlobalVelocities
bool isUsingGlobalVelocities() const
btMatrix3x3 m_cachedInertiaLowerLeft
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)
void * getUserPointer() const
users can point to their objects, userPointer is not used by Bullet
void setAngularDamping(btScalar damp)
const char * getBaseName() const
bool hasFixedBase() const
const btVector3 & getBaseForce() const
void setUserPointer(void *userPointer)
users can point to their objects, userPointer is not used by Bullet
void processDeltaVeeMultiDof2()
void setPosUpdated(bool updated)
btScalar getMaxAppliedImpulse() const
btMatrix3x3 m_cachedInertiaTopLeft
bool isUsingRK4Integration() const
bool m_cachedInertiaValid
const btMultiBodyLinkCollider * getBaseCollider() const
void setupPlanar(int i, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &rotationAxis, const btVector3 &parentComToThisComOffset, bool disableParentCollision=false)
bool internalNeedsJointFeedback() const
void setNumLinks(int numLinks)
void fillConstraintJacobianMultiDof(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
btTransform getBaseWorldTransform() const
btScalar getLinearDamping() const
btMatrix3x3 m_cachedInertiaTopRight
btScalar getBaseMass() const
btScalar getMaxCoordinateVelocity() const
btAlignedObjectArray< btScalar > m_deltaV
int getNumPosVars() const
void updateLinksDofOffsets()
void addBaseConstraintTorque(const btVector3 &t)
bool isPosUpdated() const
bool m_internalNeedsJointFeedback
the m_needsJointFeedback gets updated/computed during the stepVelocitiesMultiDof and it for internal ...
const btVector3 & getBaseInertia() const
const btQuaternion & getWorldToBaseRot() const
btVector3 m_baseConstraintForce
void setWorldToBaseRot(const btQuaternion &rot)
void setCompanionId(int id)
btMultiBody(const btMultiBody &)
btMultibodyLink & getLink(int index)
btMultiBodyLinkCollider * getBaseCollider()
void applyDeltaVeeMultiDof(const btScalar *delta_vee, btScalar multiplier)
const btVector3 getBaseVel() const
void addBaseForce(const btVector3 &f)
void applyDeltaVeeMultiDof2(const btScalar *delta_vee, btScalar multiplier)
btMultiBody(int n_links, btScalar mass, const btVector3 &inertia, bool fixedBase, bool canSleep, bool deprecatedMultiDof=true)
void setUserIndex(int index)
users can point to their objects, userPointer is not used by Bullet
const btScalar * getVelocityVector() const
void setBaseCollider(btMultiBodyLinkCollider *collider)
void setBaseWorldTransform(const btTransform &tr)
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
btQuaternion inverse() const
Return the inverse of this quaternion.
btVector3 can be used to represent 3D points and vectors.
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
btTransformDoubleData m_baseWorldTransform
btVector3DoubleData m_baseInertia
btCollisionObjectDoubleData * m_baseCollider
btMultiBodyLinkDoubleData * m_links
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
btCollisionObjectFloatData * m_baseCollider
btVector3FloatData m_baseInertia
btMultiBodyLinkFloatData * m_links
btTransformFloatData m_baseWorldTransform
btQuaternionDoubleData m_zeroRotParentToThis
btCollisionObjectDoubleData * m_linkCollider
btVector3DoubleData m_jointAxisBottom[6]
btVector3DoubleData m_thisPivotToThisComOffset
btVector3DoubleData m_parentComToThisComOffset
btVector3DoubleData m_jointAxisTop[6]
double m_jointMaxVelocity
btVector3DoubleData m_linkInertia
btCollisionObjectFloatData * m_linkCollider
btQuaternionFloatData m_zeroRotParentToThis
btVector3FloatData m_jointAxisBottom[6]
btVector3FloatData m_linkInertia
btVector3FloatData m_thisPivotToThisComOffset
btVector3FloatData m_jointAxisTop[6]
btVector3FloatData m_parentComToThisComOffset
These spatial algebra classes are used for btMultiBody, see BulletDynamics/Featherstone.