Académique Documents
Professionnel Documents
Culture Documents
TP02
TP02
CI3-ESI2A
BRAS ROBOTIQUE
Modélisation du système sous MATLAB
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é.
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
𝒅𝒕
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 :
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 :
Le code :
Explication du code :
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.
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 multi sinusoï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 :
Le code :
Explication du code :
Explication code :
À 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.
Résultat :
Le code:
Analyse et Interprétation des résultats:
VIII. 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