finalisation TP2 424

This commit is contained in:
Pierre-antoine Comby 2019-04-30 11:18:37 +02:00
parent f70ae7fa86
commit b8032db714
19 changed files with 244 additions and 57 deletions

View file

@ -5,7 +5,6 @@
clear, clc,
%% Param<EFBFBD>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;

View file

@ -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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -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');
%%

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<MF0 version="1.1" packageUris="http://schema.mathworks.com/mf0/SlCache/19700101">
<slcache.FileAttributes type="slcache.FileAttributes" uuid="c7869f89-1547-44ce-8ac9-276c254a63a4">
<checksum>D6xWcyOKDYRnjDVQkSZhsg==</checksum>
<slcache.FileAttributes type="slcache.FileAttributes" uuid="76002ff9-803b-4566-963b-09fd11539608">
<checksum>5IHzSXcaa4GD3t8O0N72eA==</checksum>
</slcache.FileAttributes>
</MF0>

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB