From 73e01cbac7e599634e9c2bb6adf795172f8d1fde Mon Sep 17 00:00:00 2001 From: Gavin Furtado Date: Wed, 6 Mar 2024 15:51:49 +0000 Subject: [PATCH 1/2] Preliminary GUI --- Phase 2/filter_py_lib_test/GUI.py | 60 ++++++++---------- .../__pycache__/kf_algorithm.cpython-311.pyc | Bin 0 -> 7852 bytes Phase 2/filter_py_lib_test/kf_algorithm.py | 4 +- 3 files changed, 27 insertions(+), 37 deletions(-) create mode 100644 Phase 2/filter_py_lib_test/__pycache__/kf_algorithm.cpython-311.pyc diff --git a/Phase 2/filter_py_lib_test/GUI.py b/Phase 2/filter_py_lib_test/GUI.py index 5adfc36..c08821b 100644 --- a/Phase 2/filter_py_lib_test/GUI.py +++ b/Phase 2/filter_py_lib_test/GUI.py @@ -1,45 +1,35 @@ +import tkinter import customtkinter as ctk -# from tkinter import simpledialog +import kf_algorithm -# def get_numbers(): -# num1 = simpledialog.askfloat("Enter Number 1", "Enter the first number:") -# num2 = simpledialog.askfloat("Enter Number 2", "Enter the second number:") -# num3 = simpledialog.askfloat("Enter Number 3", "Enter the third number:") -# if num1 is not None and num2 is not None and num3 is not None: -# print("Numbers entered:", num1, num2, num3) -# else: -# print("User canceled") +def RunProgram(): + try: + val_1 = int(sample_size.get()) + kf_algorithm.main(val_1) + except ValueError: + ctk.messagebox.showerror('Error','Please Enter a valid number') -# # Create main window -# root = tk.Tk() -# root.title("Number Input") -# # Create button to get numbers -# button = tk.Button(root, text="Enter Numbers", command=get_numbers) -# button.pack(pady=10) -# # Run the application -# root.mainloop() +# Apperance settings +ctk.set_appearance_mode('System') +ctk.set_default_color_theme('blue') -ctk.set_appearance_mode('system') -ctk.set_default_color_theme('drak-blue') +# App frame +app = ctk.CTk() +app.geometry('720x480') +app.title('Kalman Filter Algorithm') -root = ctk.CTk() -root.geometry('600x400') +#Adding UI elements +label_1=ctk.CTkLabel(app, text="Sample Size") +label_1.pack(padx=10,pady=10) -def parameters(): - print('Please enter the values') +sample_size = ctk.CTkEntry(app,width=200, height=30) +sample_size.pack(padx=10,pady=10) -frame=ctk.CTkFrame(master=root) -frame.pack(pady=20, padx=60, fill='both', expand=True) +# Plot Button +plot = ctk.CTkButton(app, text="Plot Graph",command=RunProgram) +plot.pack(padx=10,pady=10) -label = ctk.CTkLabel(master=frame, text='Kalman estimation') -label.pack(pady=12, padx=10) - -number_of_samples = ctk.CTkEntry(master=frame, placeholder_text='Number of Samples') -number_of_samples.pack(pady=12,padx=10) - -button = ctk.CTkButton(master=frame, text='Run Kalman Filter') -number_of_samples.pack(pady=12,padx=10) - -root.mainloop() \ No newline at end of file +# Run app +app.mainloop() 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 new file mode 100644 index 0000000000000000000000000000000000000000..e94a67a4b341869147b271a9591d5217298b9165 GIT binary patch literal 7852 zcmd5hOKjUnmXuVIC|Qy%|No+s$gw+ZXYBM$d!2MLN<2yWlXPMy8OKqYLyNRchY}T% za>oLN^$fCr7uZ7%4NML>=rEIYZvt$NKFlFlV1YhT1_28MvfIF72jiQA?f`>6%_~xr zL^+0twBZ&XO6+59y;kyke{FY#e1%h?4 zZo#$SHou+)WPZI1KJ)8OlM4Ztg%ez80+>e#rNawh7ZD&>^pIGHEED))y-z#~&8!a~ zEnJlK-*e-Uq>!87TAo7b8LpZMsJZ9N-zb?+1uyfF2l_#DO&*;hSlVO-*-=d+20b13j?jRS}n7#=kBLadsc20*hq8W_WCLuFZF(MhN&4WTo%AC> zznN`eqX+1F524?xy5CCQhC1oD0sVHigY7&(-**W8F4extHT}`*I^+(8;^}0u#c*(fPMIFyhbS;)T*=Jh{d8g zVw7TD0LdT)X)c#eGtzp{tXvfpPBu%{I=~1CNn+MvMP-(i6^fTB?mm+fC`F`{6^@b_ zyv8V*&vQ^`6pWCQVQsP8608<>+$44bFj*c}q73U$#tRYmWlX}1#8D}LDoh4?k8|VH z4a#i4t{@ z5oFGic9v6eQl@Sm#>ULizjp88EoKkf*4Hk>zr-(N#qYg>`c(;UkbBrr@;%pVg|Ljm zP)m}SresjQDCNl;Fb&j*Jem(xkw(&^`QZGRt;KxscC|c88ckV2ROn1Dy~s(1e|>_+ zG@&qQ6}$?s2%O=2ATW!ZVEERpuiyO86Go*lx%XctXSZyvAK)xfZ5m0R1pa^{dx|he zc6sl=F`a=#{X`s~)$VA<^uCxJ%}3_P>f!mwZAX3YTTHp{5|fi<9;W81$jclx!^@WG zf#v2y7Ho|Xa-5uRyC#W?%pxyfE1JQ^t*q}&0+HnQDlaAt3o7HS32!Vo{ji#vPTqtKLryN^GdDTI$@dg7n>0`0 zzgr7irijl;pi7x_ZQq zXV-ycUd{;&NMqWrG=>?0pZpw_%?9yigz%CNKY6sKp}`Uw)X^Xm-uQ@)?ys(FrM9PD zCd`LxAJ~LYe`z4`&ETl8WR(MSm$S$800_|R&r(TA>xo$r9znRm2eqFn>tgY~sclDmOa!y_kC$*FG1@CqL3I-YJird?CM_0sQ_?Fh1mf54ncA_k)DDZ5PFM zP^^T8bTp))p)zVc0O{OCM|aTC5{m06uAz7tb?>6#9W-1*BRU$<&l zo#$>6dKBCRPXQIYN}z_Px>b*gRIigN+z6X$IIGp0frb4P#(P#Bv*1&G#p<1)){DS* zM=$GR{Z85iKj2qy2le<)jtivfF9cMw5LDV~Sa0KChIr(vH zs7)+cyTdNKpzd|lLk;aAXZtd8-iiv5L&ga^`>74}<%ZjLq1mBpY!_xygK9u+ZqRj$ z+ET=O`GM4+yC~pA4j=)b0k73DHa;NC1owC^p1p>dYja@Zlf+DFtJ?MyPXA}7i-bXi zb_XUtZp@@c8g$sS7ZN2u7CN>+pW>TS)F7~3Wc6` z=v^mQL+{>q=v^mOL+`!-p`5H~ceUFtv*G6r_5zwZWw(MS(rcI5X0-=A!xr#VNtRsl z)HJB}9s=)sJDiQOt!$g+2R?<%?lXMhHB+Hq?Jq+3;b3xFm5Ttp{)1SJR(hx`T~%4U zhse?hw`FO7gKv76ECcGmJIXTfqh#r+%7PA&r4eq+(f|h^yA`}_(?4&RmqB c3B( zQL^+`WeFT2OC#Ktr2)=-J*C5zpJ>H;=*J#-etk_{# zYzuh!vHa&%*E`KXFl#B7N!ejA?0u(1maBNzA1l}cR{%>k9rG1%6e=M!L0sljmJ`2h zjkkZUQuy<^QDg+Ii+vh=StDSTWrdaS?ZjxZf&;YaqvEqk!k2+PeD~PH7Z%H7#i$aN zUit~nCUAxwTnXbzc==z=cU65=5M&-g2@?1N*dg;P;Lc)iw#oKRz?n6gu5gSDo)QlI z8Nte>5Tl1H@juH~knkDhqW5M3`&C$7HiyhL!LxF5xX&!Ye|;<}P7tHUa{~j7+~( z8p6OMI6Dd%sKg6iH^dWsRv<$t&Z?SdM~D6zJS&MQPL}DExW-5jMM!am zYu0dmYPfD2K1&-$dqpcwBE2^BEhJjaNl#hMj@8X*H(|ArO^yr;(1==$m^}muy?_(7syvs=Upm-C0@*lzB0hc;LM51~)wsmUz z=zkv3W`C)L=S$&vJv_g0u{{34zl;ASmd4NNvw7i>=T%qF zR}YFui_Gtai{0fT@xu!He$UW}*Mz70{qJ$M8F~{Wdi$Sr7cXqNes{4rRX%pyD(rh) zN5@_huHNzQakd$G6C&Dr_10s>TU!@joGrDU*IUnT`pZKjyF(xB41G`<`k6lTGmRW9 zA0OX6KD~2%x^(=Ee*BC^9s~Bn?Ru#H@%6{|i_zjlDHPX3@lDsOP@5ha)MBT%6Q$5u zJ#=={RY8pxg;MC09y(=0T6^^9P;sc3(1y=z7jBoL3wm^6(^rngcVj1aVkb+n2|YHU zk^SZPiQV{5cj7-S#Xr>JA8O>0Z=-QQjGox^0p&n=lh(v`$WIKk{Lz zXG-sx!k&NMz>}%p&uF95`mxiczB78?8Hhc+>ghX(x{r{T1dBTu#Cg@;_0^T)QEhl? zJ8C`?+t;@{^x<<_;-+@%mz8(^wzhCbyLCrTBsKcJCdrjo$!Tj}YSNcF{h-`Fw#9FU z%k4wO_g^%>h7eD}4DKXc8&~$hZXxiyWYOHFe<07KMK&jJXQeg3#1S$1KOln* z%H`U32V7{Mz*#5Z>d=UG>n#&~n*ElEm}bBAWeZp)S~dGE6WyBg-A6$n-TM<)^FC3{ zmRv+n-`4C)x8}b9?*`gOi!O{&mtXb}D72a1@$_h(o-!ggW`2F~;l&N}*@w1X0Gl%Y E1u7w>NB{r; literal 0 HcmV?d00001 diff --git a/Phase 2/filter_py_lib_test/kf_algorithm.py b/Phase 2/filter_py_lib_test/kf_algorithm.py index 53dc793..eb32eb7 100644 --- a/Phase 2/filter_py_lib_test/kf_algorithm.py +++ b/Phase 2/filter_py_lib_test/kf_algorithm.py @@ -82,14 +82,14 @@ def visulaise_data(position, velocity, acceleration, noise): data = {'Current State':[],'Predicted State':[],'Updated State':[]} -def main(): +def main(val_1): ''' 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=10) #input + sensor = sen.PositionSensor(noise_mean=1.0, noise_std=1.5, dt=dt ,sample_size=val_1) #input position, velocity, acceleration, noise = sensor.data_set() ## Data Visualisation ## From 64d8d073403b5e91ba6a259ec065c29041a85ec6 Mon Sep 17 00:00:00 2001 From: Gavin Furtado Date: Wed, 6 Mar 2024 16:51:01 +0000 Subject: [PATCH 2/2] Links --- Phase 2/filter_py_lib_test/GUI.py | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/Phase 2/filter_py_lib_test/GUI.py b/Phase 2/filter_py_lib_test/GUI.py index c08821b..4b17e7a 100644 --- a/Phase 2/filter_py_lib_test/GUI.py +++ b/Phase 2/filter_py_lib_test/GUI.py @@ -1,3 +1,12 @@ +''' +https://www.youtube.com/watch?v=Miydkti_QVE + +https://www.youtube.com/playlist?list=PLfZw_tZWahjxJl81b1S-vYQwHs_9ZT77f + +https://www.youtube.com/watch?v=0H19QzbBqC4 + +''' + import tkinter import customtkinter as ctk import kf_algorithm @@ -7,7 +16,7 @@ def RunProgram(): val_1 = int(sample_size.get()) kf_algorithm.main(val_1) except ValueError: - ctk.messagebox.showerror('Error','Please Enter a valid number') + tkinter.messagebox.showerror('Error','Please Enter a valid number') @@ -20,16 +29,32 @@ def RunProgram(): app.geometry('720x480') app.title('Kalman Filter Algorithm') +font_1 = ctk.CTkFont(family='Calibri',size=14, weight='bold') + #Adding UI elements -label_1=ctk.CTkLabel(app, text="Sample Size") +# Sample Size +label_1=ctk.CTkLabel(app, text="Sample Size",font=font_1) label_1.pack(padx=10,pady=10) +label_1.place(relx=0.1,rely=0.1,anchor=tkinter.CENTER) 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) + +# Noise Mean +# label_2 = ctk.CTkLabel(app,text='Mean value of Noise') + + +# Noise Standard Deviation + + # Plot Button -plot = ctk.CTkButton(app, text="Plot Graph",command=RunProgram) +plot = ctk.CTkButton(app, text="Plot Graph", corner_radius=32, command=RunProgram, + fg_color='#0096C7',hover_color='#00B4D8',border_color='#023E8A', + border_width=1.5, font=font_1) plot.pack(padx=10,pady=10) +plot.place(relx=0.5,rely=0.8,anchor=tkinter.CENTER) # Run app app.mainloop()