Ce dernier laboratoire traite de la question de la planification de trajectoire d'un robot manipulateur. Nous avons vu jusqu'à maintenant la cinématique du robot CRS-460, les différents types de contrôleurs, ainsi qu'un système de vision. Il reste à présent à planifier une trajectoire pour réaliser notre tâche et déplacer les objets dans leur support respectif. Il a été utilisé un modèle du CRS-460 comprenant la dynamique, les motoréducteurs, les contrôleurs et l'interaction avec l'environnement.
La dynamique est réalisée à l'aide de SimMechanics de MATLAB permettant de modéliser chaque membre du robot comme un solide ayant une masse ponctuelle à son extrémité (si on considère que les moteurs représentent la plus grande partie de la masse d'un membre). La dynamique fournit les couples de réactions sur chaque articulation. Ces couples sont ensuite transmis comme perturbation sur les motoréducteurs.
Les motoréducteurs sont modélisés par un système de premier ordre associé à des gains représentant les réducteurs. Le contrôleur du robot est semblable à un PID axe par axe, à la seule différence que l'on va contrôler chaque articulation en tension et non en couple. Enfin, l'interaction avec l'environnement nécessite d'associer à chaque instant la phase de la tâche dans laquelle on se trouve, depuis la phase 0 ou phase initiale (la pince est vide et tous les objets sont en position initiale) jusqu'à la phase 8 où la pince est de nouveau vide et la plaque placée.
Alors, notre tâche lors de ce laboratoire a été de planifier une trajectoire pour chacune de ces phases. Il existe de nombreuses possibilités pour choisir ces trajectoires. Le déplacement qu'effectuerait le robot réel avec la commande Move a été simulé, et les caractéristiques des trajectoires définies. Les positions des objets dans le plan de travail ont été fournies (une autre façon de les obtenir serait l'utilisation de la détection par le système de vision du TP5). Les positions dans l'espace articulaire sont aussi données (à l'aide de la cinématique inverse).
Les objectifs de ce laboratoire sont :
- compléter la fonction trajectoire, ce qui permet de définir une trajectoire entre deux valeurs d'une articulation q0 et q1 avec une certaine vitesse (pourcentage de la vitesse maximale). La trajectoire doit respecter les critères détaillés ci-dessus.
- comparer deux simulations avec des vitesses différentes de 20% et 100% de la vitesse maximale.
[...] sim('robotCRSTP61'); Erreur02 = Erreur; % Sauvegarde des données pour vitesse 20% : animation3D.balle = balle.signals.values; animation3D.ballescale = ballescale.signals.values; animation3D.ballescale1 = ballescale1.signals.values; animation3D.boule = boule.signals.values; animation3D.boulescale = boulescale.signals.values; animation3D.boulescale1 = boulescale1.signals.values; animation3D.anneautrans = anneautrans.signals.values; animation3D.anneaurot = anneaurot.signals.values; animation3D.anneauscale = anneauscale.signals.values; animation3D.anneauscale1 = anneauscale1.signals.values; animation3D.plaquetrans = plaquetrans.signals.values; animation3D.plaquerot = plaquerot.signals.values; animation3D.plaquescale = plaquescale.signals.values; animation3D.plaquescale1 = plaquescale1.signals.values; animation3D.joint1 = joint1.signals.values; animation3D.joint2 = joint2.signals.values; animation3D.joint3 = joint3.signals.values; animation3D.joint4 = joint4.signals.values; animation3D.joint5 = joint5.signals.values; animation3D.joint6 = joint6.signals.values; animation3D20 = animation3D; % Simumation pour une vitesse de 100% : % speed = for iQ = 1:size(Q,1)-1 q0 = Q(iQ, q1 = Q(iQ+1, = trajectoireq(q0, q1, speed); T.time = [ T.time; transpose( T.time(end)+(Te:Te:Te*size(Tq,1)) T.time(end) + Te*size(Tq,1) + tempo]; T.signals(1).values = [ T.signals(1).values; Tq Q(iQ,7)*ones(size(Tq,1),1); Tq(end,:) for n = 1:1:6 figure(n+100*iQ); subplot(3,1,1), plot(t*Te, title(['q' num2str(n) ' vs xlabel('t ylabel(['q' num2str(n) ' subplot(3,1,2), plot(t*Te, title(['q' num2str(n) vs xlabel('t ylabel(['q' num2str(n) subplot(3,1,3), plot(t*Te,[Tqdd(:,n)]), title(['q' num2str(n) vs xlabel('t ylabel(['q' num2str(n) end end Tfin = T.time(end); sim('robotCRSTP61'); Erreur1 = Erreur; % Sauvegarde des données pour vitesse 100% : animation3D.balle = balle.signals.values; animation3D.ballescale = ballescale.signals.values; animation3D.ballescale1 = ballescale1.signals.values; animation3D.boule = boule.signals.values; animation3D.boulescale = boulescale.signals.values; animation3D.boulescale1 = boulescale1.signals.values; animation3D.anneautrans = anneautrans.signals.values; animation3D.anneaurot = anneaurot.signals.values; animation3D.anneauscale = anneauscale.signals.values; animation3D.anneauscale1 = anneauscale1.signals.values; animation3D.plaquetrans = plaquetrans.signals.values; animation3D.plaquerot = plaquerot.signals.values; animation3D.plaquescale = plaquescale.signals.values; animation3D.plaquescale1 = plaquescale1.signals.values; animation3D.joint1 = joint1.signals.values; animation3D.joint2 = joint2.signals.values; animation3D.joint3 = joint3.signals.values; animation3D.joint4 = joint4.signals.values; animation3D.joint5 = joint5.signals.values; animation3D.joint6 = joint6.signals.values; animation3D100 = animation3D; Comparaison de l'erreur entre les deux vitesses: figure(3) for (iq = subplot( hold on; plot(Erreur02.time, Erreur02.signals.values(:,iq), title(['Comparaison de l''erreur sur num2str(iq)]); plot(Erreur1.time, Erreur1.signals.values(:,iq), xlabel('t ylabel(['\epsilon_' num2str(iq) num2str(iq) num2str(iq) legend('Erreur pour une vitesse de 20%','Erreur pour une vitesse de end % Lancement des animations. anim(animation3D20); anim(animation3D100); Résultats Ensuite, quelques images des simulations pour les vitesses de et de la vitesse maximale d'opération (afin d'éviter beaucoup des images dans le rapport, on prend le cas de la cinquième étape anneau pris). q1 c'est la position fonction du temps, q1d c'est la vitesse et q1dd l'accélération de chaque axe. [...]
[...] Le temps à déplacer une jointe d'une position initiale q0 à une finale q1 a pris moins de temps, toutefois elle a introduit des oscillations du robot et un agrandissement des erreurs. Finalement, la manipulation d'un modèle 3D du CRS-Plus 460 nous a aidés à comprendre mieux le sujet et observer les modifications du système et comportement du robot quand soumis à variations de position, vitesse et accélération. Références Modélisation des robots manipulateurs Richard GOURDEAU Août 2008 Fundamentals of robotics Analysis and control Robert J. [...]
[...] Ce fichier contient un fichier trajinit.m permettant d'initialiser et de lancer la simulation ainsi que de tracer les figures. Les positions des objets dans le plan de travail ont été fournies (une autre façon de les obtenir serait l'utilisation de la détection par le système de vision du TP5 ; pour simplifier le travail, on a fourni les positions, heureusement). Les positions dans l'espace articulaire sont aussi données (à l'aide de la cinématique inverse). La théorie LES LABORATOIRES PRÉCÉDENTS ONT DISCUTÉ LES DIFFÉRENTES STRATÉGIES DE COMMANDE. [...]
[...] q1 = q1 * pi/180; CALCULATION OF 'tmax': % Gets the maximum operation time for each joint, storing the results % two variables: tpsmax (with the max-time for each iQ) and % num_joint_tmax (contains the id # of the joint that takes longer to % work). [tpsmax, num_joint_tmax, Vfinmax] = tmaxcalc(q0, q1, Vmax, amax); Obtaining the array with the velocities of operation : for = qdiff = abs( q1(1,n) - q0(1,n) if num_joint_tmax) Vmaxbon(n) = Vfinmax(n); % If n is the index of the joint with maximum time, it operates at Vmax. else % If not, calculates the max speed for the other axes. [...]
[...] Il y a aussi la question des collisions entre le robot (l'outil) et les objets du plateau. Pour éviter des collisions, l'espace articulaire doit être suffisamment rempli avec des points. Dans notre cas, on observe une légère collision avec le tube (support de la balle de tennis) et le support initial de la plaque. Conclusion Avec des techniques de planification de trajectoires, il a été possible de modéliser les trajectoires du robot lors d'une opération de pick-and- place Le profil de vitesse trapézoïdal (où il y a une rampe de vitesse croissante de t0 à t1, suit par une période t2-t1 de vitesse constante, maximale, et une période à la fin entre t2 et tfinal, t3, avec une vitesse descendante) a été utilisé comme le mieux approche pour notre problème. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture