@@ -556,13 +556,23 @@ impl StrapdownState {
556556 let rotation_rate: Matrix3 < f64 > =
557557 earth:: vector_to_skew_symmetric ( & earth:: earth_rate_lla ( & self . latitude . to_degrees ( ) ) ) ;
558558 let r = earth:: ecef_to_lla ( & self . latitude . to_degrees ( ) , & self . longitude . to_degrees ( ) ) ;
559+ // let grav: Vector3<f64> = earth::gravitation(&self.position[0], &self.position[1], &self.position[2]);
559560 let velocity: Vector3 < f64 > =
560561 Vector3 :: new ( self . velocity_north , self . velocity_east , self . velocity_down ) ;
562+ // let gravity = earth::gravitation(
563+ // &self.latitude.to_degrees(),
564+ // &self.longitude.to_degrees(),
565+ // &self.altitude,
566+ // );
561567 let gravity = Vector3 :: new (
562568 0.0 ,
563569 0.0 ,
564570 earth:: gravity ( & self . latitude . to_degrees ( ) , & self . altitude ) ,
565571 ) ;
572+ //let accel = &gravity;
573+ //println!("[StrapdownState::velocity_update] position: [{:?}, {:?}, {:?}]", self.latitude.to_degrees(), self.longitude.to_degrees(), self.altitude);
574+ //println!("[StrapdownState::velocity_update] gravity vector: [{:?}, {:?}, {:?}] | Gravity scalar {:?}", accel[0], accel[1], accel[2], (accel[0].powi(2) + accel[1].powi(2) + accel[2].powi(2)).sqrt());
575+
566576 velocity + ( f - gravity - r * ( transport_rate + 2.0 * rotation_rate) * velocity) * dt
567577 }
568578}
@@ -835,7 +845,7 @@ mod tests {
835845 Vector3 :: new ( 0.0 , 0.0 , 0.0 ) , // No rotation
836846 ) ;
837847 let dt = 1.0 ; // Example time step in seconds
838- state. forward ( & imu_data, dt) ;
848+ state = forward ( state , imu_data, dt) ;
839849 // After a forward step, the state should still be at rest
840850 assert_approx_eq ! ( state. latitude, 0.0 , 1e-6 ) ;
841851 assert_approx_eq ! ( state. longitude, 0.0 , 1e-6 ) ;
@@ -866,7 +876,7 @@ mod tests {
866876 assert_approx_eq ! ( state. attitude. euler_angles( ) . 2 , 0.1 , 1e-6 ) ; // Check initial yaw
867877 let gyros = Vector3 :: new ( 0.0 , 0.0 , 0.1 ) ; // Gyro data for yawing
868878 let dt = 1.0 ; // Example time step in seconds
869- let new_attitude = Rotation3 :: from_matrix ( & state . attitude_update ( & gyros, dt) ) ;
879+ let new_attitude = Rotation3 :: from_matrix ( & attitude_update ( & state , gyros, dt) ) ;
870880 // Check if the yaw has changed
871881 let new_yaw = new_attitude. euler_angles ( ) . 2 ;
872882 assert_approx_eq ! ( new_yaw, 0.1 + 0.1 , 1e-3 ) ; // 0.1 rad initial + 0.1 rad
@@ -882,7 +892,7 @@ mod tests {
882892 assert_approx_eq ! ( state. attitude. euler_angles( ) . 0 , 0.1 , 1e-6 ) ; // Check initial roll
883893 let gyros = Vector3 :: new ( 0.10 , 0.0 , 0.0 ) ; // Gyro data for yawing
884894 let dt = 1.0 ; // Example time step in seconds
885- let new_attitude = Rotation3 :: from_matrix ( & state . attitude_update ( & gyros, dt) ) ;
895+ let new_attitude = Rotation3 :: from_matrix ( & attitude_update ( & state , gyros, dt) ) ;
886896 // Check if the yaw has changed
887897 let new_roll = new_attitude. euler_angles ( ) . 0 ;
888898 assert_approx_eq ! ( new_roll, 0.1 + 0.1 , 1e-3 ) ; // 0.1 rad initial + 0.1 rad
@@ -898,7 +908,7 @@ mod tests {
898908 assert_approx_eq ! ( state. attitude. euler_angles( ) . 1 , 0.1 , 1e-6 ) ; // Check initial yaw
899909 let gyros = Vector3 :: new ( 0.0 , 0.1 , 0.0 ) ; // Gyro data for yawing
900910 let dt = 1.0 ; // Example time step in seconds
901- let new_attitude = Rotation3 :: from_matrix ( & state . attitude_update ( & gyros, dt) ) ;
911+ let new_attitude = Rotation3 :: from_matrix ( & attitude_update ( & state , gyros, dt) ) ;
902912 // Check if the yaw has changed
903913 let new_pitch = new_attitude. euler_angles ( ) . 1 ;
904914 assert_approx_eq ! ( new_pitch, 0.1 + 0.1 , 1e-3 ) ; // 0.1 rad initial + 0.1 rad
@@ -967,7 +977,7 @@ mod tests {
967977 earth:: gravity ( & 0.0 , & 0.0 ) , // Gravity vector in NED
968978 ) ;
969979 let dt = 1.0 ;
970- let v_new = state . velocity_update ( & f, dt) ;
980+ let v_new = velocity_update ( & state , f, dt) ;
971981 assert_eq ! ( v_new[ 0 ] , 0.0 ) ;
972982 assert_eq ! ( v_new[ 1 ] , 0.0 ) ;
973983 assert_eq ! ( v_new[ 2 ] , 0.0 ) ;
@@ -978,7 +988,7 @@ mod tests {
978988 let state = StrapdownState :: new ( ) ;
979989 let f = nalgebra:: Vector3 :: new ( 1.0 , 0.0 , earth:: gravity ( & 0.0 , & 0.0 ) ) ; // 1 m/s^2 north
980990 let dt = 2.0 ;
981- let v_new = state . velocity_update ( & f, dt) ;
991+ let v_new = velocity_update ( & state , f, dt) ;
982992 // Should be v = a * dt
983993 assert ! ( ( v_new[ 0 ] - 2.0 ) . abs( ) < 1e-6 ) ;
984994 assert ! ( ( v_new[ 1 ] ) . abs( ) < 1e-6 ) ;
@@ -993,7 +1003,7 @@ mod tests {
9931003 state. velocity_down = 2.0 ;
9941004 let f = Vector3 :: from_vec ( vec ! [ 0.0 , 0.0 , earth:: gravity( & 0.0 , & 0.0 ) ] ) ;
9951005 let dt = 1.0 ;
996- let v_new = state . velocity_update ( & f, dt) ;
1006+ let v_new = velocity_update ( & state , f, dt) ;
9971007 assert_approx_eq ! ( v_new[ 0 ] , 5.0 , 1e-3 ) ;
9981008 assert_approx_eq ! ( v_new[ 1 ] , -3.0 , 1e-3 ) ;
9991009 assert_approx_eq ! ( v_new[ 2 ] , 2.0 , 1e-3 ) ;
@@ -1007,7 +1017,7 @@ mod tests {
10071017 state. velocity_down = 0.0 ;
10081018 let f = Vector3 :: from_vec ( vec ! [ 0.0 , 0.0 , 2.0 * earth:: gravity( & 0.0 , & 0.0 ) ] ) ; // Downward acceleration
10091019 let dt = 1.0 ;
1010- let v_new = state . velocity_update ( & f, dt) ;
1020+ let v_new = velocity_update ( & state , f, dt) ;
10111021 assert_approx_eq ! ( v_new[ 2 ] , earth:: gravity( & 0.0 , & 0.0 ) , 1e-3 ) ;
10121022 }
10131023 #[ test]
@@ -1019,7 +1029,7 @@ mod tests {
10191029 ) ;
10201030 let imu_data = IMUData :: new_from_vec ( vec ! [ 0.0 , 0.0 , 0.0 ] , vec ! [ 0.0 , 0.0 , 0.1 ] ) ;
10211031 let dt = 1.0 ;
1022- state. forward ( & imu_data, dt) ;
1032+ state = forward ( state , imu_data, dt) ;
10231033 let ( _, _, yaw) = state. attitude . euler_angles ( ) ;
10241034 assert ! ( ( yaw - 0.1 ) . abs( ) < 1e-3 ) ;
10251035 }
@@ -1033,7 +1043,7 @@ mod tests {
10331043 ) ;
10341044 let imu_data = IMUData :: new_from_vec ( vec ! [ 0.0 , 0.0 , 0.0 ] , vec ! [ 0.1 , 0.0 , 0.0 ] ) ;
10351045 let dt = 1.0 ;
1036- state. forward ( & imu_data, dt) ;
1046+ state = forward ( state , imu_data, dt) ;
10371047 let ( roll, _, _) = state. attitude . euler_angles ( ) ;
10381048 assert ! ( ( roll - 0.1 ) . abs( ) < 1e-3 ) ;
10391049 }
@@ -1047,7 +1057,7 @@ mod tests {
10471057 ) ;
10481058 let imu_data = IMUData :: new_from_vec ( vec ! [ 0.0 , 0.0 , 0.0 ] , vec ! [ 0.0 , 0.1 , 0.0 ] ) ;
10491059 let dt = 1.0 ;
1050- state. forward ( & imu_data, dt) ;
1060+ state = forward ( state , imu_data, dt) ;
10511061 let ( _, pitch, _) = state. attitude . euler_angles ( ) ;
10521062 assert ! ( ( pitch - 0.1 ) . abs( ) < 1e-3 ) ;
10531063 }
@@ -1061,7 +1071,7 @@ mod tests {
10611071 ) ;
10621072 let imu_data = IMUData :: new_from_vec ( vec ! [ 1.0 , 0.0 , 0.0 ] , vec ! [ 0.0 , 0.0 , 0.0 ] ) ;
10631073 let dt = 2.0 ;
1064- state. forward ( & imu_data, dt) ;
1074+ state = forward ( state , imu_data, dt) ;
10651075 assert ! ( ( state. velocity_north - 2.0 ) . abs( ) < 1e-3 ) ;
10661076 }
10671077
@@ -1074,7 +1084,7 @@ mod tests {
10741084 ) ;
10751085 let imu_data = IMUData :: new_from_vec ( vec ! [ 0.0 , 1.0 , 0.0 ] , vec ! [ 0.0 , 0.0 , 0.0 ] ) ;
10761086 let dt = 2.0 ;
1077- state. forward ( & imu_data, dt) ;
1087+ state = forward ( state , imu_data, dt) ;
10781088 assert ! ( ( state. velocity_east - 2.0 ) . abs( ) < 1e-3 ) ;
10791089 }
10801090
@@ -1090,7 +1100,7 @@ mod tests {
10901100 vec ! [ 0.0 , 0.0 , 0.0 ] ,
10911101 ) ;
10921102 let dt = 1.0 ;
1093- state. forward ( & imu_data, dt) ;
1103+ state = forward ( state , imu_data, dt) ;
10941104 assert_approx_eq ! ( state. velocity_down, 2.0 , 1e-3 ) ;
10951105 }
10961106}
0 commit comments