From 2f1b1327ed7f0d85ddf696ed86175d1881ea7886 Mon Sep 17 00:00:00 2001 From: Gavin Furtado Date: Mon, 11 Mar 2024 16:05:54 +0000 Subject: [PATCH] GUI functional upgrade --- Phase 2/filter_py_lib_test/GUI.py | 96 +++++++++++++++++- .../__pycache__/kf_algorithm.cpython-311.pyc | Bin 7852 -> 7990 bytes Phase 2/filter_py_lib_test/kf_algorithm.py | 11 +- 3 files changed, 100 insertions(+), 7 deletions(-) diff --git a/Phase 2/filter_py_lib_test/GUI.py b/Phase 2/filter_py_lib_test/GUI.py index 4b17e7a..a1f3393 100644 --- a/Phase 2/filter_py_lib_test/GUI.py +++ b/Phase 2/filter_py_lib_test/GUI.py @@ -14,7 +14,11 @@ def RunProgram(): try: val_1 = int(sample_size.get()) - kf_algorithm.main(val_1) + n_mean = float(mean_noise.get()) + n_std = float(noise_std.get()) + initial_P = [int(x_pos_err.get()),int(y_pos_err.get()), int(x_vel_err.get()), int(y_vel_err.get())] + R_matrix =[int(x_pos_obs_err.get()),int(y_pos_obs_err.get()), int(x_vel_obs_err.get()), int(y_vel_obs_err.get())] + kf_algorithm.main(val_1, n_mean, n_std, initial_P,R_matrix) except ValueError: tkinter.messagebox.showerror('Error','Please Enter a valid number') @@ -39,13 +43,99 @@ def RunProgram(): sample_size = ctk.CTkEntry(app,width=200, height=30) sample_size.pack(padx=10,pady=10) -sample_size.place(relx=0.3,rely=0.1,anchor=tkinter.CENTER) +sample_size.place(relx=0.35,rely=0.1,anchor=tkinter.CENTER) # Noise Mean -# label_2 = ctk.CTkLabel(app,text='Mean value of Noise') +label_2 = ctk.CTkLabel(app,text='Mean value of Noise', font=font_1) +label_2.pack(padx=10,pady=10) +label_2.place(relx=0.1,rely=0.2,anchor=tkinter.CENTER) +mean_noise = ctk.CTkEntry(app,width=200, height=30) +mean_noise.pack(padx=10,pady=10) +mean_noise.place(relx=0.35,rely=0.2,anchor=tkinter.CENTER) # Noise Standard Deviation +label_3 = ctk.CTkLabel(app,text='Nosie Standard Deviation', font=font_1) +label_3.pack(padx=10,pady=10) +label_3.place(relx=0.1,rely=0.3,anchor=tkinter.CENTER) + +noise_std = ctk.CTkEntry(app,width=200, height=30) +noise_std.pack(padx=10,pady=10) +noise_std.place(relx=0.35,rely=0.3,anchor=tkinter.CENTER) + +# Process Covariance Matrix +label_4 = ctk.CTkLabel(app,text='Initial Process Covariance Matrix', font=font_1) +label_4.pack(padx=10,pady=10) +label_4.place(relx=0.75,rely=0.1,anchor=tkinter.CENTER) + +label_5 = ctk.CTkLabel(app,text='x-position error', font=font_1) +label_5.pack(padx=10,pady=10) +label_5.place(relx=0.7,rely=0.2,anchor=tkinter.CENTER) + +x_pos_err = ctk.CTkEntry(app,width=100, height=30) +x_pos_err.pack(padx=10,pady=10) +x_pos_err.place(relx=0.85,rely=0.2,anchor=tkinter.CENTER) + +label_6 = ctk.CTkLabel(app,text='y-position error', font=font_1) +label_6.pack(padx=10,pady=10) +label_6.place(relx=0.7,rely=0.3,anchor=tkinter.CENTER) + +y_pos_err = ctk.CTkEntry(app,width=100, height=30) +y_pos_err.pack(padx=10,pady=10) +y_pos_err.place(relx=0.85,rely=0.3,anchor=tkinter.CENTER) + +label_7 = ctk.CTkLabel(app,text='x-velocity error', font=font_1) +label_7.pack(padx=10,pady=10) +label_7.place(relx=0.7,rely=0.4,anchor=tkinter.CENTER) + +x_vel_err = ctk.CTkEntry(app,width=100, height=30) +x_vel_err.pack(padx=10,pady=10) +x_vel_err.place(relx=0.85,rely=0.4,anchor=tkinter.CENTER) + +label_8 = ctk.CTkLabel(app,text='y-velocity error', font=font_1) +label_8.pack(padx=10,pady=10) +label_8.place(relx=0.7,rely=0.5,anchor=tkinter.CENTER) + +y_vel_err = ctk.CTkEntry(app,width=100, height=30) +y_vel_err.pack(padx=10,pady=10) +y_vel_err.place(relx=0.85,rely=0.5,anchor=tkinter.CENTER) + +# R_matrix +label_9 = ctk.CTkLabel(app,text='Observation Error Matrix (R_matrix)', font=font_1) +label_9.pack(padx=10,pady=10) +label_9.place(relx=0.15,rely=0.4,anchor=tkinter.CENTER) + +label_10 = ctk.CTkLabel(app,text='x-position observation error', font=font_1) +label_10.pack(padx=10,pady=10) +label_10.place(relx=0.15,rely=0.45,anchor=tkinter.CENTER) + +x_pos_obs_err = ctk.CTkEntry(app,width=60, height=20) +x_pos_obs_err.pack(padx=10,pady=10) +x_pos_obs_err.place(relx=0.33,rely=0.45,anchor=tkinter.CENTER) + +label_11 = ctk.CTkLabel(app,text='y-position observation error', font=font_1) +label_11.pack(padx=10,pady=10) +label_11.place(relx=0.15,rely=0.5,anchor=tkinter.CENTER) + +y_pos_obs_err = ctk.CTkEntry(app,width=60, height=20) +y_pos_obs_err.pack(padx=10,pady=10) +y_pos_obs_err.place(relx=0.33,rely=0.5,anchor=tkinter.CENTER) + +label_12 = ctk.CTkLabel(app,text='x-velocity observation error', font=font_1) +label_12.pack(padx=10,pady=10) +label_12.place(relx=0.15,rely=0.55,anchor=tkinter.CENTER) + +x_vel_obs_err = ctk.CTkEntry(app,width=60, height=20) +x_vel_obs_err.pack(padx=10,pady=10) +x_vel_obs_err.place(relx=0.33,rely=0.55,anchor=tkinter.CENTER) + +label_13 = ctk.CTkLabel(app,text='y-velocity observation error', font=font_1) +label_13.pack(padx=10,pady=10) +label_13.place(relx=0.15,rely=0.6,anchor=tkinter.CENTER) + +y_vel_obs_err = ctk.CTkEntry(app,width=60, height=20) +y_vel_obs_err.pack(padx=10,pady=10) +y_vel_obs_err.place(relx=0.33,rely=0.6,anchor=tkinter.CENTER) diff --git a/Phase 2/filter_py_lib_test/__pycache__/kf_algorithm.cpython-311.pyc b/Phase 2/filter_py_lib_test/__pycache__/kf_algorithm.cpython-311.pyc index e94a67a4b341869147b271a9591d5217298b9165..4723e6fdf5be99ffc7f0cc834ec2d2f95718cfa9 100644 GIT binary patch delta 1675 zcmZ`(O>7fK6rQoY{@p*@Ywxaqk~j`^2p}~eDuvdRRw$PO3PQ9%Vnr4cBBS7{n^ie5 zE842PQ3>f)2&x`(sfiRHf)Y^<9C84OV}dLpEFqO6m(r@@&_fZk3v29^J=Tuj_s!e) zz4vzCHp_Ppi?;X{Sc?W5ThG_&AVkOL)(k zv9u(+7+PAuk4|vp)3hF2wzA#&UbLg!9yJ!cJMGfmvn!m8HN9)(qfF} z2~YT+e1!cjbT@x!06*NHCjt?PL}U^ti3S_eHD^%mPFN#!1YRaecm%G-%Ztg5A{&~% zieBDT^zcL(s92x{N3q~2raFr3W$UZxX8S@^m6lL} zFSY53Kjon(^7vzUd{tkcZ06Q$TX=J6YwFR-2cK-uoZUV*+nSl%kt;2^0vpTk2F+IpdxT|aZLx;eY0Jt{oN?(oN3{PB(7^&9@+DLd&y z@L9fu%TUYj8Ts5!H*)^#`m$NAo6Cm%K{xi<+cA4vg3bIGz6?+Ew-O5&OMj!T{RI3t GH2wxy6*ndT delta 1516 zcmZ{kPiWIn9LMw8rcK)misF)GQ8Q76)<2lRQKX95oa! zawKGi31>!XinE-Sb4t=FW*yC~-lY&TYVxK4^Sm||#hmUgt0EG`Y*);C=6TFQi_am^ zT3r%6ZckkGHRu_(+;cQzAPbrnAz>2pY*-=^RD?lRCQ@Cr_Vp}Yi@Jp|k7CXkhv|9H zGx3~<(&d&MH;EIa;iEOse$-60%PBiL5xZ;knF%P1T1F)annd>Ck|bGItTI`Rj#O); zrHE!mNXiV?&N)dL21lSR_8Xq$i0Se~ZI9etfXBmIo`mN0tfQA}^i?F`O-w)$XvK7- zyK&Tx({9Y$aRw$O-7jp5FeeqOF`{D$OV53n!`uV^|CdkFJ@m}!I+k%9D_F$|oNUmm z)UvOWbrNQlWZ{NVL|OPQm#dmfWP1?3xIW7&g(M#3F1e$x#02>wq7M27Ah7R=UXy8=$Gv z@#@hRc~ChX{H?%4btJKGU5h8yJ=^E3N5~3yHq|wR#-TsiYuDxxFjQwuRY_Fbf}3 zSGBKF{);rUCk-{_W~n*dTy9IHj#PqC{X%en9skV?z=FP&2r`1&;joy diff --git a/Phase 2/filter_py_lib_test/kf_algorithm.py b/Phase 2/filter_py_lib_test/kf_algorithm.py index eb32eb7..b8a1365 100644 --- a/Phase 2/filter_py_lib_test/kf_algorithm.py +++ b/Phase 2/filter_py_lib_test/kf_algorithm.py @@ -82,14 +82,15 @@ def visulaise_data(position, velocity, acceleration, noise): data = {'Current State':[],'Predicted State':[],'Updated State':[]} -def main(val_1): +def main(val_1, n_mean, n_std, initial_P, R_matrix): ''' The main function of the code. It contains the high level logic. ''' ## Sensor data ## - sensor = sen.PositionSensor(noise_mean=1.0, noise_std=1.5, dt=dt ,sample_size=val_1) #input + # sensor = sen.PositionSensor(noise_mean=1.0, noise_std=1.5, dt=dt ,sample_size=val_1) #input + sensor = sen.PositionSensor(noise_mean=n_mean, noise_std=n_std, dt=dt ,sample_size=val_1) position, velocity, acceleration, noise = sensor.data_set() ## Data Visualisation ## @@ -97,7 +98,8 @@ def main(val_1): ## Initalisation ## initialisation = kal_fil.kalman_initial(position,velocity, acceleration) - P_initial = initialisation.P_initial(2,1,8,7) #input + # P_initial = initialisation.P_initial(2,1,8,7) #input + P_initial = initialisation.P_initial(initial_P[0],initial_P[1],initial_P[2],initial_P[3]) X_initial = initialisation.X_initial() P_prev = P_initial @@ -121,7 +123,8 @@ def main(val_1): predicted_process_covariance = predict.P_predicted() # Kalman Gain - R = kal_fil.R_matrix(3,1,2,1) #input + # R = kal_fil.R_matrix(3,1,2,1) #input + R = kal_fil.R_matrix(R_matrix[0],R_matrix[1],R_matrix[2],R_matrix[3]) K = kal_fil.KalmanGain(predicted_process_covariance,R) # Measurement input