From 134b8df2e438c46d6d93561900077b3127468f57 Mon Sep 17 00:00:00 2001 From: Phu1234567 Date: Fri, 7 Nov 2025 18:56:13 -0500 Subject: [PATCH] update suspension to correctly use Hooke's Law --- src/BulletDynamics/Vehicle/btRaycastVehicle.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/BulletDynamics/Vehicle/btRaycastVehicle.cpp b/src/BulletDynamics/Vehicle/btRaycastVehicle.cpp index cbb41ece22..b41b7d09a2 100644 --- a/src/BulletDynamics/Vehicle/btRaycastVehicle.cpp +++ b/src/BulletDynamics/Vehicle/btRaycastVehicle.cpp @@ -385,8 +385,6 @@ void btRaycastVehicle::updateSuspension(btScalar deltaTime) { (void)deltaTime; - btScalar chassisMass = btScalar(1.) / m_chassisBody->getInvMass(); - for (int w_it = 0; w_it < getNumWheels(); w_it++) { btWheelInfo& wheel_info = m_wheelInfo[w_it]; @@ -400,7 +398,7 @@ void btRaycastVehicle::updateSuspension(btScalar deltaTime) btScalar current_length = wheel_info.m_raycastInfo.m_suspensionLength; btScalar length_diff = (susp_length - current_length); - + // assume stiffness is in N/m force = wheel_info.m_suspensionStiffness * length_diff * wheel_info.m_clippedInvContactDotSuspension; } @@ -417,12 +415,13 @@ void btRaycastVehicle::updateSuspension(btScalar deltaTime) { susp_damping = wheel_info.m_wheelsDampingRelaxation; } + // assume damping is in N/(m/s) force -= susp_damping * projected_rel_vel; } } // RESULT - wheel_info.m_wheelsSuspensionForce = force * chassisMass; + wheel_info.m_wheelsSuspensionForce = force; if (wheel_info.m_wheelsSuspensionForce < btScalar(0.)) { wheel_info.m_wheelsSuspensionForce = btScalar(0.);