diff --git a/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slx b/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slx index b40574c..edd47f8 100644 Binary files a/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slx and b/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slx differ diff --git a/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slx.autosave b/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slx.autosave deleted file mode 100644 index e871200..0000000 Binary files a/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slx.autosave and /dev/null differ diff --git a/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slxc b/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slxc index c2d9536..c2e64b1 100644 Binary files a/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slxc and b/424-Systeme_Non_Lineaires/TP2/Grue_NL_corrNL.slxc differ diff --git a/424-Systeme_Non_Lineaires/TP2/Ini_Grue.m b/424-Systeme_Non_Lineaires/TP2/Ini_Grue.m index ae27b5e..3a55e69 100644 --- a/424-Systeme_Non_Lineaires/TP2/Ini_Grue.m +++ b/424-Systeme_Non_Lineaires/TP2/Ini_Grue.m @@ -5,7 +5,6 @@ clear, clc, - %% Param�tres : m = 500; %kg Mc = 5000; %kg @@ -63,19 +62,6 @@ B_1 =B(:,1); eta = -1/(C_1*(A-B*K)^-1*B_1); -%% -sys = ss(A-B*K,B(:,2),C(2,:),D) -H = tf(sys) -bode(H) -% margin(H) -% Avec le correcteur intégral : -Ti = 5e-4 -CI = tf(1,[-Ti 0]); % négatif pour avoir une phase >180 -%bode(H,CI*H,'grid') -fig =figure(); -margin(CI*H) -grid on; -saveas(fig,"manip_5marge.png"); %% pretty figure % plot(simout) @@ -84,37 +70,21 @@ saveas(fig,"manip_5marge.png"); %% Commande grand gain Deltat= 10 Dini = 0; -Rini = 10; Dfin = 20; -Rfin = 5; -ed = omega0/10; +R = 15; +Rini = 15; +Rfin = 15; +ed = omega0/100; er = ed; coeff_phi = [6/Deltat^5 -15/Deltat^4 10/Deltat^3 0 0 0] +coeff_phi2 = [-20/Deltat^7 70/Deltat^6 -84/Deltat^5 35/Deltat^4 0 0 0 0] -%% -close all; -fig= figure() -plot(Dc) -hold on -plot(simout.Time, simout.Data(:,1)); -xlabel('temps (s)'); -grid on; -title('Vérification de la planification de trajectoire'); -legend('d_c','d'); - -fig2= figure() -plot(Rc) -hold on -plot(simout.Time, simout.Data(:,2)); -xlabel('temps (s)'); -grid on; -title('Vérification de la planification de trajectoire'); -legend('r_c','r'); - - +zh = 1; +xh = (Dini+sqrt((Rini-zh)/(Rfin-zh))*Dfin)/(1+sqrt((Rini-zh)/(Rfin-zh))); +a = (Rini-zh)/(Dini-xh)^2; diff --git a/424-Systeme_Non_Lineaires/TP2/TP2.tex b/424-Systeme_Non_Lineaires/TP2/TP2.tex index 3f891da..8c6d0e0 100644 --- a/424-Systeme_Non_Lineaires/TP2/TP2.tex +++ b/424-Systeme_Non_Lineaires/TP2/TP2.tex @@ -357,15 +357,16 @@ En considérant $\epsilon_d \ll 1 $ et $\epsilon_r <<1 $ on a $\tau_d \simeq \ep \paragraph{Prépa.9} On doit prendre $\epsilon_d$ et $\epsilon_r$ suffisamment petit devant la pulsation du sytème $\omega_0$, pour avoir une commande qui puisse compenser suffisament vite les oscillations du système. \paragraph{Manip.9} -On réalise la commande suivante : -\begin{figure}[ht] +La commande est réalisé comme sur la figure \ref{fig:schemNL}. On +obtient alors les sorties de la figure \ref{fig:pours_traj} +\begin{figure}[H] \centering \includegraphics[width=0.9\textwidth]{boucleNL.png} \caption{Élaboration de la commande pour la porsuite de trajectoire} - \label{fig:label} + \label{fig:schemNL} \end{figure} -\begin{figure}[ht] +\begin{figure}[H] \centering \begin{subfigure}{0.5\textwidth} \centering @@ -382,17 +383,39 @@ On réalise la commande suivante : \caption{Commande en poursuite de trajectoire} \label{fig:pours_traj} \end{figure} -sur la figure \ref{fig:pours_traj} on remarque que la poursuite est plutot bien respecté pour $d$, mais celle sur $r$ conduit à un écart final non nul. +sur la figure \ref{fig:pours_traj} on remarque que la poursuite est +plutot bien respecté pour $d$, mais celle sur $r$ conduit à un écart +final non nul , cela est d'autant plus vrai si $\epsilon_d=\epsilon_r$ devient grand comme sur la figure \ref{fig:eps}. +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{eps_choix} + \caption{Influence de $\epsilon$ sur la trajectoire réelle} + \label{fig:eps} +\end{figure} + \paragraph{Manip.10} +On fait varier la masse dans la synthèse de l'asservissement, en ayant choisi +$\epsilon_d=\epsilon_r= \omega_0/100$. +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{m_choix} + \caption{Robustesse face à une pertubation de la masse} + \label{fig:m_choix} +\end{figure} +On remarque qu'une variation de 200kg n'entraine qu'un écart d'une 30aine de +centimètre avec la consigne ce qui est largement acceptable. \paragraph{Manip.11} -\paragraph{Manip.12} -\paragraph{Manip.13} +En étudiant des variation sur $C_r$ et $C_d$ on ne remarque aucun changement +pour $\epsilon = \omega_0/100$ ou $\epsilon = \omega_0/10$. + +La commande suivant le modèle précédement décrit est donc très robuste +aux pertubations , tant que sa dynamique est rapide devant celle du système. \subsection{Platitude} \paragraph{Prépa.10} -Pour montrer que le systeme est plat, ayant pour sortie plates $(x, z),$ il faut montrer que les états,$d, r, \theta$ et les commandes $F, C$ ne dépendent que des sorties $x, z$ et de leurs derivées. +On montre d'abords que le système est plat pour les sorties $(x, z),$ \begin{equation} \left\{ \begin{aligned} @@ -465,25 +488,25 @@ Ce qui se transpose aux coordonnées: On pose donc : \begin{equation} \begin{aligned} - x_{c}(t) &=(1-\alpha(t)) D_{i n i}+\alpha(t) D_{f i n} \\ - z_{c}(t) &=(1-\alpha(t)) R_{i n i}+\alpha(t) R_{f i n} + x_{c}(t) &=(1-\phi_2(t)) D_{i n i}+\phi_2(t) D_{f i n} \\ + z_{c}(t) &=(1-\phi_2(t)) R_{i n i}+\phi_2(t) R_{f i n} \end{aligned} \end{equation} De manière analogue à la préparation 6 on a les conditions initiales et finales sur les positions et leur dérivées: \[ - \alpha(0) = 0 ,\quad \alpha(\Delta t) =1, \quad \forall i = 1,2,3\left. \deriv[^i\alpha(t)]{t^i}\right|_{t=0}= 0 \text{ et } \left.\deriv[^i\alpha(t)]{t^i}\right|_{t=\Delta t}= 0 + \phi_2(0) = 0 ,\quad \phi_2(\Delta t) =1, \quad \forall i = 1,2,3\left. \deriv[^i\phi_2(t)]{t^i}\right|_{t=0}= 0 \text{ et } \left.\deriv[^i\phi_2(t)]{t^i}\right|_{t=\Delta t}= 0 \] Pour satisfaire les 8 conditions on choisit un polynome d'ordre 7 : \begin{equation} - \alpha(t)=a_{7} t^{7}+a_{6} t^{6}+a_{5} t^{5}+a_{4} t^{4}+a_{3} t^{3}+a_{2} t^{2}+a_{1} t+a_{0} + \phi_2(t)=a_{7} t^{7}+a_{6} t^{6}+a_{5} t^{5}+a_{4} t^{4}+a_{3} t^{3}+a_{2} t^{2}+a_{1} t+a_{0} \end{equation} Les conditions initiales imposent $a_0=a_1=a_2=a_3 =0$ et les conditions finales donnent : \begin{equation} - \begin{array}{lllllll} - \alpha(\Delta t) & =1 & a_7\Delta t^7 & + a_6 \Delta t^6 & + a_5 \Delta t^5 & + a_4 \Delta t^4 & =1 \\ - \frac{d \alpha(t)}{d t}|t=\Delta t & =0 & 7a_7\Delta t^6 & + 6a_6 \Delta t^5 & 5a_5\Delta t^4 & 4a_4 \Delta t^3 & =0 \\ - \frac{d^{2} \alpha(t)}{d t^{2}}|_{t=\Delta t} & =0 & 42a_7\Delta t^5 & +30a_6 \Delta t^4 & 20a_5 t^3 & 12a_4\Delta t^2 & =0 \\ - \frac{d^{3} \alpha(t)}{d t^{3}} |_{t=0} & t=\Delta & 210a_z\Delta t^4 & +120a_6\Delta t^3 & 60a_5 \Delta t^2 & 24a_4\Delta t & =0 + \begin{array}{llllll} + \phi_2(\Delta t) & =1 = & a_7\Delta t^7 & + a_6 \Delta t^6 & + a_5 \Delta t^5 & + a_4 \Delta t^4 \\[1em] + \left.\frac{d \phi_2(t)}{d t}\right|_{t=\Delta t} & =0 = & 7a_7\Delta t^6 & + 6a_6 \Delta t^5 &+ 5a_5\Delta t^4 &+ 4a_4 \Delta t^3 \\[1em] + \left.\frac{d^{2} \phi_2(t)}{d t^{2}}\right|_{t=\Delta t} & =0 = & 42a_7\Delta t^5 & +30a_6 \Delta t^4 &+ 20a_5 t^3 &+ 12a_4\Delta t^2 \\[1em] + \left.\frac{d^{3} \phi_2(t)}{d t^{3}}\right|_{t=\Delta t} & =0 = & 210a_z\Delta t^4 & +120a_6\Delta t^3 &+ 60a_5 \Delta t^2 &+ 24a_4\Delta t \end{array} \end{equation} On a donc : @@ -507,9 +530,68 @@ Pour déterminer $x_H$ on utilise la position finale et on a: x_{H}=\frac{D_{i n i}+\sqrt{\frac{R_{i n i}-z_{H}}{R_{i n i}-z_{H}}} D_{f i n}}% {1+\sqrt{\frac{R_{i n i}-z_{H}}{R_{f i n}-z_{H}}}} \end{equation} +\paragraph{Manip.12} +Cette fois ci on utilise les sorties plates, et on a donc : +\[ + \begin{cases} + \dot{D_c}(t) &= \displaystyle\deriv[]{t}\left( x_c- \frac{\ddot{x_c}z_c }{\ddot{z_c}-g}\right)\\ + \dot{R_c}(t) &= \displaystyle\deriv[]{t}\sqrt{z_c^2-\left(\frac{\ddot{x_c}z_c }{\ddot{z_c}-g}\right)^2} + \end{cases} +\] +On construit alors les différents blocs de synthèse de la commande par +sortie plates: +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{rect_plat.png} + \caption{Synthèse de la trajectoire rectiligne par sortie plate} + \label{fig:label} +\end{figure}On obtient alors les resultats suivant sur la commande des sorties +plates (figure \ref{fig:sortiesplates}).\\ + +\textit{Remarque}: Pour mener la simulation a bien il a fallut +modifier les paramètres d'intégrations (pas fixe de 1e-4, méthode +d'Euler) qui influait sur la régularité des sorties et commmandes. +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{manip12.png} + \caption{Sorties plates commandées, $\epsilon= \omega_0/100$} + \label{fig:sortiesplates} +\end{figure} +\paragraph{Manip.13} +De meme on mets en place la synthèse de la parabole de commande +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{sortie_plate.png} + \caption{Synthèse des sorties plates} + \label{fig:label} +\end{figure} +On obtient alors les resultats suivants sur la commande des sorties +plates (figure \ref{fig:sortiesplates}).\\ + +\textit{Remarque}: Meme paramètres d'intégration que précédement +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{manip13e100.png} + \caption{Sorties plates commandé en parabole} + \label{fig:sortiesplates} +\end{figure} + +Les resultats sont peux satisfaisant,mais la consigne est globalement +respectée, il faudrait investiguer plus en profondeur la modélisation +réalisée et comparée avec la commande du système réel, ce qui n'a pu +être fait par manque de temps. + +\section*{Conclusion} +Dans ce TP nous avons modélisé le système présenté d'abord de manière +linéaire, ce qui ne s'est pas avéré assez suffisant pour des commandes +qui nous faisait sortir de la plage de linéarisation. En prenant en +compte les non-linéarités on peux commander de manière plus précise et +plus robuste le modèle, et réaliser une poursuite de trajectoire +correcte. Avec l'utilisation des sorties plates on a pu aller plus on +simulant le contournement d'un obstacle. \end{document} %%% Local Variables: diff --git a/424-Systeme_Non_Lineaires/TP2/auto/TP2.elc b/424-Systeme_Non_Lineaires/TP2/auto/TP2.elc index c2f3e49..a2a856c 100644 Binary files a/424-Systeme_Non_Lineaires/TP2/auto/TP2.elc and b/424-Systeme_Non_Lineaires/TP2/auto/TP2.elc differ diff --git a/424-Systeme_Non_Lineaires/TP2/eps_choix.png b/424-Systeme_Non_Lineaires/TP2/eps_choix.png new file mode 100644 index 0000000..5b2ed5c Binary files /dev/null and b/424-Systeme_Non_Lineaires/TP2/eps_choix.png differ diff --git a/424-Systeme_Non_Lineaires/TP2/eps_d.png b/424-Systeme_Non_Lineaires/TP2/eps_d.png new file mode 100644 index 0000000..de86c0b Binary files /dev/null and b/424-Systeme_Non_Lineaires/TP2/eps_d.png differ diff --git a/424-Systeme_Non_Lineaires/TP2/eps_r.png b/424-Systeme_Non_Lineaires/TP2/eps_r.png new file mode 100644 index 0000000..27573f2 Binary files /dev/null and b/424-Systeme_Non_Lineaires/TP2/eps_r.png differ diff --git a/424-Systeme_Non_Lineaires/TP2/m_choix.png b/424-Systeme_Non_Lineaires/TP2/m_choix.png new file mode 100644 index 0000000..6431673 Binary files /dev/null and b/424-Systeme_Non_Lineaires/TP2/m_choix.png differ diff --git a/424-Systeme_Non_Lineaires/TP2/manip12.png b/424-Systeme_Non_Lineaires/TP2/manip12.png new file mode 100644 index 0000000..229b287 Binary files /dev/null and b/424-Systeme_Non_Lineaires/TP2/manip12.png differ diff --git a/424-Systeme_Non_Lineaires/TP2/manip12e100.png b/424-Systeme_Non_Lineaires/TP2/manip12e100.png new file mode 100644 index 0000000..7221f3f Binary files /dev/null and b/424-Systeme_Non_Lineaires/TP2/manip12e100.png differ diff --git a/424-Systeme_Non_Lineaires/TP2/manip13e100.png b/424-Systeme_Non_Lineaires/TP2/manip13e100.png new file mode 100644 index 0000000..bde5d57 Binary files /dev/null and b/424-Systeme_Non_Lineaires/TP2/manip13e100.png differ diff --git a/424-Systeme_Non_Lineaires/TP2/plot_things.m b/424-Systeme_Non_Lineaires/TP2/plot_things.m new file mode 100644 index 0000000..c809163 --- /dev/null +++ b/424-Systeme_Non_Lineaires/TP2/plot_things.m @@ -0,0 +1,135 @@ +sys = ss(A-B*K,B(:,2),C(2,:),D) +H = tf(sys) +bode(H) +% margin(H) +% Avec le correcteur intégral : +Ti = 5e-4 +CI = tf(1,[-Ti 0]); % négatif pour avoir une phase >180 +%bode(H,CI*H,'grid') +% fig =figure(); +% margin(CI*H) +% grid on; +% saveas(fig,"manip_5marge.png"); + +%% +close all; +sim('Grue_NL_corrNL') +fig= figure() +plot(Dc) +hold on +plot(simout.Time, simout.Data(:,1)); +xlabel('temps (s)'); +grid on; +title('Vérification de la planification de trajectoire'); +legend('d_c','d'); + +fig2= figure() +plot(Rc) +hold on +plot(simout.Time, simout.Data(:,2)); +xlabel('temps (s)'); +grid on; +title('Vérification de la planification de trajectoire'); +legend('r_c','r'); + + +%% + +close all +figure() +for e = [1 10 100] + ed = omega0/e; er= omega0/e; + sim('Grue_NL_corrNL') + hold on + subplot(311) + hold on + plot(simout.Time, simout.Data(:,1),"DisplayName",sprintf("\\epsilon_r=\\epsilon_d= \\omega_0/%d",e)); + subplot(312) + hold on + plot(simout.Time, simout.Data(:,2),"DisplayName",sprintf("\\epsilon_r=\\epsilon_d= \\omega_0/%d",e)); + subplot(313) + hold on + plot(simout.Time, simout.Data(:,3),"DisplayName",sprintf("\\epsilon_r=\\epsilon_d= \\omega_0/%d",e)); +end + xlabel('temps (s)'); +subplot(311) +title("choix de l'échelle temps"); +ylabel('d'); grid on; +subplot(312) +ylabel('r'); grid on; +subplot(313) +ylabel('\theta'); grid on; +%% + +close all +e = 100; +ed = omega0/e; er= omega0/e; +figure() +for m = [300 500 700] + c0 =m*g*b; + sim('Grue_NL_corrNL') + hold on + subplot(311) + hold on + plot(simout.Time, simout.Data(:,1),"DisplayName",sprintf("m = %d",m)); + subplot(312) + hold on + plot(simout.Time, simout.Data(:,2),"DisplayName",sprintf("m = %d",m)); + subplot(313) + hold on + plot(simout.Time, simout.Data(:,3),"DisplayName",sprintf("m = %d",m)); +end + xlabel('temps (s)'); +subplot(311) +title(""); +ylabel('d'); grid on; +subplot(312) +ylabel('r'); grid on; +subplot(313) +ylabel('\theta'); grid on; + +m = 500; +%% +close all +e = 10; +ed = omega0/e; er= omega0/e; +figure() +for kc = [0.5 1 1.5] + Cr= Cr*kc + sim('Grue_NL_corrNL') + hold on + subplot(311) + hold on + plot(simout.Time, simout.Data(:,1),"DisplayName",sprintf("Cr = %f",Cr)); + subplot(312) + hold on + plot(simout.Time, simout.Data(:,2),"DisplayName",sprintf("Cr = %f",Cr)); + subplot(313) + hold on + plot(simout.Time, simout.Data(:,3),"DisplayName",sprintf("Cr = %f",Cr)); +end + xlabel('temps (s)'); +subplot(311) +title(""); +ylabel('d'); grid on; +subplot(312) +ylabel('r'); grid on; +subplot(313) +ylabel('\theta'); grid on; + +%% +close all; +sim('Grue_NL_corrNL') +fig= figure() +hold on +plot(simout.Time, complates.Data(:,1)); +plot(simout.Time, complates.Data(:,2)); +plot(simout.Time, sortieplates.Data(:,2)); +plot(simout.Time, sortieplates.Data(:,1)); + +xlabel('temps (s)'); +grid on; +title('Vérification de la planification de trajectoire, sortie plates'); +legend('x_c','z_c','x','z'); + +%% \ No newline at end of file diff --git a/424-Systeme_Non_Lineaires/TP2/rect_plat.png b/424-Systeme_Non_Lineaires/TP2/rect_plat.png new file mode 100644 index 0000000..805be06 Binary files /dev/null and b/424-Systeme_Non_Lineaires/TP2/rect_plat.png differ diff --git a/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/checksumOfCache.mat b/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/checksumOfCache.mat index d43944b..38c9fdb 100644 Binary files a/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/checksumOfCache.mat and b/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/checksumOfCache.mat differ diff --git a/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/tmwinternal/simulink_cache.xml b/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/tmwinternal/simulink_cache.xml index c3d741b..286edbd 100644 --- a/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/tmwinternal/simulink_cache.xml +++ b/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/tmwinternal/simulink_cache.xml @@ -1,6 +1,6 @@ - - D6xWcyOKDYRnjDVQkSZhsg== + + 5IHzSXcaa4GD3t8O0N72eA== \ No newline at end of file diff --git a/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/varInfo.mat b/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/varInfo.mat index f819844..5d7ad9d 100644 Binary files a/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/varInfo.mat and b/424-Systeme_Non_Lineaires/TP2/slprj/sim/varcache/Grue_NL_corrNL/varInfo.mat differ diff --git a/424-Systeme_Non_Lineaires/TP2/sortie_plate.png b/424-Systeme_Non_Lineaires/TP2/sortie_plate.png new file mode 100644 index 0000000..f1c2ad0 Binary files /dev/null and b/424-Systeme_Non_Lineaires/TP2/sortie_plate.png differ