%%Faut ecrire pour compiler: texi2pdf main.tex -o main.pdf --shell-escape


\psection{Introduction}

Le bille sur rail est une manipulation où le but est de stabiliser une bille sur un rail. Le rail est commandé par une tension, et les données lues sont l'angle du rail et la position de la bille. La position est achevé à l'aide d'un lecture d'impedance.
\begin{center}
\textbf{Schèma de forces de la bille sur rail:}
\end{center}
\begin{center}
\includegraphics{./Illustrations/Schema_Forces.png}
\end{center}

\newpage 
\section{Identification du système: Rail}
\subsection{Analyse du schèma bloc et setup}
Nous avons remarqué que l'identification du système se fait en bouclé fermé. Voici le schèma bloc désignant le système que nous pouvons manipuler: 

\tikzstyle{block} = [draw, fill=white, rectangle, 
    minimum height=3em, minimum width=6em]
\tikzstyle{sum} = [draw, fill=white, circle, node distance=1cm]
\tikzstyle{input} = [coordinate]
\tikzstyle{output} = [coordinate]
\tikzstyle{pinstyle} = [pin edge={to-,thin,black}]

\begin{center}
\begin{tikzpicture}[auto, node distance=2cm,>=latex]

    \node [input, name=input] {};
    \node [sum, right of=input] (sum) {};
    %%\node [block, right of=sum] (controller) {};
    \node [block, right of=sum,
            node distance=3cm] (system) {$G_{Rail}(s)$};

    \draw [->] (sum) -- node[name=u] {$u$} (system);
    \node [output, right of=system] (output) {};
    %\node [block, below of=u] (measurements) {Measurements};
    \coordinate [below of=u] (measurements) {};

    \draw [draw,->] (input) -- node {$r$} (sum);
    %\draw [->] (sum) -- node {$e$} (system);
    \draw [->] (system) -- node [name=y] {$y$}(output);
    %\draw [->] (y) |- (measurements);
    \draw [-] (y) |- (measurements);
    %\draw [->] (measurements) -| node[pos=0.99] {$-$} 
    \draw [->] (measurements) -| %node[pos=1.00] {$-$} 
        node [near end] {$y_m$} (sum);

\coordinate [below=1.7cm of sum] (u1) {};
\coordinate [below=1.88cm of y] (u2) {};
\draw[
decorate,
decoration={brace, mirror, amplitude=8pt}
]
(u1.south west) -- (u2.south east)
node[midway, below=10pt] {$H(s)$};
        
        
    %\draw [->] 
\end{tikzpicture}
\end{center}

\subsection{Mise en oeuvre de N4SID}
On a utilisé la fonction n4sid() que pouvons retrouver sur matlab. Nous avons fait une experiènce temporel, frequentiel et avec Loewner. 
\textbf{Un signal multisine a été utilisé pour ballader sur les differents frequences du système, et retrouver les frequences resonantes du système.}
Nous l'avons mis entre 0.1Hz à 4Hz.

Voici le comportement des differents modèles obtenu: 
\begin{center}
\includegraphics[scale=1]{./Illustrations/multisine1.pdf}
\includegraphics{./Illustrations/fig2.png}
\end{center}


Après avoir comparé les differents modèles avec le vrai système, 
Cela nous avait mené à résumer le systeme du rail à la fonction de transfert suivante :
$$G(s) = \frac{NUM}{DEN}$$
\begin{center}
\begin{equation}
		G(z) = \frac{0,2977 z^{-1} - 0,2962 z^{-2}}{1 - 1,825 z^{-1} + 0,8496 z^{-2}}
\end{equation}
\end{center}

Nous avons choisi le modèle obtenu à l'aide du n4sid() temporel, ordre 2. 


\subsection{Fonction transfert du système: Rail}

Après avoir trouvé un modèle qui nous va, nous avons ensuite retrouvé la vraie fonction de transfert du rail. Avec la relation qui suit: 

%%Lånt av disse her, smarte folk!
% Source - https://tex.stackexchange.com/q/175969
% Posted by student1, modified by community. See post 'Timeline' for change history
% Retrieved 2026-04-02, License - CC BY-SA 3.0
% Source - https://tex.stackexchange.com/a/175970
% Posted by Peter Grill, modified by community. See post 'Timeline' for change history
% Retrieved 2026-04-02, License - CC BY-SA 3.0


\begin{center}

\begin{tikzpicture}[auto, node distance=2cm,>=latex]

    \node [input, name=input] {};
    \node [sum, right of=input] (sum) {};
    %%\node [block, right of=sum] (controller) {};
    \node [block, right of=sum,
            node distance=3cm] (system) {$G_{Rail}(s)$};

    \draw [->] (sum) -- node[name=u] {$u$} (system);
    \node [output, right of=system] (output) {};
    %\node [block, below of=u] (measurements) {Measurements};
    \coordinate [below of=u] (measurements) {};

    \draw [draw,->] (input) -- node {$r$} (sum);
    %\draw [->] (sum) -- node {$e$} (system);
    \draw [->] (system) -- node [name=y] {$y$}(output);
    %\draw [->] (y) |- (measurements);
    \draw [-] (y) |- (measurements);
    %\draw [->] (measurements) -| node[pos=0.99] {$-$} 
    \draw [->] (measurements) -| %node[pos=1.00] {$-$} 
        node [near end] {$y_m$} (sum);

\coordinate [below=1.7cm of sum] (u1) {};
\coordinate [below=1.88cm of y] (u2) {};
\draw[
decorate,
decoration={brace, mirror, amplitude=8pt}
]
(u1.south west) -- (u2.south east)
node[midway, below=10pt] {$H(s)$};
        
        
    %\draw [->] 
\end{tikzpicture}
\end{center}


\begin{equation}
    H(s)=\frac{G(s)}{1+G(s)}\Rightarrow G(s)=\frac{H(s)}{1-H(s)}
\end{equation}

    
\subsection{Calcul du correcteur du système: P}
Nous avons conçu un retour PID pour le système du rail. Après avoir parlé avec le professeur, il nous a dit que le système est déjà equipé avec un integrateur. Donc nous avons choisi un système bouclé avec un simple correcteur P. Comme nous pouvons voir ci-dessous:

\begin{center}

\begin{tikzpicture}[auto, node distance=2cm,>=latex]

    \node [input, name=input] {};
    \node [sum, right of=input] (sum) {};
    \node [block, right of=sum] (controller) {$Controleur: K_P$};
    \node [block, right of=controller,
            node distance=3cm] (system) {$G_{Rail}(s)$};

    \draw [->] (controller) -- node[name=u] {$u$} (system);
    \node [output, right of=system] (output) {};
    %\node [block, below of=u] (measurements) {Measurements};
    \coordinate [below of=u] (measurements) {};

    \draw [draw,->] (input) -- node {$r$} (sum);
    \draw [->] (sum) -- node {$e$} (controller);
    \draw [->] (system) -- node [name=y] {$V_\theta$}(output);
    %\draw [->] (y) |- (measurements);
    \draw [-] (y) |- (measurements);
    %\draw [->] (measurements) -| node[pos=0.99] {$-$} 
    \draw [->] (measurements) -| %node[pos=1.00] {$-$} 
        node [near end] {$V_\theta$} (sum);

\coordinate [below=1.7cm of sum] (u1) {};
\coordinate [below=1.88cm of y] (u2) {};
\draw[
decorate,
decoration={brace, mirror, amplitude=8pt}
]
(u1.south west) -- (u2.south east)
node[midway, below=10pt] {$H_C(s)$};
        
        
    %\draw [->] 
\end{tikzpicture}

\end{center}


Après avoir conçu le système avec n4sid(), nous avons retrouvé la fonction de transfert : 
\begin{center}
\begin{equation}
    G(s)=\frac{H(s)}{1-H(s)}
\end{equation}
\end{center}

À l'aide de la fonction transferte du système rail, nous avons recalculé la nouvelle fonction transferte avec le gain proportionnel en boucle fermé: 


\begin{equation}
   H_{C}(s)=\frac{K_P G(s)}{1+K_P G(s}
\end{equation}


Finalement, on essaie des différents valeurs de P pour observer le temps de réponse dans la boucle fermée. Nous tracons les différents valeurs dans un seul schèma pour voir l'impact d'un échelon sur le système.
\begin{center}
\includegraphics[scale=1]{./Illustrations/StepRespnseRail.png}
%\includesvg{./Illustrations/StepRespnseRail}
\end{center}
Le choix de P restait sur plusieurs tests du système bouclé avec un P de differentes valeurs. Voici les differents reponses du système d'un simple step. Nous avons choisi:
 \begin{equation}
   P=1
\end{equation}
Cela nous a donné un temps de reponse respectif aux attentes que nous avions.\\


\vspace{5cm}
\section{Loi de commande du bille sur rail}


\subsection{Système bouclé avec la bille}

Le schèma complet du système \textit{Bille sur rail} si dessous. \\ L'entrée du commande est une position dont on veut ballader la bille entre \textit{-50cm} et \textit{+50cm}. Il faut donc translater la position en tension. Le correcteur choisit est un correcteur: \textit{Avance de phase}. 

\begin{center}


% 
\begin{tikzpicture}[auto, node distance=2cm,>=latex]

    \node [input, name=input] {};
	
	%Bloc pos/tension
	\node [block, right of=input] (Kb) {$K_b$};
	    
    %Somme de erreur
    \node [sum, right of=Kb, node distance=2.5cm] (sum2) {};
    
    % First controller (Tc) AFTER input
    \node [block, right of=sum2] (Tc) {$T_c$};
    
    % Sum AFTER Tc
    \node [sum, right of=Tc, node distance=3cm] (sum) {};
    
    % Second controller (P) AFTER sum
    \node [block, right of=sum] (Pctrl) {$Controleur : P$};
    
    % System
    \node [block, right of=Pctrl, node distance=3cm] (system) {$G_{Rail}(s)$};

    % Output
    \node [output, right of=system] (output) {};

    % Connections
    \draw [->] (input) -- node {$x_c$} (Kb);
    \draw [->] (Kb) -- node {$V_x$} (sum2);
    \draw [->] (sum2) -- node {$\epsilon$} (Tc);
    \draw [->] (Tc) -- node {$r$} (sum);
    \draw [->] (sum) -- node {$e$} (Pctrl);
    \draw [->] (Pctrl) -- node[name=u] {$u$} (system);
    \draw [->] (system) -- node[name=y] {$V_\theta$} (output);

    % Feedback path
    \coordinate [below of=u] (measurements) {};
    \draw [-] (y) |- (measurements);
    \draw [->] (measurements) -| node [near end] {$V_\theta$} (sum);
    
    % Feedback path 2
    \coordinate [below=2.7cm of sum2] (measurements2) {};
    \draw [-] (y) |- (measurements2);
    \draw [->] (measurements2) -| node [near end] {$V_\theta$} (sum2);

    % Brace
    \coordinate [below=1.7cm of sum] (u1) {};
    \coordinate [below=1.88cm of y] (u2) {};
    \draw[
        decorate,
        decoration={brace, mirror, amplitude=8pt}
    ]
    (u1.south west) -- (u2.south east)
    node[midway, below=10pt] {$H_C(s)$};
    
    % Brace 2
    
	\coordinate [below=2.8cm of sum2] (u3) {};
    \coordinate [below=3cm of y] (u4) {};
    \draw[
        decorate,
        decoration={brace, mirror, amplitude=8pt}
    ]
    (u3.south west) -- (u4.south east)
    node[midway, below=10pt] {$H(s)$};
	

\end{tikzpicture}
\end{center}


\subsection{Translation Position/Tension}
Le système ne prend qu'une tension comme entre. Nous devons donc translater la position de la bille en tension envoyé. Pour arriver à faire cela, nous avons calculé la fonction transferte à partir des equations mecaniques: 

$$\Sigma F_x = mg \sin(\theta(t)) = m \ddot{x}(t)$$
$$\sin(\theta)\approx\theta, \theta\approx 0 $$
$$\Rightarrow m\ddot{x}=mg \theta(t) \rightarrow \mathcal{L}\{.\}\rightarrow s^2 X(s)=g\Theta(s) $$


\begin{equation}
\frac{X(s)}{\Theta[s]}=\frac{g}{s^2} \Rightarrow \frac{V_x(s)}{V_\theta(s)}=K_b \frac{g}{s^2}
\end{equation}

Pour calculer le \textit{$K_b$} nous avons fait une regression linaire avec la bille sur plusierus endroits sur le rail, et fait la lecture de la tension de sortie de système. 

\begin{center}
\includegraphics[scale=0.8]{./Illustrations/Regression_pos_volt.png}
\end{center}

Dans excel nous avons crée un simple regression. Nous avons donc trouvé une pente: 
\begin{center}
$K_b = 0.2V/cm$ 
\end{center}

\subsection{Calcul du correcteur: \textit{Avance de phase}}

Pour cette deuxième boucle du système, on commence avec la boucle déjà existante. On trace le diagramme de Bode pour cet système pour mieux ananlyser les besoin du système. Cet diagramme est comme suit :
%\newpage
\hfill

\includegraphics[scale=1]{./Illustrations/bodeRail1.png}
%\includesvg{./Illustrations/bodeRail1.png}

Nous verrons que le point critique où il faut ajouter de la phase est à 1,4 rad/s. Donc on concoit le correcteur pour cela. Pour qu'on puisse augmenter les marges de phase, on utilise un correcteur d'avance de phase.
Le correcteur d'avance de phase a une fonction de transfert sur la forme canonique\footnote{https://homepages.laas.fr/fgouaisb/donnees/M1ICM/slidesM1ICMp8.pdf}  : $$G(p) = K_p \frac{1 + \alpha T s}{1 + T s}, avec \  \alpha \ > \ 1 , K_p = 1$$ 

$$\Theta_{Marge}=\Theta_{Desire} - \Theta_{Systeme} = 125^\circ \Rightarrow \Phi_{Desire} = 55^\circ $$
$$a = \frac {1 + \sin(\Phi)}{1 - \sin(\Phi)} = \frac {1 + \sin(55^\circ)}{1 - \sin(55^\circ)} \approx 10$$
$$T = \frac{1}{\omega_m*\sqrt{a}} \Rightarrow T = \frac{1}{1.4*\sqrt 10} \approx 0,22$$
\vspace{4cm}
\begin{center}
Nous obtiendrons donc un correcteur \textit{Avance de phase} sous la forme :
\end{center}
$$T_C(s) = \frac{1+2.2s}{1+0.22s}$$

\includegraphics[scale=1]{./Illustrations/bodeCorrecteur.png}

\newpage
\section{Vérification}
\subsection{Expérimental}
Le schèma Simulink complèt est ci-dessous. Nous avons enlevé un erreur statique de $2.5V \Leftrightarrow 12.5cm$. Nous avons multiplié par $K_b = 0.2V/cm$ pour traduire la commande en position à une commande en tension.\begin{center}
\includegraphics[scale=0.65,trim=0 6cm 0 6cm,clip]{./Illustrations/commandeSimulinkGlobale.pdf}
\end{center}
\subsection{MATLAB - marge de phase}
En utilisant la fonction de allmargin nous trouvons le marge de phase pour le système entier en boucle fermé. Traçons le diagramme de Bode du système pour analyser le systeme même sans négliger la fonction de transfert du moteur :
\begin{center}
\includegraphics[scale = 1]{./Illustrations/allmarginBode.png}
\end{center}
\subsection{Reponse du système entièr}
Voici le comportement du système avec differents positions souhaité.\\
\begin{center}
 $ X_0 = 0 \rightarrow -30cm \rightarrow 10cm \rightarrow -45cm \rightarrow 0 $  
%\includegraphics{./Illustrations/{BildeAvStepResponseBilleSurRail}
\end{center}

\newpage
\psection{Conclusion}
La boucle est bouclée et la balle est en equilibre. 
\psection{images}
\begin{center}
%\includegraphics{./Illustrations/fig2.png}
%\includegraphics{./Illustrations/Schema_Forces.png}
%\includegraphics{./Illustrations/StepRespnseRail.png}
%\includesvg{./Illustrations/bodeCorrecteur}
%\includesvg{./Illustrations/bodeRail1}
%\includesvg{./Illustrations/bodeRail}
%\includesvg{./Illustrations/fig1}
%\includesvg{./Illustrations/fig2}
%\includesvg{./Illustrations/multisine1}
%\includesvg{./Illustrations/multisine2}
%\includesvg{./Illustrations/StepRespnseRail}
\end{center}

