From bdea90a987cd1d483fea2e6c653fdc153a7f8104 Mon Sep 17 00:00:00 2001 From: bytecod3 Date: Mon, 27 Jan 2025 01:36:45 +0300 Subject: [PATCH] final working code-generates state log --- app/NaFCSE/mainwindow.cpp | 4 +- .../final-data/wrong_altitude_generator.m | 2 +- python-test-scripts/main.py | 67 ++++++++++++++----- python-test-scripts/maxt.py | 2 +- python-test-scripts/state_log_file.txt | 22 +++++- 5 files changed, 74 insertions(+), 23 deletions(-) diff --git a/app/NaFCSE/mainwindow.cpp b/app/NaFCSE/mainwindow.cpp index 0323d2e..c061f04 100644 --- a/app/NaFCSE/mainwindow.cpp +++ b/app/NaFCSE/mainwindow.cpp @@ -707,8 +707,8 @@ void MainWindow::plotAltitude(QVector* altitudeVector, int altitude_vec_ ui->plotWidget->graph(0)->setData(x, y); // label the axes - ui->plotWidget->xAxis->setLabel("X value"); - ui->plotWidget->yAxis->setLabel("Y label"); + ui->plotWidget->xAxis->setLabel("time"); + ui->plotWidget->yAxis->setLabel("altitude"); // set the axes range, so we see all data ui->plotWidget->xAxis->setRange(-1, 1); diff --git a/matlab-data-generators/final-data/wrong_altitude_generator.m b/matlab-data-generators/final-data/wrong_altitude_generator.m index 1110ca8..2f2606c 100644 --- a/matlab-data-generators/final-data/wrong_altitude_generator.m +++ b/matlab-data-generators/final-data/wrong_altitude_generator.m @@ -25,7 +25,7 @@ m = [x' y']; dlmwrite('wrong_altitude_data.csv', m); -plot(x' ,y'); +plot(x_joined ,y_joined); xlabel( 'Time(sec)' ); ylabel('Altitude (m)'); title("Altitude test data"); diff --git a/python-test-scripts/main.py b/python-test-scripts/main.py index 964c6d7..c17adc4 100644 --- a/python-test-scripts/main.py +++ b/python-test-scripts/main.py @@ -22,10 +22,12 @@ max_alt = 0 # the maximum altitude value recognized from the file apogee_flag = 0 # show that apogee has been detected +main_eject_flag = 0 apogee = 0 # determine the altitude at which apogee was detected state_log_file = "state_log_file.txt" LAUNCH_DETECTION_THRESHOLD = 10 # below 5 meters we have not launched + states = { 1:"PREFLIGHT", 2:"POWERED_FLIGHT", @@ -42,9 +44,13 @@ def check_flight_states(altitude_values, has_header=0): Check flight states based on the test data """ # state machine - + global max_alt + global apogee_flag + global main_eject_flag altitude_values_float = [] + state_log = open(state_log_file, 'w').close() + if has_header: altitude_values = altitude_values[1:] l = len(altitude_values[1:]) @@ -58,32 +64,59 @@ def check_flight_states(altitude_values, has_header=0): for j in range(0, l): altitude_values_float.append(float(altitude_values[j])) - for alt_index in range(0, l): + for alt_index in range(0, len(altitude_values_float)): state_log = open(state_log_file, 'a') - # detect PREFLIGHT - if altitude_values_float[alt_index] < LAUNCH_DETECTION_THRESHOLD: - state_log.write(states[1]) # append flight state to file - state_log.write("\n") + if apogee_flag == 0: + # detect PREFLIGHT + if altitude_values_float[alt_index] < LAUNCH_DETECTION_THRESHOLD: + state_log.write(states[1]) # append flight state to file + state_log.write("\n") - # detect apogee - if altitude_values_float[alt_index] > max_alt: - max_alt = altitude_values[alt_index] + # detect POWERED FLIGHT + elif LAUNCH_DETECTION_THRESHOLD < altitude_values_float[alt_index] < LAUNCH_DETECTION_THRESHOLD + 20: + state_log.write(states[2]) # append flight state to file + state_log.write("\n") - if apogee_flag == 0: - if (max_alt - altitude_values[alt_index]) > 3: + # detect APOGEE + if altitude_values_float[alt_index] > max_alt: + max_alt = altitude_values_float[alt_index] + + if (max_alt - float(altitude_values_float[alt_index])) > 3: apogee = max_alt apogee_flag = 1 print("Apogee detected at " + str(apogee)) - state_log.write(states[1]) # append flight state to file - state_log.write("\n") - - + state_log.write(states[3]) # append flight state to file + state_log.write("\n") - + # DROGUE EJECT + state_log.write(states[4]) # append flight state to file + state_log.write("\n") - state_log.close() + # DROGUE DESCENT + state_log.write(states[5]) # append flight state to file + state_log.write("\n") + + # STATES AFTER APOGEE + elif apogee_flag == 1: + # detect MAIN CHUTE EJECT + if LAUNCH_DETECTION_THRESHOLD <= altitude_values_float[alt_index] <= max_alt: + if main_eject_flag == 0: + state_log.write(states[6]) # append flight state to file + state_log.write("\n") + main_eject_flag = 1 + elif main_eject_flag == 1: + # MAIN CHUTE DESCENT + state_log.write(states[7]) # append flight state to file + state_log.write("\n") + + if altitude_values_float[alt_index] < LAUNCH_DETECTION_THRESHOLD: + # POST FLIGHT + state_log.write(states[8]) # append flight state to file + state_log.write("\n") + + state_log.close() def generate_altitude_plot(has_header = 1): diff --git a/python-test-scripts/maxt.py b/python-test-scripts/maxt.py index 3130144..426a746 100644 --- a/python-test-scripts/maxt.py +++ b/python-test-scripts/maxt.py @@ -3,7 +3,7 @@ mn = 0 apg_flag = 0 -apg_val = 0; +apg_val = 0 for i in range(0, len(k)): if k[i] > mx: diff --git a/python-test-scripts/state_log_file.txt b/python-test-scripts/state_log_file.txt index d308fb0..e9940dd 100644 --- a/python-test-scripts/state_log_file.txt +++ b/python-test-scripts/state_log_file.txt @@ -16,5 +16,23 @@ PREFLIGHT PREFLIGHT PREFLIGHT PREFLIGHT -PREFLIGHT -PREFLIGHT +POWERED_FLIGHT +POWERED_FLIGHT +POWERED_FLIGHT +APOGEE +DROGUE EJECT +DROGUE_DESCENT +MAIN_EJECT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +MAIN_DESCENT +POST_FLIGHT