Programmation des robots industriel et application sur le robot manipulateur Algérie machines outil 1( Télécharger le fichier original )par Abdelkader BENMISRA Université de Saad Dahleb de Blida (Algérie) - Magistère en Génie Mécanique 2007 |
Appendice B :Program CALCUL DES ROBOTS INDUSTRIELES MODELISATION GEOMETRIQUE CINEMATIQUE ET DYNAMIQUE ELABORE PAR A. ALLALI , M.M.HATTALI, A.BENMISRA, M.MEGHERBI, N.BEDHIAF, R.MAZARI, K.AIMEUR, N.MOHAMMEDI, K.TOUMADJ, A.BRAHIMI, M.K.HALAIMIA. En collaboration : Départements d\u8217Informatique, Mathématique, Electronique, Aéronautique et Génie mécanique de l\u8217Université de Saad Dahleb de Blida.
Université de Saad Dahleb de Blida Nbre. d\u8217articulations, coord. Point initial, coord. Point final, temps T, \u916ÄT, paramètres de D.H. ; Positions, Vitesses, Accélérations, Forces et Couples, Variable articulaire. Programme d'un espace de travail. c PROGRAM: ESPACE DE TRAVAIl. c PURPOSE: Entry point for the console application. c program ESPACEDETRAVAIL c Déclaration des variables c Variables integer n,i,j,k real a,b,c,e,f,d,r,u,q,p,z2,z3,z4,z5,h1 ,h2,h3,h4 real ydmax, ydmin,ymin, ymax,ydmaxi,ydmini, ymini,ymaxi, pi real y1,y2,y6, y3,y4,px,py,pz ,hmin,hmax real d3,d4 dimension T(3),ymin( 1 ),ymax( 1) ,hmin( 1) ,hmax( 1) C c introduction de la dimension des matrices de passages pi=3. 1415926535897932384626433832795 c déclaration de PI pour la transformation des degrés en radiants n=5 d3=0.6 d4=0.6 z2=600 z3=635 z4=700 z5=500 c Entrer des paramétres de Dénavit-Hertenberg c write(*,*)'chargement des limites artiulaires ' ! do k=1,n c incrémentation chaque matrice de passage write(*,*)'donner les limites angulaires des butées mécaniques + de 1 articulation k' write(*,*)'theta min' read(*,*) theta min ymini=(theta min*pi)/1 80 write(*, *)'theta max' read(*, *)theta max ymaxi=(theta max*pi)/1 80 write(*,*)'ymaxi' write(*, *)'theta min','=', ymini, 'theta max','=',ymaxi c ymin(k)=ymini ymax(k)=ymaxi write(*,*)'(ymax(i)* 1 80/pi,i=1 ,5)' write(*,*)'(ymin(i)* 1 80/pi,i1 ,5)' do k=1,n write(*,*)'donner les limites de la distance des butées mécaniques + de K articulation k' write(*,*)'zmin' read(*,*) zmin write(*,*)'zmax' read(*,*) zmax write(*, *)'zmin',k,'=', zmin ,'zmax',k,'=',zmax write(*,*)'hmin' read(*,*) hmin write(*,*)'hmax' read(*,*) hmax write(*, *)'hmin',k,'=', hmin , 'hmax',k,'=',hmax c Entrer des paramétre de Dénavit-Hertenberg c write(*,*)'chargement des limites artiulaires ' c incrimentation pour chaque matrice de passage write(*,*)'donner les limites angulaires des butés mécanique + de 1 articuiation k' read(*,*) ydmin ymini=(ydmin*pi)/1 80 write(*, *)'theta max' read(*,*) ydmax ymaxi=(ydmax*pi)/1 80 write(* ,*)'theta min',k,'=', ydmin, 'theta max',k,'=',ydmax c ymin(k)=ymini ymax(k)=ymaxi end do write(*, *)'(ymax(i)* 1 80/pi,i= 1,5)' write(*,*)'(ymin(i)* 1 80/pi,i1 ,5)' c calcul des matrice de transformation a=ymin(1) b=ymax(1) c=ymin(2) e=ymax(2) f=ymin(3) p=ymax(3) write(*,*)'calcul du vecteur P(Px,Py,Pz)Position des + coordonnées articulaires' do 11 yl=a,b,0.05 do l1 y2=c,e,1 do 11 y3=f,p,0.1 c calcul des élément de T(m,m) et son remplissage write(*,*)' calcul des élément de T(m,m) et son remplissage ' T(1 )=(z3-z4)*cos(y1) T(2)=(z3-z4)*sin(y1) T(3)= (h1)+(h2)+(h3)+(h4)+z2-z5 px=T(1) py=T(2) pz=T(3) !write(*, *) (T(i),i=1,3) !write(*,*) (T(i),i=1,3),';' write(*,*) T(1),T(2),T(3) 10 format (3f) 11 write(*,*) c Body of Espace de travail end . Appendice C : Programme principale c PROGRAM implicit none real,dimension( 100):: qi,qf,kv,ka,q,a,c,v,st,tf real alpha1 ,alpha2,alpha3 ,alpha4,alpha5,teta1 ,teta2,teta3, +teta4,teta1 5 integer i,j ,ii,jj ,t,dt,tfm,w WRITE(*, *) write(*, *) write(*,*)'nombre articulation w' read(*,*)w write(*,*)'les parametres de Denavit Hartenberg' write(*, *)'alpha1 ,alpha2,alpha3 ,alpha4,alpha5' read(*, *)alpha1 ,alpha2,alpha3 ,alpha4,alpha5 write(*, *)'teta1 ,teta2,teta3 ,teta4,teta1 5' read(*, *)teta1 ,teta2,teta3 ,teta4,teta1 5 write(*,*)'LES PARAMETRES DU CHAINON' do 122 j=1,5 write(*, *)'coordone de point initial=qi(j)' read(*,*) qi(j) write(*,*)'coordone de point final=qf' read(*,*) qf(j) write(*,*)'kv(j)' read(*,*)kv(j) write(*,*)'ka(j)' read(*,*)ka(j) read(*,*) qi(j),qf(j) ,kv(j) ,ka(j) 122 continue st (1)=a cos (-1.) /180 st (2) =1 st (3)=1 st (4) =1 st (5) =1 dt=30 tfm=5 t=0 40 continue call synch(qi,qf,kv,ka,tfm,st,tf) print*,'tfm=',tfm do 41 i=1,5 call para (qi(i),qf(i),kv(i),ka(i) ,q(i),v(i) ,a(i) ,st(i),tfm,t) 41 continue print*, '(q(i) ,i=1,5) ,t,q' print*,' (v(i) ,i=1,5), v' write(*,*)'t q(2) q(3) q(4) q(5)' write(*,*)t,q(2),q(3),q(4),q(5) write(*,*)'t v(2) v(3) v(4) v(5)' write(*, *)t,v(2),v(3),v(4),v(5) write(*,*)'t a(2) a(3) a(4) a(5)' write(*,*)t,a(1 ),a(2),a(3) ,a(4),a(5) call dynami (q,v, a, c) write(*,*)'t c(2) c(3) c(4) c(5)' write(*,*)t,c(1 ),c(8),c(1 5),c(24) write(*,*)'le vecteur <c(ii)> ' write(*,*)'calcul des forces et les momoment articulaires' write(*,*)t,(c(ii),ii=1 ,5) write(*,*)t,(c(jj),jj=6, 11) write(*,*)t,(c(jj),jj=1 2,17) write(*,*)t,(c(jj),jj=1 8,24) t=t+1 if(t.le.6)goto 40 end . Appendice D : Programme Synchronisation C**************************************************************** C Synchronisation C***************************************************************** subroutine synch(qi,qf,kv,ka,tfm,st,tf) real qi(5),qf(5),kv(5),ka(5),tf(5),tfm,st(5),lamda(5),nu(5),s(5), +sl, s2,p(5) integer i,J do 4 j=l,5 sl=abs(qf(j) - qi (j) ) s2=kv(j) **2/ka (j) if ( sl.gt.s2) go to 4 print*,'La condition du palier vitesse pour 1 articulation' 4 continue tfm =0 print*,'qi=' , (qi(i),i=l,5) print*,'qf=',(qf(i),i=l,5) print*,'kv= ',(kv(i),i=1,5) print*,'ka=',(ka(i),i=1 ,5) print*,'st=',(st(i),i=1 ,5) pause do 15 j=l,5 tf(j)=kv(j) /ka(j) +abs ( (qf(j)-qi(j) ) *st(j) ) /kv(j) print*,'tf(j)',tf(j) pause if (tf(j).ge.tfm) go to 15 tfm=tf(j) 15 continue print*,'tfm-synhcronisation ,tfm ' pause do 2 j=1,5 s1 =tfm-kv(j)/ka(j) lamda(j)=abs(qf(j) -qi (j)) *st(j) / (kv(j) *sl) kv(j ) =lamda(j) *kv(j) ka(j)=lamda(j)*ka(j) print*,kv(j),ka(j),kv,ka, tps mini pause 'kv ,ka' 2 continUe return end. Appendice E : Programme E.1 : Programme de calcul des coordonnées; vitesses et accélérations articulaires C ****************************************************************** c calcul des coordonnees; vitesses et accélérations C articulaires c****************************************************************** subroutine para (qi,qf,kv,ka,q,v,a,st,tfm,t) real qi, qf, kv, ka, q, v,a, t, t0, si, tfm c******************** Loi de Bang-Bang avec palier de vitesse ************ t0=kv/ ka if (t.le.t0) then q=qi+ ( (ka*t*t/2)/st) *abs (qf-qi) / (qf-qi) v=ka*t*abs (qf-qi) / (qf-qi) a=ka*abs (qf-qi) / (qf-qi) return else if (t.le.tfrn-t0) then q=qi+( (t-t0/2)*Kv/st) *abs(qf-qi) / (qf-qi) v=kv*abs (qf-qi) / (qf-qi) a=0 return else if (t.gt.t0) then q=qf- ((tfm-t) **2/2*ka) /st*abs (qf-qi) / (qf-qi) v=(tfm-t)*ka*abs (qf-qi) / (qf-qi) a=-ka endif endif endif return end Programme E.2 : Programme de calcul des forces et les moment articulaires C ****************************************************************** c calcul des forces et les moment articulaires c ******************************************************************* subroutine dynami (q,v, a,c) real v(4),a(4),q(4),c(24),m(4),x(3),z1 ,z2,z3 ,z4,z5,z6,z7,z8,z9,zl0, +z1 1,j(4) j(1)=.0319 j(2)=0.0508 j(3)=129. 14 j (4)=6.283 m(1)=25.549 m(2)=40.70 m(3)=241 .779 m(4)=39.049 X(2)=0.02 x(3)=0.02 l2=0.6 z1=a(4)+v(1 )**2*q(4) z2=a( 1 )*q(4)+2*v( 1 )*v(4) z3=m(4)*9.81+m(4)* (a(2)+a (3)) z4=a( 1)*q(3)+2*v(1)*v(3) z5=m(4)+m(3) z6=x(2)+x(3)+1 2 z7=a(3)-v(1 )**2*q(3) z8=m(2)+m(3)+m(4) z9=l2/2 z10=q (2) +12/2 z 11 =m( 1 )+m(2)+m( 3)+m(4) C(1)=m(4)*z1 C(2)=m(4)*z2 C(3)=z3 C(4)=q(3)*z3 C(5)=-q(4)*z3 C(6)=q(4)*m(4)*z2-q(3)*m(4)*zl+J(1 )*a(1) C(7)=-m(3)*z4+z4*zl C(8)=m(4)*z2+m(3)*z7 C(9)=z5 *9 .81 +z5 *a(2)+m(4)*a(3) C(1 0)=z5*9.8 1+z5*a(2)+m(4)*a(3)-z6*(m(4)*z2+m(3)*z7) C( 11 )=q(4)*z2+z6+(-m(3)*z4+m(4)*z 1) C(12)=m(4)*q(4)*z2-3*q(3)*m(4)*z1+m(3)*q(3)*z4+(j(3)+j (4)) *a(1) C(13)=-m(3) *z4+m(4) *z1 C( 1 4)=m(4)*z2+m(3)*z7 C(1 5)=rn8*((9. 81 )+a(2)) C( 1 6)=q(3)*z5 *(9. 81 )+z5 *a(2)+m(4)*a(3)-(z6+z9+zl0)*(m(4)*z2+m(3) +*z7) C( 1 7)=q(4)*z3+(-z9-zl0+z6)*(m(4)*z1-m(3)*z4) C(1 8)=-3 *m(4)*q(3)*zl+m(4)*q(4)*z2+m(3)*q(3)*z4 C(1 9)=-m(3)*z4+m(4)*z1 C(20)=m(4)*z2+m(3)*z7 C(21)=z1 1*9.81+z8*a(2) C(22)=q(3)*(z5 *(9. 81 +a(2))+m(4)*a(3))-(z6+z9+zlO)*(m(4)*z2+m(3) +*z7) C(23)=q(4)*z3+(-m(3)*z4+m(4)*z1 )*(-z9+z6+z1 0) C(24)=m(4)*q(4)*z2-m(3)*q(3)*z4+m(4)*q(3)*z1 return end Appendice F : Programme de calcul des forces actives c* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * c CALCUL DES FORCES ACTIVES c* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * subroutine dynami (q,v,a,c 1 ,c2,c3, c4) real v(5),a(5),q(5),c 1 ,c2,c3 ,c4,m(5),x(5),b, +s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, + s16, s17, s18, s19 , s20, s21, s22, s23, s24, s25, s26, s27, s28, +s29, s30, r (5) m(1)=25.549 m (2 ) =40.70 m (3 ) =241.779 m(4)=39.049 x(1)=0.6 x (2) =0.6 x(3)=0 x(4)=0.4 r(1)=0.05 r(2)=0.05 r(3)=0 r(4)=0.06 b=0.7 a1 =0.2 s10=m(3) +m(4) s1 1=m(3)*(b*cos(2*q(1))+2*q(3)) s1 2=m(4)*q(3)*(sin(q(1 )))**2 s1 3=m(2)+m(3) s14=m(2) +m(3) +m(4) s15=m(4) s1 6=1+(sin(q(1)))**2 s17=m(1)*x(1)**2 s18=m(2) * (3*r(2) **2+4*x (2) **2) /12 s1 9=m(3)*((a1 **2+1 3 *b**2)/1 2+b*q(3)*cos(2*q(1 ))+q(3)*2) s20=(3 *r(4)**2+4*r(4)**2)/1 2 s21=x(4) *q(4) +2*q(3) **2 s22=2* (q (4) **2+q (3) **2) s23=b*cos(2*q(1 ))+2*q(3) s24=2*b*q(3)*v(1 )*sin(2*q(1)) s25=x(4)*v( 4) +4*q ( 3) *v ( 3) s26 =q(4) *v (4) +q (3)*v(3) s27=q(4) **2+q(3)**2 s28=v(1 )*sin(q(1 ))*cos(q(1)) s29=m(3)*b*q(3)*sin(2*q(1)) s30=(q(4)**2+q(3)**2)*cos(q(1))*sin(q(1)) c 1=((s 17/1 2)+s 1 8+s 1 9+s1 5*(s20s2 1+s22+s1 6))*a(1 )+(m(3)*(s23 *v(3).. +s24)+s15*(4*s26*s16..s25+4*s27*s28))*v(1)+(s29..2*s15*s30)*v(1).. +q(2) *1000 c2=s13*q(2) +9.81*s14..1000 c3=a(3)*s10.. (s1 1+4*s12) * (v(1) **2) c4=s1 5*(a(4)+(x(4)..4*s1 6*q(4))*v(1)**2) return end Appendice G : Programme de simulation /* * JFrame.java * * Created on 19 mai 2006, 22:54 */ /* * * * @author Redha */ import java.awt. *; public class JFrame extends javax.swing.JFrame { /** Creates new form JFrame */ public JFrame() { initComponents(); ann= new Annimation(this); setBounds(1 00,100,750,480); j Slider1 .setEnabled(false); setVisible(true); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() { buttonGroup 1 = new javax. swing.ButtonGroup(); jPanel1 = new javax.swing.JPanel(); jSlider1 = new javax.swing.JSlider(); jComboBox1 = new javax. swing.JComboBox(); jRadioButton1 = new javax. swing.JRadioButton(); jRadioButton2 = new javax. swing.JRadioButton(); j Label 1 = new javax. swing.JLabel(); jPanel2 = new javax.swing.JPanel(); canvas1 = new java.awt.Canvas(); jMenuBar2 = new javax. swing.JMenuBar(); jMenu2 = new javax.swing.JMenu(); jMenuItem2 = new javax.swing.JMenuItem(); j Table 1 = new javax. swing.JTable(); getContentPane(). setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.X_AXIS)); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); jPanel1 . setLayout(null); j Panel 1 .setBorder(new javax. swing.border.TitledBorder("")); j Slider1 .setMinimum(1); j Slider1 .setValue(20); j Slider1 .addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { j Slider1 StateChanged(evt); } }); jPanel1 .add(j Slider1); j Slider1 .setBounds(1 00, 200, 140, 50); jComboBox1 .setModel(new javax. swing.DefaultComboBoxModel(new String[] { "Position 1", "Position 2", "Position 3", "Position 4", "Position 5" })); jComboBox1 .addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jComboBox1 ActionPerformed(evt); } }); jPanel1 .add(jComboBox1); jComboBox1 . setBounds( 100, 100, 130, 25); jRadioButton1 .setSelected(true); jRadioButton1 . setText("Choisir La Position"); buttonGroup 1 .add(jRadioButton1); jRadioButton1 .addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButton1 ActionPerformed(evt); } }); jPanel1 .add(jRadioButton1); jRadioButton1 .setBounds(1 0, 50, 131, 24); jRadioButton2. setText("Annimer Le Bras"); buttonGroup 1 .add(jRadioButton2); jRadioButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButton2ActionPerformed(evt); } }); j Table 1 .setModel(new javax. swing.table.DefaultTableModel( new Object [][] { {null, "X", "Y"}, {"P1", null, null}, {"P2", null, null}, {"P3", null, null}, {"P4", null, null} }, new String [] { "Title 1", "Title 2", "Title 3" } )); jPanel1 .add(jTable1); jTable1 .setBounds(80, 270, 200, 80); jPanel1 .add(jRadioButton2); jRadioButton2.setBounds(1 0, 150, 130, 24); jLabel 1. setText("La Vit\u00e8se "); jPanel1 .add(jLabel1); jLabel1.setBounds(40, 210, 60, 20); getContentPane().add(j Panel 1); jPanel2.setLayout(new java.awt.GridLayout()); jPanel2. setBackground(new java.awt.Color(255, 255, 255)); jPanel2.setDebugGraphicsOptions(javax. swing.DebugGraphics.NONE_OPTION); jPanel2.add(canvas 1); getContentPane().add(jPanel2); jMenu2. setText("Fichier"); jMenuItem2. setText("Quiter"); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem2ActionPerformed(evt); } }); jMenu2.add(jMenuItem2); jMenuBar2.add(jMenu2); setJMenuBar(jMenuBar2); pack(); private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) { // Add your handling code here: ann= new Annimation(this); if(jRadioButton2.isSelected()) { ann. stop(); j Slider1 .setEnabled(true); jComboBox1 .setEnabled(false); ann.start(); } } private void jRadioButton1 ActionPerformed(java.awt.event.ActionEvent evt) { // Add your handling code here: if(jRadioButton1 .isSelected()) { ann. stop(); j Slider1 .setEnabled(false); jComboBox1 .setEnabled(true); } } private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { // Add your handling code here: ann.stop(); System.exit(0); } private void jComboBox1 ActionPerformed(java.awt.event.ActionEvent evt) { // Add your handling code here: ann= new Annimation(this); switch(jComboBox1 .getSelectedIndex()) { case(0):Exemple 1(); position="Position 1 "; break; case(1 ):Exemple3(); position="Position 2"; break; case(2):Exemple4(); position="Position 3"; break; case(3):Exemple2(); position="Position 4"; break; case(4):Exemple5(); position="Position 5"; break; } ann.start(); } void j Slider1 StateChanged(javax.swing.event.ChangeEvent evt) { // Add your handling code here: } /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) { ann. stop(); System.exit(0); } public Graphics Mypaint(Graphics g) { for(int jcas=1; jcas<=NbrCas; j cas++) { XA[jcas] [Nbr+1 ]=(cas*30)+XA[jcas] [Nbr]; YA[j cas] [Nbr+1 ]=30+YA[jcas] [Nbr]; int x1=150, y1=380, x2=250, y2=350; int x3=(x1+x2)/2-2; int y3=y1-y2; int Xh=0,Yh=0,px=0,py=0; // Longueur du bras vertical g.fillRect(x1 ,y1 ,100,10);// Base horizontale imposée g.fillRect(x3,y2,5,y3); // Bras vertical imposé int j1 j2; g. setColor(Color.red); Font f = new Font("Comic Sans MS",14,20); g. setFont(f); g.drawString(" Simulation d'un robot manipulateur",40,50); g.drawString(" ( ALG.MO- 1 )", 150,80); f = new Font("Comic Sans MS",14,24); g. setFont(f); g.drawString(" "+position,Xpos,Ypos); f = new Font("Comic Sans MS",25,16); g. setFont(f); // Trace Bras for(j1=2; j1<=Nbr+1; j1++){ g.setColor(Color.black); if(j 1<=Nbr) { if(j 1<4){ px=10;py=0;} if(j1>=4){ py =10;px=0;} if((pos == 1||pos==3) && j1==Nbr){ py=-10;px =10;} Xh=XA[jcas] [j 1] + ((XA[jcas] [j 1-1]- XA[jcas] [j 1 ])/2)+px; Yh=YA[jcas] [j 1] + ((YA[jcas] [j 1-1]- YA[jcas] [j 1])/2)-py; g.drawString("h"+String.valueOf(j 1-1 ),Xh,Yh); } g.drawLine(XA[jcas][j1-1], YA[jcas][j1-1], XA[jcas][j1], YA[jcas][j1]); System.out.println("J= "+j1+" XA= "+XA[jcas][j1]+" YA= "+YA[jcas][j 1]); for(j2=1; j2<=Nbr; j2++){ if(Type[j2]==1) /* Articulation Rotoide */ { g. setColor(Color.blue); g.fillOval(XA[jcas] [j2]-R/2, YA[jcas] [j2]-R/2, R, R); g. setColor(Color.red); Font Dialog=new Font("Dialog", Font.BOLD, 13); g. setFont(Dialog); g.drawString("R", XA[jcas] [j2] -R/4, YA[jcas] [j2]+R/4); } else if(Type[j2]==2)/* Articulation Prismatique */ { g. setColor(Color.red); g.fillRect(XA[jcas] [j2]-R/2, YA[jcas] [j2]-R/2, R, R); g. setColor(Color.blue); Font Dialog=new Font("Dialog", Font.BOLD, 13); g. setFont(Dialog); g.drawString("P", XA[jcas] [j2] -R/4, YA[jcas] [j2]+R/4); } } } j Table 1. setValueAt(new Integer(XA[ 1] [2]), 1,1); jTable 1. setValueAt(new Integer(XA[ 1] [3]), 2,1); j Table 1. setValueAt(new Integer(XA[ 1] [4]), 3,1); jTable 1. setValueAt(new Integer(XA[ 1] [5]), 4,1); j Table 1. setValueAt(new Integer(YA[ 1] [2]), 1,2); jTable 1. setValueAt(new Integer(YA[ 1] [3]), 2,2); j Table 1. setValueAt(new Integer(YA[ 1] [4]), 3,2); jTable 1. setValueAt(new Integer(YA[ 1] [5]), 4,2); return g; //========================== Exemple n°1================== public static void Exemple 1() { // Cas de 1 bras de 5 articulations NbrCas=1; // Nombre de cas Nbr=5; // Nombre d'articulation cas =1; pos = 1; //Sinq articulations de type RPRP Type[1]=1; // Articulation Rotoide Type[2]=2; // Articulation Prismatique Type[3]=2; // Articulation Prismatique Type[4]=2; // Articulation Prismatique Type[5]=2; //Articulation Prismatique // Premier cas (premier bras): XA[1][1 ]=200; // X du premier cas, première
articulation XA[1][2]=200; //X du premier cas, 2end
articulation XA[1] [3]=200; //X du premier cas, 3ème
articulation XA[1][4]=250; //X du premier cas, 4ème
articulation XA[1][5]=250; //X du premier cas, 5ème articulation YA[1][5]=200; //Y du premier cas, 5ème articulation Xpos=30+XA[ 1][5]; Ypos=30+YA[ 1][5]; public static void Exemple5(){ // Cas de 1 bras de 5 articulations NbrCas=1; // Nombre de
cas cas=-1; // Nombre d'articulation pos =5; //Sinq articulations de type RPRP Type[1]=1; // Articulation Rotoide Type[2]=2; // Articulation Prismatique Type[3]=2; // Articulation Prismatique Type[4]=2; // Articulation Prismatique Type[5]=2; //Articulation Prismatique // Premier cas (premier bras): XA[1][1 ]=200; // X du premier cas, première
articulation XA[1][2]=200; //X du premier cas, 2end
articulation XA[1] [3]=200; //X du premier cas, 3ème
articulation XA[ 1] [4]=1 50; //X du premier cas, 4ème
articulation XA[1][5]=60; //X du premier cas, 5ème articulation YA[1][5]=280; //Y du premier cas, 5ème articulation Xpos=-50+XA[ 1][5]; Ypos=50+YA[ 1][5]; // Second cas (2 bras): XA[2][1]=200; // X du 2end cas, première articulation YA[2][1]=300; // Y du 2end cas, Première articulation XA[2][2]=210; //X du 2end cas, 2end
articulation XA[2][3]=250; //X du 2end cas, 3ème
articulation XA[2][4]=300; //X du 2end cas, 4ème
articulation
XA[3][2]=250; //X du 3ème cas, 2end
articulation XA[3][3]=300; //X du 3ème cas, 3ème
articulation XA[3][4]=-10; //X du 3ème cas, 4ème articulation YA[3][4]=100; //Y du 3ème cas, 4ème articulation XA[3][5]=-50; //X du troisième cas, 5ème articulation YA[3][5]=100; //Y du troisième cas, 5ème articulation } //===================== Exemple n°3====== ============ public static void Exemple3(){ // Cas de 1 bras de 5 articulations NbrCas=1; // Nombre de cas Nbr=5; cas =1; // Nombre d'articulation pos=3; //Sinq articulations de type RPRP Type[1]=1; // Articulation Rotoide Type[2]=2; // Articulation Prismatique Type[3]=2; // Articulation Prismatique Type[4]=2; // Articulation Prismatique Type[5]=2; //Articulation Prismatique // Premier cas (premier bras): XA[1][1 ]=200; // X du premier cas, première
articulation XA[1][2]=200; //X du premier cas, 2end
articulation XA[1] [3]=200; //X du premier cas, 3ème
articulation XA[1][4]=250; //X du premier cas, 4ème
articulation XA[1][5]=250; //X du premier cas, 5ème articulation YA[1][5]=250; //Y du premier cas, 5ème articulation Xpos=30+XA[ 1][5]; Ypos=30+YA[ 1][5]; // Second cas (2 bras): XA[2][1]=200; // X du 2end cas, première
articulation XA[2][2]=150; //X du 2end cas, 2end
articulation XA[2][3]=250; //X du 2end cas, 3ème
articulation XA[2][4]=300; //X du 2end cas, 4ème
articulation
XA[3][2]=250; //X du 3ème cas, 2end
articulation XA[3][3]=300; //X du 3ème cas, 3ème
articulation XA[3][4]=-10; //X du 3ème cas, 4ème articulation YA[3][4]=100; //Y du 3ème cas, 4ème articulation XA[3][5]=-50; //X du troisième cas, 5ème articulation YA[3][5]=100; //Y du troisième cas, 5ème articulation } //====================== Exemple n°4 ========== == public static void Exemple4(){ // Cas de 1 bras de 5 articulations NbrCas=1; // Nombre de cas Nbr=5; cas=1; // Nombre d'articulation pos =4; //Sinq articulations de type RPRP Type[1]=1; // Articulation Rotoide Type[2]=2; // Articulation Prismatique Type[3]=2; // Articulation Prismatique Type[4]=2; // Articulation Prismatique Type[5]=2; //Articulation Prismatique // Premier cas (premier bras): XA[1][1 ]=200; // X du premier cas, première
articulation XA[1][2]=200; //X du premier cas, 2end
articulation XA[1] [3]=200; //X du premier cas, 3ème
articulation XA[1][4]=250; //X du premier cas, 4ème
articulation XA[1][5]=300; //X du premier cas, 5ème articulation YA[1][5]=200; //Y du premier cas, 5ème articulation Xpos=-30+XA[ 1][5]; Ypos=60+YA[ 1][5]; // Second cas (2 bras): XA[2][1]=200; // X du 2end cas, première
articulation XA[2][2]=150; //X du 2end cas, 2end
articulation YA[2][3]=200; //Y du 2end cas, 3ème articulation XA[2][4]=300; //X du 2end cas, 4ème
articulation XA[2][5]=200; //X du second cas, 5ème
articulation // Troisième cas (3ème bras): XA[3][1]=200; // X du 3ème cas, première
articulation XA[3][2]=250; //X du 3ème cas, 2end
articulation XA[3][3]=300; //X du 3ème cas, 3ème
articulation XA[3][4]=-10; //X du 3ème cas, 4ème articulation YA[3][4]=100; //Y du 3ème cas, 4ème articulation XA[3][5]=-50; //X du troisième cas, 5ème articulation YA[3][5]=100; //Y du troisième cas, 5ème articulation } //========================= Exemple n°2========================= public static void Exemple2(){ // Cas de 1 bras de 2 articulations NbrCas=1; // Nombre de cas Nbr=5; cas=-1; // Nombre d'articulation pos= 2; //Sinq articulations de type RPRP Type[1]=1; // Articulation Rotoide Type[2]=2; // Articulation Prismatique Type[3]=2; // Articulation Prismatique Type[4]=2; // Articulation Prismatique Type[5]=2; //Articulation Prismatique // Premier cas (premier bras): XA[1][1 ]=200; // X du premier cas, première
articulation XA[1][2]=200; //X du premier cas, 2end
articulation XA[1] [3]=200; //X du premier cas, 3ème
articulation XA[ 1] [4]=1 50; //X du premier cas, 4ème
articulation XA[1][5]=120; //X du premier cas, 5ème articulation YA[1][5]=200; //Y du premier cas, 5ème articulation Xpos=- 100+XA[ 1][5]; Ypos=50+YA[ 1][5]; // Second cas (2 bras): XA[2][1]=200; // X du 2end cas, première
articulation XA[2][2]=150; //X du 2end cas, 2end
articulation XA[2][3]=250; //X du 2end cas, 3ème
articulation XA[2][4]=300; //X du 2end cas, 4ème
articulation
XA[3][2]=250; //X du 3ème cas, 2end
articulation XA[3][3]=300; //X du 3ème cas, 3ème
articulation XA[3][4]=-10; //X du 3ème cas, 4ème articulation YA[3][4]=100; //Y du 3ème cas, 4ème articulation XA[3][5]=-50; //X du troisième cas, 5ème articulation YA[3][5]=100; //Y du troisième cas, 5ème articulation } /* * * @param args the command line arguments */ public static void main(String args[]) { new JFrame().show(); } // Variables declaration - do not modify private javax.swing.ButtonGroup buttonGroup1; public java.awt.Canvas canvas1; private javax. swing.JComboBox jComboBox1; private javax.swing.JLabel jLabel1; private javax. swing.JMenu jMenu2; private javax. swing.JMenuBar jMenuBar2; private javax. swing.JMenuItem jMenuItem2; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; public javax.swing.JRadioButton jRadioButton1; private javax. swing.JRadioButton jRadioButton2; public javax.swing.JSlider j Slider1; private javax.swing.JTable jTable1; public Annimation ann; public String position; // End of variables declaration static int R=20; static int Nbr; //Nombre d'articulation static int cas; static int pos =0,Xpos,Ypos; static int NbrCas;//=Nombre de bras static int Type[]=new int[50]; //Type d'articulation static int XA[][]=new int[50][50]; //Coordonnées suivant X static int YA[][]=new int[50][50]; //Coordonnées suivant Y // La Calss Annimation Pour géré l'annimation du Bras class Annimation extends Thread { JFrame MyForm; Annimation(JFrame MyForm) { this.MyForm = MyForm; } public void run() { if(MyForm.jRadioButton1 .isSelected()) { MyForm.canvas 1 .getGraphics().clearRect(0,0,500,500); MyForm.Mypaint(MyForm.canvas 1 .getGraphics()); while(true) { try{ MyForm.Exemple 1(); position="Position 1"; MyForm.canvas 1 .getGraphics().clearRect(0,0,500,500); MyForm.Mypaint(MyForm.canvas 1 .getGraphics()); this.sleep((int)20000/MyForm.j Slider1 .getValue()); MyForm.Exemple3 (); position="Position 2"; MyForm.canvas 1 .getGraphics().clearRect(0,0,500,500); MyForm.Mypaint(MyForm.canvas 1 .getGraphics()); this.sleep((int)20000/MyForm.j Slider1 .getValue()); MyForm.Exemple4(); position="Position 3"; MyForm.canvas 1 .getGraphics().clearRect(0,0,500,500); MyForm.Mypaint(MyForm.canvas 1 .getGraphics()); this.sleep((int)20000/MyForm.j Slider1 .getValue()); MyForm.Exemple2(); position="Position 4"; MyForm.canvas 1 .getGraphics().clearRect(0,0,500,500); MyForm.Mypaint(MyForm.canvas 1 .getGraphics()); this.sleep((int)20000/MyForm.j Slider1 .getValue()); MyForm.Exemple5(); position="Position 5"; MyForm.canvas 1 .getGraphics().clearRect(0,0,500,500); MyForm.Mypaint(MyForm.canvas 1 .getGraphics()); this.sleep((int)20000/MyForm.j Slider1 .getValue()); } catch(Exception e) { } } } } } ///////////////////* * * *Fin du programme* * **/////////////////////////////////////// Appendice H : Programme de model géométrique direct ******************************************************************** C PROGRAM: MGD c PURPOSE: Entry point for the console application. c program MGD c Variables c******************************************************************* implicit none integer ij real theta1 ,h1,h2,h3,h4,z2,z5,z3,z4 real c1,s1 real d3,d4,Pi real T(4,4) d4=0.6 C selon le cahier de charge d3=d4 Pi=3. 1415926535897932384626433832795 write(*,*) 'donner la valeur de theta1' read(*,*) theta1 theta1=(theta1 *Pi)/1 80. write(*, *) 'theta1r=',theta1 write(*,*) 'donner la valeur de h1 =,h2=,h3=,h4=,z2=,z5=,z3=,z4=' read(*,*) h1,h2,h3,h4,z2,z5,z3,z4 c write (*,*)'calcul des éléments de la matrice de transformation + homogène T<0,5>' c c1 =cos(theta1) s1 =sin(theta1) write(*,*) 'c1 =cos(theta1 )=',c1 ,'s 1 =sin(theta1 )=', s1 write (*,*)'la matrice t(i,j)' T(1,1)=c1-s1 T(1 ,2)=0 T(1 ,3)=0 T( 1 ,4)=(z3-z4)*c 1 T(2,1)=c1+s1 T(2,2)=0 T(2,3)=0 T(2,4)=(z3-z4)*s 1
5 format (4F) write( *,*)(T(i,j),j=1,4) 2 continue write(*,*) 'CE PROGRAMME MARCHE TRES BIEN ' c Body ofMGD end. APPENDICE I : Organigramme général : (Proposé comme une banque des données) : lel,Modèle d'évaluation des erreurs: associé à un balyage systémathique des coordonnées articulaires et un critère de classement lerModèle d'évaluation des erreurs : Erreurs de positionnement ou de poursuite Modèle des déformations : Evaluation des torseurs des déplacements élémentaires par segments Fa
e
n Organigramme I.1 : Organigramme général Appendice J : F21] Le système d'équation non linéaire est du type f1(q1,q2,q3... .qm) + x1 = 0 ? T f2(q1,q2,q3... .qm) + x2 = 0 . fm(q1,q2,q3... .qm) + x1 = 0 Ou q1,q2,q3....qm sont des inconnues réelles indépendantes et f1, f2 fm sont des fonctions réelles données des m variables qi , un tel système de m équation à m inconnues est dit d'ordre m. Principe de la méthode : Soit Q(0) = (q01 q0m) un point initial de Rm . Q(0) est considéré comme une approximation de la solution Q* =(q*1 q*m) du système son linéaire ci-dessus. En supposant que Q(0) soit suffisamment voisin de Q* que la fonction f1(q1,q2,q3....qm), i=1, m soit suffisamment dérivables. Le développement en série de Taylor de ces fonctions s'écrit sous la forme : j m =j m = k m = 2 ? f 1 ? f f Q f Q q q ( ) ( ) ( ) ( ) * 0 * 0 1 0 ( )( ) ( ) * ( 0) ( 0 ) 1 ( 0) = + - Q q q q q = - - * + 1 1 j j j ? = ?? Q j k k ? q 2! ? ? q q j 1 j j = 1 1 k = j k Pour i=1, .....m. si on néglige les termes d'ordre supérieur à 1, on définit une nouvelle approximation : Q(1) = (qi1 .....qm1) de Q* par les égalités :
Q(1) = (qi(1) ..... qm(1)) est défini comme étant la deuxième approximation de la solution qui s'exprime par Q(1) = Q(0) + ?Q(0), les composantes ?q1(0), ?q2(0), ?q3(0) ..... ?qm(0) étant la solution du système linéaire mis sous forme 0 = 0 f ( 0 ) ?f ( 0 ) ? f ( 0 ) 1 ( 0 ) 1 ? ? q1 ? + q f ( 0) ( ) j ( ) j ? f ? f 1 1 = ? q j f 1 j = f ( Q j ( ) ( ) ? q j 1 ) ( ( ) Q j ? + + q 2 m 1 ? q ? q 2 m ( 0 ) (0) u ? f ? f ? f (0) 0 m m m ( 0 ) ( 0) 0 ? + q q ( 0 ) ? + + ? + = q f ? 1 2 m m q1 ? q ? q 2 m Le processus est ensuite itéré à partir de la nouvelle approximation Q(1) de la solution
les composantes ?q1n . ?q2n . .....?qmn. étant la solution du système linéaire mis sous forme développée : ( 0 ) n ( ) n ? f ? f ( ) n ( ) 1 ? f 1 ( ) 1 n ( ) q q ? + = ( ) 0 ? + ? + + q f n n 1 2 m 1 ? q ? q ? q 1 2 m f ( ) n ( ) n m ? f ( ) n ? ? f n m ( ) ( ) ( ) ( ) 0 ? + q ? + + q n m ? + = q f n n 1 2 m m ? q ? q ? q 1 2 m Sous la forme matricielle, ce système d'équation est noté ? ? f ( ) = ( Q ) i J Q ? ? ? ? q j ? ? ? ? Pour i=1, ....., m et j=1, ...., m, la matrice J est appelée matrice Jacobinne des fonctions fi i= 1, ....., m évoluée au point Q. A l'aide de ces notations, le système linéaire permettant d'obtenir l'approximation (n+ 1) peut se mettre sous la forme matricielle et par suite l'approximation Q(n+1) est donnée par :
convergence, c'est-à-dire lorsque - ( - 1 ) = å sup q 1 n q n ( ) 1 |
|