From 115bae172d1f6bc8f26f6e499100ca6b437f3c87 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Thu, 25 Feb 2021 10:16:10 +0100 Subject: fix the body-body revolute angle velocity erp --- src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs | 2 +- .../solver/joint_constraint/revolute_velocity_constraint_wide.rs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs b/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs index 839cddc..23cd6b0 100644 --- a/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs +++ b/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs @@ -109,7 +109,7 @@ impl RevoluteVelocityConstraint { let axis2 = rb2.position * joint.local_axis2; let axis_error = axis1.cross(&axis2); - let ang_err = basis2.tr_mul(&axis_error) - basis1.tr_mul(&axis_error); + let ang_err = (basis2.tr_mul(&axis_error) + basis1.tr_mul(&axis_error)) * 0.5; rhs += Vector5::new(lin_err.x, lin_err.y, lin_err.z, ang_err.x, ang_err.y) * velocity_based_erp_inv_dt; diff --git a/src/dynamics/solver/joint_constraint/revolute_velocity_constraint_wide.rs b/src/dynamics/solver/joint_constraint/revolute_velocity_constraint_wide.rs index ad25101..81e41dc 100644 --- a/src/dynamics/solver/joint_constraint/revolute_velocity_constraint_wide.rs +++ b/src/dynamics/solver/joint_constraint/revolute_velocity_constraint_wide.rs @@ -133,7 +133,8 @@ impl WRevoluteVelocityConstraint { let axis2 = position2 * local_axis2; let axis_error = axis1.cross(&axis2); - let ang_err = basis2.tr_mul(&axis_error) - basis1.tr_mul(&axis_error); + let ang_err = + (basis2.tr_mul(&axis_error) + basis1.tr_mul(&axis_error)) * SimdReal::splat(0.5); rhs += Vector5::new(lin_err.x, lin_err.y, lin_err.z, ang_err.x, ang_err.y) * velocity_based_erp_inv_dt; -- cgit