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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Error matlab H20=H_r2gdl()

Publicado por JOSE JEREMIAS CABALLERO (5917 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
[email protected]
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