From adcb1ea71ca7d9c5a5555d20ee2675f1ff3eb0ba Mon Sep 17 00:00:00 2001 From: gerald <gerald.moesenlechner@univie.ac.at> Date: Wed, 15 Jun 2022 11:39:42 +0200 Subject: [PATCH] Update with fix of angle conversions and typo fixes --- CHANGELOG | 21 ++++++++++++++++++--- MANUAL | 8 +++++--- Quaternion_Calculator.py | 14 +++++++------- README | 6 +++--- matlab_model/Example_model.slx | Bin 22940 -> 23063 bytes matlab_model/HFS_Wrapper.cpp | 1 + matlab_model/HFS_bus.mat | Bin 2163 -> 2232 bytes src/HFS_API.cpp | 33 ++++++++++++++++++--------------- src/HFS_API.hpp | 6 ++++-- src/HFS_bus.mat | Bin 2163 -> 2229 bytes src/HFS_config.xml | 2 +- src/detector_features.c | 2 +- src/fcu_algorithms.c | 3 ++- src/utilities.c | 4 ++-- test/HFSTest.cpp | 17 ++++++++++------- test/example.cpp | 9 ++++++--- 16 files changed, 78 insertions(+), 48 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index e2bc13f..f9b825a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,6 @@ -************************************** -* ARIEL FGS HFS Repository CHANGELOG * -************************************** +***************************************************************** +* ARIEL FGS HFS Repository, ARIEL-UVIE-PL-ML-001 0.2, CHANGELOG * +***************************************************************** ################################################################################ V0.1: @@ -27,3 +27,18 @@ V0.1: which are both centered on the center of the Detector reference frame. Future version shall allow for configurable offsets between the frames. ################################################################################ +V0.2: +15.June, 2022 Gerald Mösenlechner <gerald.moesenlechner@univie.ac.at> + + Fixed Issues: + + - Fixed conversion from Spacecraft reference frame to detector reference + frame. + + - Fixed typo in conversion matrix. + + - Fixed typo in quaternion multiplication. + + - Added validation signal to input parameters of hfs_parameter struct. + This should prevent wrong or invalid identification when changing targets. +################################################################################ diff --git a/MANUAL b/MANUAL index d788ef1..f9da4e6 100644 --- a/MANUAL +++ b/MANUAL @@ -1,6 +1,6 @@ -************************ -* ARIEL FGS HFS MANUAL * -************************ +***************************************************** +* ARIEL FGS HFS, , ARIEL-UVIE-PL-ML-001 0.2, MANUAL * +***************************************************** The FGS HFS is based on the c++ object "FGS" defined in HFS_API.hpp. The constructor for this object has following notation: @@ -42,6 +42,8 @@ from of a hfs_parameters struct update. The struct is defined as follows: - unsigned int set_invalid: Flag to set the validity of all measuremets to false + - unsigned int validation_signal: Singal used for target identification [ADU/s] + - unsigned int mode: Operational mode, defined as an interger due to Simulink not supporting chars. The equiviliant modes and numbers are: diff --git a/Quaternion_Calculator.py b/Quaternion_Calculator.py index e34d83e..17aaf40 100644 --- a/Quaternion_Calculator.py +++ b/Quaternion_Calculator.py @@ -61,7 +61,7 @@ def mult_quaternion(q1, q2): q_out = np.zeros(4) - q_out[0] = q1[0]*q2[0] + dot(q1,q2) + q_out[0] = q1[0]*q2[0] - dot(q1,q2) vec = q1[0]*q2[1:] + q2[0]*q1[1:] + cross3d(q1[1:], q2[1:]) q_out[1] = vec[0] @@ -92,9 +92,9 @@ if __name__ == "__main__": star = star_cat.loc[star_cat['Name'] == id] print("Quaternion for Star:", id) - star_vec = np.array((np.cos(star.dec)*np.cos(star.ra), np.cos(star.dec)*np.sin(star.ra), np.sin(star.dec))) + star_vec = np.array((np.cos(star.dec*(np.pi/180))*np.cos(star.ra*(np.pi/180)), np.cos(star.dec*(np.pi/180))*np.sin(star.ra*(np.pi/180)), np.sin(star.dec*(np.pi/180)))) - sc_vec = np.array((1.00000197, 0, -0.00017)) #target sc-vector + sc_vec = np.array((1.001698, 0, -0.0017)) #target sc-vector quat = calc_quaternion(sc_vec, star_vec) @@ -105,8 +105,8 @@ if __name__ == "__main__": print("Expected Signals:") print("\tFGS1:") - print("\t\tTracking:", float(star.FGS1*0.125)) - print("\t\tAcquisition:", float(star.FGS1*0.5)) + print("\t\tTracking:", float(star.FGS1*0.125), "ADU") + print("\t\tAcquisition:", float(star.FGS1*0.5), "ADU") print("\tFGS2:") - print("\t\tTracking:", float(star.FGS2*0.125)) - print("\t\tAcquisition:", float(star.FGS2*0.5)) + print("\t\tTracking:", float(star.FGS2*0.125), "ADU/s") + print("\t\tAcquisition:", float(star.FGS2*0.5), "ADU/s") diff --git a/README b/README index 4e41fc6..fc7d1ac 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ -**************************** -* ARIEL FGS HFS Repository * -**************************** +****************************************************** +* ARIEL FGS HFS Repository, ARIEL-UVIE-PL-ML-001 0.2 * +****************************************************** This repository contains the HFS, the simulator SW used to simulate the behaviour of the FGS IASW for the AOCS closed loop test. diff --git a/matlab_model/Example_model.slx b/matlab_model/Example_model.slx index 92b3703ac34c60b2698ebd20e9af98a69b30dab3..a52bffe6762f2ed1b93c45b49d2ad1592cba2c7a 100644 GIT binary patch delta 9943 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 delta 9913 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 U4EiW0t`3@fA<~g8EEpsT0F6=OyZ`_I diff --git a/matlab_model/HFS_Wrapper.cpp b/matlab_model/HFS_Wrapper.cpp index 1bc78a7..8ac8e14 100644 --- a/matlab_model/HFS_Wrapper.cpp +++ b/matlab_model/HFS_Wrapper.cpp @@ -73,6 +73,7 @@ void updateFGS(hfs_parameters *update, centroid_packet *output) u_new.reset = update -> reset; u_new.save = update -> save; u_new.set_invalid = update -> set_invalid; + u_new.validation_signal = update -> validation_signal; u_new.sync_flag = update -> sync_flag; fgsSim -> set_params(u_new, output); diff --git a/matlab_model/HFS_bus.mat b/matlab_model/HFS_bus.mat index 8239bcb877b865fcafbc983448e9ffdcc8988b66..e561d1aa6ab50fce1786f0466ffe151f6eed9389 100644 GIT binary patch delta 1943 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 delta 1874 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 K=E(=1CIA2iFwznL diff --git a/src/HFS_API.cpp b/src/HFS_API.cpp index 9dc14d7..6c302c1 100644 --- a/src/HFS_API.cpp +++ b/src/HFS_API.cpp @@ -2,7 +2,7 @@ * @file HFS_API.cpp * @author Gerald Mösenlechner (gerald.moesenlechner@univie.ac.at) * @date May, 2022 -* @version 0.1 +* @version 0.2 * * @copyright * This program is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ const char* MODE_ACQU = "Acquisition"; const char* MODE_TRAC = "Tracking"; const char* MODE_STBY = "Standby"; -static double ROTMATRIX[9] = {-1, 0, 0, 0, 0.999998, -0.00017, 0, -0.00017, -0.999998}; +static double ROTMATRIX[9] = {-1, 0, 0, 0, 0.999998, -0.0017, 0, -0.0017, -0.999998}; static double ROTMATRIX_SC[9] = {0, -1, 0, 0, 0, 1, -1, 0, 0}; double smear_kernel_os[125*125]; @@ -366,11 +366,11 @@ int FGS :: perform_algorithm() if (med_acq == 1) { MedFilter3x3(image, dim_x, dim_y, med_threshold, filtered_image); - output = SourceDetection(filtered_image, dim_x, dim_y, 0, channel, 10, target_signal, tolerance_acq, 10, iter_acq, 10, 15, target_signal*0.01, val_sigma, pearson_limit); + output = SourceDetection(filtered_image, dim_x, dim_y, 0, channel, 10, target_signal*exposure_time, tolerance_acq, 10, iter_acq, 10, 15, target_signal*0.01, val_sigma, pearson_limit); } else { - output = SourceDetection(image, dim_x, dim_y, 0, channel, 10, target_signal, tolerance_acq, 10, iter_acq, 10, 15, target_signal*0.01, val_sigma, pearson_limit); + output = SourceDetection(image, dim_x, dim_y, 0, channel, 10, target_signal*exposure_time, tolerance_acq, 10, iter_acq, 10, 15, target_signal*0.01, val_sigma, pearson_limit); } } else if (strcmp(mode, MODE_TRAC) == 0) @@ -748,13 +748,13 @@ int FGS :: transform_to_detector(double (&vec)[3], double* output) dmatmult(rot_matrix_sc, vector, &transf_opt); dmatmult(rot_matrix_opt, transf_opt, &transf); - if(abs(transf.data[0]*3600000) < (dim_x/2)*plate_scale) + if(abs(transf.data[0]*3600000*(360/TWO_PI)) < (dim_x/2)*plate_scale) { - if(abs(transf.data[1]*3600000) < (dim_y/2)*plate_scale) + if(abs(transf.data[1]*3600000*(360/TWO_PI)) < (dim_y/2)*plate_scale) { - output[0] = transf.data[0]*3600000/plate_scale; - output[1] = transf.data[1]*3600000/plate_scale; + output[0] = transf.data[0]*(360/TWO_PI)*3600000/plate_scale; + output[1] = transf.data[1]*(360/TWO_PI)*3600000/plate_scale; return 0; } } @@ -792,9 +792,9 @@ int FGS :: transform_star_coordinates(double (&quaternion)[4]) for(i = 0; i < targets -> number; i++) { star_quat[0] = 0.; - star_quat[1] = cos(targets -> dec[i])*cos(targets -> ra[i]); - star_quat[2] = cos(targets -> dec[i])*sin(targets -> ra[i]); - star_quat[3] = sin(targets -> dec[i]); + star_quat[1] = cos(targets -> dec[i] * (TWO_PI/360))*cos(targets -> ra[i] * (TWO_PI/360)); + star_quat[2] = cos(targets -> dec[i] * (TWO_PI/360))*sin(targets -> ra[i] * (TWO_PI/360)); + star_quat[3] = sin(targets -> dec[i] * (TWO_PI/360)); /*apply quaternion to vector*/ multiply_quaternion(quaternion, star_quat, tmp_quat); @@ -886,10 +886,11 @@ int FGS :: set_params(hfs_parameters update, centroid_packet *cent_packet) centroid.y = (centroid.y - dim_y/2) * plate_scale; sync_ctr = 0; send_cent = 1; - if((strcmp(mode, update_mode_char) != 0) || channel != update.channel) + if((strcmp(mode, update_mode_char) != 0) || channel != update.channel || target_signal != update.validation_signal) { set_mode(update_mode_char); set_channel(update.channel); + target_signal = update.validation_signal; } } else @@ -911,10 +912,11 @@ int FGS :: set_params(hfs_parameters update, centroid_packet *cent_packet) centroid.y = (centroid.y - dim_y/2) * plate_scale; sync_ctr = 0; send_cent = 1; - if((strcmp(mode, update_mode_char) != 0) || channel != update.channel) + if((strcmp(mode, update_mode_char) != 0) || channel != update.channel || target_signal != update.validation_signal) { set_mode(update_mode_char); set_channel(update.channel); + target_signal = update.validation_signal; } } else @@ -935,10 +937,11 @@ int FGS :: set_params(hfs_parameters update, centroid_packet *cent_packet) cent_packet -> validity_index = 100.; cent_packet -> validity_flag = 0; cent_packet -> time = time; - if((strcmp(mode, update_mode_char) != 0) || channel != update.channel) + if((strcmp(mode, update_mode_char) != 0) || channel != update.channel || target_signal != update.validation_signal) { set_mode(update_mode_char); set_channel(update.channel); + target_signal = update.validation_signal; } } } @@ -1062,7 +1065,7 @@ int multiply_quaternion(double (&quaternion1)[4], double (&quaternion2)[4], doub unsigned int i; cross3(q_vec1, q_vec2, cross); - output[0] = s1 * s2 * dot(q_vec1, q_vec2, 3); + output[0] = s1 * s2 - dot(q_vec1, q_vec2, 3); for(i = 0; i < 3; i++) { diff --git a/src/HFS_API.hpp b/src/HFS_API.hpp index b67dc05..9168df6 100644 --- a/src/HFS_API.hpp +++ b/src/HFS_API.hpp @@ -2,7 +2,7 @@ * @file HFS_API.hpp * @author Gerald Mösenlechner (gerald.moesenlechner@univie.ac.at) * @date May, 2022 -* @version 0.1 +* @version 0.2 * * @copyright * This program is free software; you can redistribute it and/or modify it @@ -51,6 +51,7 @@ #define FL_FGS2 27.08 /*Focal lenght in m*/ #define PS_FGS1 175.0 /*Plate scale in mas/px*/ #define PS_FGS2 137.1 /*Plate scale in mas/px*/ +#define TWO_PI 6.28318531f extern const char* MODE_ACQU; @@ -81,6 +82,7 @@ struct hfs_state * @param save: flag for saving the current state of the HFS * @param reset: flag for reseting the HFS * @param set_invalid: flag for setting the validity flag to false + * @param validation_signal: Target Signal used for validation and identification * @param mode: operational mode of the FGS 0: Standby, 1: Acquisition, 2: Tracking * @note Operational modes are integers as Simulink doesn't support c */ @@ -88,7 +90,7 @@ typedef struct{ double position_quat[4]; double ang_rate[3]; double time; - unsigned int sync_flag, channel, save, reset, set_invalid; + unsigned int sync_flag, channel, save, reset, set_invalid, validation_signal; unsigned int mode; } hfs_parameters; diff --git a/src/HFS_bus.mat b/src/HFS_bus.mat index a453fb79d9832dc08fffe5eb28795fb99963cfd9..d8f28171de2c7b3965bb1d9bf8c45118f6d1fe0b 100644 GIT binary patch delta 1940 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 delta 1874 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 K=E(=1CIA33KGGNf diff --git a/src/HFS_config.xml b/src/HFS_config.xml index c6667a3..f38d22b 100644 --- a/src/HFS_config.xml +++ b/src/HFS_config.xml @@ -92,7 +92,7 @@ Note: must be lower than the integration time (0.5 s) --> <delay>0.1</delay> <!-- Brightness tolerance for target identification default is 20% --> - <tolerance>20</tolerance> + <tolerance>50</tolerance> </Acquisition> <!-- Relative path to the star catalouge --> diff --git a/src/detector_features.c b/src/detector_features.c index 2c8b82c..90bb675 100644 --- a/src/detector_features.c +++ b/src/detector_features.c @@ -2,7 +2,7 @@ * @file detector_features.c * @author Gerald Mösenlechner (gerald.moesenlechner@univie.ac.at) * @date May, 2022 -* @version 0.1 +* @version 0.2 * * @copyright * This program is free software; you can redistribute it and/or modify it diff --git a/src/fcu_algorithms.c b/src/fcu_algorithms.c index 4e0e435..e8d31a5 100644 --- a/src/fcu_algorithms.c +++ b/src/fcu_algorithms.c @@ -2,7 +2,7 @@ * @file fcu_algorithms.c * @author Gerald Mösenlechner (gerald.moesenlechner@univie.ac.at) * @date May, 2022 -* @version 0.1 +* @version 0.2 * * @copyright * This program is free software; you can redistribute it and/or modify it @@ -1570,5 +1570,6 @@ struct coord SourceDetection(unsigned int *data, unsigned int xdim, unsigned int { result.validity.flag = 1; } + result.time = 0.; return result; } diff --git a/src/utilities.c b/src/utilities.c index e374818..c349d21 100644 --- a/src/utilities.c +++ b/src/utilities.c @@ -2,7 +2,7 @@ * @file utilities.c * @author Gerald Mösenlechner (gerald.moesenlechner@univie.ac.at) * @date May, 2022 -* @version 0.1 +* @version 0.2 * * @copyright * This program is free software; you can redistribute it and/or modify it @@ -88,7 +88,7 @@ void random_poisson_trm(double *matrix, double mean, unsigned int size) unsigned int i; double k; double U, V, slam, loglam, a, b, invalpha, vr, us, enlam, prod, X; - + slam = sqrt(mean); loglam = log(mean); b = 0.931 + 2.53*slam; diff --git a/test/HFSTest.cpp b/test/HFSTest.cpp index 72ae1e4..60d592c 100644 --- a/test/HFSTest.cpp +++ b/test/HFSTest.cpp @@ -6,6 +6,8 @@ #include <stdlib.h> #include <experimental/filesystem> +#define TWO_PI 6.28318531f + // Registers the fixture into the 'registry' CPPUNIT_TEST_SUITE_REGISTRATION(HFSTest); @@ -134,23 +136,23 @@ void HFSTest::testTransformation() fgs.transform_to_detector(vecx, output); CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-7); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0.00017*1e-5*3600000/175.0, 1e-7); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0.0017*1e-5*(360/TWO_PI)*3600000/175.0, 1e-7); fgs.transform_to_detector(vecy, output); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 1e-5*3600000/175.0, 1e-7); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 1e-5*(360/TWO_PI)*3600000/175.0, 1e-7); CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0, 1e-7); fgs.transform_to_detector(vecz, output); CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-7); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0.999998*1e-5*3600000/175.0, 1e-5); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0.999998*1e-5*(360/TWO_PI)*3600000/175.0, 1e-5); } void HFSTest::testParameterUpdate() { struct hfs_state state; - struct hfs_parameters update; - struct centroid_packet output; + hfs_parameters update; + centroid_packet output; char path[] = "./test/HFS_config_test.xml"; char* real_path = realpath(path, NULL); FGS fgs(real_path); @@ -161,13 +163,14 @@ void HFSTest::testParameterUpdate() update.sync_flag = 1; update.time = 0.015626; update.channel = 1; - update.mode = "Standby"; + update.mode = 0; update.save = 0; update.reset = 0; update.set_invalid = 0; update.ang_rate[0] = 1e-5; update.ang_rate[1] = 1e-5; update.ang_rate[2] = 1e-5; + update.validation_signal = 100000; fgs.set_params(update, &output); state = fgs.get_hfs_state(); @@ -177,7 +180,7 @@ void HFSTest::testParameterUpdate() state = fgs.get_hfs_state(); CPPUNIT_ASSERT(strcmp(state.mode, "Standby") == 0); - update.mode = "Tracking"; + update.mode = 2; update.sync_flag = 0; fgs.set_params(update, &output); fgs.set_params(update, &output); diff --git a/test/example.cpp b/test/example.cpp index e065b9a..8d43b95 100644 --- a/test/example.cpp +++ b/test/example.cpp @@ -18,7 +18,7 @@ int main() double sum_x_tra, sum_y_tra, sum_x_acq, sum_y_acq; /*Values for mean*/ /*Quaternion to put WASP-11 in the center of the DRF*/ /*The resuling measurement of the */ - double quat[4] = {3.77743614e-01, 4.02209431e-05, -8.95172007e-01,2.36594249e-01 }; + double quat[4] = {0.8892834993148474, -0.0006038143244162956, 0.2873837014059442, -0.3557880006700909}; /*Initialise FGS simulator by calling constructor*/ FGS fgs(real_path); @@ -58,6 +58,9 @@ int main() /*mark all cantroid packets as invalid*/ update.set_invalid = 0; + /*Set signal for target identification in ADU/s*/ + update.validation_signal = 100000; + /*Unit quaternion of the current SC attitude in reference to J2000*/ update.position_quat[0] = quat[0]; update.position_quat[1] = quat[1]; @@ -170,8 +173,8 @@ int main() std::cout << "Sim is " << output.time / (ms_double.count()/1000) << " times faster than real time!\n"; std::cout << "Mean Measurement for Tracking: \n x: " << sum_x_tra/ctr_tra << "\n y: " << sum_y_tra/ctr_tra << "\n\n"; - std::cout << "Tracking Reference Values: \n x: ~ 248mas\n y: ~ 387mas\n\n"; + std::cout << "Tracking Reference Values: \n x: ~ 256mas\n y: ~ 983mas\n\n"; std::cout << "Mean Measurement for Acquisition: \n x: " << sum_x_acq/ctr_acq << "\n y: " << sum_y_acq/ctr_acq << "\n\n"; - std::cout << "Acquisition Reference Values: \n x: ~ 276mas\n y: ~ 267mas\n\n"; + std::cout << "Acquisition Reference Values: \n x: ~ 237mas\n y: ~ 911mas\n\n"; } -- GitLab