RavEngine
Loading...
Searching...
No Matches
physx::Dy::FeatherstoneArticulation Class Reference
Collaboration diagram for physx::Dy::FeatherstoneArticulation:
[legend]

Public Member Functions

 FeatherstoneArticulation (void *)
 
void getDataSizes (PxU32 linkCount, PxU32 &solverDataSize, PxU32 &totalSize, PxU32 &scratchSize)
 
bool resize (const PxU32 linkCount)
 
void assignTendons (const PxU32, Dy::ArticulationSpatialTendon **)
 
void assignTendons (const PxU32, Dy::ArticulationFixedTendon **)
 
void assignSensors (const PxU32 nbSensors, Dy::ArticulationSensor **sensors, PxSpatialForce *sensorForces)
 
PxU32 getDofs ()
 
PxU32 getDof (const PxU32 linkID)
 
bool applyCache (PxArticulationCache &cache, const PxArticulationCacheFlags flag, bool &shouldWake)
 
void copyInternalStateToCache (PxArticulationCache &cache, const PxArticulationCacheFlags flag)
 
void packJointData (const PxReal *maximum, PxReal *reduced)
 
void unpackJointData (const PxReal *reduced, PxReal *maximum)
 
void initializeCommonData ()
 
void getGeneralizedGravityForce (const PxVec3 &gravity, PxArticulationCache &cache)
 
void getCoriolisAndCentrifugalForce (PxArticulationCache &cache)
 
void getGeneralizedExternalForce (PxArticulationCache &)
 
void getJointAcceleration (const PxVec3 &gravity, PxArticulationCache &cache)
 
void getJointForce (PxArticulationCache &cache)
 
void getDenseJacobian (PxArticulationCache &cache, PxU32 &nRows, PxU32 &nCols)
 
void getKMatrix (ArticulationJointCore *loopJoint, const PxU32 parentIndex, const PxU32 childIndex, PxArticulationCache &cache)
 
void getCoefficientMatrix (const PxReal dt, const PxU32 linkID, const PxContactJoint *contactJoints, const PxU32 nbContacts, PxArticulationCache &cache)
 
void getCoefficientMatrixWithLoopJoints (ArticulationLoopConstraint *lConstraints, const PxU32 nbJoints, PxArticulationCache &cache)
 
bool getLambda (ArticulationLoopConstraint *lConstraints, const PxU32 nbJoints, PxArticulationCache &cache, PxArticulationCache &rollBackCache, const PxReal *jointTorque, const PxVec3 &gravity, const PxU32 maxIter, const PxReal invLengthScale)
 
void getGeneralizedMassMatrix (PxArticulationCache &cache)
 
void getGeneralizedMassMatrixCRB (PxArticulationCache &cache)
 
bool storeStaticConstraint (const PxSolverConstraintDesc &desc)
 
bool willStoreStaticConstraint ()
 
void setRootLinearVelocity (const PxVec3 &velocity)
 
void setRootAngularVelocity (const PxVec3 &velocity)
 
void teleportRootLink ()
 
void getImpulseResponse (PxU32 linkID, Cm::SpatialVectorF *Z, const Cm::SpatialVector &impulse, Cm::SpatialVector &deltaV) const
 
void getImpulseResponse (PxU32 linkID, Cm::SpatialVectorV *, const Cm::SpatialVectorV &impulse, Cm::SpatialVectorV &deltaV) const
 
void getImpulseSelfResponse (PxU32 linkID0, PxU32 linkID1, Cm::SpatialVectorF *Z, const Cm::SpatialVector &impulse0, const Cm::SpatialVector &impulse1, Cm::SpatialVector &deltaV0, Cm::SpatialVector &deltaV1) const
 
Cm::SpatialVectorV getLinkVelocity (const PxU32 linkID) const
 
Cm::SpatialVector getLinkScalarVelocity (const PxU32 linkID) const
 
Cm::SpatialVectorV getLinkMotionVector (const PxU32 linkID) const
 
Cm::SpatialVector getMotionVelocity (const PxU32 linkID) const
 
Cm::SpatialVector getMotionAcceleration (const PxU32 linkID) const
 
void fillIndexType (const PxU32 linkId, PxU8 &indexType)
 
PxReal getLinkMaxPenBias (const PxU32 linkID) const
 
PxReal getCfm (const PxU32 linkID) const
 
void pxcFsApplyImpulse (PxU32 linkID, aos::Vec3V linear, aos::Vec3V angular, Cm::SpatialVectorF *Z, Cm::SpatialVectorF *deltaV)
 
void pxcFsApplyImpulses (PxU32 linkID, const aos::Vec3V &linear, const aos::Vec3V &angular, PxU32 linkID2, const aos::Vec3V &linear2, const aos::Vec3V &angular2, Cm::SpatialVectorF *Z, Cm::SpatialVectorF *deltaV)
 
void pxcFsApplyImpulses (Cm::SpatialVectorF *Z)
 
Cm::SpatialVectorV pxcFsGetVelocity (PxU32 linkID)
 
void pxcFsGetVelocities (PxU32 linkID, PxU32 linkID1, Cm::SpatialVectorV &v0, Cm::SpatialVectorV &v1)
 
Cm::SpatialVectorV pxcFsGetVelocityTGS (PxU32 linkID)
 
const PxTransform & getCurrentTransform (PxU32 linkID) const
 
const PxQuat & getDeltaQ (PxU32 linkID) const
 
void applyImpulses (Cm::SpatialVectorF *Z, Cm::SpatialVectorF *deltaV)
 
void getDeltaV (Cm::SpatialVectorF *Z, Cm::SpatialVectorF *deltaV)
 
bool applyCacheToDest (ArticulationData &data, PxArticulationCache &cache, PxReal *jVelocities, PxReal *jAcceleration, PxReal *jPosition, PxReal *jointForce, const PxArticulationCacheFlags flag, bool &shouldWake)
 
PX_FORCE_INLINE ArticulationData & getArticulationData ()
 
PX_FORCE_INLINE const ArticulationData & getArticulationData () const
 
PX_FORCE_INLINE void setGpuDirtyFlag (ArticulationDirtyFlag::Enum flag)
 
bool raiseGPUDirtyFlag (ArticulationDirtyFlag::Enum flag)
 
void clearGPUDirtyFlags ()
 
void constraintPrep (ArticulationLoopConstraint *lConstraints, const PxU32 nbJoints, Cm::SpatialVectorF *Z, PxSolverConstraintPrepDesc &prepDesc, PxSolverBody &sBody, PxSolverBodyData &sBodyData, PxSolverConstraintDesc *desc, PxConstraintAllocator &allocator)
 
void updateArticulation (ScratchData &scratchData, const PxVec3 &gravity, Cm::SpatialVectorF *Z, Cm::SpatialVectorF *DeltaV, const PxReal invLengthScale)
 
void computeUnconstrainedVelocitiesInternal (const PxVec3 &gravity, Cm::SpatialVectorF *Z, Cm::SpatialVectorF *DeltaV, const PxReal invLengthScale)
 
void copyJointData (ArticulationData &data, PxReal *toJointData, const PxReal *fromJointData)
 
PxU32 computeDofs ()
 
void jcalc (ArticulationData &data, bool forceUpdate=false)
 
void jcalcLoopJointSubspace (ArticulationJointCore *joint, ArticulationJointCoreData &jointDatum, SpatialSubspaceMatrix &T, const Cm::UnAlignedSpatialVector *jointAxis)
 
void computeSpatialInertia (ArticulationData &data)
 
void computeZ (const ArticulationData &data, const PxVec3 &gravity, ScratchData &scratchData)
 
void computeZD (const ArticulationData &data, const PxVec3 &gravity, ScratchData &scratchData)
 
void solveInternalConstraints (const PxReal dt, const PxReal invDt, Cm::SpatialVectorF *impulses, Cm::SpatialVectorF *DeltaV, bool velocityIteration, bool isTGS, const PxReal elapsedTime, const PxReal biasCoefficient)
 
void solveInternalJointConstraints (const PxReal dt, const PxReal invDt, Cm::SpatialVectorF *impulses, Cm::SpatialVectorF *DeltaV, bool velocityIteration, bool isTGS, const PxReal elapsedTime, const PxReal biasCoefficient)
 
Cm::SpatialVectorF solveInternalJointConstraintRecursive (InternalConstraintSolverData &data, const PxU32 linkID, const Cm::SpatialVectorF &parentDeltaV)
 
void solveInternalSpatialTendonConstraints (bool isTGS)
 
void solveInternalFixedTendonConstraints (bool isTGS)
 
void writebackInternalConstraints (bool isTGS)
 
void concludeInternalConstraints (bool isTGS)
 
void computeC (ArticulationData &data, ScratchData &scratchData)
 
void computeRelativeTransformC2P (ArticulationData &data)
 
void computeRelativeTransformC2B (ArticulationData &data)
 
void computeLinkVelocities (ArticulationData &data, ScratchData &scratchData)
 
void initLinks (ArticulationData &data, const PxVec3 &gravity, ScratchData &scratchData, Cm::SpatialVectorF *tZ, Cm::SpatialVectorF *tDeltaV)
 
void computeIs (ArticulationJointCoreData &jointDatum, ArticulationJointTargetData &jointTarget, const PxU32 linkID)
 
void computeArticulatedSpatialInertiaAndZ (ArticulationData &data, ScratchData &scratchData)
 
void computeArticulatedSpatialInertiaAndZ_NonSeparated (ArticulationData &data, ScratchData &scratchData)
 
void computeArticulatedSpatialInertia (ArticulationData &data)
 
void computeArticulatedResponseMatrix (ArticulationData &data)
 
void computeJointSpaceJacobians (ArticulationData &data)
 
void computeArticulatedSpatialZ (ArticulationData &data, ScratchData &scratchData)
 
void computeJointAccelerationW (ArticulationJointCoreData &jointDatum, const Cm::SpatialVectorF &pMotionAcceleration, PxReal *jointAcceleration, const Cm::SpatialVectorF *IsW, const PxU32 linkID, const PxReal *qstZIc)
 
void computeLinkAcceleration (ArticulationData &data, ScratchData &scratchData, bool doIC)
 
void computeLinkInternalAcceleration (ArticulationData &data, ScratchData &scratchData)
 
void computeJointTransmittedFrictionForce (ArticulationData &data, ScratchData &scratchData, Cm::SpatialVectorF *Z, Cm::SpatialVectorF *DeltaV)
 
void getImpulseSelfResponseInv (const bool fixBase, PxU32 linkID0, PxU32 linkID1, Cm::SpatialVectorF *Z, const Cm::SpatialVector &impulse0, const Cm::SpatialVector &impulse1, Cm::SpatialVector &deltaV0, Cm::SpatialVector &deltaV1, PxReal *jointVelocities)
 
void getImpulseResponseSlowInv (Dy::ArticulationLink *links, const ArticulationData &data, PxU32 linkID0_, const Cm::SpatialVector &impulse0, Cm::SpatialVector &deltaV0, PxU32 linkID1_, const Cm::SpatialVector &impulse1, Cm::SpatialVector &deltaV1, PxReal *jointVelocities, Cm::SpatialVectorF *Z)
 
Cm::SpatialVectorF getImpulseResponseInv (const bool fixBase, const PxU32 linkID, Cm::SpatialVectorF *Z, const Cm::SpatialVector &impulse, PxReal *jointVelocites)
 
void inverseDynamic (ArticulationData &data, const PxVec3 &gravity, ScratchData &scratchData, bool computeCoriolis)
 
void inverseDynamicFloatingBase (ArticulationData &data, const PxVec3 &gravity, ScratchData &scratchData, bool computeCoriolis)
 
void computeZAForceInv (ArticulationData &data, ScratchData &scratchData)
 
void initCompositeSpatialInertia (ArticulationData &data, Dy::SpatialMatrix *compositeSpatialInertia)
 
void computeCompositeSpatialInertiaAndZAForceInv (ArticulationData &data, ScratchData &scratchData)
 
void computeRelativeGeneralizedForceInv (ArticulationData &data, ScratchData &scratchData)
 
void computeLinkAccelerationInv (ArticulationData &data, ScratchData &scratchData)
 
void computeGeneralizedForceInv (ArticulationData &data, ScratchData &scratchData)
 
void calculateMassMatrixColInv (ScratchData &scratchData)
 
void calculateHFixBase (PxArticulationCache &cache)
 
void calculateHFloatingBase (PxArticulationCache &cache)
 
void enforcePrismaticLimits (PxReal &jPosition, ArticulationJointCore *joint)
 
PX_FORCE_INLINE void addBody ()
 
PX_FORCE_INLINE void removeBody ()
 
PX_FORCE_INLINE bool updateSolverData ()
 
PX_FORCE_INLINE PxU32 getMaxDepth () const
 
PX_FORCE_INLINE void setMaxDepth (const PxU32 depth)
 
PX_FORCE_INLINE PxU32 getBodyCount () const
 
PX_FORCE_INLINE void getSolverDesc (ArticulationSolverDesc &d) const
 
PX_FORCE_INLINE ArticulationSolverDesc & getSolverDesc ()
 
PX_FORCE_INLINE ArticulationCore * getCore ()
 
PX_FORCE_INLINE PxU16 getIterationCounts () const
 
PX_FORCE_INLINE void * getUserData () const
 
PX_FORCE_INLINE void setDyContext (Dy::Context *context)
 
void setupLinks (PxU32 nbLinks, Dy::ArticulationLink *links)
 
void allocatePathToRootElements (const PxU32 totalPathToRootElements)
 
void initPathToRoot ()
 
PxU32 setupSolverConstraints (ArticulationLink *links, const PxU32 linkCount, const bool fixBase, ArticulationData &data, Cm::SpatialVectorF *Z, PxU32 &acCount)
 
void setupInternalConstraints (ArticulationLink *links, const PxU32 linkCount, const bool fixBase, ArticulationData &data, Cm::SpatialVectorF *Z, PxReal stepDt, PxReal dt, PxReal invDt, PxReal erp, bool isTGSSolver)
 
void setupInternalConstraintsRecursive (ArticulationLink *links, const PxU32 linkCount, const bool fixBase, ArticulationData &data, Cm::SpatialVectorF *Z, const PxReal stepDt, const PxReal dt, const PxReal invDt, const PxReal erp, const bool isTGSSolver, const PxU32 linkID, const PxReal maxForceScale)
 
void setupInternalSpatialTendonConstraintsRecursive (ArticulationLink *links, ArticulationAttachment *attachments, const PxU32 attachmentCount, const PxVec3 &parentAttachmentPoint, const bool fixBase, ArticulationData &data, Cm::SpatialVectorF *Z, const PxReal stepDt, const bool isTGSSolver, const PxU32 attachmentID, const PxReal stiffness, const PxReal damping, const PxReal limitStiffness, const PxReal err, const PxU32 startLink, const PxVec3 &startAxis, const PxVec3 &startRaXn)
 
void setupInternalFixedTendonConstraintsRecursive (ArticulationLink *links, ArticulationTendonJoint *tendonJoints, const bool fixBase, ArticulationData &data, Cm::SpatialVectorF *Z, const PxReal stepDt, const bool isTGSSolver, const PxU32 tendonJointID, const PxReal stiffness, const PxReal damping, const PxReal limitStiffness, const PxU32 startLink, const PxVec3 &startAxis, const PxVec3 &startRaXn)
 
void updateSpatialTendonConstraintsRecursive (ArticulationAttachment *attachments, ArticulationData &data, const PxU32 attachmentID, const PxReal accumErr, const PxVec3 &parentAttachmentPoint)
 
PxVec3 calculateFixedTendonVelocityAndPositionRecursive (FixedTendonSolveData &solveData, const Cm::SpatialVectorF &parentV, const Cm::SpatialVectorF &parentDeltaV, const PxU32 tendonJointID)
 
Cm::SpatialVectorF solveFixedTendonConstraintsRecursive (FixedTendonSolveData &solveData, const PxU32 tendonJointID)
 
void prepareStaticConstraints (const PxReal dt, const PxReal invDt, PxsContactManagerOutputIterator &outputs, Dy::ThreadContext &threadContext, PxReal correlationDist, PxReal bounceThreshold, PxReal frictionOffsetThreshold, PxReal ccdMaxSeparation, PxSolverBodyData *solverBodyData, PxsConstraintBlockManager &blockManager, Dy::ConstraintWriteback *constraintWritebackPool)
 
void prepareStaticConstraintsTGS (const PxReal stepDt, const PxReal totalDt, const PxReal invStepDt, const PxReal invTotalDt, PxsContactManagerOutputIterator &outputs, Dy::ThreadContext &threadContext, PxReal correlationDist, PxReal bounceThreshold, PxReal frictionOffsetThreshold, PxTGSSolverBodyData *solverBodyData, PxTGSSolverBodyTxInertia *txInertia, PxsConstraintBlockManager &blockManager, Dy::ConstraintWriteback *constraintWritebackPool, const PxReal biasCoefficient, const PxReal lengthScale)
 
void propagateLinksDown (ArticulationData &data, PxReal *jointVelocities, PxReal *jointPositions, Cm::SpatialVectorF *motionVelocities)
 
void updateJointProperties (PxReal *jointNewVelocities, PxReal *jointVelocities, PxReal *jointAccelerations)
 
void recomputeAccelerations (const PxReal dt)
 
Cm::SpatialVector recomputeAcceleration (const PxU32 linkID, const PxReal dt) const
 
void computeAndEnforceJointPositions (ArticulationData &data)
 
void teleportLinks (ArticulationData &data)
 
void computeLinkVelocities (ArticulationData &data)
 
PxU8 * allocateScratchSpatialData (PxcScratchAllocator *allocator, const PxU32 linkCount, ScratchData &scratchData, bool fallBackToHeap=false)
 
PxTransform propagateTransform (const PxU32 linkID, ArticulationLink *links, ArticulationJointCoreData &jointDatum, Cm::SpatialVectorF *motionVelocities, const PxReal dt, const PxTransform &pBody2World, const PxTransform &currentTransform, PxReal *jointVelocity, PxReal *jointPosition, const Cm::UnAlignedSpatialVector *motionMatrix, const Cm::UnAlignedSpatialVector *worldMotionMatrix)
 

Static Public Member Functions

static PxU32 computeUnconstrainedVelocities (const ArticulationSolverDesc &desc, PxReal dt, PxU32 &acCount, const PxVec3 &gravity, Cm::SpatialVectorF *Z, Cm::SpatialVectorF *deltaV, const PxReal invLengthScale)
 
static void computeUnconstrainedVelocitiesTGS (const ArticulationSolverDesc &desc, PxReal dt, const PxVec3 &gravity, PxU64 contextID, Cm::SpatialVectorF *Z, Cm::SpatialVectorF *deltaV, const PxReal invLengthScale)
 
static PxU32 setupSolverConstraintsTGS (const ArticulationSolverDesc &articDesc, PxReal dt, PxReal invDt, PxReal totalDt, const PxReal biasCoefficient, PxU32 &acCount, Cm::SpatialVectorF *Z)
 
static void saveVelocity (const ArticulationSolverDesc &d, Cm::SpatialVectorF *deltaV)
 
static void saveVelocityTGS (const ArticulationSolverDesc &d, PxReal invDtF32)
 
static void updateBodies (const ArticulationSolverDesc &desc, Cm::SpatialVectorF *tempDeltaV, PxReal dt)
 
static void updateBodiesTGS (const ArticulationSolverDesc &desc, Cm::SpatialVectorF *tempDeltaV, PxReal dt)
 
static void updateBodies (FeatherstoneArticulation *articulation, Cm::SpatialVectorF *tempDeltaV, PxReal dt, bool integrateJointPosition)
 
static void recordDeltaMotion (const ArticulationSolverDesc &desc, const PxReal dt, Cm::SpatialVectorF *deltaV, const PxReal totalInvDt)
 
static void deltaMotionToMotionVelocity (const ArticulationSolverDesc &desc, PxReal invDt)
 
static Cm::SpatialVectorF propagateVelocityW (const PxVec3 &c2p, const Dy::SpatialMatrix &spatialInertia, const InvStIs &invStIs, const Cm::UnAlignedSpatialVector *motionMatrix, const Cm::SpatialVectorF &Z, PxReal *jointVelocity, const Cm::SpatialVectorF &hDeltaV, const PxU32 dofCount)
 
static Cm::SpatialVectorF propagateAccelerationW (const PxVec3 &c2p, const InvStIs &invStIs, const Cm::UnAlignedSpatialVector *motionMatrix, PxReal *jointVelocity, const Cm::SpatialVectorF &pAcceleration, const PxU32 dofCount, const Cm::SpatialVectorF *IsW, PxReal *qstZIc)
 
static void propagateAccelerationW (const PxVec3 &c2p, const InvStIs &invStIs, PxReal *jointVelocity, const Cm::SpatialVectorF &pAcceleration, const PxU32 dofCount, const Cm::SpatialVectorF *IsW)
 
static Cm::SpatialVectorF propagateAccelerationW (const PxVec3 &c2p, const InvStIs &invStIs, const Cm::UnAlignedSpatialVector *motionMatrix, const Cm::SpatialVectorF &pAcceleration, const PxU32 dofCount, const Cm::SpatialVectorF *IsW, PxReal *qstZIc)
 
static Cm::SpatialVectorF propagateAccelerationW (const PxVec3 &c2p, const InvStIs &invStIs, const Cm::UnAlignedSpatialVector *motionMatrix, PxReal *jointVelocity, const Cm::SpatialVectorF &pAcceleration, Cm::SpatialVectorF &Z, const PxU32 dofCount, const Cm::SpatialVectorF *IsW)
 
static Cm::SpatialVectorF propagateVelocityTestImpulseW (const PxVec3 &c2p, const Dy::SpatialMatrix &spatialInertia, const InvStIs &invStIs, const Cm::UnAlignedSpatialVector *motionMatrix, const Cm::SpatialVectorF &Z, const Cm::SpatialVectorF &hDeltaV, const PxU32 dofCount)
 
static Cm::SpatialVectorF propagateImpulseW (const Cm::SpatialVectorF *isInvD, const PxVec3 &childToParent, const Cm::UnAlignedSpatialVector *motionMatrix, const Cm::SpatialVectorF &Z, const PxU32 dofCount)
 
static Cm::SpatialVectorF propagateImpulseW (const Cm::SpatialVectorF *isInvD, const PxVec3 &childToParent, const Cm::UnAlignedSpatialVector *motionMatrix, const Cm::SpatialVectorF &Z, const PxU32 dofCount, PxReal *qstZ)
 
static PX_CUDA_CALLABLE PX_FORCE_INLINE Cm::SpatialVectorF translateSpatialVector (const PxVec3 &offset, const Cm::SpatialVectorF &vec)
 
static PX_CUDA_CALLABLE PX_FORCE_INLINE Cm::UnAlignedSpatialVector translateSpatialVector (const PxVec3 &offset, const Cm::UnAlignedSpatialVector &vec)
 
static PX_FORCE_INLINE PxMat33 constructSkewSymmetricMatrix (const PxVec3 r)
 
static void computeLinkStates (const PxF32 dt, const PxReal invLengthScale, const PxVec3 &gravity, const bool fixBase, const PxU32 linkCount, const PxTransform *accumulatedPoses, const Cm::SpatialVector *externalAccels, const PxVec3 *rws, const Cm::UnAlignedSpatialVector *worldMotionMatrices, const Dy::ArticulationJointCoreData *jointCoreData, Dy::ArticulationLinkData *linkData, Dy::ArticulationLink *links, Cm::SpatialVectorF *motionAccelerations, Cm::SpatialVectorF *motionVelocities, Cm::SpatialVectorF *spatialZAForces, Cm::SpatialVectorF *spatialZAInternal, Cm::SpatialVectorF *coriolisVectors, PxMat33 *worldIsolatedSpatialArticulatedInertias, PxF32 *linkMasses, Dy::SpatialMatrix *worldSpatialArticulatedInertias, const PxU32 jointDofCount, PxReal *jointVelocities, Cm::SpatialVectorF &rootPreMotionVelocity, PxVec3 &com, PxF32 &invSumMass)
 
static SpatialMatrix computePropagateSpatialInertia_ZA_ZIc (const PxU8 jointType, const ArticulationJointTargetData &jointTarget, const ArticulationJointCoreData &jointDatum, const SpatialMatrix &articulatedInertia, const Cm::SpatialVectorF *linkIs, InvStIs &invStIs, Cm::SpatialVectorF *isInvD, const Cm::UnAlignedSpatialVector *motionMatrix, const PxReal *jF, const Cm::SpatialVectorF &Z, const Cm::SpatialVectorF &ZIntIc, Cm::SpatialVectorF &ZA, Cm::SpatialVectorF &ZInt, PxReal *qstZ, PxReal *qstZIntIc)
 
static SpatialMatrix computePropagateSpatialInertia_ZA_ZIc_NonSeparated (const PxU8 jointType, const ArticulationJointTargetData &jointTarget, const ArticulationJointCoreData &jointDatum, const SpatialMatrix &articulatedInertia, const Cm::SpatialVectorF *linkIs, InvStIs &invStIs, Cm::SpatialVectorF *isInvD, const Cm::UnAlignedSpatialVector *motionMatrix, const PxReal *jF, const Cm::SpatialVectorF &Z, Cm::SpatialVectorF &ZA, PxReal *qstZIc)
 
static SpatialMatrix computePropagateSpatialInertia (const PxU8 jointType, ArticulationJointCoreData &jointDatum, const SpatialMatrix &articulatedInertia, const Cm::SpatialVectorF *linkIs, InvStIs &invStIs, Cm::SpatialVectorF *isInvD, const Cm::UnAlignedSpatialVector *motionMatrix)
 
static void transformInertia (const SpatialTransform &sTod, SpatialMatrix &inertia)
 
static void translateInertia (const PxMat33 &offset, SpatialMatrix &inertia)
 
static PxMat33 translateInertia (const PxMat33 &inertia, const PxReal mass, const PxVec3 &t)
 
static Cm::SpatialVectorF getDeltaVWithDeltaJV (const bool fixBase, const PxU32 linkID, const ArticulationData &data, Cm::SpatialVectorF *Z, PxReal *jointVelocities)
 
static Cm::SpatialVectorF getDeltaV (const bool fixBase, const PxU32 linkID, const ArticulationData &data, Cm::SpatialVectorF *Z)
 
static void getZ (const PxU32 linkID, const ArticulationData &data, Cm::SpatialVectorF *Z, const Cm::SpatialVectorF &impulse)
 
static Cm::SpatialVectorF getImpulseResponseW (const PxU32 linkID, const ArticulationData &data, const Cm::SpatialVectorF &impulse)
 
static Cm::SpatialVectorF getImpulseResponseWithJ (const PxU32 linkID, const bool fixBase, const ArticulationData &data, Cm::SpatialVectorF *Z, const Cm::SpatialVectorF &impulse, PxReal *jointVelocities)
 
static void getImpulseSelfResponse (ArticulationLink *links, Cm::SpatialVectorF *Z, ArticulationData &data, PxU32 linkID0, const Cm::SpatialVectorV &impulse0, Cm::SpatialVectorV &deltaV0, PxU32 linkID1, const Cm::SpatialVectorV &impulse1, Cm::SpatialVectorV &deltaV1)
 
static void getImpulseResponseSlow (Dy::ArticulationLink *links, ArticulationData &data, PxU32 linkID0_, const Cm::SpatialVector &impulse0, Cm::SpatialVector &deltaV0, PxU32 linkID1_, const Cm::SpatialVector &impulse1, Cm::SpatialVector &deltaV1, Cm::SpatialVectorF *Z)
 
static void updateRootBody (const Cm::SpatialVectorF &motionVelocity, const PxTransform &preTransform, ArticulationData &data, const PxReal dt)
 

Public Attributes

PxU16 maxSolverFrictionProgress
 
PxU16 maxSolverNormalProgress
 
PxU32 solverProgress
 
PxU16 mArticulationIndex
 
PxU8 numTotalConstraints
 
void * mUserData
 
Dy::Context * mContext
 
ArticulationSolverDesc mSolverDesc
 
PxArray< Cm::SpatialVector > mAcceleration
 
bool mUpdateSolverData
 
PxU32 mMaxDepth
 
ArticulationData mArticulationData
 
PxArray< PxSolverConstraintDesc > mStaticContactConstraints
 
PxArray< PxSolverConstraintDesc > mStatic1DConstraints
 
PxU32 mGPUDirtyFlags
 

Member Function Documentation

◆ computeLinkStates()

void physx::Dy::FeatherstoneArticulation::computeLinkStates ( const PxF32  dt,
const PxReal  invLengthScale,
const PxVec3 &  gravity,
const bool  fixBase,
const PxU32  linkCount,
const PxTransform *  accumulatedPoses,
const Cm::SpatialVector *  externalAccels,
const PxVec3 *  rws,
const Cm::UnAlignedSpatialVector *  worldMotionMatrices,
const Dy::ArticulationJointCoreData *  jointCoreData,
Dy::ArticulationLinkData *  linkData,
Dy::ArticulationLink *  links,
Cm::SpatialVectorF *  motionAccelerations,
Cm::SpatialVectorF *  motionVelocities,
Cm::SpatialVectorF *  spatialZAForces,
Cm::SpatialVectorF *  spatialZAInternal,
Cm::SpatialVectorF *  coriolisVectors,
PxMat33 *  worldIsolatedSpatialArticulatedInertias,
PxF32 *  linkMasses,
Dy::SpatialMatrix *  worldSpatialArticulatedInertias,
const PxU32  jointDofCount,
PxReal *  jointVelocities,
Cm::SpatialVectorF &  rootPreMotionVelocity,
PxVec3 &  com,
PxF32 &  invSumMass 
)
static

/brief Prepare links for the next timestep.

Parameters
[in]dtis the timestep of the current simulation step that will advance sim from t to t+dt.
[in]invLengthScaleis the reciprocal of the lengthscale used by the simulation.
[in]gravityis the gravitational acceleration to apply to all links.
[in]fixBasedetermines whether the root link is to be fixed to the world (true) or will move freely (false).
[in]linkCountis the total number of links in the articulation
[in]accumulatedPosesis the pose of each link, specified in the world frame.
[in]externalAccelsis the external acceleration to apply to each link, specified in the world frame.
[in]rwsis the vector from each parent link to each child link, specified in the world frame.
[in]worldMotionMatricesis the motion matrix of each link, specified in the world frame.
[in]jointCoreDatais the ArticulationJointCoreData instance of each link in the articulation.
[in,out]linkDatais the ArticulationLinkData instance of each link in the articulation.
[in,out]linksis the ArticulationLink instance of each link in the articulation.
[in,out]motionAccelerationsis the acceleration of each link, specified in the world frame.
[out]motionVelocitiesis velocity of each link computed from the parent link velocity and joint velocity of the inbound joint. Specified in the world frame.
[out]spatialZAForcesis the computed spatial zero acceleration force of each link, accounting for only external forces applied to the links. Specified in the world frame.
[out]spatialZAInternalis the computed spatial zero acceleration force of each link, accounting for only internal forces applied to the links. Specified in the world frame.
[out]coriolisVectorsis the computed coriolis vector of each link. Specified in the world frame.
[out]worldIsolatedSpatialArticulatedInertiasis the inertia tensor (I) for the trivial sub-chain of each link. Specified in the world frame.
[out]linkMassesis the mass of each link.
[out]worldSpatialArticulatedInertiasis the spatial matrix containing the inertia tensor I and the mass matrix M for the trivial sub-chain of each link. Specified in the world frame.
[out]jointDofCountis the number of degrees of freedom for the entire articulation.
[in,out]jointVelocitiesis the velocity of each degree of freedom.
[out]rootPreMotionVelocityis assigned the spatial velocity of the root link.
[out]comis the centre of mass of the assembly of links, specified in the world frame.
[out]invSumMassis the reciprocal of the total mass of all links.
Note
invLengthScale should have value 1/100 for centimetres scale and 1/1 for metres scale.
If fixBase is true, the root link is assigned zero velocity. If false, the root link inherits the velocity of the associated body core.
If fixBase is true, the root link is assigned zero acceleration. If false, the acceleration is propagated from the previous simulation step. The acceleration of all other links is left unchanged.
If fix base is true, the root link is assigned a zero coriolis vector.
ArticulationLinkData::maxPenBias of each link inherits the value of the associated PxsBodyCore::maxPenBias.
ArticulationLink::cfm of each link is assigned the value PxsBodyCore::cfmScale*invLengthScale, except for the root link. The root link is assigned a value of 0 if it is fixed to the world ie fixBase == true.
The spatial zero acceleration force accounts for the external acceleration; the damping force arising from the velocity and from the velocity that will accumulate from the external acceleration; the scaling force that will bring velocity back to the maximum allowed velocity if velocity exceeds the maximum allowed.
If the velocity of any degree of freedom exceeds the maximum velocity of the associated joint, the velocity of each degree of freedom will be scaled so that none exceeds the maximum.

◆ setupInternalFixedTendonConstraintsRecursive()

void physx::Dy::FeatherstoneArticulation::setupInternalFixedTendonConstraintsRecursive ( ArticulationLink *  links,
ArticulationTendonJoint *  tendonJoints,
const bool  fixBase,
ArticulationData &  data,
Cm::SpatialVectorF *  Z,
const PxReal  stepDt,
const bool  isTGSSolver,
const PxU32  tendonJointID,
const PxReal  stiffness,
const PxReal  damping,
const PxReal  limitStiffness,
const PxU32  startLink,
const PxVec3 &  startAxis,
const PxVec3 &  startRaXn 
)

*PxReal jointPose = jointPositions[jointDatum.jointOffset + dofIndex] * tendonJoint.coefficient;

◆ solveInternalSpatialTendonConstraints()

void physx::Dy::FeatherstoneArticulation::solveInternalSpatialTendonConstraints ( bool  isTGS)

constraint.recipResponse


The documentation for this class was generated from the following files: