Vous êtes sur la page 1sur 12

Réalisé par :

Abdellaoui Soumia
I. Objectif :
L'objectif de ce rapport est de modéliser la dynamique d'un bras robotique industriel à l'aide d'une
identification à boîte grise non-linéaire. Le modèle utilisé est basé sur un modèle flexible à trois
masses décrit dans la figure 1 du document fourni. Il s'agit d'un modèle idéalisé dans le sens où les
mouvements sont supposés se faire autour d'un axe et ne sont pas affectés par la gravité.

II. Modélisation du bras robotique

Le bras robotique est commandé par un couple appliqué 𝒖(𝒕) = 𝝉(𝒕) généré par le moteur
𝒅𝒒𝒎(𝒕)
électrique. La vitesse angulaire résultante du moteur 𝒚(𝒕) = J est la sortie mesurée. Les
𝒅𝒕

positions angulaires des masses après la boîte de vitesses et à l'extrémité de la structure du

bras 𝒒𝒈(𝒕)𝐞𝐭 𝒒𝒂(𝒕), ne sont pas mesurables.


Le modèle inclut une flexibilité dans la boîte de vitesses modélisée par un ressort non linéaire
τs(t) entre le moteur et la deuxième masse, et un ressort "linéaire" entre les deux dernières
masses. La friction du système agit principalement sur la première masse et est modélisée par
un couple de friction non linéaire τf(t).
En introduisant les états :
et en appliquant les équilibres de couples pour les trois masses, on obtient la structure du
modèle d'espace d'état non linéaire suivante :

Où Jm, Jg et Ja sont les moments d'inertie du moteur, de la boîte de vitesses et de la structure


du bras, respectivement. Les paramètres dg et da sont des paramètres d'amortissement, et ka
est la rigidité de la structure du bras.

III. Données d’entrée sortie :

Quatre ensembles de données ont été collectés à partir du bras robotique expérimental, avec
l'un utilisé pour l'estimation du modèle et les autres pour la validation. Les signaux d'entrée
comprennent des signaux multisinusoïdaux avec différentes caractéristiques de fréquence. Les
données sont prétraitées et combinées dans un objet IDDATA pour être utilisées dans le

processus d'identification.

IV. Manipulation 1 :
➢ Le code :
FileName = 'robotarm_c'; % File describing the model structure.
Order = [1 1 5]; % Model orders [ny nu nx].
Parameters = [ 0.00986346744839 0.74302635727901 ...
3.98628540790595 3.24015074090438 ...
0.79943497008153 0.03291699877416 ...
0.17910964111956 0.61206166914114 ...
20.59269827430799 0.00000000000000 ...
0.06241814047290 20.23072060978318 ...
0.00987527995798]'; % Initial parameter vector.
InitialStates = zeros(5, 1); % Initial states.
Ts = 0; % Time-continuous system.
nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, ...
'Name', 'Robot arm', ...
'InputName', 'Applied motor torque', ...
'InputUnit', 'Nm', ...
'OutputName', 'Angular velocity of motor', ...
'OutputUnit', 'rad/s', ...
'TimeUnit', 's');
nlgr = setinit(nlgr, 'Name', {'Angular position difference between the motor and the gear-box' ...
'Angular position difference between the gear-box and the arm' ...
'Angular velocity of motor' ...
'Angular velocity of gear-box' ...
'Angular velocity of robot arm'}');
nlgr = setinit(nlgr, 'Unit', {'rad' 'rad' 'rad/s' 'rad/s' 'rad/s'});
nlgr = setpar(nlgr, 'Name', {'Fv : Viscous friction coefficient' ... % 1.
'Fc : Coulomb friction coefficient' ... % 2.
'Fcs : Striebeck friction coefficient' ... % 3.
'alpha: Striebeck smoothness coefficient' ... % 4.
'beta : Friction smoothness coefficient' ... % 5.
'J : Total moment of inertia' ... % 6.
'a_m : Motor moment of inertia scale factor' ... % 7.
'a_g : Gear-box moment of inertia scale factor' ... % 8.
'k_g1 : Gear-box stiffness parameter 1' ... % 9.
'k_g3 : Gear-box stiffness parameter 3' ... % 10.
'd_g : Gear-box damping parameter' ... % 11.
'k_a : Arm structure stiffness parameter' ... % 12.
'd_a : Arm structure damping parameter' ... % 13.
});
nlgr = setpar(nlgr, 'Minimum', num2cell(zeros(size(nlgr, 'np'), 1))); % All parameters >= 0!
for parno = 1:6 % Fix the first six parameters.
nlgr.Parameters(parno).Fixed = true;
end
present(nlgr);
load('robotarmdata');
z = iddata({ye yv1 yv2 yv3}, {ue uv1 uv2 uv3}, 0.5e-3, 'Name', 'Robot arm');
z.InputName = 'Applied motor torque';
z.InputUnit = 'Nm';
z.OutputName = 'Angular velocity of motor';
z.OutputUnit = 'rad/s';
z.ExperimentName = {'Estimation' 'Validation 1' 'Validation 2' 'Validation 3'};
z.Tstart = 0;
z.TimeUnit = 's';
present(z);
figure('Name', [z.Name ': input-output data'],...
'DefaultAxesTitleFontSizeMultiplier',1,...
'DefaultAxesTitleFontWeight','normal',...
'Position',[100 100 900 600]);
for i = 1:z.Ne
zi = getexp(z, i);
subplot(z.Ne, 2, 2*i-1); % Input.
plot(zi.u);
title([z.ExperimentName{i} ': ' zi.InputName{1}],'FontWeight','normal');
if (i < z.Ne)
xlabel('');
else
xlabel([z.Domain ' (' zi.TimeUnit ')']);
end
subplot(z.Ne, 2, 2*i); % Output.
plot(zi.y);
title([z.ExperimentName{i} ': ' zi.OutputName{1}],'FontWeight','normal');
if (i < z.Ne)
xlabel('');
else
xlabel([z.Domain ' (' zi.TimeUnit ')']);
end
end

➢ Explication du code :

1. Modèle du Bras Robot (robotarm_c.c) :


- Les équations différentielles du modèle du bras robot sont mises en œuvre dans un fichier MEX
appelé `robotarm_c.c`.
- Le code contient des fonctions pour calculer les mises à jour d'état (`compute_dx`) et les sorties
(`compute_y`) du modèle.
2. Paramètres et Variables du Modèle :
- Le modèle prend en compte plusieurs paramètres physiques et coefficients, tels que les
coefficients de friction, les moments d'inertie, les paramètres de flexibilité, etc.
- Ces paramètres sont déclarés comme variables dans les fonctions du fichier MEX.
3. Introduction des États :
- Les états du système sont introduits sous forme d'un vecteur `x` qui représente les positions et
les vitesses angulaires des différentes masses du bras robotique.
4. Équations du Modèle :
- Les équations du modèle sont des équations différentielles non linéaires qui décrivent l'évolution
des états du système au fil du temps.
- Les équations décrivent la dynamique des trois masses flexibles du bras robotique en tenant
compte des ressorts, des frottements, et des couples appliqués.
5. Paramètres du Modèle et Initialisation :
- Les paramètres du modèle sont déclarés dans la fonction `compute_dx` à partir des valeurs
spécifiées dans le fichier MEX.
- Certaines des valeurs sont initialement fixées, tandis que d'autres (par exemple, les paramètres
de flexibilité) sont marquées pour estimation.
6. Création de l'Objet IDNLGREY :
- Les informations du modèle sont utilisées pour créer un objet IDNLGREY dans MATLAB. Cet objet
servira à l'identification des paramètres du modèle à partir des données expérimentales.
7. Données d'Entrée-Sortie :
- Les données expérimentales sont chargées à partir du fichier `robotarmdata.mat`.
- Ces données sont organisées dans un objet IDDATA qui contient les signaux d'entrée (torque
moteur appliqué) et de sortie (vitesse angulaire du moteur).
8. Visualisation des Données :
- Le code inclut des visualisations pour afficher les signaux d'entrée et de sortie des différentes
expériences.
➢ Les graphes :

➢ Interprétation et analyses :
Les figures fournies jouent un rôle essentiel pour comprendre le comportement du robot et
l'efficacité du modèle choisi. La figure 1 représente visuellement la structure mécanique du
robot, aidant à l'interprétation du modèle mathématique. Les figures suivantes présentent
les données d'entrée-sortie pour chaque expérience, révélant l'interaction entre les couples
moteurs appliqués et les vitesses angulaires résultantes du moteur. Ces tracés offrent des
informations précieuses sur la réponse du robot à différents signaux d'excitation et mettent
en évidence les défis liés à la modélisation de sa dynamique complexe.

V. Manipulation 2 :
Utilisons la fonction COMPARE pour simuler les résultats du modèle dans les quatre expériences et
comparons ces résultats avec les mesures réelles correspondantes. Pour les deux premiers états,
nous savons que leurs valeurs sont fixes à 0, tandis que les trois autres états ont des valeurs
initiales définies par les mesures au démarrage et ne sont pas fixes. Cependant, COMPARE estime
par défaut toutes les valeurs initiales pour chaque expérience, ce qui signifierait 20 estimations
d'états initiaux différentes (4 expériences * 5 états).

Même après avoir corrigé les deux premiers états, il resterait encore 12 estimations d'états initiaux
à faire (4 expériences * 3 états), en suivant la stratégie par défaut du modèle interne. Étant donné
que le jeu de données est assez volumineux, cela entraînerait des calculs longs. Afin d'éviter cela,
nous choisissons d'estimer les 4 * 3 composantes libres des états initiaux en utilisant la fonction
PREDICT. Cela est possible si les états initiaux sont fournis en tant que structure d'état initial. Nous
limitons cette estimation aux données du premier dixième pour accélérer le processus.

Ensuite, nous demandons à COMPARE d'utiliser la matrice résultante d'états initiaux 5 x 4 X0init
sans effectuer de nouvelles estimations d'états initiaux, en maintenant ainsi la précision tout en
réduisant la complexité computationnelle.
Figure : Comparaison entre les sorties mesurées et les sorties simulées du modèle initial de
bras de robot

Comme observé, les performances du modèle initial du bras robotique sont satisfaisantes, voire
bonnes. L'ajustement pour les trois ensembles de données se situe autour de 79 % pour ye et yv1,
37 % pour yv2, et 95 % pour yv3. Il est important de noter que l'ajustement plus élevé pour ye/yv1
par rapport à yv2 revêt une signification particulière en raison de la capacité du modèle initial à
reproduire avec précision l'onde carrée, tandis que la composante multisinusoïdale n'est pas aussi
bien capturée. Pour une analyse plus approfondie, examinons également les erreurs de prédiction
pour les quatre expériences :
❖ Estimation des paramètres :
Explorons à présent la possibilité d'améliorer les performances du modèle initial du bras robotique
en procédant à l'estimation des 7 paramètres variables du modèle, ainsi que des 3 états initiaux
libres de la première expérience de z, qui constitue l'ensemble de données d'estimation. Il est à
noter que cette étape d'estimation pourrait demander un certain laps de temps, généralement
quelques minutes
❖ Performances du modèle estimé de bras de robot :
À nouveau, nous employons la fonction COMPARE pour évaluer les performances du modèle de
bras robotique qui a été estimé. Il est important de souligner que, dans cette étape, nous
demandons expressément à COMPARE de ne pas procéder à une nouvelle estimation de l'état
initial. Pour la première expérience, nous substituons l'état initial deviné par celui estimé à l'aide de
NLGREYEST. Quant aux trois expériences suivantes, nous faisons appel à la fonction PREDICT afin
d'estimer l'état initial en se basant sur l'objet IDDATA réduit, zred.
Le graphique de comparaison met en évidence une amélioration significative avec des ajustements
plus précis. Pour ye et yv1, l'adéquation atteint désormais environ 85 % (comparé à 79 %
précédemment), pour yv2 elle s'élève à environ 63 % (contre 37 % auparavant), et pour yv3, elle
reste légèrement inférieure à 95,5 % (pratiquement inchangée par rapport à avant, également
légèrement inférieure à 95,5 %). Cette amélioration est particulièrement marquée pour le
deuxième ensemble de données de validation, caractérisé par un signal multisinusoïdal sans onde
carrée. Il est à noter que la capacité du modèle estimé à suivre la composante multisinusoïdale de
ye et yv1 a également connu une amélioration considérable, bien que cela ne soit pas pleinement
reflété dans les chiffres d'ajustement, qui sont davantage influencés par l'adaptation à l'onde
carrée. L'examen graphique des erreurs de prédiction montre également que les résidus sont
généralement de taille réduite par rapport au modèle initial du bras robotique.
Nous concluons l'étude de cas en résumant textuellement diverses propriétés du
modèle de bras de robot estimé.

❖ Conclusion :

En conclusion, les techniques d'identification de systèmes jouent un rôle prépondérant en


robotique. La création de modèles précis de robots est fondamentale pour les approches modernes
de la commande robotique, étant souvent considérée comme indispensable pour répondre à la
demande croissante en termes de vitesse et de précision. Ces modèles revêtent également une
importance cruciale dans diverses applications de diagnostic robotique, où ils sont utilisés pour
anticiper les problèmes liés à l'usure et pour détecter la véritable cause des dysfonctionnements
des robots

Vous aimerez peut-être aussi