WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

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
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

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.

· Bibliothèque de l\u8217Ecole Nationale Polytechnique d\u8217El-Harrache, Alger.

· Département de Génie Mécanique, Laboratoire de Vibroacoustique et Bibliothèque centrale de l\u8217Université de M\u8217hamed Bouguarra de Boumerdès.

· Centre de Développement des Technologies Avancé, C.D.T.A., de Baba Hssene, Alger.

· Le Centre de Recherche sur l\u8217Informatique Scientifique et Technique, C.R.I.S.T., Ben Aknoun, Alger.

Université de Saad Dahleb de Blida
19 Mai 2006 22 :54

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(*,*)'ymini'

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'
write(*, *)'theta min'

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. setColor(Color.black);

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
YA[ 1] [1 ]=350; // Y du premier cas, Première articulation

XA[1][2]=200; //X du premier cas, 2end articulation
YA[1][2]=250; //Y du premier cas, 2end articulation

XA[1] [3]=200; //X du premier cas, 3ème articulation
YA[1][3]=150; //Y du premier cas, 3ème articulation

XA[1][4]=250; //X du premier cas, 4ème articulation
YA[1][4]=150; //Y 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
Nbr=5;

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
YA[ 1] [1 ]=350; // Y du premier cas, Première articulation

XA[1][2]=200; //X du premier cas, 2end articulation
YA[1][2]=300; //Y du premier cas, 2end articulation

XA[1] [3]=200; //X du premier cas, 3ème articulation
YA[1][3]=200; //Y du premier cas, 3ème articulation

XA[ 1] [4]=1 50; //X du premier cas, 4ème articulation
YA[1][4]=200; //Y 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
YA[2][2]=300; //Y du 2end cas, 2end articulation

XA[2][3]=250; //X du 2end cas, 3ème articulation
YA[2][3]=200; //Y du 2end cas, 3ème articulation

XA[2][4]=300; //X du 2end cas, 4ème articulation
YA[2][4]=100; //Y du 2end cas, 4ème articulation

XA[2] [5]=200; //X du second cas, 5ème articulation YA[2][5]=100; //Y du second cas, 5ème articulation

// Troisième cas (3ème bras):

XA[3] [1 ]=200; // X du 3ème cas, première articulation YA[3][1]=350; // Y du 3ème cas, Première articulation

XA[3][2]=250; //X du 3ème cas, 2end articulation
YA[3][2]=300; //Y du 3ème cas, 2end articulation

XA[3][3]=300; //X du 3ème cas, 3ème articulation
YA[3][3]=200; //Y 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
YA[ 1] [1 ]=350; // Y du premier cas, Première articulation

XA[1][2]=200; //X du premier cas, 2end articulation
YA[1][2]=300; //Y du premier cas, 2end articulation

XA[1] [3]=200; //X du premier cas, 3ème articulation
YA[1][3]=200; //Y du premier cas, 3ème articulation

XA[1][4]=250; //X du premier cas, 4ème articulation
YA[1][4]=200; //Y 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
YA[2][1]=350; // Y du 2end cas, Première articulation

XA[2][2]=150; //X du 2end cas, 2end articulation
YA[2][2]=300; //Y du 2end cas, 2end articulation

XA[2][3]=250; //X du 2end cas, 3ème articulation
YA[2][3]=200; //Y du 2end cas, 3ème articulation

XA[2][4]=300; //X du 2end cas, 4ème articulation
YA[2][4]=100; //Y du 2end cas, 4ème articulation

XA[2] [5]=200; //X du second cas, 5ème articulation YA[2][5]=100; //Y du second cas, 5ème articulation

// Troisième cas (3ème bras):

XA[3] [1 ]=200; // X du 3ème cas, première articulation YA[3][1]=350; // Y du 3ème cas, Première articulation

XA[3][2]=250; //X du 3ème cas, 2end articulation
YA[3][2]=300; //Y du 3ème cas, 2end articulation

XA[3][3]=300; //X du 3ème cas, 3ème articulation
YA[3][3]=200; //Y 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
YA[ 1] [1 ]=350; // Y du premier cas, Première articulation

XA[1][2]=200; //X du premier cas, 2end articulation
YA[1][2]=300; //Y du premier cas, 2end articulation

XA[1] [3]=200; //X du premier cas, 3ème articulation
YA[1][3]=200; //Y du premier cas, 3ème articulation

XA[1][4]=250; //X du premier cas, 4ème articulation
YA[1][4]=200; //Y 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
YA[2][1]=350; // Y du 2end cas, Première articulation

XA[2][2]=150; //X du 2end cas, 2end articulation
YA[2][2]=300; //Y 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
YA[2][4]=100; //Y du 2end cas, 4ème articulation

XA[2][5]=200; //X du second cas, 5ème articulation
YA[2][5]=100; //Y du second cas, 5ème articulation

// Troisième cas (3ème bras):

XA[3][1]=200; // X du 3ème cas, première articulation
YA[3][1]=350; // Y du 3ème cas, Première articulation

XA[3][2]=250; //X du 3ème cas, 2end articulation
YA[3][2]=300; //Y du 3ème cas, 2end articulation

XA[3][3]=300; //X du 3ème cas, 3ème articulation
YA[3][3]=200; //Y 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
YA[ 1] [1 ]=350; // Y du premier cas, Première articulation

XA[1][2]=200; //X du premier cas, 2end articulation
YA[1][2]=300; //Y du premier cas, 2end articulation

XA[1] [3]=200; //X du premier cas, 3ème articulation
YA[1][3]=200; //Y du premier cas, 3ème articulation

XA[ 1] [4]=1 50; //X du premier cas, 4ème articulation
YA[1][4]=200; //Y 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
YA[2][1]=350; // Y du 2end cas, Première articulation

XA[2][2]=150; //X du 2end cas, 2end articulation
YA[2][2]=300; //Y du 2end cas, 2end articulation

XA[2][3]=250; //X du 2end cas, 3ème articulation
YA[2][3]=200; //Y du 2end cas, 3ème articulation

XA[2][4]=300; //X du 2end cas, 4ème articulation
YA[2][4]=100; //Y du 2end cas, 4ème articulation

XA[2] [5]=200; //X du second cas, 5ème articulation YA[2][5]=100; //Y du second cas, 5ème articulation

// Troisième cas (3ème bras):

XA[3] [1 ]=200; // X du 3ème cas, première articulation YA[3][1]=350; // Y du 3ème cas, Première articulation

XA[3][2]=250; //X du 3ème cas, 2end articulation
YA[3][2]=300; //Y du 3ème cas, 2end articulation

XA[3][3]=300; //X du 3ème cas, 3ème articulation
YA[3][3]=200; //Y 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

T(3, 1)=0 T(3 ,2)=0 T(3,3)=1 T(3 ,4)=h1 +h2+h3+h4+z2-z5

T(4, 1)=0 T(4,2)=0 T(4,3)=0 T(4,4)=1 write(*,*)' ((T(i,j)j=1,4),i=1,4)'

5 format (4F)
do 2 i=1,4

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

Lr

5'p

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 :

j m

= ? f

f Q q q

1 Q

( ) ( ) 1 ( 0

0 * 0

+ ? -

j j ? q

j = 1 j

)

0 pour i=1 .....m ainsi le vecteur

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

Q* ainsi on passera de l'itération n à l'itération n+1 par la relation

Q n = Q n + ? Q n

( 1 ) ( ) ( )

+

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 :

Q Q J Q

n n n

+ = - - (

1 1

) ( ) -

[ n { n } ]

F Q XLe processus itératif est arrêté lorsqu'il y a

convergence, c'est-à-dire lorsque - ( - 1 ) = å

sup q 1 n q n

( )

1

précédent sommaire suivant