File tree Expand file tree Collapse file tree 1 file changed +12
-2
lines changed
src/dynamics/solver/joint_constraint Expand file tree Collapse file tree 1 file changed +12
-2
lines changed Original file line number Diff line number Diff line change @@ -753,10 +753,20 @@ impl<N: SimdRealCopy> JointTwoBodyConstraintHelper<N> {
753753
754754 let mut rhs_wo_bias = N :: zero ( ) ;
755755 if motor_params. erp_inv_dt != N :: zero ( ) {
756+ let ang_dist;
757+
756758 #[ cfg( feature = "dim2" ) ]
757- let ang_dist = self . ang_err . angle ( ) ;
759+ {
760+ ang_dist = self . ang_err . angle ( ) ;
761+ }
762+
758763 #[ cfg( feature = "dim3" ) ]
759- let ang_dist = self . ang_err . imag ( ) [ _motor_axis] . simd_asin ( ) * N :: splat ( 2.0 ) ;
764+ {
765+ // Clamp the component from -1.0 to 1.0 to account for slight imprecision
766+ let clamped_err = self . ang_err . imag ( ) [ _motor_axis] . simd_clamp ( -N :: one ( ) , N :: one ( ) ) ;
767+ ang_dist = clamped_err. simd_asin ( ) * N :: splat ( 2.0 ) ;
768+ }
769+
760770 let target_ang = motor_params. target_pos ;
761771 rhs_wo_bias += utils:: smallest_abs_diff_between_angles ( ang_dist, target_ang)
762772 * motor_params. erp_inv_dt ;
You can’t perform that action at this time.
0 commit comments