Commit 63e605e1 authored by François Lavallée's avatar François Lavallée

regime transitoire

parent ef04c256
......@@ -23,6 +23,14 @@ source("utils_model_electra.R")
# create_df_persistence
# plot_oneTime_persistence
# scalarProdutRenormalized
# vitesse_rotation_moteur
# positions_t_TRANSITOIRE
# plot_oneTime_TRANSITOIRE
# create_df_TRANSITOIRE
# savePlot_index_TRANSITOIRE
# save_params_in_file_TRANSITOIRE
# savePlot_index_and_paramsInFile_TRANSITOIRE
## Paramètres
# vitesse moteur (tour/ seconde)
......@@ -122,7 +130,7 @@ dir.create(dirRes)
# time
timeStep = 0.005 # sec
times = seq(0,5, by = timeStep)
times = seq(0,20, by = timeStep)
# param de reférence
df = create_df(times,v1,v2,v3,r1B,r1C,r2D,r2E,r3F,r3G,alphaH,alphaI,angleIni_B,angleIni_D,angleIni_F)
......@@ -264,6 +272,10 @@ plot_oneTime_persistence(t,persistenceTime,nb_point_persistence,10*v1, 10*v2, 10
##########################################
### Animation avec gganimate ###
##########################################
timeStep = 0.01 # sec
times = seq(0,3, by = timeStep)
df = create_df(times,v1,v2,v3,r1B,r1C,r2D,r2E,r3F,r3G,alphaH,alphaI,angleIni_B,angleIni_D,angleIni_F)
# 1, partial
p <- ggplot(df, aes(x = Bx, y=By) ) +
geom_point(show.legend = FALSE)
......@@ -284,18 +296,37 @@ p <- ggplot(df) +
p
p + transition_time(time)
p + transition_states(time,
transition_length = 2,
state_length = 1)
p
##########################################
### find different patterns by hand ###
### for a single light ###
##########################################
plot_test <- function(tt,a,b,u,v) {
plot_test_0 <- function(tt,a,b,u,v) {
x= a*cos(2*pi*tt*u+angleIni_B) + b*cos(2*pi*tt*(u+v)+angleIni_B+angleIni_D)
y= a*sin(2*pi*tt*u+angleIni_B) + b*sin(2*pi*tt*(u+v)+angleIni_B+angleIni_D)
plot(x,y, type="l")
}
plot_test <- function(tt,a,b,u,v) {
# creates points
x= a*cos(2*pi*tt*u+angleIni_B) + b*cos(2*pi*tt*(u+v)+angleIni_B+angleIni_D)
y= a*sin(2*pi*tt*u+angleIni_B) + b*sin(2*pi*tt*(u+v)+angleIni_B+angleIni_D)
res = data_frame(tt,x,y)
# plot
rayonMax = a+b
p <- ggplot(res) + expand_limits(x=c(-rayonMax,rayonMax), y=c(-rayonMax, rayonMax)) +
geom_point(aes(x=x, y=y), col="yellow", size = 1)
p
}
#tt = seq(0,200,by=0.001)
#tt = seq(0,500,by=0.001)
tt = seq(0,6,by=0.001)
......@@ -316,14 +347,16 @@ plot_test(tt,a=2,b=1,u=0.5,v=0.5+epsilon)
plot_test(tt,a=2,b=1,u=1,v=0.5)
plot_test(tt,a=2,b=1,u=1.5,v=0.5)
plot_test(tt,a=2,b=1,u=2.5,v=0.5)
plot_test(tt,a=2,b=1,u=1,v=2)
plot_test(tt,a=2,b=1,u=10/3,v=0.5)
plot_test(tt,a=2,b=1,u=pi,v=0.5)
plot_test(tt,a=2,b=1,u=sqrt(2),v=0.5)
plot_test(tt,a=2,b=1,u=4,v=0.5)
# cercles délimitant l'expace si trajectoire dense ?
plot((a+b)*cos(2*pi*ttt),(a+b)*sin(2*pi*ttt), col="red", type = "l")
points((a-b)*cos(2*pi*ttt),(a-b)*sin(2*pi*ttt), col="red", type = "l")
points((a+b)*cos(2*pi*ttt),(a+b)*sin(2*pi*ttt), col="red", type = "l")
# vitesse u negative
plot_test(tt,a=2,b=1,u=-0.5,v=0.5)
......@@ -348,16 +381,159 @@ plot(tt,derivX, type = "l")
######################################
### Find loop points ###
######################################
######################################
### Find loop points ###
### Non stationary ###
######################################
# aim: changer la vitesse des moteurs au cours du temps, tenir compte de l'inertie
# https://www.wikimeca.org/index.php/Moteur_%C3%A0_courant_continu
# partie électrique
R = 1 # R est la résistance électrique interne du moteur (Ohm);
Ke = 1 # Ke est la constante de force électromotrice
# partie mécanique
J = 1 # rotor vu comme un volant d'inertie J
Kc = 1 # Kc est la constante de couple
f = 1 # f est le coefficient de frottement visqueux.
A = Kc /(R*f+Kc*Ke)
C = J*R/(R*f+Kc*Ke)
# time
timeStep = 0.005 # sec
timeStep = 0.02 # sec
times = seq(0,5, by = timeStep)
# u: tension imposée = vitesse demandée au moteur
# u= rep(1,length(times))
# temp = A/C*u*exp(1/C*times)
u = function(t){
1*(t>0)*(t<1)+
0.5*(t>=1)*(t<2)+
2*(t>=2)*(t<3)+
0*(t>=3)
}
plot(times,u(times), type = "l")
# temp = function(t){
# A/C*u(t)*exp(1/C*t)
# }
# vitesse = exp(-1/C*times)
# plot(times,vitesse, type = "l")
# temp2 = unlist(sapply(times, function(t){integrate(temp,0,t)$value}))
# integrate(temp,0,1)
# integrate(temp,0,1)[1]
# integrate(temp,0,1)$value
# vitesse = exp(-1/C*times) * temp2
# plot(times,vitesse, type = "l")
t=1
vitesse_rotation_moteur(t,u,A,C)
res = vitesse_rotation_moteur(times,u,A,C)
plot(times,res, type = "l")
# moteur 1
u1=u
A1=A
C1=C
# moteur 2
u2=u
A2=A
C2=C
# moteur 3
u3=u
A3=A
C3=C
t=0
t=1
# positions at time t
positions_t_TRANSITOIRE(t, r1B, r1C, r2D, r2E, r3F, r3G,
alphaH, alphaI, angleIni_B, angleIni_D, angleIni_F,
A1,C1,A2,C2,A3,C3,
u1,u2,u3)
# plot positions at time t
plot_oneTime_TRANSITOIRE(t, r1B, r1C, r2D, r2E, r3F, r3G,
alphaH, alphaI, angleIni_B, angleIni_D, angleIni_F,
A1,C1,A2,C2,A3,C3,
u1,u2,u3)
timeStep = 0.005
finalTime = 10
times = seq(0,finalTime, by = timeStep)
u1 = function(t){
1
}
u2 = function(t){
2
}
u3 = function(t){
3
}
# create data frame of positions % times
df =create_df_TRANSITOIRE(times, r1B, r1C, r2D, r2E, r3F, r3G,
alphaH, alphaI, angleIni_B, angleIni_D, angleIni_F,
A1,C1,A2,C2,A3,C3,
u1,u2,u3)
p <- ggplot(df) + coord_fixed(ratio=1) +
theme(axis.title.x=element_blank(), axis.title.y=element_blank() ) +
geom_point(aes(x=Bx, y=By), size=1) +
geom_point(aes(x=Cx, y=Cy), size=1) +
geom_point(aes(x=Dx, y=Dy), size=1, col= "red", shape = 3) +
geom_point(aes(x=Ex, y=Ey), size=1, col= "yellow") +
geom_point(aes(x=Fx, y=Fy), size=1, col= "blue") +
geom_point(aes(x=Gx, y=Gy), size=1, col= "green")
p
dirRes = "plot_transitoire"
dir.create(dirRes)
times = seq(0,4, by = 0.02)
savePlot_index_and_paramsInFile_TRANSITOIRE(times, dirRes, r1B, r1C, r2D, r2E, r3F, r3G,
alphaH, alphaI, angleIni_B, angleIni_D, angleIni_F,
A1,C1,A2,C2,A3,C3,
u1,u2,u3)
# savePlot_index_and_paramsInFile(times,dirRes,v1,v2,v3,r1B,r1C,r2D,r2E,r3F,r3G,alphaH,alphaI,angleIni_B,angleIni_D,angleIni_F)
# command line in linux to create a video from images with index (adapt the framerate)
# ffmpeg -framerate 1/0.02 -i plot_%01d.png -crf 15 output1.mp4
......
This diff is collapsed.
......@@ -61,6 +61,10 @@
%\usepackage[retainorgcmds]{IEEEtrantools} tableaux
%
\usepackage{natbib}
\usepackage{hyperref}
% fourier soit stmaryrd
%\usepackage{fourier}
......@@ -238,7 +242,7 @@ Piste: utilisation du logiciel OpenMole (algorithme PSE) pour trouver les sortie
\begin{figure}[H]
\center{\includegraphics[width=0.75\linewidth]{schema2}}
\caption{Schéma du modèle}
\caption{Schéma du modèle, réalisé avec le logiciel GeoGebra}
\end{figure}
......@@ -280,15 +284,15 @@ $H(x_H,y_H) = ( \frac{r_B}{\alpha_H} \cos(2 \pi v_1 t + \phi_B),\frac{r_B}{\alph
De même,
$I(x_I,y_I) = ( \frac{r_C}{\alpha_I} \cos(2 \pi v_1 t + \phi_B + \pi), \frac{r_C}{\alpha_I} \sin(2 \pi v_1 t + \phi_B + \pi))$
Pour déterminer la position des points $D,E,F,G$, on utilise les points intermédiaires ($H$ et $I$), (utilise le changement de repère orthonormale centrée en H et de vecteurs directeurs un de même direction que $\overrightarrow{AH}$, l'autre orthogonal, dans lequel $\overrightarrow{HD} = rD( \cos(2 \pi v_2 t + \phi_D), \sin(2 \pi v_2 t + \phi_D))$ au repère usuel)
Pour déterminer la position des points $D,E,F,G$, on utilise les points intermédiaires ($H$ et $I$), (utilise le changement de repère orthonormale centrée en H et de vecteurs directeurs un de même direction que $\overrightarrow{AH}$, l'autre orthogonal, dans lequel $\overrightarrow{HD} = rD( \cos(2 \pi v_2 t + \phi_D), \sin(2 \pi v_2 t + \phi_D))$)
$ D(t) = (x_D(t),y_D(t)) = (\frac{r_B}{\alpha_H} \cos(2 \pi v_1 t + \phi_B) + r_D \cos(2 \pi (v_2 + v _1)t + (\phi_D + \phi_B)), \frac{r_B}{\alpha_H} \sin(2 \pi v_1 t + \phi_B ) + r_D \sin(2 \pi (v_2 +v_1)t + (\phi_D + \phi_B)) )$
%$ D(t) = (x_D(t),y_D(t)) = (\frac{r_B}{\alpha_H} \cos(2 \pi v_1 t + \phi_B) + r_D \cos(2 \pi (v_2 + v _1)t + (\phi_D + \phi_B)), \frac{r_B}{\alpha_H} \sin(2 \pi v_1 t + \phi_B ) + r_D \sin(2 \pi (v_2 +v_1)t + (\phi_D + \phi_B)) )$
$
D=
D(t)=
\begin{pmatrix}
x(D) \\
y(D)
x_D(t) \\
y_D(t)
\end{pmatrix}
=
\begin{pmatrix}
......@@ -307,15 +311,42 @@ $
Vitesse de $D$ au temps $t$:
$ D'(t) = (x'_D(t),y'_D(t)) = (-\frac{r_B}{\alpha_H} 2 \pi v_1 \sin(2 \pi v_1 t + \phi_B) - r_D 2 \pi (v_2 + v _1) \sin(2 \pi (v_2 + v _1)t + (\phi_D + \phi_B)), \frac{r_B}{\alpha_H} 2 \pi v_1 \cos(2 \pi v_1 t + \phi_B ) + r_D 2 \pi (v_2 + v _1) \cos(2 \pi (v_2 +v_1)t + (\phi_D + \phi_B)) )$
%$ D'(t) = (x'_D(t),y'_D(t)) = (-\frac{r_B}{\alpha_H} 2 \pi v_1 \sin(2 \pi v_1 t + \phi_B) - r_D 2 \pi (v_2 + v _1) \sin(2 \pi (v_2 + v _1)t + (\phi_D + \phi_B)), \frac{r_B}{\alpha_H} 2 \pi v_1 \cos(2 \pi v_1 t + \phi_B ) + r_D 2 \pi (v_2 + v _1) \cos(2 \pi (v_2 +v_1)t + (\phi_D + \phi_B)) )$
$
D'(t)=
\begin{pmatrix}
x'_D(t) \\
y'_D(t)
\end{pmatrix}
=
\begin{pmatrix}
-\frac{r_B}{\alpha_H} 2 \pi v_1 \sin(2 \pi v_1 t + \phi_B) - r_D 2 \pi (v_2 + v _1) \sin(2 \pi (v_2 + v _1)t + (\phi_D + \phi_B)) \\
\frac{r_B}{\alpha_H} 2 \pi v_1 \cos(2 \pi v_1 t + \phi_B ) + r_D 2 \pi (v_2 + v _1) \cos(2 \pi (v_2 +v_1)t + (\phi_D + \phi_B))
\end{pmatrix}
$
Accélération de $D$ au temps $t$:
$ D''(t) = (x''_D(t),y''_D(t)) = (-\frac{r_B}{\alpha_H} (2 \pi v_1)^2 \cos(2 \pi v_1 t + \phi_B) - r_D (2 \pi (v_2 + v _1))^2 \cos(2 \pi (v_2 + v _1)t + (\phi_D + \phi_B)), - \frac{r_B}{\alpha_H} (2 \pi v_1)^2 \sin(2 \pi v_1 t + \phi_B ) - r_D (2 \pi (v_2 + v _1))^2 \sin(2 \pi (v_2 +v_1)t + (\phi_D + \phi_B)) )$
$
D''(t)=
\begin{pmatrix}
x''_D(t) \\
y''_D(t)
\end{pmatrix}
=
\begin{pmatrix}
-\frac{r_B}{\alpha_H} (2 \pi v_1)^2 \cos(2 \pi v_1 t + \phi_B) - r_D (2 \pi (v_2 + v _1))^2 \cos(2 \pi (v_2 + v _1)t + (\phi_D + \phi_B)) \\
- \frac{r_B}{\alpha_H} (2 \pi v_1)^2 \sin(2 \pi v_1 t + \phi_B ) - r_D (2 \pi (v_2 + v _1))^2 \sin(2 \pi (v_2 +v_1)t + (\phi_D + \phi_B)) )
\end{pmatrix}
$
Remarque: soit $\alpha \in \R$, (pour tout $v_1,v_2,t$)
......@@ -335,12 +366,62 @@ Il semblerait que l’oeil garde une image rémanente pendant 1/25 seconde sur l
Dans le modèle, cela reviendrait non pas à avoir en sortie à l'instant $t$ la position des lumières à cet instant, mais l'ensemble des positions des lumières occupées durant les 1/25 secondes précédentes. Remarque, plus les vitesses des moteurs (donc de déplacement des lumières) sont importantes, plus les lumières parcourent de distance pendant ces 1/25 secondes, et donc plus les figurent ont une grande "longueur".
\subsection{Non transitoire}
\subsection{Transitoire}
piste ? Relier la tension d'entrée du moteur $u$ à la sortie: vitesse angulaire $\omega$. L'idée serait que quand on tourne le bouton, on fait varier la tension du moteur et donc sa vitesse (prendre en compte l'inertie). On pourrait donc chercher des fonctions du temps comme contrôle du système (la position du bouton de contrôle du moteur).
Une source pour les équations sur un moteur...
\url{https://www.wikimeca.org/index.php/Moteur_\%C3\%A0_courant_continu}
Les paramètres:
Partie électrique:
\begin{itemize}
\item $R$ est la résistance électrique interne du moteur (Ohm)
\item $K_e$ est la constante de force électromotrice
\end{itemize}
Partie mécanique
\begin{itemize}
\item $J$ rotor vu comme un volant d'inertie $J$
\item $K_c$ est la constante de couple
\item $f$ est le coefficient de frottement visqueux.
\end{itemize}
Les deux quantités qui interviennent dans l'équation différentielle simplifiée (pas d'inductance):
$A = \frac{K_c}{(R*f+K_c*K_e)}$
$C = \frac{J*R}{(R*f+K_c*K_e)}$
On suppose connu les valeurs de ces paramètres pour les trois moteur de l'installation (soit mesurés physiquement, soit c'est donné par le fabriquant, au pire par calibration?)
La dynamique du moteur simplifiée est décrite par:
piste ? Relier la tension d'entrée du moteur à la sortie: vitesse angulaire. L'idée serait que quand on tourne le bouton, on fait varier la tension du moteur et donc sa vitesse (prendre en compte l'inertie). On pourrait donc chercher des fonction du temps comme contrôle du système (la position du bouton de contrôle du moteur).
point de vue fonction de transfert:
$ H(p) = \frac{\Omega(p)}{U(p)} = \frac{A}{C*p+1}$
point de vue EDO:
$C * \omega'(t) + \omega(t) = A*u(t)$
solution, en imposant $y(0) = \omega(0) = 0$: $\omega(t) := y(t) = e^{-\frac{t}{C}} * \int_0^t \frac{A}{C} u(x) e^{\frac{x}{C}} dx $
On suppose les trois moteurs "indépendants", ils ont chacun leurs paramètres (électriques et mécaniques) mais fonctionnent selon les mêmes équations.
Dans le régime stationnaire, on supposait la vitesse des moteurs constante au cours du temps (égale respectivement à $v_1$, $v_2$ et $v_3$). Désormais, cette vitesse $\omega_1, \omega_2, \omega_3$ peut varier au cours du temps, en particulier, on suppose qu'elle est nulle initialement, puis qu'on applique une tension au moteur. Les équations de la dynamique dans le cadre stationnaire sont ainsi conservées, et seule la vitesse $v_i$ est remplacée par $\omega_i$.
Remarque: Si on applique une tension constante $U$, la vitesse de rotation en sortie tend vers $U*A$. On peut déduire de cette dernière égalité la valeur de la tension à appliquer au moteur pour obtenir la vitesse de rotation désirée.
\section{Étude mathématique...}
... pour le modèle stationnaire
\section{Étude mathématique}
Courbe paramétrée pour la dynamique de chacun de points. On se concentre d'abord sur la courbe paramétrée produite par un point, on pourra ensuite éventuellement s'intéresser à la figure produite par tous les points (union des courbes paramétrées).
Étude des points singulier: condition nécessaire pour en avoir.
......@@ -362,6 +443,11 @@ point de rebroussement
ligne droite
Indice de Moran (agrégation spatiale?)
Sur les vitesses, accélération ?
%%%%%%%%%%%%%%%%%% END %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment