Matlab - Error matlab H20=H_r2gdl()

   
Vista:

Error matlab H20=H_r2gdl()

Publicado por anrew (1 intervención) el 28/02/2016 18:42:08
Ayuda!!
El siguiente código lo bajé de un libro, el problema es que me marca error en H20=H_r2gdl(),como se puede solucionar? soy nuevo en esto, agradecería mucho su ayuda!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
clc; clear all; close all;
format short
syms  q1 q2  beta1 beta2 l1 l2 alpha1 alpha2 real
H20=H_r2gdl()
disp('Transformación homogénea del robot 2 gdl');
disp(H20);
[R20, cinemat_r2gdl,cero, c]=H_DH(H20);
disp('Matriz de rotación'); disp(R20);
disp('cinemática directa');
disp(cinemat_r2gdl);
[x0, y0, z0]=cinematica_r2gdl(beta1,l1,q1,beta2,l2,q2)
jac_r2gdl=jacobian([x0; y0], [q1;q2])
 det_r2gdl=simplify(det(jac_r2gdl)) % det[J]=l_1l_2 sin(q_2)
 
 
%ejemplo numérico
t=0:0.001:100;
%parámetros del  círculo: [x_c,y_c]'=[0.3,-0.3]' y radio r=0.2
xc=0.3; yc=-0.3; r=0.20;
l1=0.45; l2=0.45;
 beta1=0.1; beta2=0.1;
q1=[]; q2=[];
 
% ecuación del círculo
x=xc+r*sin(t);
y=yc+r*cos(t);
% cinemática inversa
[q1,q2]=cinv_r2gdl(l1,l2,x,y);
%coordenas cartesianas del extremo final del robot de 2 gdl
[x0, y0, z0]=cinematica_r2gdl(beta1,l1,q1,beta2,l2,q2);
plot(x0,y0)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Matlab
- Código fuente de Matlab
- Cursos de Matlab
- Temas de Matlab
- Chat de Matlab
información
Códigos de Matlab
- TRIÁNGULO
- COORDENADAS CARTESIANAS
- Elige una carta
Imágen de perfil de JOSE JEREMIAS CABALLERO

Error matlab H20=H_r2gdl()

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 28/02/2016 23:06:05
H_r2gdl() es una función que está enlazada en el libro debe de estar esa función.

Saludos
JOSÉ JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación en Matlab
jjcc94@hotmail.com
Toda ayuda gratuita es vía foro


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

Error matlab H20=H_r2gdl()

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 29/02/2016 00:48:03
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
function funcion_foro
%%http://libroweb.alfaomega.com.mx/book/688/free
close all;
format short
syms  q1 q2  beta1 beta2 l1 l2 alpha1 alpha2 real
H20=H_r2gdl()
disp('Transformación homogénea del robot 2 gdl');
disp(H20);
[R20, cinemat_r2gdl,cero, c]=H_DH(H20);
disp('Matriz de rotación'); disp(R20);
disp('cinemática directa');
disp(cinemat_r2gdl);
[x0, y0, z0]=cinematica_r2gdl(beta1,l1,q1,beta2,l2,q2)
jac_r2gdl=jacobian([x0; y0], [q1;q2])
 det_r2gdl=simplify(det(jac_r2gdl)) % det[J]=l_1l_2 sin(q_2)
 
 
%ejemplo numérico
t=0:0.001:100;
%parámetros del  círculo: [x_c,y_c]'=[0.3,-0.3]' y radio r=0.2
xc=0.3; yc=-0.3; r=0.20;
l1=0.45; l2=0.45;
 beta1=0.1; beta2=0.1;
q1=[]; q2=[];
 
% ecuación del círculo
x=xc+r*sin(t);
y=yc+r*cos(t);
% cinemática inversa
[q1,q2]=cinv_r2gdl(l1,l2,x,y);
%coordenas cartesianas del extremo final del robot de 2 gdl
[x0, y0, z0]=cinematica_r2gdl(beta1,l1,q1,beta2,l2,q2);
plot(x0,y0)
end
 
function H=H_r2gdl()
syms  q1 q2 beta1 beta2 l1 l2  alpha1 alpha2 real
disp('Parámetros Denavit-Hartenberg del robot planar vertical de 2 gdl')
disp('[ l  alpha d   q]')
dh=[l1, 0, beta1, q1; l2, 0, beta2, q2];
disp(dh)
%$H10=HDH{0}{q_1}{beta_1}{l_1}{0}
H10=HRz(q1)*HTz(beta1)*HTx(l1)*HRx(0)
%$H21=HDH{0}{q_2}{beta_2}{l_2}{0}
H21=HRz(q2)*HTz(beta2)*HTx(l2)*HRx(0)
H20=simplify(H10*H21); %H20=H10 H21
[R20, cinemat_r2gdl, cero, c]=H_DH(H20)
 H=[R20, cinemat_r2gdl; %R20(q_1,q_2), f_R(q_1,q_2)
      cero,  c];
end
 
 
function RHz=HRz(theta)
dato=whos('theta');
 if strcmp(dato.class, 'sym') %variables simbólicas
   RHz=[cos(theta), -sin(theta),  0,  0;
 sin(theta),  cos(theta),  0,  0;
       0,      0,      1,  0;
       0,      0,      0,  1];
 else
      digits(3); %cálculos numéricos
     RHz=round([ vpa(cos(theta),3),  vpa(-sin(theta),3),  0,  0;
                   vpa(sin(theta),3),  vpa(cos(theta),3),  0,  0;
                     0,      0,      1,  0;
                     0,      0,      0,  1]);
 end
end
 
function Tz=HTz(d)
     Tz=[ 1     0  0  0; 0     1  0  0;  0     0  1  d;  0     0  0  1];
end
 
function Tx=HTx(d)
 
     Tx=[  1    0  0  d;   0    1  0  0; 0    0  1  0; 0    0  0  1];
end
 
 
function  RHx=HRx(theta)
dato=whos('theta');
if strcmp(dato.class, 'sym') %variables simbólicas   
RHx=[1,       0,        0,      0;
    0,    cos(theta),   -sin(theta),   0;
     0,    sin(theta),   cos(theta),    0;
     0,        0,       0,      1];
else
digits(3); %cálculos numéricos
     RHx=round([1,       0,        0,      0;
    0,    vpa(cos(theta),3),   vpa(-sin(theta),3),   0;
    0,    vpa(sin(theta),3),   vpa(cos(theta),3),    0;
     0,        0,       0,      1]);
end
 end
 
function  [R  vect_d vect_cero c]=H_DH(H)
for i=1:3
    for j=1:3
     R(i,j)=H(i,j);
    end
end
%estructura de la matriz de transformación homogénea
vect_d=[H(1,4); H(2,4); H(3,4)];
vect_cero=[0;0;0]';
c=1;
end

function [x0, y0, z0]=cinematica_r2gdl(beta1,l1,q1,beta2,l2,q2)
dato1=whos('beta1'); dato2=whos('l1'); dato3=whos('q1');
dato4=whos('beta2'); dato5=whos('l2'); dato6=whos('q2');
v1=strcmp(dato1.class, 'sym'); v2=strcmp(dato2.class, 'sym');
v3=strcmp(dato3.class, 'sym'); v4=strcmp(dato4.class, 'sym');
v5=strcmp(dato5.class, 'sym'); v6=strcmp(dato6.class, 'sym');
digits(3);

if (v1 & v2 & v3 & v4 & v5 & v6) %caso simbólico
     x0=simplify(vpa(l1*cos(q1)+l2*cos(q1+q2),3));
     y0=simplify(vpa(l1*sin(q1)+l2*sin(q1+q2),3));
     z0=vpa(beta1+beta2,3);
else %caso numérico
     x0=l1*cos(q1)+l2*cos(q1+q2);
     y0=l1*sin(q1)+l2*sin(q1+q2);
     z0=beta1+beta2;
end
end

function  [q1 q2]=cinv_r2gdl(l1,l2,x0,y0)
q2=acos((x0.*x0+y0.*y0-l1*l1-l2*l2)/(2*l1*l2));
 q1=atan(y0./x0)-atan((l2*sin(q2))./(l1+l2*cos(q2)));
end

Saludos
JOSÉ JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación en Matlab
jjcc94@hotmail.com
Toda ayuda gratuita es vía foro


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar