mirror of
https://github.com/bulletphysics/bullet3.git
synced 2026-08-26 21:18:27 +00:00
clean up the damping codes
This commit is contained in:
@@ -27,7 +27,7 @@
|
||||
#include "../Utils/b3ResourcePath.h"
|
||||
|
||||
static btScalar damping_alpha = 0.0;
|
||||
static btScalar damping_beta = 0.0;
|
||||
static btScalar damping_beta = 0.001;
|
||||
static int start_mode = 6;
|
||||
static int num_modes = 1;
|
||||
|
||||
@@ -114,6 +114,12 @@ public:
|
||||
myfile << sim_time << "\t" << total_angular[0] << "\t" << total_angular[1] << "\t" << total_angular[2] << "\n";
|
||||
myfile.close();
|
||||
}
|
||||
|
||||
{
|
||||
std::ofstream myfile("reduced_velocity.txt", std::ios_base::app);
|
||||
myfile << sim_time << "\t" << rsb->m_reducedVelocity[0] << "\t" << rsb->m_reducedDofs[0] << "\n";
|
||||
myfile.close();
|
||||
}
|
||||
}
|
||||
|
||||
void stepSimulation(float deltaTime)
|
||||
@@ -187,7 +193,7 @@ void ConservationTest::initPhysics()
|
||||
|
||||
// create volumetric reduced deformable body
|
||||
{
|
||||
btReducedSoftBody* rsb = btReducedSoftBodyHelpers::createReducedBeam(getDeformableDynamicsWorld()->getWorldInfo(), start_mode, num_modes);
|
||||
btReducedSoftBody* rsb = btReducedSoftBodyHelpers::createReducedCube(getDeformableDynamicsWorld()->getWorldInfo(), start_mode, num_modes);
|
||||
|
||||
getDeformableDynamicsWorld()->addSoftBody(rsb);
|
||||
rsb->getCollisionShape()->setMargin(0.1);
|
||||
@@ -211,7 +217,7 @@ void ConservationTest::initPhysics()
|
||||
|
||||
// rsb->setVelocity(btVector3(0, -COLLIDING_VELOCITY, 0));
|
||||
// rsb->setRigidVelocity(btVector3(0, 1, 0));
|
||||
rsb->setRigidAngularVelocity(btVector3(1, 0, 0));
|
||||
// rsb->setRigidAngularVelocity(btVector3(1, 0, 0));
|
||||
}
|
||||
getDeformableDynamicsWorld()->setImplicit(false);
|
||||
getDeformableDynamicsWorld()->setLineSearch(false);
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
// static btScalar E = 50;
|
||||
// static btScalar nu = 0.3;
|
||||
static btScalar damping_alpha = 0.0;
|
||||
static btScalar damping_beta = 0.0;
|
||||
static btScalar damping_beta = 0.00001;
|
||||
static btScalar COLLIDING_VELOCITY = 0;
|
||||
static int start_mode = 6;
|
||||
static int num_modes = 20;
|
||||
@@ -70,8 +70,8 @@ public:
|
||||
void Ctor_RbUpStack()
|
||||
{
|
||||
float mass = 10;
|
||||
// btCollisionShape* shape = new btBoxShape(btVector3(0.5, 0.5, 0.5));
|
||||
btCollisionShape* shape = new btBoxShape(btVector3(1, 1, 1));
|
||||
btCollisionShape* shape = new btBoxShape(btVector3(0.5, 0.5, 0.5));
|
||||
// btCollisionShape* shape = new btBoxShape(btVector3(1, 1, 1));
|
||||
btTransform startTransform;
|
||||
startTransform.setIdentity();
|
||||
// startTransform.setOrigin(btVector3(0, 12, 0));
|
||||
@@ -109,10 +109,10 @@ public:
|
||||
// {
|
||||
// deformableWorld->getDebugDrawer()->drawSphere(rsb->m_nodes[rsb->m_fixedNodes[p]].m_x, 0.2, btVector3(1, 0, 0));
|
||||
// }
|
||||
// for (int p = 0; p < rsb->m_nodeRigidContacts.size(); ++p)
|
||||
// {
|
||||
// deformableWorld->getDebugDrawer()->drawSphere(rsb->m_nodes[rsb->m_contactNodesList[p]].m_x, 0.2, btVector3(0, 1, 0));
|
||||
// }
|
||||
for (int p = 0; p < rsb->m_nodeRigidContacts.size(); ++p)
|
||||
{
|
||||
deformableWorld->getDebugDrawer()->drawSphere(rsb->m_nodes[rsb->m_contactNodesList[p]].m_x, 0.2, btVector3(0, 1, 0));
|
||||
}
|
||||
|
||||
// deformableWorld->getDebugDrawer()->drawSphere(btVector3(0, 0, 0), 0.1, btVector3(1, 1, 1));
|
||||
// deformableWorld->getDebugDrawer()->drawSphere(btVector3(0, 5, 0), 0.1, btVector3(1, 1, 1));
|
||||
@@ -147,7 +147,7 @@ void FreeFall::initPhysics()
|
||||
|
||||
// create volumetric reduced deformable body
|
||||
{
|
||||
btReducedSoftBody* rsb = btReducedSoftBodyHelpers::createReducedBeam(getDeformableDynamicsWorld()->getWorldInfo(), start_mode, num_modes);
|
||||
btReducedSoftBody* rsb = btReducedSoftBodyHelpers::createReducedCube(getDeformableDynamicsWorld()->getWorldInfo(), start_mode, num_modes);
|
||||
|
||||
getDeformableDynamicsWorld()->addSoftBody(rsb);
|
||||
rsb->getCollisionShape()->setMargin(0.01);
|
||||
@@ -156,7 +156,7 @@ void FreeFall::initPhysics()
|
||||
btTransform init_transform;
|
||||
init_transform.setIdentity();
|
||||
init_transform.setOrigin(btVector3(0, 10, 0));
|
||||
// init_transform.setRotation(btQuaternion(btVector3(1, 0, 0), SIMD_PI / 4.0));
|
||||
// init_transform.setRotation(btQuaternion(btVector3(1, 0, 0), SIMD_PI / 6.0));
|
||||
rsb->transform(init_transform);
|
||||
|
||||
rsb->setStiffnessScale(100);
|
||||
@@ -263,12 +263,12 @@ void FreeFall::initPhysics()
|
||||
getDeformableDynamicsWorld()->setLineSearch(false);
|
||||
getDeformableDynamicsWorld()->setUseProjection(false);
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_deformable_erp = 0.2;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_deformable_erp = 0.2;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_friction = 0;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_deformable_cfm = 0.2;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_friction = 1;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_deformable_maxErrorReduction = btScalar(200);
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_leastSquaresResidualThreshold = 1e-3;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_leastSquaresResidualThreshold = 1e-6;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_splitImpulse = false;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_numIterations = 100;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_numIterations = 200;
|
||||
|
||||
m_guiHelper->autogenerateGraphicsObjects(m_dynamicsWorld);
|
||||
m_dynamicsWorld->setGravity(gravity);
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
// static btScalar E = 50;
|
||||
// static btScalar nu = 0.3;
|
||||
static btScalar damping_alpha = 0.0;
|
||||
static btScalar damping_beta = 0.0;
|
||||
static btScalar damping_beta = 0.001;
|
||||
static btScalar COLLIDING_VELOCITY = 4;
|
||||
static int start_mode = 6;
|
||||
static int num_modes = 20;
|
||||
@@ -75,10 +75,11 @@ public:
|
||||
|
||||
void Ctor_RbUpStack()
|
||||
{
|
||||
float mass = 28;
|
||||
// float mass = 8;
|
||||
// float mass = 28;
|
||||
float mass = 8;
|
||||
|
||||
btCollisionShape* shape = new btBoxShape(btVector3(0.5, 0.5, 0.5));
|
||||
// btCollisionShape* shape = new btBoxShape(btVector3(0.5, 0.5, 0.5));
|
||||
btCollisionShape* shape = new btBoxShape(btVector3(1, 1, 1));
|
||||
btVector3 localInertia(0, 0, 0);
|
||||
if (mass != 0.f)
|
||||
shape->calculateLocalInertia(mass, localInertia);
|
||||
@@ -205,7 +206,7 @@ void ReducedCollide::initPhysics()
|
||||
|
||||
// create volumetric reduced deformable body
|
||||
{
|
||||
btReducedSoftBody* rsb = btReducedSoftBodyHelpers::createReducedCube(getDeformableDynamicsWorld()->getWorldInfo(), start_mode, num_modes);
|
||||
btReducedSoftBody* rsb = btReducedSoftBodyHelpers::createReducedBeam(getDeformableDynamicsWorld()->getWorldInfo(), start_mode, num_modes);
|
||||
|
||||
getDeformableDynamicsWorld()->addSoftBody(rsb);
|
||||
rsb->getCollisionShape()->setMargin(0.1);
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
// static btScalar E = 50;
|
||||
// static btScalar nu = 0.3;
|
||||
static btScalar damping_alpha = 0.0;
|
||||
static btScalar damping_beta = 0.0;
|
||||
static btScalar damping_beta = 0.0001;
|
||||
static int start_mode = 6;
|
||||
static int num_modes = 20;
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
static btScalar sGripperVerticalVelocity = 0.f;
|
||||
static btScalar sGripperClosingTargetVelocity = 0.f;
|
||||
static btScalar damping_alpha = 0.0;
|
||||
static btScalar damping_beta = 0.0;
|
||||
static btScalar damping_beta = 0.0001;
|
||||
static int start_mode = 6;
|
||||
static int num_modes = 20;
|
||||
static float friction = 1.;
|
||||
|
||||
@@ -167,6 +167,7 @@ void Springboard::initPhysics()
|
||||
getDeformableDynamicsWorld()->setLineSearch(false);
|
||||
getDeformableDynamicsWorld()->setUseProjection(false);
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_deformable_erp = 0.3;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_deformable_cfm = 0.2;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_deformable_maxErrorReduction = btScalar(200);
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_leastSquaresResidualThreshold = 1e-3;
|
||||
getDeformableDynamicsWorld()->getSolverInfo().m_splitImpulse = false;
|
||||
|
||||
@@ -266,28 +266,17 @@ void btReducedSoftBody::mapToFullPosition(const btTransform& ref_trans)
|
||||
}
|
||||
}
|
||||
|
||||
void btReducedSoftBody::updateReducedVelocity(btScalar solverdt, bool explicit_force)
|
||||
void btReducedSoftBody::updateReducedVelocity(btScalar solverdt)
|
||||
{
|
||||
// update reduced velocity
|
||||
for (int r = 0; r < m_nReduced; ++r)
|
||||
{
|
||||
btScalar mass_inv = (m_Mr[r] == 0) ? 0 : 1.0 / m_Mr[r]; // TODO: this might be redundant, because Mr is identity
|
||||
btScalar delta_v = 0;
|
||||
if (explicit_force)
|
||||
{
|
||||
delta_v = solverdt * mass_inv * (m_reducedForceElastic[r] + m_reducedForceDamping[r]);
|
||||
}
|
||||
else
|
||||
{
|
||||
delta_v = solverdt * mass_inv * (m_reducedForceDamping[r] + m_reducedForceExternal[r]);
|
||||
}
|
||||
delta_v = solverdt * mass_inv * (m_reducedForceElastic[r] + m_reducedForceDamping[r]);
|
||||
// delta_v = solverdt * mass_inv * (m_reducedForceElastic[r] + m_reducedForceDamping[r] + m_reducedForceExternal[r]);
|
||||
// std::cout << "delta_v: " << delta_v << '\n';
|
||||
// m_reducedVelocity[r] = m_reducedVelocityBuffer[r] + delta_v;
|
||||
m_reducedVelocity[r] += delta_v;
|
||||
m_reducedVelocity[r] = m_reducedVelocityBuffer[r] + delta_v;
|
||||
}
|
||||
// std::cout << "reduce_vel: " << m_reducedVelocity[0] << '\n';
|
||||
// std::cout << "force: " << m_reducedForceElastic[0] << '\t' << m_reducedForceDamping[0] << '\t' << m_reducedForceExternal[0] << '\n';
|
||||
}
|
||||
|
||||
void btReducedSoftBody::mapToFullVelocity(const btTransform& ref_trans)
|
||||
@@ -615,7 +604,14 @@ void btReducedSoftBody::internalApplyFullSpaceImpulse(const btVector3& impulse,
|
||||
applyFullSpaceNodalForce(impulse / dt, n_node);
|
||||
|
||||
// update delta damping force
|
||||
applyReducedDampingForce(m_internalDeltaReducedVelocity);
|
||||
tDenseArray reduced_vel_tmp;
|
||||
reduced_vel_tmp.resize(m_nReduced);
|
||||
for (int r = 0; r < m_nReduced; ++r)
|
||||
{
|
||||
reduced_vel_tmp[r] = m_reducedVelocity[r] + m_internalDeltaReducedVelocity[r];
|
||||
}
|
||||
applyReducedDampingForce(reduced_vel_tmp);
|
||||
// applyReducedDampingForce(m_internalDeltaReducedVelocity);
|
||||
|
||||
// delta reduced velocity
|
||||
for (int r = 0; r < m_nReduced; ++r)
|
||||
|
||||
@@ -175,8 +175,8 @@ class btReducedSoftBody : public btSoftBody
|
||||
// compute reduced degree of freedoms
|
||||
void updateReducedDofs(btScalar solverdt);
|
||||
|
||||
// compute reduced velocity update
|
||||
void updateReducedVelocity(btScalar solverdt, bool explicit_force = false);
|
||||
// compute reduced velocity update (for explicit time stepping)
|
||||
void updateReducedVelocity(btScalar solverdt);
|
||||
|
||||
// map to full degree of freedoms
|
||||
void mapToFullPosition(const btTransform& ref_trans);
|
||||
|
||||
@@ -143,7 +143,7 @@ void btReducedSoftBodySolver::applyExplicitForce(btScalar solverdt)
|
||||
rsb->applyReducedDampingForce(rsb->m_reducedVelocityBuffer);
|
||||
|
||||
// get reduced velocity at time^*
|
||||
rsb->updateReducedVelocity(solverdt, true);
|
||||
rsb->updateReducedVelocity(solverdt);
|
||||
}
|
||||
|
||||
// apply damping (no need at this point)
|
||||
|
||||
Reference in New Issue
Block a user