@@ -560,7 +560,7 @@ pub fn closed_loop(records: &[TestDataRecord]) -> Vec<NavigationResult> {
560560 let mut results: Vec < NavigationResult > = Vec :: with_capacity ( records. len ( ) ) ;
561561 // Initialize the UKF with the first record
562562 let mut ukf = initialize_ukf (
563- records[ 0 ] . clone ( ) ,
563+ records[ 0 ] . clone ( ) ,
564564 None , //Some(vec![1e-9; 3]), // attitude covariance
565565 None , //Some(vec![1e-6; 6])
566566 ) ;
@@ -632,55 +632,60 @@ pub fn closed_loop(records: &[TestDataRecord]) -> Vec<NavigationResult> {
632632 results
633633}
634634pub fn print_ukf ( ukf : & UKF , record : & TestDataRecord ) {
635- println ! ( "\r UKF position: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4e}, {:.4e}, {:.4} | Error: {:.4e}, {:.4e}, {:.4}" ,
636- ukf. get_mean( ) [ 0 ] . to_degrees( ) ,
637- ukf. get_mean( ) [ 1 ] . to_degrees( ) ,
638- ukf. get_mean( ) [ 2 ] ,
639- ukf. get_covariance( ) [ ( 0 , 0 ) ] ,
640- ukf. get_covariance( ) [ ( 1 , 1 ) ] ,
641- ukf. get_covariance( ) [ ( 2 , 2 ) ] ,
642- ukf. get_mean( ) [ 0 ] . to_degrees( ) - record. latitude,
643- ukf. get_mean( ) [ 1 ] . to_degrees( ) - record. longitude,
644- ukf. get_mean( ) [ 2 ] - record. altitude
645- ) ;
646- println ! ( "\r UKF velocity: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4}, {:.4}, {:.4} | Error: {:.4}, {:.4}, {:.4}" ,
647- ukf. get_mean( ) [ 3 ] ,
648- ukf. get_mean( ) [ 4 ] ,
649- ukf. get_mean( ) [ 5 ] ,
650- ukf. get_covariance( ) [ ( 3 , 3 ) ] ,
651- ukf. get_covariance( ) [ ( 4 , 4 ) ] ,
652- ukf. get_covariance( ) [ ( 5 , 5 ) ] ,
653- ukf. get_mean( ) [ 3 ] - record. speed * record. bearing. cos( ) ,
654- ukf. get_mean( ) [ 4 ] - record. speed * record. bearing. sin( ) ,
655- ukf. get_mean( ) [ 5 ] - 0.0 // Assuming no vertical velocity
656- ) ;
657- println ! ( "\r UKF attitude: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4}, {:.4}, {:.4} | Error: {:.4}, {:.4}, {:.4}" ,
658- ukf. get_mean( ) [ 6 ] ,
659- ukf. get_mean( ) [ 7 ] ,
660- ukf. get_mean( ) [ 8 ] ,
661- ukf. get_covariance( ) [ ( 6 , 6 ) ] ,
662- ukf. get_covariance( ) [ ( 7 , 7 ) ] ,
663- ukf. get_covariance( ) [ ( 8 , 8 ) ] ,
664- ukf. get_mean( ) [ 6 ] - record. roll,
665- ukf. get_mean( ) [ 7 ] - record. pitch,
666- ukf. get_mean( ) [ 8 ] - record. yaw
667- ) ;
668- println ! ( "\r UKF accel biases: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4e}, {:.4e}, {:.4e}" ,
669- ukf. get_mean( ) [ 9 ] ,
670- ukf. get_mean( ) [ 10 ] ,
671- ukf. get_mean( ) [ 11 ] ,
672- ukf. get_covariance( ) [ ( 9 , 9 ) ] ,
673- ukf. get_covariance( ) [ ( 10 , 10 ) ] ,
674- ukf. get_covariance( ) [ ( 11 , 11 ) ]
675- ) ;
676- println ! ( "\r UKF gyro biases: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4e}, {:.4e}, {:.4e}" ,
677- ukf. get_mean( ) [ 12 ] ,
678- ukf. get_mean( ) [ 13 ] ,
679- ukf. get_mean( ) [ 14 ] ,
680- ukf. get_covariance( ) [ ( 12 , 12 ) ] ,
681- ukf. get_covariance( ) [ ( 13 , 13 ) ] ,
682- ukf. get_covariance( ) [ ( 14 , 14 ) ]
683- ) ;
635+ println ! (
636+ "\r UKF position: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4e}, {:.4e}, {:.4} | Error: {:.4e}, {:.4e}, {:.4}" ,
637+ ukf. get_mean( ) [ 0 ] . to_degrees( ) ,
638+ ukf. get_mean( ) [ 1 ] . to_degrees( ) ,
639+ ukf. get_mean( ) [ 2 ] ,
640+ ukf. get_covariance( ) [ ( 0 , 0 ) ] ,
641+ ukf. get_covariance( ) [ ( 1 , 1 ) ] ,
642+ ukf. get_covariance( ) [ ( 2 , 2 ) ] ,
643+ ukf. get_mean( ) [ 0 ] . to_degrees( ) - record. latitude,
644+ ukf. get_mean( ) [ 1 ] . to_degrees( ) - record. longitude,
645+ ukf. get_mean( ) [ 2 ] - record. altitude
646+ ) ;
647+ println ! (
648+ "\r UKF velocity: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4}, {:.4}, {:.4} | Error: {:.4}, {:.4}, {:.4}" ,
649+ ukf. get_mean( ) [ 3 ] ,
650+ ukf. get_mean( ) [ 4 ] ,
651+ ukf. get_mean( ) [ 5 ] ,
652+ ukf. get_covariance( ) [ ( 3 , 3 ) ] ,
653+ ukf. get_covariance( ) [ ( 4 , 4 ) ] ,
654+ ukf. get_covariance( ) [ ( 5 , 5 ) ] ,
655+ ukf. get_mean( ) [ 3 ] - record. speed * record. bearing. cos( ) ,
656+ ukf. get_mean( ) [ 4 ] - record. speed * record. bearing. sin( ) ,
657+ ukf. get_mean( ) [ 5 ] - 0.0 // Assuming no vertical velocity
658+ ) ;
659+ println ! (
660+ "\r UKF attitude: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4}, {:.4}, {:.4} | Error: {:.4}, {:.4}, {:.4}" ,
661+ ukf. get_mean( ) [ 6 ] ,
662+ ukf. get_mean( ) [ 7 ] ,
663+ ukf. get_mean( ) [ 8 ] ,
664+ ukf. get_covariance( ) [ ( 6 , 6 ) ] ,
665+ ukf. get_covariance( ) [ ( 7 , 7 ) ] ,
666+ ukf. get_covariance( ) [ ( 8 , 8 ) ] ,
667+ ukf. get_mean( ) [ 6 ] - record. roll,
668+ ukf. get_mean( ) [ 7 ] - record. pitch,
669+ ukf. get_mean( ) [ 8 ] - record. yaw
670+ ) ;
671+ println ! (
672+ "\r UKF accel biases: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4e}, {:.4e}, {:.4e}" ,
673+ ukf. get_mean( ) [ 9 ] ,
674+ ukf. get_mean( ) [ 10 ] ,
675+ ukf. get_mean( ) [ 11 ] ,
676+ ukf. get_covariance( ) [ ( 9 , 9 ) ] ,
677+ ukf. get_covariance( ) [ ( 10 , 10 ) ] ,
678+ ukf. get_covariance( ) [ ( 11 , 11 ) ]
679+ ) ;
680+ println ! (
681+ "\r UKF gyro biases: ({:.4}, {:.4}, {:.4}) | Covariance: {:.4e}, {:.4e}, {:.4e}" ,
682+ ukf. get_mean( ) [ 12 ] ,
683+ ukf. get_mean( ) [ 13 ] ,
684+ ukf. get_mean( ) [ 14 ] ,
685+ ukf. get_covariance( ) [ ( 12 , 12 ) ] ,
686+ ukf. get_covariance( ) [ ( 13 , 13 ) ] ,
687+ ukf. get_covariance( ) [ ( 14 , 14 ) ]
688+ ) ;
684689}
685690
686691/// Helper function to initialize a UKF for closed-loop mode.
@@ -716,7 +721,7 @@ pub fn initialize_ukf(
716721 in_degrees : true ,
717722 } ;
718723 // Covariance parameters
719- let position_accuracy = initial_pose. horizontal_accuracy ; //.sqrt();
724+ let position_accuracy = initial_pose. horizontal_accuracy ; //.sqrt();
720725 let mut covariance_diagonal = vec ! [
721726 ( position_accuracy * METERS_TO_DEGREES ) . powf( 2.0 ) ,
722727 ( position_accuracy * METERS_TO_DEGREES ) . powf( 2.0 ) ,
0 commit comments