From 3b2e46e7dd5693dc3389fa00626c888fc3c1128a Mon Sep 17 00:00:00 2001 From: erwin coumans Date: Sat, 24 Apr 2021 23:52:53 -0700 Subject: [PATCH] PyBullet: try to address activation/deactivation issue with fixed base multibody with links. --- src/BulletCollision/CollisionDispatch/btCollisionObject.h | 3 ++- src/BulletDynamics/Featherstone/btMultiBody.h | 5 ++++- src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/BulletCollision/CollisionDispatch/btCollisionObject.h b/src/BulletCollision/CollisionDispatch/btCollisionObject.h index e085c4089..dbe82fd61 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionObject.h +++ b/src/BulletCollision/CollisionDispatch/btCollisionObject.h @@ -24,6 +24,7 @@ subject to the following restrictions: #define WANTS_DEACTIVATION 3 #define DISABLE_DEACTIVATION 4 #define DISABLE_SIMULATION 5 +#define FIXED_BASE_MULTI_BODY 6 struct btBroadphaseProxy; class btCollisionShape; @@ -304,7 +305,7 @@ public: SIMD_FORCE_INLINE bool isActive() const { - return ((getActivationState() != ISLAND_SLEEPING) && (getActivationState() != DISABLE_SIMULATION)); + return ((getActivationState() != FIXED_BASE_MULTI_BODY) && (getActivationState() != ISLAND_SLEEPING) && (getActivationState() != DISABLE_SIMULATION)); } void setRestitution(btScalar rest) diff --git a/src/BulletDynamics/Featherstone/btMultiBody.h b/src/BulletDynamics/Featherstone/btMultiBody.h index b48b3d1a0..345970d26 100644 --- a/src/BulletDynamics/Featherstone/btMultiBody.h +++ b/src/BulletDynamics/Featherstone/btMultiBody.h @@ -545,7 +545,10 @@ public: { m_canWakeup = canWakeup; } - bool isAwake() const { return m_awake; } + bool isAwake() const + { + return m_awake; + } void wakeUp(); void goToSleep(); void checkMotionAndSleepIfRequired(btScalar timestep); diff --git a/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp b/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp index 9f304929c..e7af332eb 100644 --- a/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp +++ b/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp @@ -139,7 +139,7 @@ void btMultiBodyDynamicsWorld::updateActivationState(btScalar timeStep) { if (body->hasFixedBase()) { - col->setActivationState(ISLAND_SLEEPING); + col->setActivationState(FIXED_BASE_MULTI_BODY); } else { col->setActivationState(WANTS_DEACTIVATION);