From 9436d48cc1a7e6a72033afc79a6358917fded4e6 Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Tue, 15 Apr 2025 09:52:42 +0200 Subject: [PATCH] Add missing controller definition --- matlab/mat/nass_controllers.mat | Bin 3216 -> 3189 bytes matlab/rotating_7_nano_hexapod.m | 32 ++++++++++++++++++++++--- matlab/rotating_8_nass.m | 2 +- nass-rotating-3dof-model.org | 40 +++++++++++++++++++++++++++---- 4 files changed, 65 insertions(+), 9 deletions(-) diff --git a/matlab/mat/nass_controllers.mat b/matlab/mat/nass_controllers.mat index 5f6576fd0b7e152e2e245f105b2435e4254da8b6..ca9acc315b2ce536fdc2a8109ff2b2be9a5e4ac4 100644 GIT binary patch delta 1779 zcmVvBZTnxGYxHl7SNDHV9NhkRqaWNn*@w^`e+;_cRUsJJ|bowPD9 z_Ip(OPHQ)+xU2=;v@$Pd4g2Ubt2~!dHd-4|@osB-ee^lEJ|BI~e{D$VgstsY@g8dj zeDpczK_7k2S>}ZlSZ8v&Z&f<7PK>I!to@sP^f~7(KKh*V4yDs? z?KTyc^=P|~KIc5;2j0tEugg(cy|HsZpFI|c(()Z81U`@-kpkf5Af~<-hIHkA9!yA-aA0+ zPT;){c<)!dcLDF+z74HMUdk}aZ1m1DreHeHje+8|_fcFUSPAJ~Tf%g#b z#(?(;;61E(p9J1G@J<5nQQ&1H9i-tE_d2faP^rzBgqLEALn- z0c*R~VZYPRuUGZs_PAf?XK@_-pt8;4Su^XiX13S=c;;r!&y}KT1&PT+8!8b2Ub)NW8`c*Zo@lE6V)j z?}plce=f4WwJ4Dk{j1HBAg#<-|Ib=$og2A+S1UJqU$OsMtWP1!znb?7ULU`88UH6S z=NS0<`xxhGOZV^9T`&8V|I>a)z75vven-A%TKk>WerG-Hcg~r8&EYdY#Yh#2xAr^# zjr~p!t$x3AGyDAo00960?3cYx0znYR|91gIe-l3ZAVSngtCb~{Zb48gw6U@_R%*f7 z`35Ff_y)d#m8B0rZ)I;{W9$v?!Y)phaKPOKZZA8@WY~q7{qNq*{z4wW0rw2|tc=3a za;(geaaqQEh`cM3SJ3jr@0Unkj(d%aT`i8Azl6vAuD{+1SudxpmytD89WgEsK7P35 zf4hQ=^U~ko`Wq4IFB1I>PD?+e|>Ebm!d^2#%w zN6lv)2czqV`QIM5qt4qR_7_&~sZYLsJ|e%${j=NcK0G!VG*k0^UF6(V|BTa>Mrzof zCGO4ZTdxhYytatVma0FgPh5=dm-NZdf1<1t--bH7>a?hZdnz!6c1~*Hv+)N@jH(@q6%S1ne zf1g-x#+RFe|8FKVoxL6wUl=q~^Ol>*;ARDun@Qy67R=`6Hqp=EKi?;o zoAKr5V4O0Bn^bR*d;fgp{rUUnm_ai&Z@HNaZtlQxGY;IWbMDk50R&U|H5KkfuYUjl delta 1806 zcmV+p2l4pz7?2r|G#E{9ZXiZwVjwa%ATc*OGd4OfG9WTAGBc4;BavVQv2;!Yf652| z0C=42m|1fhMG(hFiY(i)EIU4hb2)do!;!?C5wVdY5?cY=GPkmcrDU;=WhDa^goJS4 z_XDpy@j_8~<1t@>4?q=F@W97lT00&6(_ZDUO+etO+Uo6|ng9HHcV~8Xqe`jRtWsfZ z+w{?{ywYO)fIj|AdzMPj_$rW`e;_}qk0a@N|DaEQKD>CSRu?dBCPq_JtfN3@gJ~bQ zY(urSLVdt~6uH`scH|5K=Q3uOoxHV}D7gizl2K{PwXKu+Y(~wLv+kHxvDCC($j%gPe_fd@It!Ia ztDtMG;-V^7T)TK$r4}le!^zZ?UDcL4W>i%?HwZ57ztEw|UM}ql^?O3Pg)s$6m z@>*fswdXQa>kR;7jk~1F>r?YO^E)_GXVQGbPx^La0zSpM@ zUDvR&A>m8gE&L6_?-72lfAIT+e~a)p3jbE&-!A+Ig#VE6lfpkL{AYy!obYYo&kKK1 z_^%89L*akybN#uj6F#+XSM}#!!FfQ$gJ6T|$`Ul%*q+A zpTjn_G%xZyMf)~m*NZr>1s!T>Uc?&l(I-}ZF1f5XHY(yB#&-GWe^YMVKKhhfztD*o z+auzg#`gN?Q_g)p`jj)z3og8z4TyM`v4cMPlyl5SpK{(Tba_cz#9YJA>iEvTAP7)2k`C`yjy^GEAS2j?>6AwE_inV?{47T1H5~I z_cq|Y1GMf0-ur;}e!+Ve@ZJr)`+)Zz;JsJy?g!ojzpN8QQ#dD zypIC!A>fSz?_r>$U8hF1Eyq^K@=fL{~@O}xrU#YdS+9e8>)@A3x^8^v>af7a*pY_I)yfbn?G%j5Ak1M83< z^G<)oJrJMYEdGS%Ppl$8uOXxtSB>u*=1PU`8+@n7*^*9Mpz(i{pwPLV=LPe)k>~8+ z(l2&{*JI==;{?>waVYLw4FB@`x1*Q-iTqZ|d;BW><@KTd!}_?8%jFLIRE;Z9I9}s| z>wZ1|e-(Lt(sx7cKbJDUwNx_2`q!E#LA5kr`9Ev5b(VAeu2q(MU$OsctWP1szmoR~ zULU`88UH5{=P>y4`xxixn(p7L+bsK*|I>blzYUsozr)`%Yx|w%-tV;k@%_>L2hTOl zeg}D%^S(Z>_ce#l{uo!HaC~jQ^WWI-bgGr_e|K(XzrO$g0RR8&mAy^^K@i9PcL78b zKKvj+lt`m_6jRY!~q-JkC+`7a~mwDi}w{#tW84fMTb(KDu^ zsFQU5>o{5+SF1D1_d@qE&UY4;yuz60QSn&ELH{~p{`KKHe_AcQ%wm6&>fQIq*Uv}f zm$`qm+wGgXI)i3vzN3qryXv1oy5flSfBG}Wy?%DlY66W`Q^a~h)gRU;F8cRN`lM$; z*70+G!_4n{rTIbJPm5CjBwUGlo{8LChS}U)A^I7-`^0iHyxjclSj8A_QoVle{iThg z+s)z?gJx>pax)s-%)xRqirmb@Y;G2aeg^M8vD^$VH-7|%cFv9ACe`cb-oO7mT6o^h zJ~3#f<}Ej)!ObEpH>1eSRhZ4qHKL!vyH6}P!^_R?IA#ntsa`+#{^7#gp wax)s-EWvU!4BV`8?oZc%rvLx| diff --git a/matlab/rotating_7_nano_hexapod.m b/matlab/rotating_7_nano_hexapod.m index a406ac2..e9406cc 100644 --- a/matlab/rotating_7_nano_hexapod.m +++ b/matlab/rotating_7_nano_hexapod.m @@ -221,6 +221,19 @@ i_iff_hpf_md = i_iff_hpf_md(end)+1; i_iff_hpf_pz = find(opt_iff_hpf_xi_pz > 0.95*max(opt_iff_hpf_xi_pz)); i_iff_hpf_pz = i_iff_hpf_pz(end)+1; +%% Define the obtained controllers +Kiff_hpf_vc = Kiff*opt_iff_hpf_gain_vc(i_iff_hpf_vc); +Kiff_hpf_vc.InputName = {'fu', 'fv'}; +Kiff_hpf_vc.OutputName = {'Fu', 'Fv'}; + +Kiff_hpf_md = Kiff*opt_iff_hpf_gain_md(i_iff_hpf_md); +Kiff_hpf_md.InputName = {'fu', 'fv'}; +Kiff_hpf_md.OutputName = {'Fu', 'Fv'}; + +Kiff_hpf_pz = Kiff*opt_iff_hpf_gain_pz(i_iff_hpf_pz); +Kiff_hpf_pz.InputName = {'fu', 'fv'}; +Kiff_hpf_pz.OutputName = {'Fu', 'Fv'}; + %% Optimal modified IFF parameters that yields maximum simultaneous damping figure; yyaxis left @@ -303,9 +316,9 @@ mn = 15; % Nano-Hexapod mass [kg] ms = 1; % Sample Mass [kg] %% IFF Controller -Kiff_vc = 1/(s + 0.1*sqrt(1e4/(mn+ms)))*eye(2); % IFF -Kiff_md = 1/(s + 0.1*sqrt(1e6/(mn+ms)))*eye(2); % IFF -Kiff_pz = 1/(s + 0.1*sqrt(1e8/(mn+ms)))*eye(2); % IFF +Kiff_vc = 1/(s + 0.1*sqrt(1e4/(mn+ms)))*eye(2); % IFF - VC +Kiff_md = 1/(s + 0.1*sqrt(1e6/(mn+ms)))*eye(2); % IFF - MD +Kiff_pz = 1/(s + 0.1*sqrt(1e8/(mn+ms)))*eye(2); % IFF - PZ %% General Configuration model_config = struct(); @@ -392,6 +405,19 @@ for kp_i = 1:length(kps_pz) opt_iff_kp_gain_pz(kp_i) = g_opt; end +%% Define the obtained controllers +Kiff_kp_vc = Kiff_vc*opt_iff_kp_gain_vc(i_kp_vc); +Kiff_kp_vc.InputName = {'fu', 'fv'}; +Kiff_kp_vc.OutputName = {'Fu', 'Fv'}; + +Kiff_kp_md = Kiff_md*opt_iff_kp_gain_md(i_kp_md); +Kiff_kp_md.InputName = {'fu', 'fv'}; +Kiff_kp_md.OutputName = {'Fu', 'Fv'}; + +Kiff_kp_pz = Kiff_pz*opt_iff_kp_gain_pz(i_kp_pz); +Kiff_kp_pz.InputName = {'fu', 'fv'}; +Kiff_kp_pz.OutputName = {'Fu', 'Fv'}; + %% Find result with wanted parallel stiffness [~, i_kp_vc] = min(abs(kps_vc - 1e3)); [~, i_kp_md] = min(abs(kps_md - 1e4)); diff --git a/matlab/rotating_8_nass.m b/matlab/rotating_8_nass.m index 12dfe9f..6306e2b 100644 --- a/matlab/rotating_8_nass.m +++ b/matlab/rotating_8_nass.m @@ -209,7 +209,7 @@ hold off; yticks(-360:90:360); ylim([ -200, 20]); -linkaxes([ax,ax2],'x'); +linkaxes([ax1,ax2],'x'); xlim([freqs_vc(1), freqs_vc(end)]); xticks([1e-1, 1e0, 1e1]); diff --git a/nass-rotating-3dof-model.org b/nass-rotating-3dof-model.org index cf03555..5d6dc3f 100644 --- a/nass-rotating-3dof-model.org +++ b/nass-rotating-3dof-model.org @@ -2853,7 +2853,7 @@ exportFig('figs/rotating_nano_hexapod_dynamics_pz.pdf', 'width', 'third', 'heigh #+end_subfigure #+end_figure -** Optimal IFF with a High-Pass Filter +** Optimal IFF with a High-Pass Filter Integral Force Feedback with an added high-pass filter is applied to the three nano-hexapods. First, the parameters ($\omega_i$ and $g$) of the IFF controller that yield the best simultaneous damping are determined from Figure ref:fig:rotating_iff_hpf_nass_optimal_gain. The IFF parameters are chosen as follows: @@ -2912,6 +2912,21 @@ i_iff_hpf_pz = find(opt_iff_hpf_xi_pz > 0.95*max(opt_iff_hpf_xi_pz)); i_iff_hpf_pz = i_iff_hpf_pz(end)+1; #+end_src +#+begin_src matlab +%% Define the obtained controllers +Kiff_hpf_vc = Kiff*opt_iff_hpf_gain_vc(i_iff_hpf_vc); +Kiff_hpf_vc.InputName = {'fu', 'fv'}; +Kiff_hpf_vc.OutputName = {'Fu', 'Fv'}; + +Kiff_hpf_md = Kiff*opt_iff_hpf_gain_md(i_iff_hpf_md); +Kiff_hpf_md.InputName = {'fu', 'fv'}; +Kiff_hpf_md.OutputName = {'Fu', 'Fv'}; + +Kiff_hpf_pz = Kiff*opt_iff_hpf_gain_pz(i_iff_hpf_pz); +Kiff_hpf_pz.InputName = {'fu', 'fv'}; +Kiff_hpf_pz.OutputName = {'Fu', 'Fv'}; +#+end_src + #+begin_src matlab :results none %% Optimal modified IFF parameters that yields maximum simultaneous damping figure; @@ -3066,9 +3081,9 @@ mn = 15; % Nano-Hexapod mass [kg] ms = 1; % Sample Mass [kg] %% IFF Controller -Kiff_vc = 1/(s + 0.1*sqrt(1e4/(mn+ms)))*eye(2); % IFF -Kiff_md = 1/(s + 0.1*sqrt(1e6/(mn+ms)))*eye(2); % IFF -Kiff_pz = 1/(s + 0.1*sqrt(1e8/(mn+ms)))*eye(2); % IFF +Kiff_vc = 1/(s + 0.1*sqrt(1e4/(mn+ms)))*eye(2); % IFF - VC +Kiff_md = 1/(s + 0.1*sqrt(1e6/(mn+ms)))*eye(2); % IFF - MD +Kiff_pz = 1/(s + 0.1*sqrt(1e8/(mn+ms)))*eye(2); % IFF - PZ %% General Configuration model_config = struct(); @@ -3156,6 +3171,21 @@ for kp_i = 1:length(kps_pz) end #+end_src +#+begin_src matlab +%% Define the obtained controllers +Kiff_kp_vc = Kiff_vc*opt_iff_kp_gain_vc(i_kp_vc); +Kiff_kp_vc.InputName = {'fu', 'fv'}; +Kiff_kp_vc.OutputName = {'Fu', 'Fv'}; + +Kiff_kp_md = Kiff_md*opt_iff_kp_gain_md(i_kp_md); +Kiff_kp_md.InputName = {'fu', 'fv'}; +Kiff_kp_md.OutputName = {'Fu', 'Fv'}; + +Kiff_kp_pz = Kiff_pz*opt_iff_kp_gain_pz(i_kp_pz); +Kiff_kp_pz.InputName = {'fu', 'fv'}; +Kiff_kp_pz.OutputName = {'Fu', 'Fv'}; +#+end_src + #+begin_src matlab %% Find result with wanted parallel stiffness [~, i_kp_vc] = min(abs(kps_vc - 1e3)); @@ -3839,7 +3869,7 @@ hold off; yticks(-360:90:360); ylim([ -200, 20]); -linkaxes([ax,ax2],'x'); +linkaxes([ax1,ax2],'x'); xlim([freqs_vc(1), freqs_vc(end)]); xticks([1e-1, 1e0, 1e1]); #+end_src