Subido por jorge.valenzuelag

Matlab aplicado a Robotica y Mecatronica

Anuncio
MATLAB
APLICADO A ROBÓTICA
Y MECATRÓNICA
FERNANDO REYES CORTÉS
Editor
Francisco Javier Rodríguez Cruz
[email protected]
Director Editorial
Marcelo Grillo Giannetto
[email protected]
Datos catalográficos
Reyes Cortés, Fernando
MATLAB aplicado a Robótica y Mecatrónica
Primera Edición
Alfaomega Grupo Editor, S.A. de C.V., México
ISBN: 978-607-707-357-4
Formato: 17 x 23 cm
Páginas: 460
MATLAB aplicado a Robótica y Mecatrónica
Fernando Reyes Cortés
Derechos reservados © Alfaomega Grupo Editor, S.A. de C.V., México.
Primera edición: Alfaomega Grupo Editor, México, enero 2012
© 2012 Alfaomega Grupo Editor, S.A. de C.V.
Pitágoras 1139, Col. Del Valle, 03100, México D.F.
Miembro de la Cámara Nacional de la Industria Editorial Mexicana
Registro No. 2317
Pág. Web: http://www.alfaomega.com.mx
E-mail: [email protected]
ISBN: 978-607-707-357-4
Derechos reservados:
Esta obra es propiedad intelectual de su autor y los derechos de publicación en lengua
española han sido legalmente transferidos al editor. Prohibida su reproducción parcial o total
por cualquier medio sin permiso por escrito del propietario de los derechos del copyright.
Esta obra fue compuesta por el autor en LateX usando el compilador de PcTex 6.0.
Nota importante:
La información contenida en esta obra tiene un fin exclusivamente didáctico y, por lo tanto, no está
previsto su aprovechamiento a nivel profesional o industrial. Las indicaciones técnicas y programas
incluidos, han sido elaborados con gran cuidado por el autor y reproducidos bajo estrictas normas
de control. ALFAOMEGA GRUPO EDITOR, S.A. de C.V. no será jurídicamente responsable por:
errores u omisiones; daños y perjuicios que se pudieran atribuir al uso de la información
comprendida en este libro, ni por la utilización indebida que pudiera dársele.
Impreso en México. Printed in Mexico.
Empresas del grupo:
México: Alfaomega Grupo Editor, S.A. de C.V. – Pitágoras 1139, Col. Del Valle, México, D.F. – C.P. 03100.
Tel.: (52-55) 5575-5022 – Fax: (52-55) 5575-2420 / 2490. Sin costo: 01-800-020-4396
E-mail: [email protected]
Colombia: Alfaomega Colombiana S.A. – Carrera 15 No. 64 A 29, Bogotá, Colombia,
Tel.: (57-1) 2100122 – Fax: (57-1) 6068648 – E-mail: [email protected]
Chile: Alfaomega Grupo Editor, S.A. – Dr. La Sierra 1437, Providencia, Santiago, Chile
Tel.: (56-2) 235-4248 – Fax: (56-2) 235-5786 – E-mail: [email protected]
Argentina: Alfaomega Grupo Editor Argentino, S.A. – Paraguay 1307 P.B. Of. 11, C.P. 1057, Buenos Aires,
Argentina, – Tel./Fax: (54-11) 4811-0887 y 4811 7183 – E-mail: [email protected]
Acerca del autor
Dr. José Fernando Reyes Cortés. Es profesor investigador
titular C de la Facultad de Ciencias de la Electrónica, Universidad
Autónoma de Puebla. En 1984 obtuvo la Licenciatura en Ciencias
de la Electrónica en la Facultad de Ciencias Fı́sico Matemáticas de
la Universidad Autónoma de Puebla. En 1990 obtuvo la Maestrı́a en
Ciencias con Especialidad en Electrónica en el Instituto Nacional de
Astrofı́sica, Óptica y Electrónica (INAOE). Bajo la asesorı́a del Dr. Rafael Kelly,
en 1997 culminó el Doctorado en Ciencias con Especialidad en Electrónica y
Telecomunicaciones en el Centro de Investigación Cientı́fica y de Educación Superior
de Ensenada (CICESE).
Es miembro del Sistema Nacional de Investigadores desde 1993 a la fecha.
Actualmente es nivel I. Es autor de más de 150 artı́culos nacionales e internacionales.
Ha dirigido 30 proyectos cientı́ficos. Ha graduado a más de 100 tesistas de los niveles
de ingenierı́a, maestrı́a y doctorado.
Es autor del libro Robótica. Control de robots manipuladores editado por
Alfaomega donde se presenta la dinámica de robots manipuladores y la técnica
moderna de moldeo de energı́a para diseñar nuevos algoritmos de control.
Como catedrático ha impartido más de 50 cursos del área de control y robótica a
nivel licenciatura y posgrado. Fundador del Laboratorio de Robótica y Control de
la Facultad de Ciencias de la Electrónica donde ha puesto a punto 30 prototipos de
mecatrónica y robótica. Es Premio Estatal de Tecnologı́as y Ciencias de la Ingenierı́a
en noviembre 2000 por el Gobierno del Estado de Puebla. Premio en Ingenierı́a y
Tecnologı́a de la Ciudad de Puebla en abril 2010.
Ha sido Secretario de Investigación y Estudios de Posgrado de la Facultad de Ciencias
de la Electrónica desde febrero del 2002 a la fecha. Fundador y responsable del
Cuerpo Académico de Robótica y Control en 2001. Fue responsable de la creación
de la Ingenierı́a Mecatrónica, y de los Posgrado de Ciencias de la Electrónica e
Ingenierı́a Electrónica e ingreso de ambos posgrados al PNPC de CONACyT.
A la persona que me dio la vida: Alicia Cortés
Castillo; por su apoyo y paciencia a mi esposa
Silvia y mis tesoros Luis Fernando y Leonardo.
Por la formación transmitida de Angela Castillo Merchant, Luis Manuel Cortés Castillo,
Chela, Lety y Jorge.
Por la ayuda brindada de la maestra Viky.
Mensaje del Editor
Una de las convicciones fundamentales de Alfaomega es que los conocimientos son
esenciales en el desempeño profesional, ya que sin ellos es imposible adquirir las
habilidades para competir laboralmente. El avance de la ciencia y de la técnica
hace necesario actualizar continuamente esos conocimientos, y de acuerdo con esto
Alfaomega publica obras actualizadas, con alto rigor cientı́fico y técnico, y escritas
por los especialistas del área respectiva más destacados.
Conciente del alto nivel competitivo que debe de adquirir el estudiante durante su
formación profesional, Alfaomega aporta un fondo editorial que se destaca por sus
lineamientos pedagógicos que coadyuvan a desarrollar las competencias requeridas
en cada profesión especı́fica.
De acuerdo con esta misión, con el fin de facilitar la comprensión y apropiación del
contenido de esta obra, cada capı́tulo inicia con el planteamiento de los objetivos
del mismo y con una introducción en la que se plantean los antecedentes y una
descripción de la estructura lógica de los temas expuestos, asimismo a lo largo de
la exposición se presentan ejemplos desarrollados con todo detalle y cada capı́tulo
concluye con un resumen y una serie de ejercicios propuestos.
Además de la estructura pedagógica con que están diseñados nuestros libros,
Alfaomega hace uso de los medios impresos tradicionales en combinación con
las Tecnologı́as de la Información y las Comunicaciones (TIC) para facilitar el
aprendizaje. Correspondiente a este concepto de edición, todas nuestras obras de
la Serie Profesional a la que pertenece este tı́tulo tienen su complemento en una
página Web en donde el alumno y el profesor encontrarán lecturas complementarias,
código fuente de los programas desarrollados ası́ como la solución y la respuesta de
los problemas propuestos.
Los libros de Alfaomega están diseñados para ser utilizados en los procesos de
enseñanza-aprendizaje, y pueden ser usados como textos en diversos cursos o como
apoyo para reforzar el desarrollo profesional, de esta forma Alfaomega espera
contribuir ası́ a la formación y al desarrollo de profesionales exitosos para beneficio
de la sociedad y del mundo del conocimiento.
Contenido
Plataforma de contenidos interactivos
Simbologı́a e iconografı́a utilizada
Prólogo
XV
XVI
XVIII
Parte I Programación
Capı́tulo 1
Conceptos básicos
1
3
1.1 Introducción
5
1.2 Componentes
7
1.2.1 Herramientas de escritorio y ambiente de desarrollo
9
1.2.2 Librerı́as
9
1.2.3 Lenguaje
10
1.2.4 Gráficos
10
1.2.5 Interfaces externas/API
10
1.3 Inicio
11
1.4 Lenguaje
15
1.4.1 Variables
15
1.4.2 Números
17
viii
1.4.3 Formato numérico
18
1.4.4 Operadores
21
1.5 Matrices y arreglos
26
1.5.1 Arreglos
41
1.6 Gráficas
43
1.7 Funciones
49
1.7.1 Funciones archivo
1.8 Programación
51
58
1.8.1 if
59
1.8.2 if, else, elseif
60
1.8.3 for
61
1.8.4 while
71
1.8.5 switch, case
72
1.8.6 break
73
1.8.7 return
73
1.8.8 continue
74
1.9 Formato para datos experimentales
1.10 Resumen
76
80
Capı́tulo 2
Métodos numéricos
81
2.1 Consideraciones computacionales
83
2.2 Sistemas de ecuaciones lineales
84
2.2.1 Regla de Cramer
Alfaomega
91
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Contenido
2.3 Diferenciación numérica
ix
92
2.3.1 Función diff
97
2.4 Integración numérica
99
2.4.1 Regla trapezoidal
102
2.4.2 Regla de Simpson
108
2.4.3 Funciones de cuadratura
113
2.4.4 Método de Euler
114
2.5 Sistemas dinámicos de primer orden
117
2.5.1 Método de Runge-Kutta
118
2.5.2 Simulación de sistemas dinámicos ẋ = f (x)
124
2.6 Resumen
133
Parte I Referencias selectas
134
Parte I Problemas propuestos
135
Parte II Cinemática
Capı́tulo 3
Preliminares matemáticos
139
141
3.1 Introducción
143
3.2 Producto interno
144
3.3 Matrices de rotación
148
3.3.1 Matriz de rotación alrededor del eje z0
151
3.3.2 Matriz de rotación alrededor del eje x0
161
3.3.3 Matriz de rotación alrededor del eje y0
163
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
x
3.4 Reglas de rotación
164
3.5 Transformaciones de traslación
171
3.6 Transformaciones homogéneas
173
3.7 Librerı́as para matrices homogéneas
174
3.7.1 Matriz de transformación homogénea HRx(θ)
175
3.7.2 Matriz de transformación homogénea HRy (θ)
176
3.7.3 Matriz de transformación homogénea HRz (θ)
177
3.7.4 Matriz de transformación homogénea HTx(d)
178
3.7.5 Matriz de transformación homogénea HTy (d)
178
3.7.6 Matriz de transformación homogénea HTz (d)
179
3.7.7 Matriz de transformación DH
180
3.8 Resumen
181
Capı́tulo 4
Cinemática directa
183
4.1 Introducción
185
4.2 Cinemática inversa
186
4.3 Cinemática diferencial
187
4.4 Clasificación de robots industriales
189
4.5 Convención Denavit-Hartenberg
192
4.5.1 Algoritmo Denavit-Hartenberg
4.6 Resumen
Alfaomega
196
198
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Contenido
Capı́tulo 5
Cinemática directa cartesiana
xi
199
5.1 Introducción
201
5.2 Brazo robot antropomórfico
202
5.3 Configuración SCARA (RRP)
234
5.4 Robot esférico (RRP)
245
5.5 Manipulador cilı́ndrico (RPP)
254
5.6 Configuración cartesiana (PPP)
264
5.7 Resumen
273
Parte II Referencias selectas
277
Parte II Problemas propuestos
278
Parte III Dinámica
Capı́tulo 6
Dinámica
283
285
6.1 Introducción
287
6.2 Estructura matemática para simulación
288
6.3 Sistema masa-resorte-amortiguador
291
6.4 Sistema lineal escalar
295
6.4.1 Estimador de velocidad y filtrado
6.5 Centrı́fuga
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
296
301
Alfaomega
xii
6.6 Péndulo
305
6.7 Robot de 2 gdl
310
6.8 Robot de 3 gdl
315
6.9 Robot cartesiano
321
6.10 Resumen
327
Capı́tulo 7
Identificación paramétrica
329
7.1 Introducción
331
7.2 Método de mı́nimos cuadrados
332
7.2.1 Linealidad en los parámetros
7.3 Librerı́a de mı́nimos cuadrados
332
334
7.3.1 Caso escalar
334
7.3.2 Caso multivariable
336
7.4 Ejemplos
338
7.5 Modelos de regresión del péndulo
346
7.5.1 Modelo dinámico del péndulo
346
7.5.2 Modelo dinámico filtrado del péndulo
350
7.5.3 Modelo de energı́a del péndulo
353
7.5.4 Modelo de potencia del péndulo
355
7.5.5 Modelo de potencia filtrada
356
7.5.6 Análisis comparativo de esquemas de regresión
359
7.6 Modelos de regresión del robot de 2 gdl
7.6.1 Modelo de regresión dinámico del robot de 2 gdl
Alfaomega
360
361
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Contenido
xiii
7.6.2 Modelo de energı́a del robot de 2 gdl
366
7.6.3 Modelo de potencia del robot de 2 gdl
369
7.6.4 Análisis comparativo de resultados de regresión
372
7.7 Robot cartesiano de 3 gdl
373
7.7.1 Modelo de regresión dinámico del robot cartesiano
374
7.7.2 Modelo de potencia del robot cartesiano de 3 gdl
378
7.7.3 Análisis comparativo de identificación
381
7.8 Resumen
382
Parte III Referencias selectas
383
Parte III Problemas propuestos
385
Parte IV Control
Capı́tulo 8
Control de posición
389
391
8.1 Introducción
393
8.2 Control proporcional-derivativo (PD)
395
8.2.1 Control PD de un péndulo
397
8.2.2 Control PD de un brazo robot de 2 gdl
403
8.2.3 Control PD de un brazo robot de 3 gdl
408
8.2.4 Control PD de un robot cartesiano de 3 gdl
413
8.3 Control PID
8.3.1 Control PID de un robot de 2 gdl
8.4 Control punto a punto
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
417
418
422
Alfaomega
xiv
8.4.1 Control tangente hiperbólico
422
8.4.2 Control arcotangente
426
8.5 Resumen
429
Parte IV Referencias selectas
430
Parte IV Problemas propuestos
431
Índice analı́tico
Alfaomega
433
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
xv
Plataforma de contenidos
interactivos
Para tener acceso al código fuente de los programas de ejemplos y ejercicios presentados en MATLAB Aplicado a Robótica y Mecatrónica, siga los siguientes pasos:
1) Ir a la página
http://virtual.alfaomega.com.mx
2) Registrarse como usuario del sitio.
3) En el catálogo identificar este libro y descargar el material adicional.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
Simbologı́a e iconografı́a utilizada
xvi
Simbologı́a e iconografı́a
utilizada
Diversos recursos didácticos están presentes en esta obra; particularmente se resaltan
las siguientes herramientas:
Librerı́as
La sintaxis de las librerı́as que se desarrollan son representadas como:
ẋ=robot(t, x)
Los ejemplos ilustrativos se presentan de la siguiente manera:
♣ ♣ Ejemplo 5.1
El enunciado de cada ejemplo se encuentra dentro de un recuadro con fondo gris.
Los ejemplos son presentados por nivel de complejidad, para el nivel simple o
básico se emplea la marca ♣, ejemplos del nivel intermedio ♣♣ y complejos son
denotados por ♣♣♣
Solución
Se detalla la respuesta de cada ejemplo por ecuaciones y programas en código fuente.
Adicionalmente, todos los ejemplos incluyen un número de referencia que identifica
al capı́tulo donde fue definido.
Todos los programas de esta obra han sido implementados en lenguaje MATLAB
versión 11. El código fuente se identifica por el siguiente recuadro:
5.1.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
xvii
Código Fuente 5.1
robot.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Simulación de robots manipuladores
robot.m
1
2
3
4
5
6
7
8
9
10
clc;
clear all;
close all;
format short g
ti=0; h=0.001; tf = 10; %vector tiempo
t=ti:h:tf; %tiempo de simulación
ci=[0; 0; 0; 0];
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
[t,x]=ode45(’robot’,t,ci,opciones);
plot(x(:,1),x(:,2))
Para representar una idea general de una instrucción de programación, se emplea
pseudo-código como el siguiente:
Estructura de código 5.1
Pseudo código
while k<1000
qp(k)=(q(k)-q(k-1))/h;
if q(k)>100
for j=1:1000
qpp(j)=robot(q(j),qp(j));
end
end
k=k+1;
otro grupo de instrucciones;
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
Prólogo
Robótica y mecatrónica representan en la actualidad áreas estratégicas y claves
para todo paı́s que aspire a la modernidad y bienestar, ya que su impacto no sólo
repercute en aspectos polı́ticos y económicos, también forma parte importante de la
vida cotidiana, educación, cultura, y en todos los ámbitos de la sociedad.
La simulación es una herramienta imprescindible para reproducir los fenómenos
fı́sicos de un robot o de un sistema mecatrónico, permite estudiar y analizar a
detalle los aspectos prácticos que intervienen en tareas especı́ficas que debe realizar
un robot industrial. La simulación es un proceso previo a la etapa experimental
donde es posible entender los conceptos claves de la robótica y mecatrónica. Bajo
este escenario se ubica la presente obra a través de la propuesta de un conjunto
de librerı́as para MATLAB que permitan realizar estudio, análisis, simulación y
aplicaciones de robots manipuladores y sistemas mecatrónicos.
Esta obra presenta la propuesta y desarrollo de una clase particular de librearı́as
toolbox para robótica y mecatrónica. Las librerı́as son funciones en código fuente para
MATLAB que permiten modelar la cinemática directa e inversa, transformaciones
homogéneas (rotación y traslación), dinámica, identificación paramétrica, control de
robots manipuladores. El contenido y material incluido en el libro está dirigido a
estudiantes de ingenierı́a en electrónica, sistemas, computación, industrial, robótica
y mecatrónica. No obstante, también puede ser adecuado para nivel posgrado.
La organización de este libro consta de cuatro partes: la Parte I Programación
incluye dos capı́tulos. El Cap tulo 1 Conceptos básicos de programación del
lenguaje de MATLAB tiene la finalidad de que el lector adquiera los conocimientos
necesarios para adquirir solvencia en programar aplicaciones en código fuente. El
capı́tulo 2 Métodos numéricos presenta aspectos relacionados con las técnicas de
métodos numéricos enfocados a resolver problemas de diferenciación e integración
numérica de sistemas dinámicos.
La Parte II Cinemática está relacionada con el análisis cinemático de las
principales clases de robots manipuladores. Se componen de tres capı́tulos; el
Prólogo
xix
capı́tulo 3 Preliminares matemáticos contiene las bases de las reglas de las
matrices de rotación, traslación y transformaciones homogéneas. En el capı́tulo
4 Cinemática directa se detalla la metodologı́a de Denavit-Hartenberg para
describir la cinemática directa; asimismo se describe la cinemática inversa,
cinemática diferencial y jacobianos. Un compendio de librerı́as se desarrollaron con
variables simbólicas y aplicaciones numéricas para los principales tipos de robots
manipuladores en el capı́tulo 5 Cinemática directa cartesiana.
La Parte III Dinámica describe la técnica de simulación para sistemas dinámicos
e identificación paramétrica. Formada por el capı́tulo 6 Dinámica donde se realiza
simulación de sistemas mecatrónicos y robots manipuladores con la estructura de
una ecuación diferencial ordinaria de primer orden descrita por variables de estado.
El capı́tulo 7 Identificación paramétrica presenta cinco esquemas de regresión
con la técnica de mı́nimos cuadrados. Se proponen extensos ejemplos para ilustrar
el procedimiento para encontrar el valor numérico de los parámetros del robot.
Finalmente, la Parte IV capı́tulo 8 Control de posición contiene la simulación
de algoritmos clásicos como el control PD y PID; ası́ como simulación de nuevas
estrategias de control con mejor desempeño que pertenecen a la filosofı́a de diseño
moderno conocida como moldeo de energı́a. Aplicaciones de control punto a punto
se ilustran para describir la técnica de simulación.
La realización de esta obra no hubiera sido posible sin el apoyo de la Benemérita
Universidad Autónoma de Puebla (BUAP), particularmente agradezco a la
Facultad de Ciencias de la Electrónica por todas las facilidades brindadas. El
autor desea agradecer principalmente al Dr. Jaime Cid, M. C. Fernando Porras,
Dra. Aurora Vargas, Dr. Sergio Vergara, Dra. Amparo Palomino y al M. C. Pablo
Sánchez, ası́ como al programa de financiamiento de proyectos de investigación de
la Vicerrectorı́a de Investigación y Estudios de Posgrado (VIEP), especialmente a la
Dra. Rosa Graciela Montes y al Dr. Pedro Hugo Hernández Tejeda.
Fernando Reyes Cortés
H. Puebla de Z., a 3 de diciembre de 2011
Facultad de Ciencias de la Electrónica
Benemérita Universidad Autónoma de Puebla
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
Parte I
Programación
La Parte I de la presente obra está destinada a estudiar el lenguaje de programación
de MATLAB y la implementación de métodos numéricos aplicados a la robótica
y mecatrónica. Esta primera parte se compone de dos capı́tulos. El capı́tulo 1
Conceptos básicos presenta los aspectos básicos del lenguaje MATLAB y tiene
la finalidad de que el lector adquiera los conocimientos fundamentales para adquirir
solvencia en programar en código fuente. El capı́tulo 2 Métodos numéricos
presenta aspectos relacionados con las técnicas de métodos numéricos enfocados
a resolver problemas de modelado y control de las áreas de robótica y mecatrónica.
Capı́tulo 1 Conceptos básicos
Descripción de los principales componentes del ambiente de programación de
MATLAB. Sintaxis y programación, declaración de variables, tipo de datos,
operadores, programación, manipulación numérica de matrices y arreglos, funciones, gráficas, funciones importantes, matrices, operadores, instrucciones, lazos de programación, etcétera. Un conjunto de ejemplos se desarrollan para
ilustrar los temas presentados.
Capı́tulo 2 Métodos numéricos
Conocer los principales métodos de diferenciación e integración numérica que
se aplican en robótica y mecatrónica. Sistemas de ecuaciones lineales, método
de Euler e integración numérica (trapezoidal, Simpson). Simulación de sistemas
dinámicos con la técnica de Runge-Kutta.
La parte I concluye con referencias selectas y un conjunto de problemas para mejorar
las habilidades y conocimientos de los capı́tulos tratados.
Referencias selectas
Problemas propuestos
Conceptos básicos
Capı́tulo
1
1.1 Introducción
1.2 Componentes
1.3 Inicio
1.4 Lenguaje
1.5 Matrices y arreglos
1.6 Gráficas
1.7 Funciones
1.8 Programación
1.9 Formato para datos experimentales
1.10 Resumen
Objetivos
Presentar la plataforma y ambiente de programación de MATLAB con
los fundamentos y bases de su lenguaje enfocado para adquirir solvencia
y dominio en la implementación de algoritmos con aplicaciones en
mecatrónica y robótica.
Objetivos particulares:
Aprender el Lenguaje MATLAB.
Conocer los operadores.
Programar con matrices y arreglos.
Manejar funciones e instrucciones.
Graficar funciones y datos en 2D y 3D.
Desarrollar formatos para manejar datos experimentales.
1.1
Introducción
5
1.1 Introducción
H
oy en dı́a, MATLAB es un lenguaje de programación matemático de alto
nivel integrado con entorno gráfico amigable, visualización de datos, funciones,
gráficas 2D y 3D, procesamiento de imágenes, video, computación numérica para
desarrollar algoritmos matemáticos con aplicaciones en ingenierı́a y ciencias exactas.
Particularmente, en ingenierı́a es una herramienta muy poderosa para realizar
aplicaciones en mecatrónica, robótica, control y automatización.
MATLAB es un acrónimo que proviene de matrix laboratory (laboratorio
matricial) creado por el profesor y matemático Cleve Moler en 1970. La primera
versión de MATLAB fue escrita en lenguaje fortran la cual contempló la idea de
emplear subrutinas para los cursos de álgebra lineal y análisis numérico de los
paquetes LINPACK y EISPACK; posteriormente se desarrolló software de matrices
para acceder a esos paquetes sin necesidad de usar programas en fortran. La
empresa The Mathworks (http://www.mathworks.com), propietaria de MATLAB
fue fundada por Jack Little y Cleve Moler en 1984. El actual paquete de MATLAB se
encuentra escrito en lenguaje C, y su primera versión en este lenguaje fue escrita por
Steve Bangert quien desarrolló el intérprete parser. Steve Kleiman implementó los
gráficos, las rutinas de análisis, la guı́a de usuario, mientras que la mayorı́a de los
archivos.m fueron escritos por Jack Little y Cleve Moler. Actualmente, el lenguaje
de programación de MATLAB proporciona un sencillo acceso a algoritmos numéricos
que incluyen matrices.
Las versiones recientes del lenguaje MATLAB se caracterizan por ser multiplataforma, es decir se encuentra disponible para sistemas operativos como Unix, Windows
y Apple Mac OS X. MATLAB posee varias caracterı́sticas computacionales y visuales, entre las que sobresalen la caja de herramientas (toolbox) la cual representa
un amplio compendio de funciones y utilerı́as para analizar y desarrollar una amplia gama de aplicaciones en las áreas de ingenierı́a y ciencias exactas. Un rasgo
distintivo de MATLAB es que ofrece un entorno gráfico de programación amigable
al usuario a través de herramientas y utilerı́as para realizar simulación de sistemas
dinámicos, análisis de datos, procesamiento de imágenes y video, gráficas y métodos
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
6
Capı́tulo 1: Conceptos básicos
de visualización, desarrollo de interfaces de usuario (GUI); también permite realizar interfaces para sistemas electrónicos, por ejemplo adquisición de datos con una
versatilidad de tarjetas de instrumentación electrónica comerciales con plataforma
de microprocesadores, DSP’s, PIC’s, FPGA’s, manejo de puertos como USB, COM,
paralelo y diseños electrónicos propios.
MATLAB dispone de dos herramientas adicionales que expanden sus prestaciones:
plataforma de simulación multidominio Simulink y GUIDE editor de interfaces
de usuario. Se recomienda al lector visitar:
www.mathworks.com/products/matlab
en ese sitio WEB se pueden encontrar productos actuales de MATLAB, manuales,
notas técnicas, cursos, aplicaciones y foros internacionales, ası́ como sociedades de
desarrollo. Actualmente, MATLAB se ha convertido en un referente de cómputo
a nivel internacional, debido que en la mayorı́a de las universidades, centros de
investigación e industria lo utilizan para desarrollar y llevar a cabo proyectos de
ciencia y tecnologı́a.
Especı́ficamente en el área de ingenierı́a MATLAB permite realizar simulaciones
de sistemas mecatrónicos y robots manipuladores. El proceso de simulación resulta
importante cuando no se dispone de una adecuada infraestructura experimental.
Sin embargo, la simulación depende de un buen modelo matemático que permita
reproducir fielmente todos los fenómenos fı́sicos del sistema real. La simulación es
flexible ya que permite detectar posibles deficiencias en el diseño del modelado. Una
vez depurado el modelo dinámico, entonces la simulación facilita el proceso para
analizar, estudiar y comprender el comportamiento de la dinámica del sistema. Esta
etapa es fundamental para el diseño de algoritmos de control. Cuando el modelo
matemático del sistema mecatrónico o robot manipulador es lo suficientemente
completo entonces la simulación proporciona un medio virtual del sistema real.
El propósito de este capı́tulo se ubica en preparar al lector para conocer mejor
el entorno de programación, programar y manejar en forma solvente el lenguaje
de MATLAB. En otras palabras, proporcionar todos los elementos necesarios de
programación (variables, datos, instrucciones y funciones) para realizar diversas
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.2
Componentes
7
aplicaciones para las áreas de robótica y mecatrónica.
1.2 Componentes
E
l ambiente de programación de MATLAB es amigable al usuario, y
está compuesto por una interface gráfica con varias herramientas distribuidas
en ventanas que permiten programar, revisar, analizar, registrar datos, utilizar
funciones, historial de comandos y desarrollar diversas aplicaciones. La forma
de iniciar el paquete MATLAB es realizando doble click sobre el icono
colocado en el escritorio de Windows (Windows desktop). La pantalla principal de
MATLAB se presenta en la figura 1.1 la cual contiene la interface gráfica de usuario
con varias ventanas como la de comandos (Command Window fx >>), manejo
de archivos, espacio de trabajo (Workspace), historial de comandos (Command
History), directorio de trabajo y aplicaciones como Simulink.
Figura 1.1 Ambiente de programación de MATLAB.
Es recomendable personalizar el ambiente de programación de MATLAB para una
fácil interacción con manejos de archivos, datos y herramientas de programación.
Por ejemplo, para integrar la ventana del editor dentro del ambiente gráfico se logra
oprimiendo el icono del editor de texto colocado en la esquina superior izquierda,
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
8
Capı́tulo 1: Conceptos básicos
justo abajo de la opción File del menú principal, posteriormente se hace click sobre
la flecha colocada en la esquina superior derecha de la ventana del editor. La figura
1.2 muestra el ambiente configurado.
Figura 1.2 Editor de texto integrado en el ambiente de programación.
Generalmente el usuario registra sus archivos en una carpeta o directorio predefinido;
para dar de alta dicho directorio al momento de simular aparecerá el mensaje que
se muestra en la figura 1.3. Seleccionar Add to Path para que MATLAB realice la
simulación desde esa trayectoria de trabajo, de esta forma las trayectorias de otros
directorios que estén habilitadas no se perderán, por lo que la trayectoria del usuario
se añade a las ya existentes.
Las componentes principales del ambiente de programación de MATLAB son:
Herramientas de escritorio y ambiente de desarrollo.
Librerı́as.
Lenguaje MATLAB.
Gráficas.
Interfaces externas/API.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.2
9
Componentes
Figura 1.3 Habilitación del directorio de trabajo de usuario.
1.2.1
1.2.1. Herramientas de escritorio y ambiente de desarrollo
MATLAB tiene un conjunto de herramientas que facilitan el uso de funciones,
comandos, programas, datos, variables y archivos (desktop tools and development
environment). La mayorı́a de las herramientas son interfaces gráficas donde el usuario
interacciona con comandos, funciones, editor de texto, variables y datos. Por ejemplo
MATLAB desktop, Command Windows, Simulink, ayuda en lı́nea, analizador de
código, navegador de archivos, etcétera.
1.2.2
1.2.2. Librerı́as
Las librerı́as de MATLAB son un conjunto muy grande de funciones y algoritmos
matemáticos que van desde funciones trigonométricas, operaciones básicas con
matrices hasta funciones complejas como análisis de regresión, inversa de matrices,
funciones Bessel, transformada rápida de Fourier, Laplace, programación de DSP’s,
microprocesadores, procesamiento de imágenes, video y tarjetas de instrumentación
electrónica, entre otras ventajas.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
10
Capı́tulo 1: Conceptos básicos
1.2.3
1.2.3. Lenguaje
El lenguaje de programación de MATLAB es de alto nivel y permite programar
matrices, arreglos e incorporar instrucciones de control de flujo del programa,
funciones, comandos y estructura de datos.
MATLAB contiene una diversidad en comandos que facilitan al usuario la
implementación del problema a simular. Los comandos son funciones muy especı́ficas
que tienen un código depurado y que no se encuentra disponible al usuario.
El lenguaje de programación de MATLAB contiene todos los elementos de programación necesarios para desarrollar aplicaciones en realidad virtual, programación de
robots manipuladores, análisis de regresión y estadı́sticos de señales experimentales, procesamiento y extracción de rasgos distintivos de imágenes y video, ası́ como
varias aplicaciones más en ingenierı́a y ciencias exactas.
1.2.4
1.2.4. Gráficos
MATLAB contiene un enorme número de funciones que facilitan la representación
gráfica y visualización de variables, funciones, vectores, matrices y datos que pueden
ser graficados en 2 y 3 dimensiones. Incluye también funciones de alto nivel para el
análisis y procesamiento de gráficas, datos experimentales o de simulación, video e
imágenes, animación y presentación de sólidos, ası́ como el desarrollo de aplicaciones
con interface gráfica para incluir menús con botones, barras deslizadoras, diagramas
a bloques, instrumentos de medición y ventanas para seleccionar opciones o
herramientas de la aplicación.
1.2.5
1.2.5. Interfaces externas/API
Hay varias herramientas especiales para escribir programas en lenguaje C, C++,
fortran y Java que interactúen con programas en lenguaje MATLAB facilitando el
proceso de llamada a rutinas desde MATLAB y pase de parámetros, ası́ como la
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.3
11
Inicio
programación de puertos (USB, COM, paralelo y serial) que permiten conectar
tarjetas de instrumentación electrónica para adquisición de datos y evaluación
experimental de algoritmos de control.
1.3 Inicio
U
na vez instalado MATLAB, la forma más simple de interaccionar con este
paquete es introduciendo expresiones directamente en la venta de comandos,
por ejemplo iniciando con el tradicional letrero “Hola mundo...” sobre el prompt:
fx >>
disp(’Hola mundo...’) ←
Hola mundo...
fx >>
9+9 oprimir la tecla Enter ←
ans=
18
fx >>
sin(10) oprimir Enter ←
ans=
−0.5440
Cuando no se especifique el nombre de la variable, MATLAB usará el nombre por
default ans que corresponde a un nombre corto de answer. Al especificar una variable
el resultado se desplegará con el nombre de esa variable, por ejemplo:
fx >>
z=9+9 Enter ←
z=
18
fx >>
y=sin(10) Enter
←
y=
−0.5440
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
12
Capı́tulo 1: Conceptos básicos
MATLAB funciona como calculadora, sobre el prompt de la ventana de comandos se
pueden escribir expresiones aritméticas mediante los operadores “+”,“-”,“/”, “*”,
“∧ ” para la suma, resta, división, multiplicación y potencia, respectivamente. La
tabla 1.1 contiene los operadores aritméticos básicos.
Por ejemplo, similar a una calculadora se pueden evaluar expresiones como:
fx >>
(10.3+8*5/3.33)∧5 ←
ans=
5.5296e + 006
fx >>
ans∧ 2 ←
ans=
3.0576e + 013
Tabla 1.1 Operadores aritméticos básicos
Adición
+
Sustracción
-
Multiplicación
*
División
/
División left
\
Potencia
∧
Evaluación
()
MATLAB utiliza el operador ; para deshabilitar la opción de desplegado en la
ventana de comandos. Por ejemplo,
fx >>
z=9+9; ←
fx >>
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.3
13
Inicio
es decir, con el operador ; MATLAB no exhibirá ningún valor de variable o función.
El lenguaje MATLAB permite insertar comentarios usando el operador % el cual
deberá emplearse por cada lı́nea de comentarios. Por ejemplo:
fx >>
w=10+20 %Suma de dos enteros. ←
w=
30
fx >>
sign(-8999.4) %Obtiene el signo de un número. ←
ans=
−1
Obsérvese que al ejecutarse la instrucción o la sentencia el comentario no se despliega.
Los comentarios sirven para documentar aspectos técnicos de un programa.
Herramienta de ayuda de MATLAB
MATLAB tiene una extensa gama de herramientas para solicitar ayuda en lı́nea
(help), ya sea de manera general o en forma especı́fica buscar información para una
instrucción comando o función, ası́ como sus principales caracterı́sticas y ejemplos
didácticos (demos).
En la ventana de comandos puede solicitar ayuda de la siguiente forma:
fx >>
help ←
fx >>
helpwin ←
fx >>
help general ←
fx >>
helpdesk ←
fx >>
help if ←
fx >>
help demo ←
La ayuda en lı́nea del programa MATLAB también proporciona información sobre
los demos y tutoriales que facilitan el aprendizaje del paquete.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
14
Capı́tulo 1: Conceptos básicos
Para suspender la ejecución de un programa
Cuando MATLAB se encuentra realizando la ejecución de un programa o cálculo
computacional en la esquina inferior izquierda aparecerá un icono que indica busy.
Sin embargo, hay ocasiones que toma mucho tiempo la ejecución del programa debido
a que se encuentra realizando operaciones complicadas, funciones discontinuas o con
números muy grandes, en cuyo caso despliega Inf, que significa infinito.
fx >>
sinh(1345e34) %Obtiene el seno hiperbólico de un número. ←
ans=
Inf
La siguiente expresión genera un lazo infinito de ejecución. Es decir el programa se
quedará de manera indefinida en ejecución.
fx >>
←
while 1 end %Genera un ciclo infinito de ejecución del programa.
En este caso, hay ocasiones donde es recomendable interrumpir el proceso mediante
la combinación de teclas CRTL C (presionar simultáneamente CONTROL y la tecla C).
Para que tenga efecto CRTL C es muy importante que se encuentre sobre la
ventana de comandos; si no es el caso primero haga click sobre dicha ventana,
y posteriormente CRTL C. De lo contrario no tendrá efecto la acción de suspender
programa.
Finalizar la sesión de MATLAB
Para finalizar MATLAB simplemente escribir en la ventana de comandos lo siguiente:
fx >>
fx >>
quit ←
exit ←
También se pueden usar las siguientes opciones para finalizar la sesión con MATLAB:
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.4
15
Lenguaje
Desde el teclado, presionar simultáneamente CRTL Q o CONTROL con q
Presionar simultáneamente las teclas ALT F y después la opción Exit
Con el mouse sobre el menú de MATLAB click sobre File y click en Exit.
1.4 Lenguaje
E
l lenguaje de programación de MATLAB está compuesto por un conjunto
de reglas gramaticales y sintaxis para escribir correctamente las variables,
constantes, operadores, expresiones, funciones y todos los elementos que forman
parte de la programación.
Las variables, constantes, operadores y funciones forman una expresión la cual
será procesada por un analizador léxico y sintáctico antes de ser ejecutada por
la computadora. A diferencia de otros lenguajes, las expresiones en MATLAB
involucran matrices.
1.4.1
1.4.1. Variables
En el lenguaje de MATLAB las variables no requieren ningún tipo de declaración
o definición. Esto tiene varias ventajas ya que facilita la programación. Cuando
MATLAB encuentra el nombre de una nueva variable, automáticamente crea la
variable y le asigna una localidad de memoria. Por ejemplo,
fx >> error posición=20
esta variable es vista por MATLAB desde el punto de vista de programación como
una matriz de dimensión 1 × 1.
Los nombres usados para referenciar a las variables, funciones y otro tipo de objetos
o estructuras definidos por el usuario se les conocen como identificadores. Los
nombres de identificadores constan de una letra del idioma castellano como caracter
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
16
Capı́tulo 1: Conceptos básicos
inicial (con excepción de la letra ñ y sin acentos) seguido de cualquier
número de letras, dı́gitos, y también se puede usar el guión bajo (underscore ).
MATLAB distingue las letras mayúsculas de las minúsculas; por ejemplo la variable
A es diferente a la variable a. La longitud de los nombres de las variables puede
ser cualquier número de caracteres. Sin embargo, MATLAB usa los primeros 63
caracteres del nombre (namelengthmax=63) e ignora los restantes. Por lo tanto,
para distinguir variables es importante escribir los nombres de las variables con un
máximo de 63 caracteres.
La función genvarname es útil para crear nombres de variables que son válidas
y únicas. Por ejemplo, cadena=genvarname({’A’, ’A’, ’A’, ’A’}) produce la
siguiente salida: cadena = ’A’ ’A1’ ’A2’ ’A3.
MATLAB puede trabajar con varios tipos de variables: en punto flotante, flotante
doble, enteros, enteros dobles, enteros cortos o tipo char, cadenas de caracteres,
expresiones simbólicas, etc. Los diversos tipos de variables son interpretados como
matrices.
Para saber qué tipos de variables estamos usando podemos utilizar el comando whos
como en los ejemplos siguientes, primero se declaran las variables y posteriormente
se usa la función whos:
fx >>
i=9 ←
i=
9
fx >>
x=3.35 ←
x=
3.3500
fx >>
cadena= ’esta es una cadena de caracteres’ ←
cadena=
’esta es una cadena de caracteres’
fx >>
A=[2 3; 3 4] ←
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.4
17
Lenguaje
A=
fx >>
2
3
3
4
whos ←
=
Name
Size
Bytes Class Attributes
A
2×2
32
double
cadena
1 × 32
64
char
i
1×1
8
double
x
1×1
8
double
La columna Size indica la cantidad de memoria asignada a esa variable, mientras
que la columna Bytes Class indica el tipo de variable. Obsérvese que MATLAB
trata a todas las variables como matrices para propósitos de programación.
Al terminar una sesión, o cuando ya no se usen la variables debido a que se
desea trabajar con otro programa es recomendable limpiar todas las variables para
liberar memoria. Para realizar lo anterior, se puede hacer con cada variable, por
ejemplo clear i, posteriormente clear x y finalmente clear cadena. Otra forma
de realizarlo es limpiando simultáneamente las tres variables a través de: clear i x
cadena o cuando hay una gran cantidad de variables, entonces es conveniente usar
clear all.
1.4.2
1.4.2. Números
La notación convencional que usa MATLAB para la representación de números
es la decimal con un punto decimal, signo ± y un número determinado de dı́gitos
después del punto decimal, esto depende del tipo de formato numérico empleado (ver
format). En la notación cientı́fica se usan potencias de diez. También se emplean
constantes tales como e, π. Los números complejos o imaginarios emplean i o j. Todos
los números son almacenados internamente utilizando el formato long en notación
estándar de la IEEE para punto flotante con precisión finita de 16 dı́gitos decimales
y un rango finito de 10−308 a 10308 .
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
18
Capı́tulo 1: Conceptos básicos
Algunos ejemplos de números son:
2.33
9.999
−105
0.005
8.345e88 9 + i3.2
3.1416
8e5i
eπ
sen(π)
90
180
√
2
La tabla 1.2 muestra algunas de las constantes más usadas en el área de la ingenierı́a.
Tabla 1.2 Constantes útiles
pi
3.141592653589793.
√
Número imaginario i
−1
j
Igual que el número imaginario i
eps
Punto flotante con precisión relativa, ε = 2−52
realmin
El número en punto flotante más pequeño, 2−1022
El número más grande en punto flotante, (2−ε)1023
realmax
inf
Infinito ∞
NaN
No es un número
1.4.3
1.4.3. Formato numérico
La forma para desplegar funciones, variables y cualquier tipo de dato por MATLAB
se realiza a través del comando format la cual controla el formato numérico de los
valores desplegados. Es decir, modifica el número de dı́gitos para el desplegado de
los datos. Este comando solo afecta a los números que son desplegados, no al proceso
de cómputo numérico o al registro de las variables o datos.
format short ←
fx >>
fx >>
x= [ 9/8 8.3456e-8] ←
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.4
19
Lenguaje
x=
1.1250 0.0000
Observe que en el caso de la constante 8.3456e-8 lo despliega con 0.0000 debido a
los lı́mites del formato corto format short.
Ahora note la diferencia con format short e
fx >>
fx >>
format short e ←
x ←
x=
1.1250e + 000 8.3450e − 008
Es posible eliminar el formato extendido para desplegar el resultado de 9/8 y al
mismo tiempo mantener la caracterı́stica de desplegado para la segunda componente
de la variable x de la siguiente forma:
fx >>
fx >>
format short g ←
x ←
x=
1.1250 8.3450e − 008
Para desplegar la información de x con mayor número de dı́gitos sin utilizar la
notación cientı́fica, entonces
fx >>
format long ←
x=
1.125000000000000 0.000000083450000
Para saber qué tipo de format está actualmente activo se usa el comando get:
fx >>
get(0,’format’) ←
ans=
long
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
20
Capı́tulo 1: Conceptos básicos
El formato numérico que por default emplea MATLAB es el formato corto (short):
format short. Sin embargo, es posible utilizar otros tipos de formatos como:
extendido, notación cientı́fica, punto fijo, punto flotante, formato de ingenierı́a, etc.
Los formatos numéricos que contiene el comando format se encuentran resumidos
en la tabla 1.3.
Tabla 1.3 Opciones del comando format
Tipo
Descripción
short
Formato por default. Despliega 4 dı́gitos después del punto decimal. Por ejemplo
3.1416
long
Formato para punto fijo con 15 dı́gitos después del punto decimal para variables
tipo doble y 7 dı́gitos para variables tipo simple. Por ejemplo x=4.123456789012345
Formato para punto flotante con 4 dı́gitos después del punto decimal. Por ejemplo:
ShortE
longE
1.4567e+000.
Variables enteras que almacenan números flotantes con más de 9 dı́gitos no serán
desplegados en la notación cientı́fica.
Punto flotante con 15 dı́gitos después del punto decimal para datos tipo doble y 7
dı́gitos después del punto decimal para variables tipo simple.
Ejemplo x=4.123456789012345+e000.
Variables enteras que almacenan números flotantes con más de 9 dı́gitos no serán
desplegados en notación cientı́fica.
shortG
Formato para punto fijo o punto flotante, 4 dı́gitos después del punto decimal.
Ejemplo 3.1416.
longG
Formato para punto flotante o fijo con 14 o 15 dı́gitos después del punto decimal
para variables tipo doble y 6 o 7 dı́gitos después del punto decimal para variables
tipo simple. Ejemplo 8.01234567891234.
shortEng
longEng
Alfaomega
Formato para ingenierı́a tiene 4 dı́gitos después del punto decimal y una potencia
que es múltiplo de tres. Ejemplo 3.1416e+000.
Formato para ingenierı́a tiene 16 dı́gitos después del punto decimal y una potencia
que es múltipo de tres. Ejemplo 3.14159265358979e+000.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.4
21
Lenguaje
El comando format también proporciona representación hexadecimal, tipo proporción ab y de tipo bancaria como se explica en la tabla 1.4.
Tabla 1.4 Opciones del comando format
Tipo
Descripción
rat
Despliega en forma de proporción de números enteros. Ejemplo 17/50
hex
Representación en formato hexadecimal. Ejemplo a0fcbdf34
bank
Despliega tipo cantidad bancaria (pesos y centavos). Ejemplo 3.14
1.4.4
1.4.4. Operadores
Los operadores en MATLAB juegan un papel determinante ya que manipulan a las
variables y funciones. Adicional a los operadores aritméticos de la tabla 1.1, hay
operadores especı́ficos para funciones, operaciones lógicas, relacionales, estructuras
de datos, uniones y matrices.
A continuación se presentan diversos tipos de operadores de utilidad en MATLAB.
Operador colon :
El operador colon : (dos puntos verticales) es uno de los operadores más importantes
para programar, se emplea para diferentes formas, como por ejemplo en MATLAB
técnicamente se conoce como vectorización al proceso de generar una secuencia de
número usando 1:10.
fx >>
1:10 ←
ans =
1 2
3 4 5 6 7
8 9 10
En este caso el incremento es de uno en uno. Si se requiere un paso de incremento
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
22
Capı́tulo 1: Conceptos básicos
especı́fico, por ejemplo 2, entonces se procede de la siguiente forma
fx >>
1:2:10 ←
ans=
1 3 5 7
9 10
El valor del paso de incremento también puede ser menor que 1, por ejemplo
fx >>
1:0.1:2 ←
ans=
1 1.1 1.2 1.3
1.4 1.5 1.6 1.7 1.8 1.9 2
En ocasiones es conveniente que sea negativo
fx >>
10:-1:2 ←
ans=
10
9
8
7
6
5
4
3
2
En otras aplicaciones es útil realizar una variación desde -8 a 8 con incrementos de
pasos de 0.5, por ejemplo
fx >>
-8:0.5:8 ←
ans=
−8
−7.5
−7
−6.5
−6
−5.5
−5
−4.5
−4
−3..5
−3
−2.5
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6
6.5
7
7.5
8
Operador ()
Los operadores paréntesis () son utilizados en diversas operaciones matemáticas, por
ejemplo: evaluar funciones como en el caso de y=sin(t). También para referenciar
a elementos de matrices A(2, 3). En expresiones aritméticas indican precedencia
y la forma de agrupar variables x=3*(y+j)*r-i*(4+r). Resultan de utilidad para
evaluar condiciones lógicas if (x>3) x=3 end. Cuando se trata de evaluar potencias
los paréntesis determinan los niveles de jerarquı́a para realizar operaciones desde las
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.4
23
Lenguaje
más internas hasta las externas (7 + (r ∗ (x2 + 8))6 − j + sen(t3 )5 )3 .
Operador semicolon ;
El operador punto y coma alineados en forma vertical o mejor conocido como
semicolon ; tiene varias funciones. Una de ellas se encuentra relacionada con el
desplegar el resultado que tienen las variables, constantes, funciones o gráficas.
Cuando se inserta al final de la expresión, instrucción o comando se inhabilita el
desplegado. Por ejemplo:
fx >>
w=sin(pi/2); ←
fx >>
Si el operador ; no se coloca al final de la instrucción, entonces se produce el
desplegado del valor de la variable w
fx >>
w=sin(pi/2) ←
w=
1
Otra funcionalidad del operador ; es generar renglones en matrices. Por ejemplo,
fx >>
A=[ 19 3; 4 5 ] ←
A=
19 3
4
5
El operador ; que precede al número 3 y antecede al número 4 genera un renglón
de esta matriz. En este caso el primer renglón lo forman los números 19 y 3, y
para el segundo renglón formado por 4 y 5. Obsérvese que después del corchete ]
no se inserta el operador ; ya que en este caso afecta el desplegado, mientras que
dentro de los corchetes [ ; ] significa que genera un renglón en la matriz. Es decir
el operador ; tiene dos funciones muy diferentes. Por cada ; dentro de corchetes se
generará un renglón de la matriz. Es muy importante que quede claro la aplicación
de este operador para evitar problemas de programación.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
24
Capı́tulo 1: Conceptos básicos
Si en el anterior ejemplo, en la matriz A no se insertara el operador ; entonces el
resultado quedarı́a de la siguiente forma:
fx >>
A=[ 19 3 4 5 ] ←
A=
19 3 4 5
Para ver más detalles del operador ; referirse a la sección de Matrices y arreglos.
Operador ,
El operador coma , tiene más de una función en MATLAB. Por ejemplo, cuando
se emplea en funciones indica la separación de los argumentos como en el caso
de y=sin(t,x) o en w=sinh(t,x,y,z,p). Para referenciar a los elementos de una
matriz se especifica el número de renglón y de la columna separados por una coma
A(3,4). En matrices indica la separación de los elementos de un renglón A=[ 5,6,7,8;
8,3,0,2].
Operador ’
El operador ’ se relaciona con el manejo de datos tipo char o cadena de caracteres.
También representa la transpuesta de una matriz.
En relación a caracteres se emplea de la siguiente forma:
fx >>
dato char= ’a’ ←
dato char=
a
Para almacenar una cadena de caracteres, se procede de la siguiente forma:
fx >>
cadena= ’una cadena de letras’ ←
cadena=
una cadena de letras
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.4
Lenguaje
25
El operador ’ es ampliamente utilizado en funciones donde el pase de parámetros es
a través de cadenas de texto como en disp(’Hola, mundo...’).
En matrices el operador ’ representa la matriz transpuesta, es decir A’=AT . Para
mayor detalle de este operador en matrices ver la sección de Matrices y arreglos.
Operador %
En el lenguaje de MATLAB se pueden insertar comentarios usando el operador %.
Los comentarios son importantes en todo programa ya que permiten la documentación técnica del algoritmo o aplicación a implementar. Por ejemplo,
clc ; %limpia la pantalla de la ventana de comandos\
clear ; %limpia espacio de trabajo\
; %ası́ como todas las variables que ocupen memoria
t=0:0.1:t; %genera base de tiempo
y=sin(t); %genera el vector senoidal
plot(t,y) %gráfica onda senoidal
Operador ˜
El operador tilde ˜ se emplea para deshabilitar una variable de salida de una función.
Es muy útil cuando la función retorna más de una variable y no se requiere usar
todas las variables; supóngase que la función control robot retorna dos variables
(error y par) y la sintaxis es: [error, par ]=control robot(q). No se requiere usar
la variable error, únicamente par, entonces se usa de la forma siguiente:
[~ , par]= control robot(q).
También se emplea como negación en operadores lógicos, por ejemplo en ˜ = que
significa no es igual a.
En las siguientes secciones se irán explicando otros tipos de operadores que se
encuentran directamente relacionados con matrices y en general con la programación
del lenguaje de MATLAB.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
26
Capı́tulo 1: Conceptos básicos
1.5 Matrices y arreglos
E
n MATLAB una matriz es un arreglo rectangular de datos o números, tienen n
renglones por p columnas; la notación matemática más común para representar
a una matriz es: A ∈ IRn×p . Matrices con una sola columna o renglón significan
vectores para MATLAB, por ejemplo x ∈ IRn×1 o y ∈ IR1×n , respectivamente.
Especial significado representan los escalares cuya interpretación para propósitos de
programación corresponde a una representación de matriz del tipo IR1×1 .
Las entradas de la matriz se conocen como elementos y pueden ser números reales,
números complejos, funciones, operadores, inclusive también pueden ser matrices de
menor dimensión. Es importante destacar que una matriz es un objeto matemático
por sı́ misma, esto es, no representa un número o un escalar. Sin embargo, en lenguaje
MATLAB es posible trabajar a una matriz como un escalar, por ejemplo α ∈ IR1×1 .
La matrices tienen operaciones y propiedades bien definidas. Las operaciones entre
matrices producen una matriz, en contraste operaciones entre vectores pueden
producir un escalar, vector o matriz.
En la figura 1.4 se muestra la representación clásica de una matriz rectangular de n renglones por p columnas (matriz n por p). Las columnas son arreglos verticales. Por ejemplo, la segunda columna está formada por los elementos A(1, 2), A(2, 2), · · ·, A(n, 2) mientras que los renglones son filas horizontales dentro del arreglo rectangular; el segundo renglón está compuesto por
A(2, 1), A(2, 2), · · ·, A(2, p). Las columnas se incrementan de izquierda a derecha,
mientras que los renglones se incrementan de arriba hacia abajo.
⎡
Columna
A(1, 1)
⎢ A(2, 1)
⎢
A = ⎢
..
⎣
.
A(1, 2)
···
A(2, 2)
···
..
.
A(1, p)
⎤
A(2, p) ⎥
⎥
⎥
..
⎦
.
Renglón
A(n, 1) A(n, 2) · · · A(n, p)
Figura 1.4 Componentes de una matriz: elementos A(i, j), renglones y columnas.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.5
27
Matrices y arreglos
Los elementos de una matriz se denotan en MATLAB por A(i, j) donde i = 1 . . . n
representa el i-ésimo renglón y j = 1 . . . p denota la j-ésima columna. Por ejemplo,
en la matriz A ∈ IR5×5 el elemento A(2, 5) significa la componente del segundo
renglón y quinta columna, el cual se muestra en la siguiente expresión:
⎡
A(1, 1) A(1, 2) A(1, 3) A(1, 4)
⎢
⎢ A(2, 1)
⎢
A = ⎢
⎢ A(3, 1)
⎢
⎣ A(4, 1)
A(5, 1)
A(2, 2) A(2, 3) A(2, 4)
A(3, 2) A(3, 3) A(3, 4)
A(4, 2) A(4, 3) A(4, 4)
A(5, 2) A(5, 3) A(5, 5)
A(1, 5)
⎤
⎥
A(2,5) ⎥
⎥
A(3, 5) ⎥
⎥.
⎥
A(4, 5) ⎦
A(5, 5)
En esta matriz en particular los pivotes pueden adquirir valores para referenciar a
los elementos de la matriz A(i, j). Para los renglones i = 1, 2, · · ·, 5 y en las columnas
j = 1, 2 · · · , 5.
Para los propósitos de identificar los elementos de una matriz, éstos pueden ser vistos
sobre un sistema de referencia cartesiano planar cuyo origen se encuentra localizado
en la esquina superior izquierda. Las referencias a elementos se hace con A(i, j).
Es importante aclarar que dicho origen no inicia en A(0, 0); lo que serı́a un error
de sintaxis. El origen inicia con los pivotes asignados en uno, como en A(1, 1); con
esta asignación se hace referencia al primer elemento de la matriz, ubicado en el
primer renglón y primera columna. El elemento A(1, 1) representa el origen o punto
de partida para los pivotes (i, j) donde el ı́ndice del i-ésimo renglón está dado antes
del j-ésimo ı́ndice de la columna. Los renglones de una matriz son numerados de
arriba hacia abajo y las columnas de izquierda a derecha.
Se debe tener claro que el lenguaje MATLAB no admite referencias a elementos de
una matriz con pivotes (i, j) asignados en cero, negativos, números reales o números
enteros de magnitud mayor a la dimensión de la matriz. En otras palabras, en las
referencias a elementos de la matriz únicamente con números enteros o naturales
dentro de los lı́mites de la dimensión de la matriz. Por ejemplo, los siguientes
elementos A(0, 0), A(0, 5), A(−5, −1), A(5, 0) son referencias inválidas de una matriz.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
28
Capı́tulo 1: Conceptos básicos
Es muy común cometer errores al referenciar los elementos o entradas de una
matriz. Por ejemplo las entradas A(i, j) de una matriz A ∈ IRn×p deben satisfacer
lo siguiente:
No usar en la referencia de las entradas de una matriz A la posición A(0, 0)
o números negativos A(−3, −5), ni números reales como A(1.32, 2.67). En
todos estos ejemplos existe error de sintaxis y la ejecución de un programa
no puede realizarse hasta no corregir dicho error.
Los pivotes i, j son números acotados por 0 < i ≤ n, 0 < j ≤ p. Por ejemplo
si A ∈ IR3×5 , existe un error en la referencia del elemento A(4, 6), puesto
que i ≤ 3 y j ≤ 5
Los pivotes i, j son números enteros positivos (números naturales) i, j ∈ N .
Inicializando una matriz
La matriz se inicializa por corchetes A = [] directamente en la ventana de comandos
(Command Window) fx >> realizar los siguientes ejercicios:
Las entradas de una matriz puede ser de la siguiente forma: separando los
elementos de un renglón por espacios en blanco o por comas:
fx >>
A=[2, 3, 4, 78.3, 45] ←
A=
2 3 4 78.3 45
Es posible emplear únicamente espacios en blanco
fx >>
A=[2 3 4 78.3 45] ←
A=
2 3 4 78.3 45
Combinando comas y espacios en blanco es otra posibilidad de inicializar una
matriz
fx >>
Alfaomega
A=[2, 3 4, 78.3 45] ←
A=
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.5
29
Matrices y arreglos
2 3
4 78.3 45
Usar el operador semicolon ; para indicar el fin del renglón y generar otro más
fx >>
A=[2, 3 ,4 ; 5 6
A=
8 ; 7, 8, 9] ←
2 3 4
5 6 8
7 8 9
De tomarse en cuenta que el operador ; además de emplearse en matrices tiene
otra función cuando se inserta al finalizar una variable, constante o función
desactiva la opción de desplegado.
Los elementos del i-ésimo renglón o de la j-ésima columna de una matriz A son
denotados como: A(i, j), la expresión A(3, 4) representa un elemento de la matriz
que se encuentra localizado en el tercer renglón y cuarta columna.
Considérese la siguiente matriz A ∈ IR4×4
⎡
⎤
1 3 3 2
⎢ 0 3 4 12 ⎥
⎢
⎥
A = ⎢
⎥
⎣ 12 34 1 23 ⎦
9
7
2
3
Se inicializa como:
fx >>
A=[1,3,3,2; 0, 3, 4,12; 12,34,1,23;9,7,2,3] ←
Para sumar todos los elementos del cuarto renglón de A se procede de la siguiente
forma: A(4, 1) + A(4, 2) + A(4, 3) + A(4, 4) = 9 + 7 + 2 + 3 = 21, es decir
fx >>
A(4,1)+A(4,2)+A(4,3)+A(4,4) ←
ans =
21
El resultado es diferente a sumar A(1, 4)+A(2, 4)+A(3, 4)+A(4, 4) = 2+12+23+3 =
40.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
30
fx >>
Capı́tulo 1: Conceptos básicos
A(1,4)+A(2,4)+A(3,4)+A(4,4) ←
=
40
En general A(i, j) = A(j, i) o A = AT . Si la matriz es simétrica, entonces se cumple
A(i, j) = A(j, i) o A = AT . En MATLAB el operador que representa la matriz
transpuesta es ’. Por ejemplo,
fx >>
B=A ’ ←
B=
1
0
12 9
3
3
34 7
3
4
1
2
2 12 23 3
Debe tenerse cuidado con el empleo del operador ’, además de su uso en matrices
también se emplea en cadenas de caracteres.
El operador colon : se puede emplear en matrices para referenciar a una porción de
la matriz. Por ejemplo, sea una matriz A ∈ IR5×5
⎡
⎤
1
2
3
4
5
⎢
⎥
7
8
9 10 ⎥
⎢ 6
⎢
⎥
⎥
A = ⎢
⎢ 11 12 13 14 15 ⎥
⎢
⎥
⎣ 16 17 18 19 20 ⎦
21 22 23 24 25
entonces las referencias A(1 : 5, 1), A(1 : 5, 2), A(1 : 5, 3), A(1 : 5, 4), A(1 : 5, 5)
representan los 5 renglones de las columnas j = 1 · · · 5, respectivamente
⎡ ⎤
⎡ ⎤
2
1
⎢ ⎥
⎢ ⎥
⎢ 7 ⎥
⎢ 6 ⎥
⎢ ⎥
⎢ ⎥
⎥
⎢ ⎥
A(1 : 5, 1) = ⎢
⎢ 11 ⎥ A(1 : 5, 2) = ⎢ 12 ⎥
⎢ ⎥
⎢ ⎥
⎣ 17 ⎦
⎣ 16 ⎦
21
Alfaomega
22
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.5
31
Matrices y arreglos
⎡
3
⎤
⎡
4
⎤
⎢ ⎥
⎢ ⎥
⎢ 8 ⎥
⎢ 9 ⎥
⎢ ⎥
⎢ ⎥
⎢
⎥
⎥
A(1 : 5, 3) = ⎢ 13 ⎥ A(1 : 5, 4) = ⎢
⎢ 14 ⎥
⎢ ⎥
⎢ ⎥
⎣ 18 ⎦
⎣ 19 ⎦
⎡
23
⎤
24
5
⎢ ⎥
⎢ 10 ⎥
⎢ ⎥
⎥
A(1 : 5, 5) = ⎢
⎢ 15 ⎥
⎢ ⎥
⎣ 20 ⎦
25
Para obtener las 5 columnas de cada renglón se representa por A(1, 1 : 5), A(2, 1 :
5), A(3, 1 : 5), A(4, 1 : 5), A(5, 1 : 5)
A(1, 1 : 5) = [ 1 2 3 4 5 ] A(2, 1 : 5) = [ 6 7 8 9 10 ]
A(3, 1 : 5) = [ 11 12 13 14 15 ] A(4, 1 : 5) = [ 16 17 18 19 20 ]
A(5, 1 : 5) = [ 21 22 23 24 25 ]
Generando matrices básicas
Existen varias formas para generar matrices básicas en MATLAB, se pueden generar
con funciones especı́ficas, con funciones definidas por el usuario, o con el uso del
operador colon :. A continuación se enlistan varias opciones para generar matrices
básicas en MATLAB:
Introduciendo una lista de elementos explı́citos: A = [2, 3, 67; 5.3, 3.3, 2.4; 2, 9, 1]
Cargando matrices de archivos de datos experimentales o externos en formato
de columnas: matriz=load(’datos.dat’)
Generando matrices usando funciones que retornan matrices: matriz=mi matriz(n,m)
Usando funciones de MATLAB por ejemplo: A=zeros(3,3).
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
32
Capı́tulo 1: Conceptos básicos
La tabla 1.5 muestra las opciones más comunes (funciones especiales y por asignación
de datos) que permiten generar matrices básicas.
Tabla 1.5 Funciones especiales para generar matrices básicas
Nombre de la función
zeros(n,m)
ones(n,m)
rand(n,m)
randn(n,m)
Descripción y caracterı́sticas
Genera una matriz IRn×m donde todos sus elementos son
cero.
Genera una matriz IRn×m donde todos los elementos tienen
el valor 1.
Genera una matriz IRn×m donde las entradas son elementos
aleatorios distribuidos de manera uniforme.
Genera una matriz IRn×m donde las entradas son elementos
aleatorios distribuidos normalmente.
Retorna una matriz cuadrada IRn×n donde las entradas son
magic(n)
números enteros desde 1 hasta n2 .
El número n debe ser mayor o igual a 3. .
Genera una matriz rectangular IRn×m donde los elementos
eye(n,m)
con ı́ndices (i, j) tal que i = j tienen el valor de 1, y para
entradas i = j tienen valor de 0.
Si n = m, entonces la matriz es cuadrada y diagonal.
Genera una matriz rectangular IRn×m donde todos los
A(1:n, 1:m)=α
elementos de la matriz A adquieren el valor del escalar α.
Cuando n = m, entonces retorna una matriz cuadrada.
Genera una matriz rectangular desde un archivo ASCII o
A=load
de texto load(’nombre archivo.tex’); el archivo puede
tener datos experimentales y asignarlos a una matriz para
su procesamiento o análisis.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.5
33
Matrices y arreglos
Por ejemplo, en la ventana de comandos se puede comprobar lo siguiente:
fx >>
A=zeros(3,3) ←
A=
fx >>
0 0
0
0 0
0
0 0
0
B=10*ones(3,3) ←
B=
10 10 10
10 10 10
10 10 10
fx >>
C=randn(3,3) ←
C=
0.5377
0.8622
−0.4336
1.8339
0.3188
0.3426
−2.2588 −1.3077
3.5784
Otra forma simple de generar matrices es por medio de la siguiente expresión:
fx >>
D(1:3,1:3)=3.1416 ←
D=
3.1416 3.1416 3.1416
3.1416 3.1416 3.1416
3.1416 3.1416 3.1416
Por medio de un archivo con extensión m es posible generar una matriz de la
siguiente forma. Crear en el editor de texto de MATLAB un archivo con la siguiente
información:
A=[ 8
3
7;
7.3
3.1416;
7.98 6.67
0.001];
6
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
34
Capı́tulo 1: Conceptos básicos
salvar el archivo como datos.m en la carpeta del usuario, entonces sobre el
prompt de la ventana de comandos teclear:
fx >>
datos ←
A=
8.0000 3.0000 7.0000
6.0000 7.3000 3.1416
7.9800 6.6700 0.0010
Otra forma de generar matrices es por medio de la función load la cual lee archivos
binarios y de texto. Por medio de un editor de texto generar un archivo de datos de
texto en arreglo rectangular separados con espacios en blanco. Por ejemplo, grabar en
la carpeta de trabajo del usuario un archivo de texto denominado datos1.dat
con la siguiente información:
datos1.dat
2.0000
3.0000
4.0000
5.0000
6.0000
7.0000
6.7000
8.3000
4.5450
Para generar la matriz con la información del archivo datos1.dat
siguiente sentencia en el prompt de la ventana de comandos:
fx >>
utilizar la
A=load(’datos1.dat’) ←
A=
2.0000 3.0000 4.0000
5.0000 6.0000 7.0000
6.7000 8.3000 4.5450
Observe que con esta asignación en la matriz A, la información se encuentra lista para
ser procesada por cualquier operación de matrices previamente vista. En robótica
y mecatrónica es común grabar archivos experimentales o resultados de simulación
para ser analizados con MATLAB usando un procedimiento parecido al planteado.
El formato del archivo debe ser que los datos estén distribuidos en renglones y
columnas separadas por espacios en blanco.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.5
35
Matrices y arreglos
Concatenación
Al proceso de unir pequeñas matrices para hacer una más grande se le denomina
concatenación. Los sı́mbolos [ ], mejor conocidos como corchetes, representan en
MATLAB el operador concatenación. Por ejemplo, se puede iniciar con una matriz
diagonal 4 × 4 de la siguiente forma:
fx >>
A=eye(4,4) ←
A=
1 0
0 0
0 1
0 0
0 0
1 0
0 0
0 1
Escribir en el prompt de la ventana de comandos la siguientes expresión para obtener
una matriz de dimensión 8 × 8.
fx >>
B=[A A+10; A+20 A+30] ←
B=
1
0
0
0
11 10 10 10
0
1
0
0
10 11 10 10
0
0
1
0
10 10 11 10
0
0
0
1
10 10 10 11
21 20 20 20 31 30 30 30
20 21 20 20 30 31 30 30
20 20 21 20 30 30 31 30
20 20 20 21 30 30 30 31
Borrando columnas y renglones
MATLAB permite borrar renglones y columnas de una matriz usando el operador
concatenación [ ]. Por ejemplo, para borrar la segunda columna de la matriz A
previamente definida en el apartado inmediato anterior se procede de la siguiente
forma:
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
36
fx >>
Capı́tulo 1: Conceptos básicos
A(:,2)=[] ←
A=
1
0 0
0
0 0
0
1 0
0
0 1
obsérvese que por borrar la segunda columna, la nueva matriz resultante A adquiere
una dimensión de 4 × 3.
Ahora, si se desea borrar el primer renglón de la anterior matriz resultante A,
entonces
fx >>
A(1,:)=[] ←
A=
0
0 0
0
1 0
0
0 1
resulta una matriz A∈ IR3×3 .
Si un elemento de una matriz se quiere borrar, resulta un error, la expresión
A(1,1)=[] es inválida. Sin embargo, usando subı́ndices borra un simple elemento
o una secuencia de elementos de la matriz y rehace los elementos restantes de la
matriz en un vector renglón.
Por ejemplo, para borrar el primer elemento de A se emplea la siguiente expresión
fx >>
A(1:1)=[] ←
A=
0 0 0
1 0 0 0 1
Nótese que los elementos restantes se quedan arreglados en la forma de un vector
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.5
37
Matrices y arreglos
renglón. Si en lugar de borrar el primer elemento, se desea borrar los 5 primeros
elementos, entonces se procede de la siguiente forma:
fx >>
A(1:5)=[] ←
A=
0 0
0 1
Expansión de escalares
Los escalares pueden ser combinados con algunas operaciones con matrices. Por
ejemplo, en la sustracción un escalar y una matriz A puede ser combinados como
A-3.3 de la siguiente manera:
fx >>
A=[1 2; 5 6]; ←
fx >>
B=A-3.3 ←
B=
−2.3000 −1.3000
1.7000
2.7000
es necesario resaltar que la expresión A-3.3 no produce error, es una operación válida
de acuerdo a la sintaxis del lenguaje de MATLAB.
Además debe tomarse en cuenta que las operaciones entre escalares y matrices
respetan la propiedad conmutativa. Es decir, A-3.3=-3.3+A. De manera similar
para la suma, división y multiplicación entre escalares y matrices: A+3.3=3.3+A,
A*3.3=3.3*A, A/3.3=1/3.3*A.
Usando la expansión de escalares, MATLAB asigna un escalar especı́fico a todos
los ı́ndices para el rango indicado en la matriz. Por ejemplo, la siguiente expresión
genera una matriz de dimensión 3 × 3 donde todos sus elementos tienen asignado el
valor 9:
fx >>
B(1:3,1:3)=9 ←
Si la matriz ya existe, entonces esta expresión solo asigna el valor del escalar 9 a
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
38
Capı́tulo 1: Conceptos básicos
los elementos de la matrices (renglones y columnas especificados) de acuerdo a los
ı́ndices indicados. Si la matriz no existe, entonces genera una nueva matriz en este
caso de dimensión 3 × 3 donde todos sus elementos son iguales a 9.
Operaciones básicas con matrices
Hay varias operaciones elementales entre matrices que se realizan con frecuencia
en mecatrónica y robótica. Hay que considerar que se deben respetar las reglas
del álgebra de matrices. Por ejemplo, se debe satisfacer la compatibilidad entre el
número de renglones y columnas de la matriz A con la matriz B:
1) Declarar las matrices por ejemplo: A=[ 2 3 4; 6 7 8; 9 0 9] y B=[ 3 0 1;
5 2 4; 7 8 1]
2) Usar el operador + para realizar la suma: A+B
3) La sustracción se realiza con: A-B
4) La multiplicación: A*B (el número de columnas de la matriz A debe ser igual
al número de renglones de la matriz B).
5) En general la multiplicación no es conmutativa: B*A (el número de columnas de
la matriz B debe ser igual al número de renglones de la matriz A). Cuando las
matrices son diagonales, entonces se satisface la propiedad de conmutatividad
de la multiplicación.
6) El determinante de una matriz se obtiene como: det(A)
7) La inversa de una matriz existe si su determinante es diferente a cero: inv(A)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.5
39
Matrices y arreglos
Debido a que las expresiones de programación van creciendo, es conveniente que
el lector en lugar de seguir utilizando la ventana de comandos, utilice el editor de
texto para grabar todas las operaciones que realiza en nombre archivo.m (M-files)
el cual almacenará instrucciones, variables, operadores, comentarios, funciones,
etc. De esta forma el archivo queda grabado en el directorio del usuario y se
puede reproducir sin ningún problema. Por lo tanto, de aquı́ en adelante será de
utilidad emplear el editor de texto que se encuentra integrado en el ambiente de
programación de MATLAB.
♣ Ejemplo 1.1
Escribir un programa en MATLAB para realizar operaciones básicas entre
matrices (adición , sustracción, inversa, simétrica, antisimétrica, etc). Considere
las siguientes matrices A, B ∈ IR3×3 :
⎡
2 3 4
⎤
⎢
A = ⎣6
9
⎡
3
⎢
B = ⎣5
⎥
7 8⎦
0 9
⎤
0 1
⎥
2 4⎦
7 8 1
Solución
El cuadro de código fuente 1.1 contiene las operaciones más importantes que se
realizan en mecatrónica y robótica usando matrices. Edite el programa que se
muestra a continuación; se recomienda salvarlo como cap1 matrices1.m; y ejecútese
oprimiendo la tecla F5 o realizando click sobre el icono play que se encuentra
localizado en la parte superior del editor de texto.
Recuerde que para visualizar los resultados de las operaciones que le interesan al
final de la lı́nea correspondiente elimine el operador ;.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
40
Capı́tulo 1: Conceptos básicos
Código Fuente 1.1
Operaciones básicas con matrices
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo cap1 matrices1.m
Operaciones básicas con matrices
1
%se definen las matrices de prueba
2
A=[ 2 3 4;
6 7 8;
9 0 9];
B=[ 3 0 1;
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
5 2 4;
7 8 1];
A+B; % suma de matrices
A-B; %resta de matrices
%en general la multiplicación no es conmutativa
A*B;
B*A;
A’ % transpuesta de la matriz A
(A’)’ % transpuesta de la transpuesta = A
As=(A+A’)/2; % parte simétrica
Ask=(A-A’)/2; % parte antisimétrica
As+Ask % matriz original A
A’*A %obtiene una matriz simétrica
A∧ (-1); %inversa de la matriz
det(A) % determinante
inv(A); %inversa de la matriz A
A*inv(A);
inv(A)*A; % matriz identidad
eig(A) % valores propios de la matriz A
26
norm(A) % norma de la matriz A
p=poly(A) %retorna coeficientes del polinomio caracterı́stico de A
27
r=root(p); %retorna raı́ces del polinomio caracterı́stico de A
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.5
41
Matrices y arreglos
1.5.1
1.5.1. Arreglos
Las operaciones aritméticas con arreglos o registros son realizadas elemento por
elemento. Es decir, la adición y sustracción son las mismas para arreglos y matrices,
pero la multiplicación es diferente. MATLAB usa como parte de la notación de
multiplicación con arreglos un punto decimal.
La tabla 1.6 muestra la lista de operadores que se utilizan en operaciones con
arreglos.
Tabla 1.6 Operadores de arreglos
Suma
+
Sustracción
-
Multiplicación elemento por elemento
.*
División elemento por elemento
./
División izquierda elemento por elemento
.\
Elevar a una potencia elemento por elemento
.∧
Arreglo transpuesto
.’
Como ejemplo ilustrativo de estos operadores considere lo siguiente:
fx >>
A=[1 3; 4 5] ←
A=
fx >>
1
3
4
5
A.*A ←
ans=
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
42
Capı́tulo 1: Conceptos básicos
1
9
16 25
obsérvese que cada elementos se multiplica por sı́ mismo, es decir los elementos de
la matriz resultante son el cuadrado de cada elemento. Lo mismo sucede para los
demás operadores:
fx >>
A./A ←
ans=
1 1
1 1
fx >>
A.∧ A ←
ans=
1
27
256 3125
Las operaciones con arreglos son muy útiles para construir tablas. Por ejemplo:
fx >>
x=(0:5) ’ ←
x=
0
1
2
3
4
5
fx >>
[n, m]=size(x); ←
n=
6
fx >>
tabla=[x x.∧ 2 x.∧ n] ←
tabla=
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.6
43
Gráficas
0
0
0
1
1
1
2
4
64
3
9
729
4 16
4096
5 25 15625
1.6 Gráficas
L
a representación gráfica y visualización de resultados es una herramienta muy
importante en el análisis y diseño de esquemas de control y comportamiento
dinámico. Permite exhibir como el robot o el sistema mecatrónico responde en sus
etapas transitoria y estacionaria cuando se encuentra bajo la acción de control de
una estructura matemática determinada. MATLAB tiene varios tipos de gráficas
(plots): incluye desde la estándar con ejes lineales, logarı́tmicas y semi-logarı́tmicas,
barras, polares, en el espacio tridimensional (3D), contornos de superficies entre
otras. Las gráficas se pueden formatear para tener una apariencia especı́fica, es decir
con un tipo de lı́nea y colores. También es posible utilizar una sola ventana con
varias gráficas, ası́ como tı́tulos y letreros sobre los ejes.
Para inicializar ventanas especı́ficas donde se despliegue resultados gráficos se emplea
la función figure; la cual crea figuras y objetos gráficos, para ser utilizados por
funciones como plot, subplot, plot3, mesh, etc. La información completa y
detallada de las funciones gráfica se puede consultar en helpwin, help plot, help
figure, etc. Sin embargo, a continuación se describe algunas funciones que de manera
particular se emplean en robótica y mecatrónica.
plot
La función plot es utilizada para generar una gráfica en dos dimensiones:
plot(t,x)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
44
Capı́tulo 1: Conceptos básicos
Los argumentos t,y son vectores (arreglos de una dimensión), ambos vectores deben
tener el mismo número de elementos o dimensión. Cuando el comando plot se
ejecuta genera automáticamente una simple curva de los datos de la variable x
(eje vertical o eje de ordenadas) vs t (eje horizontal o eje de las abscisas). Con la
función plot también se puede graficar diagramas de fase, respuesta transitoria y
estacionaria de robots manipuladores. De esta forma en forma gráfica es más fácil
la interpretación de las variables de estado.
♣ Ejemplo 1.2
Escribir un programa en MATLAB para graficar la curva de la siguiente función:
y = 9x5 + 3 sen(x3 )
para el intervalo x ∈ [−10, 10].
Solución
El código fuente que se presenta en el cuadro 1.2 contiene la forma de obtener
la evolución en el tiempo de una función exponencial requerida para el intervalo
x ∈ [−10, 10]. En la lı́nea 1 se emplean las instrucciones clear all; close all;
clc; requeridas para liberar cualquier variable, figura, o archivo que ocupe espacio
de memoria.
En la lı́nea 3 se define el intervalo de la función con desplazamiento de una milésima.
La función a graficar y = 9x5 +3 sen(x3 ) se encuentra implementada con operaciones
de arreglos.
En esta parte del código se destaca la ventaja que ofrece emplear operaciones con
arreglos, debido que la variable x es definida como un vector de un renglón y
n columnas, entonces la forma más adecuada de realizar las operaciones con los
exponentes de la función y es a través de la manipulación de datos usando arreglos.
Finalmente, en la lı́nea 5 se gráfica la función y = 9x5 + 3 sen(x3 ) por medio de
plot(x,y) tal y como se muestra en la figura 1.5.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.6
45
Gráficas
Código Fuente 1.2
Gráfica de la función 9x5 + 3 sen(x3 )
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo cap1 grafica.m
Gráfica de la función 9x5 + 3 sen(x3 )
1
clear all; close all; clc;
2
4
%vector del eje de ordenadas
x=-10:0.001:10;%intervalo de graficado
y=9*x.∧ 5+3*sin(x.∧3); y es el vector de las abscisas
5
plot(x,y)
3
Figura 1.5 Gráfica de 9x5 + 3 sen(x3 ).
Mayor información de la función plot se puede consultar en:
fx >>
help plot ←
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
46
Capı́tulo 1: Conceptos básicos
fplot
El comando fplot grafica una función de la forma y=f(x) entre lı́mites especı́ficos.
La sintaxis del comando fplot es la siguiente:
fplot(’function’,limits,line)
function: es la función a graficar. Puede ser escrita como una cadena de
caracteres entre comillas. La función puede ser propia de MATLAB (builtin) o definida por el usuario (M-file).
La función no puede incluir variables previamente definidas.
limits: puede ser de dos formas: la primera forma incluye un vector que
especifica el incio y término del intervalo a graficar (el dominio de x): [xmin,
xmax]. La segunda forma cosiste de 4 parámetros [xmin,xmax,ymin,ymax],
es decir los 2 primeros parámetros indican el dominio de x, mientras que los 2
últimos parámetros representan los lı́mites del eje de las abscisas (eje vertical
y).
line: indica especificaciones del tipo de lı́nea son las mismas que el comando
plot.
♣ Ejemplo 1.3
Escribir un programa en MATLAB para graficar en lı́nea la función:
y = 9x5 + 3 sen(x3 ) x ∈ [−10, 10].
Solución
El programa 1.3 contiene el código para obtener la gráfica de la función solicitada,
reproduciendo la misma gráfica de la figura 1.5.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.6
47
Gráficas
Código Fuente 1.3
Gráfica de ’9*x∧ 5+3* sen(x∧ 3)’
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo cap1 exponencial.m
Gráfica de ’9*x∧5+3* sen(x∧ 3)’
1
clear all; close all; clc;
2
fplot(’9*x∧5+3* sen(x∧ 3)’,[-10,10])
subplot
La función subplot(m,n,p) divide una ventana en una matriz de m × n, p indica
la posición de la gráfica dentro de esa ventana.
plot3
La función plot3(x,y,z) grafica las coordenadas en el espacio tridimensional.
mesh
La función mesh genera superficies en el espacio tridimensional especificadas por las
coordenadas x, y, z. Un aspecto interesante de esta función es que la superficie de la
función la presenta con estilo de malla para resaltar el aspecto tridimensional. Hay
otras funciones para graficar superficies que se auxilian de mesh; como es el caso de
la función ezmesh.
♣ Ejemplo 1.4
Escribir un programa en MATLAB para graficar funciones en 3D
Solución
El programa que se presenta en el cuadro 1.4 muestra la forma de usar las funciones
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
48
Capı́tulo 1: Conceptos básicos
3D. Con el uso de la función figure (lı́nea 3) se abre una ventana para indicar las
gráficas generadas con subplot(2,2,1)...subplot(2,2,4). Observe la diferencia
de presentación entre las funciones surf(x,y,z) y plot3(x,y,z); la primera tiene
un aspecto de sólido, mientras que la segunda usa lı́neas suaves (ver figura 1.6).
Código Fuente 1.4
Funciones 3D.
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo cap1 graficas3D.m
Funciones 3D.
1
2
3
4
5
6
7
8
9
10
clc; clear all; close all;
t=0:pi/10:2*pi;
figure
[x,y,z]=cylinder(4*cos(t));
subplot(2,2,1); mesh(x,y,z)
subplot(2,2,2); ezmesh(’x.*exp(-x.∧ 2-y.∧2)’,40);
subplot(2,2,2); ezmesh(fh,40)
[x,y,z] = sphere;
subplot(2,2,3); plot3(x,y,z)
subplot(2,2,4); surf(x,y,z)
Figura 1.6 Gráficas en 3D.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.7
Funciones
49
1.7 Funciones
Una de las principales caracterı́sticas de MATLAB es que provee un número muy
grande de funciones matemáticas. La lista completa de funciones matemáticas se
puede consultar en la ventana de comandos escribiendo:
fx >>
help elfun ←
Una lista de funciones matemáticas avanzadas se puede ver en:
fx >>
help specfun ←
fx >>
help elmat ←
La gran mayorı́a de las funciones matemáticas acepta como argumento números
imaginarios, de esta forma cuando se calcula por ejemplo la raı́z cuadrada o logaritmo
de un número negativo, no produce un error, automáticamente produce un número
complejo o imaginario.
Algunas funciones tales como sqrt, sin, cos son funciones propias (built in) de
MATLAB ya que contienen un código muy eficiente, entonces no se encuentran
disponibles los detalles computacionales y código fuente. Otras funciones como
gamma, sinh son implementadas en archivos (M-files), por lo que el código fuente
está disponible, y además se puede modificar.
Las funciones pueden generar o retornar infinity cuando ocurre una división entre
cero o también por generar un cálculo matemático más allá del lı́mite permitido por
la variable realmax, lo cual se le conoce técnicamente como overflow. Como ejemplos
de este escenario considere los siguientes ejercicios:
fx >>
z=pi*exp(log(realmax)) ←
z =
Inf
fx >>
z=cos(0)/sin(0) ←
z =
Inf
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
50
fx >>
Capı́tulo 1: Conceptos básicos
z=cosh(12e10) ←
z =
Inf
Los nombres de las funciones no son reservados, es decir se puede utilizar para
asignarlo como nombre de una nueva variable, por ejemplo:
sin=1.2345
La función original sin puede ser restaurada con
clear sin
Funciones en lı́nea
Cuando se requiere simples cálculos matemáticos pueden ser usarse las funciones en
lı́nea (inline functions).
La funciones en lı́nea pueden ser generadas con el comando inline(’expresión
matemática en forma de cadena’). Por ejemplo:
fx >>
z=inline(’x/(1+x∧2’)) ←
z =
inline function:
z(x)=x/(1+x∧2)
Entonces la función z(x) se puede evaluar numéricamente
fx >>
z(2) ←
ans
0.4000
Otra opción para evaluar funciones en lı́nea es por medio del comando feval
fx >>
feval(’sqrt’, 100) ←
ans
10
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.7
51
Funciones
El comando feval también puede evaluar funciones definidas por el usuario.
Cuando se requiere de complicadas funciones matemáticas, programación extensiva,
subprogramas, etc., lo adecuado son funciones archivo (M-file functions).
1.7.1
1.7.1. Funciones archivo
Las funciones archivo (M-file function) aceptan datos como argumentos de entrada
y retornan resultado a través de la variable de salida. Las funciones archivo tienen
una estructura sintáctica muy bien definida. Emplean la palabra reservada function
para indicar que es una función. En seguida, se especifica el nombre de la variable de
salida (por ejemplo w), seguida del signo =, a continuación del nombre de la función
y entre paréntesis los argumentos de entrada separados por comas. Posteriormente
viene el grupo de instrucciones que contenga la función, la variable de salida tiene
el conjunto de variables a retornar (w=[var1; var2]). Finalmente se inserta el
delimitador end.
La sintaxis de una función se ilustra en el código 1.1.
Estructura de código 1.1
Sintaxis de una función
function w=nombre funcion(x1, x2, x3,...,xn)
var1=grupo de instrucciones1;
var2=grupo de instrucciones2;
w=[var1; var2];
end
Usando el editor de textos integrado en MATLAB se pueden desarrollar funciones
como la que se muestra en el cuadro 1.5.
Una función archivo M-file function tiene que ser salvada antes que pueda ser
usada. Es recomendable salvar al archivo con el mismo nombre de la función y
verificar que tenga extensión m.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
52
Capı́tulo 1: Conceptos básicos
Código Fuente 1.5
norma euclidiana de un vector
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo normaev.m
norma euclidiana de un vector
1
function y =normaev(x)
2
%Norma euclidiana de un vector x ∈ IRn
3
%hay varias formas para calcular la norma euclidiana
% x = x21 + x22 + · · · + x2n
√
% x = xT x
n
2
% x = x21 + x22 + · · · + x2n =
i=1 xi
4
5
6
%en MATLAB se calcula como:
y=norma(x,2);
7
8
9
end
Nótese que se utiliza la palabra reservada function para definir una función,
después se indica la variable donde regresa el valor (en este caso es la variable
y), posteriormente continúa el signo igual (=) y el nombre de la función definida
por el usuario normaev entre paréntesis el argumento de entrada x. Al finalizar el
código se inserta la palabra clave end para delimitar el grupo de instrucciones que
estará entre la palabras reservadas function y end.
MATLAB automáticamente ajustará la naturaleza del argumento de entrada,
ası́ como su salida. En otras palabras, el argumento x puede ser un escalar, vector
o matriz, de acuerdo al tipo de operaciones que se realizan dentro de la función la
naturaleza de la salida y se ajustará de manera adecuada. En el caso del código fuente
del cuadro 1.5 el argumento puede ser un vector o matriz y la salida correspondiente
es escalar. Algunas funciones pueden tener más de un argumento de entrada y
también retornar varias variables de salida, como el caso que a continuación se
presenta en el cuadro 1.6.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.7
53
Funciones
Código Fuente 1.6
cinemática directa robot de 2 gdl
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo cinematica directa robot2gdl.m
cinemática directa robot de 2 gdl
1
function [y, x]=cinematica directa robot2gdl(l1,l2,q1,q2)
2
3
% convierte variables articulares a coordenadas cartesianas
x=l1*cos(q1)+l2*cos(q1+q2);
4
y=l1*sin(q1)+l2*sin(q1+q2);
5
end
Funciones anidadas
Una función anidada (nested function) es aquella función que se encuentra como
parte del código de cualquier función archivo (M-file function). En el siguiente
ejemplo la función B está anidada en la función A:
Estructura de código 1.2
Función anidada
function y=A(x1,x2)
y=B(x1)+x2;
function w=B(x3)
w=x3*x3*x3;
end
end
Variables locales y globales
Todas las variables que se definan en una función son locales por naturaleza, esto
significa que sólo en esa función existen y no pueden ser reconocidas por alguna otra
función. Aun cuando dos funciones tengan variables con el mismo nombre, dichas
variables sólo son reconocidas por sus respectivas funciones.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
54
Capı́tulo 1: Conceptos básicos
Sin embargo, es posible lograr que una o más variables comunes sean reconocidas
por varias funciones (variables globales) listando el nombre de las variables y
separadas por espacios en blanco en el comando global (global command) sin comas
intermedias. Usar la siguiente declaración:
global X Y Z
Las variables han sido declaradas globales en cada función que el usuario quiere
que sean reconocidas. Las variables serán comunes sólo en esas funciones.
El comando global debe aparecer antes que la variable sea usada. Es
recomendable usar la declaración para ese comando al inicio del archivo.
Las variables globales están separadas por espacios en blanco, si usar comas y
se recomienda que al final de la lı́nea no se inserte el operador ;.
El valor de las variables globales puede ser modificado, asignado o reasignado
en cualquiera de las funciones comunes.
Se debe tener mucho cuidado en el empleo de variables globales. Es
recomendable usar letras mayúsculas o algún nombre que el usuario puede
identificar fácilmente para las variables globales con la finalidad de no
confundirlas con variables regulares o locales.
Comparación entre archivos scripts y archivos funciones
Con la finalidad de entender exactamente la diferencia entre archivos script
y funciones archivo (M-file function) se enlistan a continuación las principales
caracterı́sticas entre ellos:
Ambos archivos: script y funciones son salvados con la misma extensión .m por
lo cual se conocen como M-files.
La primera lı́nea de código en el archivo función es la lı́nea de definición de
una función. Ejemplo: function y=reloj(t)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.7
55
Funciones
Las variables dentro de una función son locales.
Las variables en un archivo script son reconocidas en la ventana de comandos.
Los archivos script contienen una secuencia de comandos de MATLAB.
Los archivos funciones pueden aceptar datos a través de la entrada de sus
argumentos y pueden retornar datos por medio de sus variables de salida.
Cuando una función archivo es salvada, entonces el nombre del archivo es el
mismo que el nombre de la función.
Los nombres de los archivos script pueden tener cualquier nombre ya que no
tienen funciones.
Usando una función archivo
Una función definida por el usuario en un archivo función (M-file function) se usa
en la misma forma que una función propia (built-in function) de MATLAB. Esto
significa que la función puede ser llamada desde la ventana de comandos (Command
Window), desde un archivo script o desde cualquier función. Si la función del usuario
se encuentra en algún directorio diferente al de trabajo de MATLAB, entonces debe
ser habilitado dicho directorio con la opción add to path (ver página 9).
♣ ♣ Ejemplo 1.5
Escribir un programa principal para graficar la curva de un cı́rculo de radio r=0.25
m, con centro en x0 = 0.3m, y0 = 0.3m
x = x0 + r sen(t)
y = y0 + r cos(t)
z=t
donde t la variable tiempo.
Asimismo implementar la ecuación del cı́rculo en una función.m; utilizar variables
globales para almacenar la coordenada z.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
56
Capı́tulo 1: Conceptos básicos
Solución
La función cı́rculo se encuentra descrita en el cuadro 1.7, los parámetros de entrada
de esta función son las coordenadas del centro del cı́rculo x0 , y0 , el radio r y el vector
tiempo. Las variables de salida son las coordenadas cartesianas x, y del cı́rculo.
En la lı́nea 2 se encuentra definida la variable global altura, para almacenar las
coordenadas sobre el eje z. Esta misma variable global altura se encuentra en el
programa principal 1.8 (ver la lı́nea 3). La función cı́rculo y el programa principal
pueden reconocer a la variable altura, lo que representa una ventaja debido a que
cualquier de los dos programas puede manipular datos de esa variable.
Código Fuente 1.7
Función cı́rculo
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática función circulo.m
Función cı́rculo
1
2
function [x, y]=circulo(x0,y0,r,t)
global altura % variable global que se emplea en el programa principal 1.8
3
4
%ecuación del cı́rculo
x=x0+r*sin(t);
5
y=y0+r*cos(t);
6
%coordenada sobre el eje z
altura=t;
7
8
end
Observe que el programa principal 1.8 no es una función, puesto que no emplea la
palabra reservada function, entonces se puede salvar el código de este programa
con cualquier nombre, añadiendo la extensión m; es decir: (nombre archivo.m).
Para ejecutar el programa principal se puede hacer con la tecla F5 o realizando click
sobre el icono play localizado en el menú superior del editor de texto. Las gráficas
de x vs t, y vs t y (x ,y , z) se obtienen con las funciones subplot, plot y plot3
(lı́neas 9 a la 13) cuyo resultado se encuentra en la figura 1.7.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.7
57
Funciones
Código Fuente 1.8
Programa principal del cı́rculo
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%archivo circulo simu.m
Programa principal del cı́rculo
1
2
3
clc; clear all; close all; %limpia área de memoria
format short
6
global altura % declaración de la variable global
ti=0; %tiempo inicial
h=0.001; %incremento de una milésima de segundo
tf = 10; %tiempo final
7
t=ti:h:tf; %vector tiempo
8
%se invoca a la función cı́rculo
[x, y]=circulo(0.3,0.3,0.25,t);
subplot(2,2,1); plot(t,x) % gráfica de x vs t
4
5
9
10
11
12
subplot(2,2,2); plot(t,y) %gráfica de y vs t
subplot(2,2,3); plot(x,y) % cı́rculo
13
subplot(2,2,4); plot3(x,y,altura)%figura tridimensional
Figura 1.7 Cı́rculo.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
58
Capı́tulo 1: Conceptos básicos
1.8 Programación
U
n programa es una secuencia de instrucciones, expresiones, funciones,
comandos y declaraciones para realizar aplicaciones en ingenierı́a mecatrónica
y robótica. En MATLAB las instrucciones son ejecutadas una tras otra, en
forma secuencial, es decir en el mismo orden como van apareciendo. La secuencia
del programa depende de las instrucciones que controlan el flujo del programa,
dependiendo de ciertas condiciones se ejecuta un determinado conjunto de
instrucciones o bloque del programa.
Dentro de las condiciones que determinan el flujo del programa se encuentran
operadores lógicos como los que se presentan en la tabla 1.7. A través de ellos se
evalúa expresiones para realizar un cierto bloque de código o funciones especı́ficas
de la aplicación implementada.
Tabla 1.7 Operadores lógicos
Igual a
==
No es igual a
˜=
Menor que
<
Mayor que
>
Menor que o igual que
<=
Mayor que o igual que
>=
El lenguaje de programación MATLAB es muy rico en instrucciones y funciones
toolbox, ya que cuenta con un amplio compendio de librerı́as o funciones para diversas
áreas de ingenierı́a y ciencias exactas.
A continuación se describen las instrucciones condicionales y lazos de programas
como if, for, while, switch que permiten programar una gran cantidad de
aplicaciones en robótica y mecatrónica.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.8
59
Programación
Instrucciones condicionales
Una instrucción condicional permite a MATLAB realizar decisiones para ejecutar
un grupo de funciones, comandos, etc. Si la condición en la instrucción condicional
es verdadera, entonces realiza un grupo de expresiones del programa. Si la condición
es falsa, entonces no ejecuta o salta ese grupo de expresiones.
1.8.1
1.8.1. if
La instrucción if evalúa si una expresión lógica es verdadera, entonces realiza un
conjunto de instrucciones o declaraciones del programa, de otra forma realiza la
ejecución de otro bloque del programa. La estructura de esta instrucción condicional
consta de la palabra clave if, un conjunto de instrucciones o bloque de programa
delimitadas por la palabra clave end.
Si la condición lógica que se evalúa por la instrucción if es falsa, el programa salta
ese bloque de instrucciones y continúa con las instrucciones que se encuentran justo
después de end.
La estructura de la instrucción condicional if se muestra en el código 1.3.
Estructura de código 1.3
Sintaxis de la instrucción if — end
if condicion verdadera if
instrucciones 1;
................
instrucciones n;
end
otro grupo de instrucciones;
La figura 1.8 muestra el diagrama de flujo de la instrucción if.
Es importante resaltar que en el entorno de programación de MATLAB las palabras
claves if end aparecen en color azul. Además, las expresiones que aparecen como
el bloque de instrucciones de la instrucción if aparecen como texto con sangrı́a
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
60
Capı́tulo 1: Conceptos básicos
Figura 1.8 Diagrama de flujo de la instrucción if.
(indented), lo que resulta una fácil lectura del código de programación.
1.8.2
1.8.2. if, else, elseif
La instrucción if puede tener más opciones dentro de su estructura if...end. Es
decir, se puede utilizar if con la palabra clave else para evaluar otro grupo de
instrucciones de la manera que se muestra en la estructura de código 1.4:
Estructura de código 1.4
Sintaxis de if...else...end
if condición verdadera
grupo de instrucciones;
else
grupo de instrucciones;
end
Además de la opicón else en la instrucción if...end, también se puede combinar
con la palabra clave elseif; en este caso incluye una declaración condicional
adicional para la ejecución de más grupos de instrucciones. Si en la instrucción if la
condición es verdadera, entonces el programa ejecuta el grupo (1) de instrucciones
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.8
Programación
61
y pregunta por una nueva expresión condicional elseif, si es verdadera entonces
ejecuta el grupo (2) de instrucciones y si es falsa se ejecuta el grupo (3) de
instrucciones.
La sintaxis de if...elseif...else...end se presenta en el código 1.5:
Estructura de código 1.5
Sintaxis de if...elseif...else...end
if condición verdadera if
grupo de instrucciones 1; %grupo(1)
elseif condición verdadera elseif
grupos de instrucciones 2; %grupo(2)
else
grupo de instrucciones 3; %grupo(3)
end
Debe tomarse en cuenta que tanto else, como elseif quedan dentro de la
instrucción if determinado por el delimitador end.
La figura 1.9 muestra el diagrama de flujo de la instrucción if...elseif...else...end.
1.8.3
1.8.3. for
La instrucción for genera lazos repetitivos (flujos o ciclos de instrucciones) para
repetirse un número determinado de veces. La instrucción for requiere de una
variable contador para realizar n veces la iteración, la condición de salida se alcanza
cuando la variable contador ha llegado a la cuenta especificada.
La sintaxis de la instrucción for inicia con esa palabra clave, a continuación la
inicialización de una variable contador que determinará el número de veces que
realizará el ciclo o flujo del grupo de instrucciones. Finalmente se incluye la palabra
clave end para delimitar la instrucción for.
El código 1.6 presenta la estructura de la instrucción for...end:
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
62
Capı́tulo 1: Conceptos básicos
Figura 1.9 Diagrama de flujo de la instrucción if...elsefi...end.
Estructura de código 1.6
Sintaxis de la instrucción for
for contador=1:n
instrucción 1;
..............;
instrucción n;
end
Como un ejemplo sencillo para mostrar la utilidad de la instrucción for...end se
presenta en el código 1.7 un programa que despliega 10 veces el contador i y la
variable j que contiene el valor de una función trigonométrica.
Estructura de código 1.7
Ejemplo de iteraciones con la instrucción for
j=0;
for i=1:10
disp(i,j)
j=sin(2*pi*i);
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.8
63
Programación
En este caso for ejecuta 10 veces el incremento sobre la variable i. Inicia i con
el valor de 1 hasta llegar al valor de i=10, entonces la variable i realiza el papel
de contador, con incrementos unitarios. La función disp(i,j) despliega los valores
numéricos de las variables i,j.
El siguiente ejemplo muestra el empleo de for usando incrementos en milésimas
para la variable t por medio del operador colon :. Esta aplicación de la instrucción
for es muy útil para graficar funciones como es el caso de la función seno dentro de
un intervalo de tiempo.
♣ Ejemplo 1.6
Escribir un programa en MATLAB para graficar una señal senoidal.
Solución
El programa 1.9 presenta el código fuente en MATLAB para graficar una señal
senoidal. En la lı́nea 3 se inicializa el vector tiempo de 0 a 10 segundos con
incrementos de una milésima de segundo. El ciclo iterativo de la instrucción for
abarca las lı́neas 3 a la 7. El lector puede realizar el paso del tiempo de simulación
más fino, por ejemplo en diezmilésimas. En la figura 1.10 se muestra la gráfica que
genera el programa 1.9.
Figura 1.10 Función senoidal.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
64
Capı́tulo 1: Conceptos básicos
Código Fuente 1.9
Gráfica de una onda senoidal
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo senoide.m
Gráfica de una onda senoidal
1
2
3
4
disp(’Programa para graficar una onda senoidal’)
i=1; %inicializa pivote para registro
for t=0:0.001:10 % incrementos de t en milésimas
y(i)=sin(t); % arreglo de datos para la onda senoidal
5
tiempo(i)=t; % arreglo de datos para el tiempo
i=i+1; % incrementa pivote
6
7
end
8
disp(’valor de y’)
y
9
10
plot(tiempo,y)
El empleo de instrucciones for con la estructura if...elseif...else...end
diversifica las aplicaciones de programación. Como una aplicación de este conjunto
de instrucciones se presenta la implementación de la función signo la cual es
ampliamente utilizada en dinámica y esquemas de control de sistemas mecatrónicos
y robots manipuladores; especı́ficamente se emplea en el modelado del fenómeno de
fricción de Coulomb. También se usa en algunos algoritmos de control.
Una de las principales desventajas de la función signo es su discontinuidad que
presenta y debido a esta caracterı́stica muy particularidad produce retardo en el
proceso de integración numérica de sistemas dinámicos, por lo que no se recomienda
el emplear de esta función cuando se realice simulación de la dinámica de robots
manipuladores.
Una posible forma de implementar la función signo es por medio del uso de for y
if elseif else end, el cuadro 1.10 presenta la función signo ( ).
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.8
65
Programación
Código Fuente 1.10
Función signo
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo signo.m
Función signo
1
2
function y =signo(x)
[n,m]=size(x);
3
for i=1:n
if x(i) >0
y(i) = 1; %si es positivo retorna 1
elseif x(i) == 0
4
5
6
7
y(i) = 0; %si es cero retorna 0
else
y(i) = -1; % si es negativo retorna -1
8
9
10
end
11
12
end
end
♣ Ejemplo 1.7
Escribir un programa en MATLAB para convertir una onda senoidal en onda
cuadrada (emplear la función signo() para realizar dicha conversión).
Solución
Una forma de convertir una onda senoidal del tipo sen(t) a señal cuadrada (tren
de pulsos cuadrados) es por medio del uso de la función signo(x). Considere el
programa 1.11; el tiempo de simulación es de 0 a 10 segundos, en la lı́nea 5 se
obtiene la onda senoidal y la conversión a onda cuadrada se realiza en la lı́nea 6. La
figura 1.11 contiene la conversión de la onda senoidal a onda cuadrada.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
66
Capı́tulo 1: Conceptos básicos
Código Fuente 1.11
Aplicación de la función signo
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo signo simu.m
Aplicación de la función signo
1
2
3
clc; clear all;
close all;
6
format short
ti=0;h=0.001; tf = 10; %parámetros del tiempo de simulación
t=(ti:h:tf)’; %vector columna de tiempo
y=sin(t); % onda senoidal y1=signo(y); % función signo
7
plot(t,y1)
4
5
Figura 1.11 Función signo().
Debido a que la función signo está implementada bajo la estructura function es
necesario realizar un programa principal donde se pueda invocar con el adecuado
pase de parámetros y su correcta sintaxis. Esta es la tarea que realiza el programa
principal 1.11
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.8
Programación
67
También es posible programar for anidados, es decir un for insertado dentro de otro
for. Este tipo de aplicaciones resulta de utilidad en esquemas de control, cálculos
iterativos o recursivos, simulación de sistemas dinámicos, procesamiento de señales,
etc.
El código 1.8 presenta la sintaxis gramatical para el caso de tener instrucciones for
anidadas. Obsérvese que el for externo realizará un número de veces determinado
por la variable contador 1 al grupo de instrucciones 1 y al segundo for. Por otro
lado, el grupo de instrucciones 2 será realizado un número de veces indicado por el
contador 2. El número total de veces que se ejecutará el grupo (2) de instrucciones
es contador 1 * contador 2.
Para un correcto funcionamiento de las instrucciones for anidadas es necesario
ubicar adecuadamente los delimitadores end. Por ejemplo para la instrucción for
externa abarca el grupo (1) de instrucciones, ası́ como el for interno con su segundo
grupo de instrucciones.
Por lo tanto, están delimitados por el for externo y la palabra clave end. Mientras
que para el segundo for el segundo grupo de instrucciones está delimitado por la
palabra clave end correspondiente a la instrucción for del contador 2.
Estructura de código 1.8
Sintaxis para el caso de for anidados
for contador 1
grupo de instrucciones 1;
for contador 2
......................;
grupo de instrucciones 2;
......................;
end
end
Un ejemplo tı́pico del empleo de for anidados es la aplicación de suma de matrices
realizada en forma recursiva. Este algoritmo emplea dos instrucciones for, el primero
sirve para recorrer los renglones usando la variable i, mientras que el segundo for
accede a las columnas de las matrices a través del pivote j.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
68
Capı́tulo 1: Conceptos básicos
♣ Ejemplo 1.8
Escribir un programa en MATLAB para sumar dos matrices A, B ∈ IRn×p en
forma recursiva.
Solución
El código fuente para sumar matrices en forma recursiva se presenta en el programa
1.12:
Código Fuente 1.12
Algoritmo para sumar matrices
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
%Archivo sumamatrices.m
Algoritmo para sumar matrices
1
disp(’Realiza la suma de dos matrices de orden n’)
2
%Inicialización de las matrices A, B dimensión 3 x 3
A=[ 1 1 3; 2 4 5; 8 9 0];
B=[3 2 5; 6 7 8; 9 0 0];
3
4
5
6
7
8
9
%Algoritmo de suma de matrices.
[ n p ] =size(A); % Obtiene orden de la matriz
%Algoritmo para sumar matrices
for i=1:n
for j=1:p
10
%Suma algorı́tmica
C(i,j)=A(i,j)+B(i,j);
11
12
13
14
15
end
end
disp(’Resultado:’)
C
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.8
69
Programación
♣ Ejemplo 1.9
Escribir un programa en MATLAB para encontrar el mı́nimo y máximo de la
siguiente función:
y =
sen(t) − cos(πt) − 2 tanh(t) + 0.1 log(t3 + 1)
determinar los tiempos de ocurrencia.
Solución
Para buscar el máximo y mı́nimo de la función indicada (ver figura 1.12) y tiempos
de ocurrencia puede usarse el código del programa 1.13.
Figura 1.12 Búsqueda de mı́nimo y máximo.
La salida del programa tiene el siguiente resultado:
Max Tmax Min Tmin
0.3887 0.9800 −3.3539 4.0600
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
70
Capı́tulo 1: Conceptos básicos
Código Fuente 1.13
Mı́nimos y máximos
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 1 Introducción
%Editorial Alfaomega Fernando Reyes Cortés
archivo cap1 minimax.m
Mı́nimos y máximos
1
2
clc; clear all; close all;
disp(’Encuentra mı́nimo y máximo de una función’)
3
%variables para registrar máximo y mı́nimo
4
max=0; min=0; t min=0; t max=0;
5
7
%generación del vector de tiempo
t=[0:0.01:10]’; %tiempo de 0 a 10 segundos con incremento de 0.01 seg.
[n m]=size(t); %dimensión del arreglo
8
y=zeros(n,m); %variables de registro
9
11
%función de prueba para generar la gráfica del proceso
for i=1:n
y(i)=sin(t(i))-cos(3.1416*t(i))-2*tanh(y(i))+0.1*log(t(i)∧3+1);
12
end
13
%gráfica de la función del proceso
plot(t,y)
for i=1:n
6
10
14
15
16
17
18
19
if (y(i)>= max)
max=y(i);
t max=t(i);
elseif (y(i)<= min)
20
min=y(i);
t min=t(i);
21
22
23
24
end
25
end
disp( ’Max Tmax Min Tmin’)
26
Resultado=[max t max min t min ];
27
disp(Resultado)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.8
71
Programación
1.8.4
1.8.4. while
La instrucción while genera un lazo o ciclo de instrucciones que se repiten un número
finito o infinito de veces dependiendo de la condición lógica especificada. A diferencia
de la instrucción for, while puede ejecutar un grupo de instrucciones de manera
indefinida. La instrucción while también tiene su delimitador end. La forma general
del lazo de programa while es:
Estructura de código 1.9
Sintaxis para el caso de for anidados
while condición boleana verdadera
%grupo de instrucciones o sentencias
instrucción 1;
.............;
instrucción n;
end
grupo de instrucciones;
Un ejemplo de cómo utilizar la instrucción while se presenta a continuación:
Estructura de código 1.10
Uso de la instrucción while
a=10;
b=15;
i=0;
while a>i
i=i+1;
b=b-i;
if b>a
disp(’Robot activo’)
else disp(’Proceso desactivo’)
end
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
72
Capı́tulo 1: Conceptos básicos
1.8.5
1.8.5. switch, case
La instrucción switch ejecuta un grupo de sentencias con base al valor de la variable
o expresión que emplea al lado derecho de su sintaxis. Para dividir los grupos de
sentencias se emplean las palabras claves case y othewise. La instrucción switch
finaliza con end.
En el siguiente código se ilustra la forma en que funciona la instrucción switch:
Estructura de código 1.11
Sintaxis de la instrucción switch
for i=1:3
switch i
case 1
disp(’caso 1’)
grupo de instrucciones;
case 2
disp(’caso 2’)
grupo de instrucciones;
case 3
disp(’caso 3’)
grupo de instrucciones;
otherwise
disp(’fuera de rango’)
grupo de instrucciones;
end
end
continúa con otro grupo de instrucciones;
MATLAB distingue los diferentes grupos de instrucciones asociados a un respectivo
case. Por ejemplo, si entra a ejecutar el grupo de instrucciones del caso 1, se sale
de la instrucción switch cuando encuentra el caso 2 y continúa con otro grupo de
instrucciones ya fuera de switch. Para el caso de otherwise el grupo de instrucciones
queda delimitado entre otherwise y el delimitador end perteneciente a switch.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.8
Programación
73
1.8.6
1.8.6. break
La sentencia break permite abandonar o salirse del lazo generado por las
instrucciones for o while. El uso de break se puede ilustrar por medio del siguiente
ejemplo. Se genera un lazo usando while, como la condición de salida es una
constante positiva, el lazo se generará de manera infinita. Sin embargo, la condición
de salida queda determinada por if t==0.0 y break. En este ejemplo se realiza la
(t)
operación sen
, la variable t se inicializa en -1 y se decrementa en 0.001 en cada
t
iteración. Cuando t=0 se evita realizar una división entre cero usando break.
Estructura de código 1.12
Forma de usarse la instrucción break
t=-10;
while 1
t=t+1;
% código correspondiente para detectar cruce por cero
if t==0
disp(’Advertencia división entre cero’)
break;
end
x= sin(t)/t;
end
disp(x)
También es posible usar break en lazos anidados.
1.8.7
1.8.7. return
La expresión return termina la secuencia actual de comandos y retorna el control
a la función que invocó. Una llamada a función normalmente transfiere el control a
la función que la invocó cuando alcanza el fin de la función. Es posible insertar una
sentencia return para forzar la terminación de la función y transferir el control a la
función que realizo la llamada.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
74
Capı́tulo 1: Conceptos básicos
Estructura de código 1.13
Forma de usarse la instrucción return
function y =cap1 raiz(x)
if x<0
disp(’error: número imaginario’);
y=i;
return;
else y=sqrt(x);
end
end
1.8.8
1.8.8. continue
La sentencia continue temporalmente interrumpe la ejecución del lazo del programa
(for o while). A diferencia de break y return no causa una inmediata salida del
lazo de control, permanece ahı́ suspendiendo la ejecución del programa hasta que la
condición de salida del lazo del programa sea falsa.
Por ejemplo, en el siguiente código 1.14 la variable i se inicializa con cero y entra al
lazo while permaneciendo ahı́ mientras la condición i<10 sea verdadera. Dentro de
este lazo se pregunta si la variable i ya tiene el valor de 8 ( por medio de if i==8),
si esta condición es falsa, entonces continúa incrementando la variable i con i=i+1.
Cuando la variable i es igual a 8, entonces se despliega en la ventana de comandos
la leyenda Robot activo; se asigna el valor i=20; para que la condición de salida
de while sea falsa, el control del programa sale del lazo de while por medio de la
sentencia continue para ejecutar b=100 fuera de dicho lazo.
Observe que efectivamente la sentencia continue hace que el programa abandone
el lazo de while, ya que ya no pasará por la instrucción if (i>10) i=0; end, la
cual fue insertada intencionalmente para inicializar a la variable i en cero y provocar
que la condición sea verdadera dentro del lazo while. Es necesario recalcar que la
sentencia continue suspenderá el programa hasta que la condición de salida del lazo
de control sea falsa, a diferencia con la forma de trabajar en break o return.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.8
Programación
75
Estructura de código 1.14
Forma de usarse la instrucción continue en el lazo while
i=0;
while i<10
if i==8
disp(’Robot activo’)
i=20; %condición de salida del lazo while
continue; %continúa en b=100
end
if i>9
i=0; %asegura condición verdadera para permanecer
dentro del lazo while
end
i=i+1;
end
b=100
otro grupo de instrucciones;
El siguiente ejemplo 1.15 muestra el uso de la sentencia continue dentro del lazo
generado por for:
Estructura de código 1.15
Forma de usarse la instrucción continue en el lazo for
for t=-10:0.1:10
y=sin(t);
if y==0.0
disp(’detecta cruce por cero’)
t=100; %condición de salida de lazo for
% evita división entre cero
continue; %salta en b=300
end
x=(sin(t)∧ 2+cos(t)∧2)/sin(t);
end
b=300
otro grupo de instrucciones;
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
76
Capı́tulo 1: Conceptos básicos
1.9 Formato para datos experimentales
E
n las áreas de robótica y mecatrónica es común trabajar archivos que tengan
datos experimentales o de simulación con información de variables como error
de posición, velocidad, aceleración y par aplicado. No hay un formato especı́fico
para generar los archivos. No obstante, es recomendable que tengan forma tabular,
tipo matriz teniendo la primera columna destinada al tiempo, la segunda columna y
posteriores para la información de las variables. Puede haber tantas columnas como
variables se requiera registrar. Este formato para archivos de datos experimentales
permite portabilidad para todos de paquetes de cómputo de cualquier plataforma.
Los datos experimentales de robots manipuladores son importantes para elaborar
reportes técnicos, artı́culos cientı́ficos, tesis, memorias para congresos, etc.
¿Cómo generar un formato de archivo con datos experimentales?
MATLAB tiene las funciones fopen, fprintf, fclose, load y save para realizar
dicho formato. El procedimiento para generar archivos de datos experimentales
consiste en generar un archivo de tipo ASCII o texto, con la función fopen o con la
función save por medio del siguiente procedimiento:
Indicar la trayectoria donde se generará el archivo de texto, por ejemplo con
nombre robot.dat
fid = fopen(’c:\robot\experimentos\robot.dat’, ’wt’);
donde el atributo ’wt’ significa que se crea un nuevo archivo de texto para
escritura y lectura. La variable fid es un identificador o apuntador asociado
al archivo robot.dat
Agrupar en una matriz todas la variables que se desean grabar, por ejemplo:
datos=[t, q, qp, qpp]; donde t es el tiempo, posición q, velocidad qp
y aceleración qpp. Posteriormente usar la función fprintf para grabar las
variables:
datos=[t, q, qp, qpp];
fprintf(fid,’\%3.3f \%3.3f
Alfaomega
\%3.3f \%3.3f \n’,datos);
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.9
Formato para datos experimentales
77
El formato ’ %3.3f %3.3f %3.3f %3.3f \n’ significa que se grabarán cuatro
columnas de datos en formato de punto flotante, manteniendo una precisión
numérica de tres dı́gitos con tres fracciones. Observe que para separar las
columnas de datos hay al menos un espacio en blanco. El comando \n se
usa para generar renglones, por cada dato t(i), q(i), qp(i), qpp(i), para
i = 1, 2, · · ·, n.
Cerrar el archivo robot.dat de la siguiente forma:
fclose(fid);
Otra opción para generar el archivo de datos experimentales es usando la
función save; por ejemplo:
save -ascii ’c:\robot\experimentos\robot.dat’ datos
Es recomendable que después de salvar el archivo, se libere la memoria ocupada
por la variable datos, por medio de clear datos; de esta forma no se tendrán
problemas de espacio.
Estructura de código 1.16
Generar formato de archivo con datos experimentales
clc; clear all; close all;
t=(0:0.001:10)’; %vector columna de la variable tiempo
q=sin(t); % posición
qp=cos(t); % velocidad
qpp=-sin(t); %aceleración
datos=[t, q, qp, qpp];
fid = fopen(’c:\robot\experimentos\robot.dat’, ’wt’);
fprintf(fid, ’ %3.3f %3.3f %3.3f %3.3f \n’,datos);
fclose(fid);
.
.
.
clear datos;
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
78
Capı́tulo 1: Conceptos básicos
Estructura de código 1.17
Opción para generar formato del archivo experimental
clc; clear all; close all;
t=(0:0.001:10)’; %vector columna de la variable tiempo
q=sin(t); % posición
qp=cos(t); % velocidad
qpp=-sin(t); %aceleración
datos=[t, q, qp, qpp];
%una forma alterna para grabar los datos
save -ascii ’c:\robot\experimentos\robot.dat’ datos
.
.
.
clear datos;
El programa que se muestra en la estructura de código 1.16 genera el formato
del archivo con datos experimentales. Mientras que en la estructura de código
1.17 se presenta otra opción de generar el mismo formato. Para el caso especı́fico
del archivo robot.dat el formato se indica en la tabla 1.8. Note que la primera
columna corresponde a la evolución del tiempo, la posición, velocidad y aceleración
corresponden a la segunda, tercera y cuarta columna, respectivamente.
¿Cómo leer el archivo de datos experimentales?
Una vez generado un archivo con datos experimentales, se emplea la función load
para abrir y manipular su información.
A continuación se describe el seguimiento procedimiento:
Usar la función load para cargar en memoria el archivo con datos
experimentales:
datos_experimentales=load(’c:\robot\experimentos\robot.dat});
t=datos_experimentales(:,1);
la primera columna tiene el tiempo y las demás columnas contienen
información de las variables de interés al usuario.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
1.9
79
Formato para datos experimentales
Tabla 1.8 Formato de datos experimentales para robótica y mecatrónica
t
q
q̇
q̈
0
0
1.0000
0
0.0010 0.0010 1.0000 −0.0010
0.0020 0.0020 1.0000 −0.0020
0.0030 0.0030 1.0000 −0.0030
0.0040 0.0040 1.0000 −0.0040
..
..
..
..
.
.
.
.
0.0050 0.0050 1.0000 −0.0050
0.0060 0.0060 1.0000 −0.0060
0.0070 0.0070 1.0000 −0.0070
0.0080 0.0080 1.0000 −0.0080
0.0090 0.0090 1.0000 −0.0090
0.0100 0.0100 1.0000 −0.0100
0.0110 0.0110 0.9999 −0.0110
..
..
..
..
.
.
.
.
El programa que se indica en la estructura de código 1.18 permite abrir y manipular
la información del archivo de prueba robot.dat.
Estructura de código 1.18
Abrir formato de archivo experimental
clc;
clear all;
close all;
datos experimentales=load(’c:\robot\experimentos\robot.dat’);
t=datos experimentales(:,1); %tiempo
qe=datos experimentales(:,2); %posición
qpe=datos experimentales(:,3); % velocidad
qppe=datos experimentales(:,4); %aceleración
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
80
Capı́tulo 1: Conceptos básicos
1.10 Resumen
H
oy en dı́a, MATLAB es un ambiente de programación amigable e interactivo
que se ha ubicado como un referente a nivel internacional en todas las
universidades, institutos de investigación e industria.
El lenguaje MATLAB es una potente herramienta de diseño en simuladores de
sistemas mecatrónicos y robots manipuladores. Contiene un amplio conjunto de
instrucciones y librerı́as toolbox para estudiar en detalle todos los aspectos de
modelado dinámico, sistemas de control, identificación paramétrica, procesamiento
de imágenes, etcétera.
Particularmente, en los cursos de control automático se emplea para caracterizar,
evaluar y desarrollar esquemas de control. MATLAB tiene una gran cantidad de
aplicaciones para las áreas de robótica y mecatrónica. Facilita el desarrollo de
la investigación y fortalecer al mismo tiempo aspectos pedagógicos en docencia,
ası́ como la transmisión del conocimiento. Por eso, resulta clave dominar y programar
con solvencia sobre todo en código fuente para realizar cualquier tipo de aplicación.
En este capı́tulo se ha presentado las principales funciones e instrucciones del
lenguaje MATLAB. Desde los aspectos básicos del entorno de programación hasta
aspectos más detallados donde se involucra declaración de variables, manipulación
de matrices y arreglos, manejo de operadores, gráficas y funciones, ası́ como ejemplos
en código fuente que ilustran su inmediata aplicación a control y dinámica de robots
manipuladores y sistemas mecatrónicos.
Se propone un formato libre para archivos con datos de resultados experimentales
o de simulación; es muy importante tener un método computacional para registrar
variables de estado e información relevante del robot. Para este propósito se explica
el procedimiento para generar este tipo de archivos compuesto por columnas y
renglones tipo matriz, también se describe el procedimiento para cargarlo a memoria
y extraer la información registrada, para su análisis e interpretación.
Finalmente, se recomienda consultar periódicamente: www.mathworks.com/.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Capı́tulo
2
Métodos numéricos
t
I =
0
f˙ =
f (x)dx ⇒ Ik = Ik−1 + hf (xk−1 )
lı́m
f (t +
t→0
fk − fk−1
t) − f (t)
⇒ f˙k =
t
h
2.1 Consideraciones computacionales
2.2 Sistemas de ecuaciones lineales
2.3 Diferenciación numérica
2.4 Integración numérica
2.5 Sistemas dinámicos de primer orden
2.6 Resumen
Objetivos
Presentar los métodos numéricos más utilizados en el área de ingenierı́a
a través de ejemplos didácticos y aplicaciones.
Objetivos particulares:
Sistemas de ecuaciones lineales.
Métodos de diferenciación numérica (Euler, diff).
Métodos de integración numérica: Trapezoidal, Simpson, Euler.
Sistemas dinámicos de primer orden (Runge-Kutta).
Funciones ode (ecuaciones diferenciales ordinarias).
Simulación de sistemas dinámicos de primer orden.
2.1
Consideraciones computacionales
83
2.1 Consideraciones computacionales
R
esolver problemas de ingenierı́a requiere del conocimiento solvente de
métodos numéricos para su adecuada implementación práctica en simulación,
análisis y estudio de los resultados experimentales.
Un simulador se caracteriza por reproducir fielmente todos los fenómenos fı́sicos
del sistema mecatrónico o robot manipulador. Desarrollar el proceso de simulación
es una etapa no trivial, involucra aspectos desde seleccionar el método numérico
más adecuado tanto en exactitud de resultados como en desempeño computacional.
También depende de las finalidades del problema a resolver, puede ser control en
tiempo real o un escenario donde analizará resultados experimentales fuera de lı́nea
(off-line). Este es el caso de algunos tópicos de control y de automatización donde
interviene identificación paramétrica, caracterización de sensores y servomotores,
estimación de señales usando la posición articular por ejemplo, obtener velocidad y
aceleración de movimiento.
Cuando se llega a la etapa de resolver numéricamente un sistema dinámico (lineal
y no lineal), es importante seleccionar el método de integración más adecuado de
tal forma que no consuma muchos recursos computacionales (tiempo, eficiencia y
desempeño) y que tenga la exactitud adecuada en la solución numérica para que ésta
sea confiable para su correcta interpretación de resultados. Con estas caracterı́sticas
del método de integración, el esfuerzo de diseño se concentra en mejorar los atributos
y propiedades del esquema de control y posteriormente evaluar el desempeño en un
robot real. De esta forma, las potenciales aplicaciones del esquema de control son
mucho más amplias, ası́ como su correcta ejecución.
En el presente capı́tulo se presentan los principales métodos numéricos para abordar
problemas de control en sistemas mecatrónicos y robots manipuladores. Se hace
un especial énfasis en determinar cuáles son más adecuadas para su utilización en
control de procesos en tiempo real y cuáles son más apropiadas para aspectos de
simulación donde el grado de exactitud es el apropiado para analizar y estudiar
sistemas mecatrónicos, ası́ como la dinámica compleja no lineal y multivariable de
robots manipuladores.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
84
Capı́tulo 2: Métodos numéricos
2.2 Sistemas de ecuaciones lineales
E
n el área de ingenierı́a es muy común encontrar sistemas de ecuaciones lineales,
en donde se involucran variables desconocidas que fundamentalmente definen
el problema a resolver; también participan matrices, ası́ como su matriz inversa y su
determinante.
Considérese un conjunto de n ecuaciones lineales con m incógnitas dadas de la
siguiente forma:
y1 = a11 x1 + a12 x2 + · · · + a1n xn
y2 = a21 x1 + a22 x2 + · · · + a2n xn
..
..
. =
.
(2.1)
ym = am1 x1 + am2 x2 + · · · + amn xn
donde aij son coeficientes conocidos, con i = 1, 2 · · ·, m, j = 1, 2, · · ·, n; xj son las
incógnitas, yi son variables conocidas. En forma compacta el sistema de ecuaciones
lineales 2.1 puede ser representado por:
y = Ax
(2.2)
donde A ∈ IRm×n , x ∈ IRn , y ∈ IRm
entonces la solución consiste en encontrar x = [x1 , x2 , · · · , xn]T en función de la
matriz A y de B, quedando de la siguiente forma:
x = A−1 y.
(2.3)
Obsérvese que la solución involucra la inversa de la matriz A. Por lo tanto, es
necesario primero abordar los aspectos computacionales a la inversión de matrices.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.2
85
Sistemas de ecuaciones lineales
Determinantes de matrices
El determinante de una matriz cuadrada A ∈ IRn×n es un número o escalar y
tiene varias aplicaciones en ingenierı́a: se utiliza en matrices inversas, solución de
ecuaciones simultaneas; en robótica indica los valores numéricos de las variables
articulares del robot para producir singularidades en su jacobiano, etc.
La sintaxis en MATLAB de la función determinante det de una matriz A ∈ IRn×n
es la siguiente:
det(A)
donde A es una matriz cuadrada de dimensión n previamente definidas sus entradas.
♣ Ejemplo 2.1
Considere el siguiente sistema de ecuaciones con tres incógnitas:
9 = 8x1 + 5x2 + x3
6 = −x1 + 4x2 − 10x3
0 = 5x1 + 7x2 + 2x3
este sistema de ecuaciones puede ser re-escrito de la siguiente forma:
⎡ ⎤
⎡
⎤
⎡ ⎤
9
8 5
1
x1
⎢ ⎥
⎢
⎥
⎢ ⎥
B = Ax donde B = ⎣ 6 ⎦
A = ⎣ −1 4 −10 ⎦ x = ⎣ x2 ⎦
0
5 7
2
x3
Obtener el determinante de la matriz A.
Solución
En el cuadro 2.1 se presenta el código fuente para obtener el determinante de la
matriz A. El resultado es presentado en forma general usando variables simbólicas
para expresar el determinante analı́tico de una matriz cuadrada de dimensión 3. En
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
86
Capı́tulo 2: Métodos numéricos
varias aplicaciones de ingenierı́a y para propósitos didácticos es importante trabajar
con variables simbólicas; la función det también acepta representación simbólica.
De las lı́neas 12 a la 18, se asignan valores a las variables simbólicas de la matriz A
para mostrar el resultado en forma numérica.
Código Fuente 2.1
Determinante simbólico
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 detsim.m
Determinante simbólico
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear all;
close all;
clc;
syms a11 a12 a13 a21 a22 a23 a31 a32 a33
% matriz simbólica
Asim=[ a11, a12, a13;
a21, a22, a23;
a31, a32, a33];
disp(’Determinante simbólico’)
det sim=det(Asim)
% se asignan valores a las variables simbólicas
a11=8;
a12=5;
a13=1;
a21=-1;
a22=4; a23=-10;
a31=5; a32=7;
a33=2;
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.2
Sistemas de ecuaciones lineales
Código Fuente 2.2
87
Determinante simbólico
% Continúa programa 2.1
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 detsim.m
Determinante simbólico
19
20
21
%matriz numérica
Anum=[ a11, a12, a13;
23
a21, a22, a23;
a31, a32, a33];
disp(’Determinante numérico’)
24
det num=det(Anum)
22
El programa cap2 detsim.m produce el siguiente resultado:
det sim=
a11 a22 a33 − a11 a23 a32 − a12 a21 a33 + a12 a23 a31 + a13 a21 a32 − a13 a22 a31
det num=
357
Inversión de matrices
En mecatrónica y robótica la representación de una matriz inversa está dada
por A−1 . Una matriz A ∈ IRn×n tiene inversa si la matriz A es cuadrada y su
determinante es = 0. En MATLAB hay varias formas de obtener la inversa de una
matriz cuadrada:
Ainv=inv(A) retorna la inversa de la matriz A
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
88
Capı́tulo 2: Métodos numéricos
Un mensaje de advertencia se despliega si la matriz A tiene si tiene una
singularidad (su determinante es un escalar muy pequeño o cercano a cero).
Ainv=A∧(-1)
La ecuación lineal (2.3) considera los siguientes casos: m = n (A ∈ IRn×n matriz
cuadrada). Problema subdeterminado es cuando m < n el número de ecuaciones
es menor que el número de incógnitas. Para el caso en que m > n el número de
ecuaciones es mayor que el número de incógnitas se le conoce como problema sobre
determinado.
Para el caso m = n, la matriz A es cuadrada, entonces la solución se encuentra dada
por:
x = A−1 y.
(2.4)
La solución existe y es única si el determinante de la matriz A es diferente de cero.
Una forma de verificar si la matriz A existe es analizando su determinante como en
el código 2.1:
Estructura de código 2.1
Caso 1: m = n
if
det(A)~=0
x=inv(A)*y;
end
El código 2.1 no es único. Otro tipo de expresiones que producen el mismo resultado
son:
x=A∧ (-1)*y;
x=A\y; Esta forma es recomendable, ya que la solución emplea eliminación
gausiana, y por lo tanto no se utiliza la forma tradicional de obtener la inversa.
Usando la función: x=linsolve(A,y).
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.2
89
Sistemas de ecuaciones lineales
linsolve
La función linsolve representa una opción para resolver un sistema lineal de
ecuaciones de la forma 2.3. La sintaxis de la función linsolve está dada como:
y=linsolve(A,x)
donde A es la matriz del sistema de ecuaciones lineales y x es el vector incógnita.
Mayor información de la función linsolve es proporcionada en:
fx >>
help linsolve ←
♣ Ejemplo 2.2
Considere el siguiente sistema de ecuaciones:
1 = x1 + 4x2 + 3x3
(2.5)
4 = 8x1 + 5x2 + 9x3
(2.6)
6 = 3x1 + 2x2 + 4x3
(2.7)
Obtener la solución del sistema x y compararla con los métodos:
x = inv(A)y, x = A−1 y y x = A\y
Solución
Para el sistema de ecuaciones planteado se tiene que la matriz A y el vector y están
dados como:
⎡
⎤
⎡ ⎤
1 4 3
3
⎢
⎥
⎢ ⎥
A = ⎣8 5 9⎦ y = ⎣2⎦.
3 2 4
4
El cuadro 2.3 contiene el código fuente para resolver el problema planteado y donde
se han implementado los métodos solicitados.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
90
Capı́tulo 2: Métodos numéricos
Código Fuente 2.3
Comparación de soluciones SLE
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%cap2 sle
Comparación de soluciones SLE
1
2
3
%matriz A
A=[ 1 4 3;
5
8 5 9;
3 2 4];
y=[1; 4; 6];
6
% primera solución
7
x=inv(A)*y;
8
% segunda solución
x1=A∧ (-1)*y;
4
9
10
11
12
13
14
% tercera solución
x2=A\y;
% cuarta solución
x3= linsolve(A,y);
15
% comparación de todas las soluciones
disp(’
x
x1
x2
x3 ’)
16
disp([x x1 x2 x3])
La salida del programa cap2 sle arroja resultados idénticos:
fx >>
x
x1
x2
x3
−5.8667 −5.8667 −5.8667 −5.8667
−4.3333 −4.3333 −4.3333 −4.3333
8.0667
Alfaomega
8.0667
8.0667
8.0667
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.2
91
Sistemas de ecuaciones lineales
2.2.1
2.2.1. Regla de Cramer
La regla de Cramer representa otra opción para encontrar la solución a sistemas de
ecuaciones lineales de la forma (2.3). El procedimiento de la regla de Cramer consiste
en obtener la solución para cada componente xi del vector x a través de calcular el
determinante i-ésimo obtenido como por sustituir el vector y en la i-ésima columna
de la matriz A vista como un determinante, y dividirlo entre el determinante de la
matriz A. Es decir:
⎡ ⎤ ⎡
⎤
x1
det1
⎢ x ⎥ ⎢ det ⎥
2⎥
⎢ 2⎥ ⎢
x = ⎢ .. ⎥ = ⎢ .. ⎥
(2.8)
⎣ . ⎦ ⎣ . ⎦
xn
deti =
a11
detn
columnai
..
···
.
···
a1n
a21
···
···
a2n
an1
···
y
..
.
· · · ann
para i = 1 · · · n.
det(A)
♣ Ejemplo 2.3
Considere nuevamente el sistema (2.5) del ejemplo 2.2. Obtener la solución para
x usando el método de Cramer.
Solución
De acuerdo con el procedimiento de la regla de Cramer se establece que:
det1 =
1 4 3
1
1 3
4 5 9
8
4 9
6 2 4
3
= −5.8667 det2 =
1 4 3
1
6 4
= −4.3333
4 3
8 5 9
8
5 9
3 2 4
3
2 4
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
92
Capı́tulo 2: Métodos numéricos
1 4 1
8 5 4
det3 =
3 2 6
= 8.0667.
1 4 3
8 5 9
3 2 4
Por lo tanto la solución está dada por:
⎡ ⎤ ⎡
⎤ ⎡
⎤
x1
det1
−5.8667
⎢ ⎥ ⎢
⎥ ⎢
⎥
x = ⎣ x2 ⎦ = ⎣ det2 ⎦ = ⎣ −4.3333 ⎦ .
8.0667
x3
det3
2.3 Diferenciación numérica
D
iferenciación numérica es la técnica de aproximar a la derivada de una
función. La derivada es una operación matemática sobre funciones o variables
de estado, y que tiene una diversidad de aplicaciones en ingenierı́a. La derivada
de una función representa la razón de cambio con respecto al tiempo; se utilizan
en esquemas de control y en procesos de automatización. Por ejemplo, en el área
de control de posición de robots manipuladores, los algoritmos incluyen un término
denominado acción de control derivativo con la finalidad de generar amortiguamiento
o freno mecánico y con dicha acción se pretende mejorar la respuesta transitoria del
robot. Para lograr esto, se inyecta la velocidad de movimiento, la cual representa la
variación temporal de la posición.
La fricción viscosa y de Coulomb es uno de los fenómenos fı́sicos que se encuentra
presente en los sistemas mecánicos, la derivada de la posición forma parte de
este fenómeno. El modelado dinámico de sistemas mecatrónicos y robots incluye
derivadas de las variables de estado para conformar la estructura matemática
adecuada para estudiar y analizar todos los fenómenos fı́sicos del sistema. La teorı́a
de estabilidad de sistemas dinámicos es otro ejemplo donde se utilizan derivadas; por
ejemplo, la derivada de la energı́a (potencia) se emplea para llevar a cabo el análisis
de estabilidad del punto de equilibrio. Hoy en dı́a, la derivada se ha convertido en
una herramienta imprescindible para realizar automatización de sistemas.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.3
93
Diferenciación numérica
La notación de la derivada de una función f (t) con respecto al tiempo es definida
como f˙(t), la cual es igual a la razón de cambio de f con respecto al tiempo t.
Matemáticamente la derivada de una función se define como:
d
f (t +
f (t) = lı́m
t→0
dt
f˙(t) =
donde
t) − f (t)
t
(2.9)
t es un infinitésimo intervalo de tiempo.
En mecatrónica hay varios procesos donde se requiere medir la razón de cambio de
las variables del robot. Por ejemplo la razón de cambio de la posición es la velocidad
de movimiento; el cambio temporal de la velocidad es la aceleración.
Por otro lado, la integral de la aceleración es la velocidad, y la integral de la velocidad
es la posición. Es decir, existe una relación muy cercana entre la integral y la
derivada; se puede considerar que son operaciones inversas una de la otra. La integral
de una derivada:
t
t
f˙(t)dt =
0
0
df (t)
dt =
dt
t
t
= f (t) − f (0)
df (t) = f (t)
0
0
retorna la función original f (t) más una constante que depende de las condiciones
iniciales.
La derivada de una integral
d
dt
t
f (t)dt = f (t)
0
retorna la función original.
Geométricamente, la derivada f˙ puede ser descrita como la pendiente de la lı́nea
tangente en la función f (t) del punto especı́fico t. La lı́nea tangente está especificada
f (t+t)−f (t)
por la pendiente
(ver figura 2.3.)
t
Debido a esto, la derivada de una constante es cero, puesto que la lı́nea tangente es
horizontal (no hay variación temporal). Los puntos donde la derivada de la función
f es cero se llaman puntos crı́ticos y pueden representar regiones horizontales de
la función f o puntos extremos (puntos que son máximo o mı́nimo local o también
globales). Si evaluamos la derivada de la función en varios puntos y observamos que
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
94
Capı́tulo 2: Métodos numéricos
Figura 2.1 Lı́nea tangente de la función f en el punto tk .
el signo de la derivada cambia, entonces un mı́nimo o máximo local ocurre en ese
intervalo. La segunda derivada de la función f¨(t) determina cuándo el punto crı́tico es
mı́nimo o máximo. Si la segunda derivada en un punto extremo es positiva, entonces
el valor de la función en el punto extremo es un mı́nimo local. Por otro lado, si la
segunda derivada de la función en un punto extremo es negativo, entonces la función
evaluada en el punto extremo es un máximo local (ver figura 2.2).
Figura 2.2 Puntos extremos: mı́nimo y máximo local (global).
Las técnicas de diferenciación numérica estiman la derivada de una función f en
un punto tk aproxima la pendiente de la lı́nea tangente en tk usando valores de la
función en puntos cercanos a tk . Si denotamos al intervalo de tiempo t como la
diferencia entre dos puntos consecutivos, t = tk − tk−1 = h, donde h es la longitud
de t, (ver figura 2.3).
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.3
95
Diferenciación numérica
Figura 2.3 Lı́nea tangente de la función f en el punto tk .
En control digital y sistemas discretos la longitud del intervalo h se mantiene
constante (periodo de muestreo) y se toman datos cada determinado tiempo
h, igualmente espaciadas, esto significa que el tiempo discreto transcurre como
múltiplos del periodo de muestreo tk = t + h; para n muestras se tiene que el
tiempo discreto se puede expresar como tk = kh, donde k = 1, 2, 3, · · ·, n.
Una forma ampliamente usada es el método de Euler (diferenciación numérica)
f˙(tk )
f (tk ) − f (tk−1 )
f (tk ) − f (tk−1 )
=
tk − tk−1
h
particularmente esta aproximación es conocida como diferenciación con un paso
atrás (backward difference).
También se puede obtener la aproximación de la derivada por computar la
pendiente entre f (tk ) y f (tk+1 ) conocida como diferenciación hacia adelante (forward
difference):
f˙(tk )
f (tk+1 ) − f (tk )
f (tk+1 ) − f (tk )
=
tk+1 − tk
h
la figura 2.4 ilustra ambos métodos.
Evidentemente la calidad de la derivada depende de la distancia entre esos puntos o
del periodo de muestreo h = tk − tk−1 = tk+1 − tk . De esta forma se puede obtener
la aceleración por diferenciación numérica de la velocidad:
f (tk ) − 2f (tk−1 ) + f (tk−2 )
f˙(tk ) − f˙(tk−1 )
f¨(tk ) =
=
h
h2
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
96
Capı́tulo 2: Métodos numéricos
Figura 2.4 Diferenciación numérica: backward y forward.
♣ Ejemplo 2.4
Emplear el método de Euler para convertir la siguiente ecuación diferencial en su
equivalente expresión por diferenciación numérica.
αu(t) = a2 ÿ(t) + a1 ẏ(t) + a0 y(t)
(2.10)
Solución
Empleando el método de Euler, la velocidad y aceleración toman la siguiente forma:
y(tk ) − y(tk−1 )
h
y(tk )−y(tk−1 )
y(t
)−y(t
)
− k−1 h k−2
ẏ(tk ) − ẏ(tk−1 )
h
ÿ(t)
ÿ(tk ) =
=
h
h
y(tk ) − 2y(tk−1 ) + y(tk−2 )
ÿ(tk ) =
h2
ẏ(t)
ẏ(tk ) =
Por lo tanto la ecuación diferencial 2.10 queda como:
αu(tk ) = a2 ÿ(tk ) + a1 ẏ(tk ) + a0 y(tk )
αu(tk ) = a2 [
Alfaomega
y(tk )−2y(tk−1 )+y(tk−2 )
h2
] + a1
y(tk ) − y(tk−1 )
+ a0 y(tk ).
h
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.3
97
Diferenciación numérica
La solución para y(tk ) está dada por:
y(tk ) = [ a0 +
a1
h
+
a2 −1
]
h2
2
[ αu(tk ) + [ 2a
+
h2
a1
h
] y(tk−1 ) −
a2
y(tk−2 ) ] .
h2
Para implementar la solución discreta y(tk ) de la ecuación (2.10) se requieren
los estados y(tk−1 ) y y(tk−2 ) y el periodo de muestre h. El método de Euler
es ampliamente utilizado para resolver ecuaciones diferenciales lineales, usando el
procedimiento de este ejemplo se obtiene la solución en forma discreta de sistemas
dinámicos lineales.
2.3.1
2.3.1. Función diff
MATLAB tiene la función diff la cual realiza la diferenciación numérica entre
valores adyacentes de un vector x.
La sintaxis de la función diff es la siguiente:
y= diff(x)
Retorna un nuevo vector y conteniendo la diferenciadiff
ción entre valores adyacentes del vector de entrada x
La función diff también se aplica a matrices, entonces opera en cada columna de
la matriz, y retorna una matriz con el mismo número de columnas, en este caso la
sintaxis es:
B= diff(A)
Retorna una nueva matriz B conteniendo la diferendiff
ciación entre valores adyacentes de cada columna de
la matriz de entrada A.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
98
Capı́tulo 2: Métodos numéricos
♣ Ejemplo 2.5
Aproximar la derivada con respecto al tiempo de la función sen(t) mediante
diferenciación.
Solución
Para obtener la derivada temporal por diferenciación numérica de la función sen(t)
se hace uso de diff. El intervalo de diferenciación numérica se selecciona de 0
a 10 segundos, con incrementos de un milisegundo. El método analı́tico conduce
d
dt sen(t) = cos(t). Por lo tanto, se comparará la solución aproximada con la solución
analı́tica.
El programa que contiene el código fuente para resolver este problema se presenta
en el cuadro 2.5. El resultado de dicho programa se exhibe en la figura 2.5 donde se
han superpuesto ambas gráficas: por diferenciación numérica y el método analı́tico.
Figura 2.5 Comparación del método analı́tico y por diferenciación numérica.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.4
99
Integración numérica
Código Fuente 2.4
Diferenciación numérica
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 diffnum.m
Diferenciación numérica
1
3
clc;
clear all;
close all;
4
% intervalo de tiempo
5
t=0:0.001:10;
6
% función a derivar
f=sin(t);
2
7
8
9
% derivada de la función sen(t) con respecto al tiempo.
˙ k ) = df(tk )
% es decir se obtiene f(t
dtk
10
dfdt = diff(f)./diff(t);
11
% el vector df tiene dimensión n-1
t1=0:0.001:9.999; % nueva base de tiempo con dimensión n-1
12
13
14
%compara la derivada aproximada con el método analı́tico
plot(t1,dfdt,t1,cos(t1))
2.4 Integración numérica
I
ntegración numérica es la técnica de aproximar integrales de funciones. La
integración de funciones es un tópico especial y de interés en aplicaciones
prácticas para ingenierı́a mecatrónica y robótica. Desde el punto de vista analı́tico y
experimental las integrales representan una herramienta fundamental en el análisis y
diseño de algoritmos de control, desarrollo y construcción de robots manipuladores.
La aplicación inmediata de integración numérica se encuentra en el diseño de
simuladores, la calidad de los resultados depende en gran medida de la exactitud
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
100
Capı́tulo 2: Métodos numéricos
para aproximar a una integral de función.
Esquemas de control bien conocidos que se emplean en robots manipuladores como
es el caso del proporcional integral derivativo (PID) involucra la integral del error
de posición para mejorar las caracterı́sticas operativas de la estrategia de control
t
τ
= Kpq̃(t) + Ki
t0
q̃(t) dt − Kv q̇(t)
La acción de control integral almacena energı́a (área bajo la curva del error de
posición), y mediante una adecuada sintonı́a en la ganancia integral influye sobre
la cantidad de energı́a aplicada al robot, repercutiendo en la respuesta transitoria y
reduciendo el error en estado estacionario.
Es necesario remarcar que en el caso del esquema PID, la acción de control integral se
realiza en cada instante de tiempo conforme el tiempo evoluciona. Es decir, para cada
valor de t se calcula la integral, de tal forma que no significa realizar la integral una
sola vez, más bien es un cálculo continuo, uno tras otro como el tiempo evolucione.
En contraste con otros métodos, el cálculo de la integral sólo se requiere una vez,
tal es el caso de la medición de desempeño de reguladores usando la norma L2 [q̃],
cuya expresión matemática está dada por:
1 T
L2 [q̃] =
q̃(t) 2 dt
T 0
donde T representa el tiempo de experimentación o simulación (intervalo de
integración).
Una magnitud pequeña en la norma L2 significa alto desempeño del esquema
de control. Esto significa que el área bajo la curva del error de posición no fue
significativa debido a que el robot se posicionó de manera inmediata, logrando la
convergencia hacia cero del error de posición q̃(t) → 0. Por lo tanto, en el periodo
de integración el transitorio fue rápido, sin sobretiros y el desempeño del algoritmo
de control es muy bueno. En contra parte, un alto valor de la norma L2 representa
pobre desempeño. La norma L2 es muy útil cuando se compara varios algoritmos
de control, entonces se determina cuál de ese conjunto de esquemas tiene mejores
prestaciones y por lo tanto determina la selección para una aplicación especı́fica.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.4
Integración numérica
101
La adecuada interpretación de resultados experimentales, analı́ticos y funcionamiento cualitativo de estrategias de control requiere del buen entendimiento de tópicos
especı́ficos de cálculo integral y diferencial. Más aún, cómo implementar una integral,
o seleccionar el método numérico más adecuado son conocimientos fundamentales
que se ven reflejados en la exactitud de posicionamiento de un robot manipulador y
en el desempeño del esquema de control.
La integral definida de una función f (x) sobre un intervalo finito [a, b] es interpretada
como el área sobre la curva de f (x) como se muestra en la figura 2.6. Para varias
funciones la integral se puede obtener en forma analı́tica. Sin embargo, para un tipo
de funciones su integral no se puede obtener por medios analı́ticos, y por lo tanto se
requiere de métodos numéricos para estimar su valor.
Figura 2.6 La integral de f (x) significa el área bajo la curva.
Hay varias técnicas para aproximar la integral de una función f (x); la evaluación
numérica de una integral se le denomina cuadratura cuyo nombre proviene de un
problema geométrico ancestral.
A continuación se presentan dos métodos geométricos ampliamente conocidos:
método trapezoidal y regla de Simpson.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
102
Capı́tulo 2: Métodos numéricos
2.4.1
2.4.1. Regla trapezoidal
Cuando el área bajo la curva de la función f (x) es representada por trapezoides y
el intervalo [a, b] es dividido en n secciones del mismo tamaño, entonces el área de
f (x) puede ser aproximada por la siguiente expresión:
IT
=
b−a
[f (x0 ) + 2f (x1 ) + 2f (x2 ) + · · · + 2f (xn−1 ) + f (xn )]
2n
(2.11)
donde los valores xi representan los valores finales de los trapecios, para i = 1, 2, · · ·,
n − 1; x0 = a y xn = b.
MATLAB tiene la función trapz para aproximar la integral de una función f (x)
por el método trapezoidal, cuya sintaxis es la siguiente:
y=trapz(f)
y=trapz(x,f)
y=trapz(x,f,dim)
La función trapz(f) calcula la aproximación numérica de la integral de la función
f por el método trapezoidal.
Si f es un vector, entonces y=trapz(f) es la integral de f. Cuando f representa a una
matriz y=trapz(f) retorna un vector renglón con la integral sobre cada columna.
Cuando la función trapz tiene la sintaxis y=trapz(x,f) realiza la integral de f con
respecto a x.
Para el caso y=trapz(x,f, dim), dim es un escalar que indica la dimensión de la
función f. En ambos casos, el vector x debe tener la misma dimensión dim.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.4
103
Integración numérica
♣ Ejemplo 2.6
Calcular la integral de la función
sen(x) por el método trapezoidal para el
intervalo x ∈ [0, π]
π
Itrapz =
sen(x) dx.
0
Solución
El programa 2.5 contiene el código fuente para calcular la integral de la función
f (x) = sen(x) en el intervalo [0, π]. De la lı́nea 4 a la 7 se define el intervalo de
π
tiempo de integración. El incremento del paso de integración es cada 1000
. En la
lı́nea 8 se define la función sen(x) y en la lı́nea 9 se realiza la integración numérica
usando la función y=trapz(x,f). Este resultado se compara con el valor analı́tico, es
π
decir Itrapz = 0 sen(x)dx = 1 − cos(π) = 2. El resultado que genera el programa
2.5 es: Itrapz = 2.0.
Código Fuente 2.5
Integración numérica trapezoidal
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 trap.m
Integración numérica trapezoidal
1
clc;
2
clear all;
close all;
tini=0;
tinc=pi/1000;
3
4
5
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
104
Capı́tulo 2: Métodos numéricos
Código Fuente 2.6
Integración numérica trapezoidal
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 trap.m Continúa 2.5
Integración numérica trapezoidal
6
tfinal=pi;
7
10
x=tini:tinc:tfinal;
f=sin(x);
I trapz= trapz(x,f);
I a= 1-cos(pi);
11
disp(’Resultado’)
12
%despliega los resultados comparativos
13
%del método trapezoidal con el analı́tico.
disp([I trapz I a])
8
9
14
En este ejemplo se ha calculado el área bajo la curva sobre el intervalo [0, π].
El cálculo se realiza una sola vez. Sin embargo, hay aplicaciones en control
de robots manipuladores donde se requiere realizar el cálculo de la integral de
manera sistemática conforme el tiempo evoluciona. A continuación se muestra un
procedimiento recursivo donde se obtiene la integral por el método trapezoidal para
π
pequeños intervalos del tamaño de 1000
sobre un intervalo amplio [0, 2π].
♣ ♣ Ejemplo 2.7
Calcular la integral de la función sen(x) por el método trapezoidal para cada
valor de intervalo
π
1000
contenido en el intervalo [0, 2π]
2π
Itrapz =
Alfaomega
sen(x) dx.
0
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.4
Integración numérica
105
Solución
π
La idea es obtener un barrido de la integral de sen(x) para cada intervalo 1000
, que
π
π
π
pertenece al intervalo [0, 2π]. Es decir, x ∈ [0, 1000 , 2 1000 , 3 1000 , · · · , 2π]. En otras
π
, hasta llegar a 2π,
palabras, el intervalo va evolucionando por incrementos de 1000
con esto se requieren 2000 iteraciones para alcanzar el valor de 2π.
El programa que se presenta en el cuadro de código 2.7 contiene la forma de
implementar el método trapezoidal para aproximar la integral de una función
f (x) = sen(x) en el intervalo [0, 2π]. De la lı́nea 4 a la 9 se define el intervalo
π
de tiempo de integración. El incremento del paso de integración es cada 1000
.
En la lı́nea 10 se obtiene la dimensión del vector de tiempo, con esa información se
realizará el algoritmo recursivo, es decir el número de veces (2000) que se realizará el
ciclo for para abarcar el intervalo [0, 2π] el cual se presenta de las lı́neas 11 a la 21.
En la lı́nea 12 se exploran los registros de la base de tiempo t(k); cuando k=1
pi
entonces se realiza el primer paso de integración del intervalo [0, 1000
] cuyo código
abarca las lı́neas 13 a la 16. Este código es necesario por razones técnicas del
lenguaje de MATLAB debido a que el primer elemento del vector de tiempo
t(1) es cero, ts=0, entonces no se podrı́a llevar a cabo el primer intervalo de
integración x=0:tinc:0, marcando un error de programación. En su lugar se realiza
x=0:tinc:tinc.
Para el segundo incremento del tiempo de integración y posteriores incrementos
π
se ubica en las lı́neas 17 a la 21 sobre intervalo [ 1000
, · · · , 2π]. En la lı́nea 23 se
asigna la función sen(x) para el correspondiente k-ésimo intervalo de integración
pi
pi
, k 1000
]. La lı́nea 24 tiene la función I trapz(k)=trapz(x,f). Este
[(k − 1) 1000
procedimiento se realiza un número de veces (2000) hasta igualar la dimensión del
vector de tiempo t.
En la lı́nea 28 se grafica la integral de la función sen(x) por el método trapezoidal
y se compara con el método analı́tico:
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
106
Capı́tulo 2: Métodos numéricos
2π
Itrapz =
sen(x) dx
0
= − cos(x)|2π
0
= 1 − cos(x), x ∈ [0, 2π]
Código Fuente 2.7
Método de integración trapezoidal
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 trapezoidal.m
% calcula la integral de la función sen(x)
% el cálculo se realiza por medio de
%integración iterativa (2000 iteraciones)
%con incrementos de
π
1000
% para el intervalo [0, 2π].
Método de integración trapezoidal
1
3
clc;
clear all;
close all;
4
% intervalo de integración
5
7
tini=0; % tiempo inicial de integración
tinc=pi/1000; % pasos de incremento del tiempo de integración
tfinal=2*pi; % tiempo final de integración
8
% base de tiempo de integración
9
t=tini:tinc:tfinal;
[m,n]=size(t); % dimensión del vector de tiempo
2
6
10
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.4
107
Integración numérica
Código Fuente 2.8
Método de integración trapezoidal
%Continúa programa 2.7
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 trapezoidal.m
Método de integración trapezoidal
11
for k=1:n
12
% registro de la base de tiempo
13
ts=t(k);
if k==1
14
15
% para el primer paso de integración
16
17
% se integra desde 0 a
x=0:tinc:tinc;
18
else
19
% para el segundo paso de integración y posteriores
20
% se integra desde x = 0 hasta el tiempo actual ts.
x=0:tinc:ts;
21
22
π
1000 .
end
f=sin(x); % función a integrar
I trapz(k)= trapz(x,f); % integración por método trapezoidal
23
24
25
end
26
% gráfica comparativa entre los métodos
27
% analı́tico y trapezoidal
plot(x,I trapz,x,1-cos(x))
28
La figura 2.7 muestra el resultado comparativo entre el método trapezoidal y el
analı́tico para la integral de la función sen(x) que genera el programa 2.7. Obsérvese
que el método trapezoidal es una aproximación muy buena comparada con el exacto
o método analı́tico, de tal forma que el resultado trapezoidal se superpone a la gráfica
del método analı́tico (cos(x)-1) en el intervalo [0, 2π].
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
108
Capı́tulo 2: Métodos numéricos
Figura 2.7 Comparación entre los métodos trapezoidal y analı́tico.
2.4.2
2.4.2. Regla de Simpson
Cuando el área bajo la curva de la función f (x) es representada sobre áreas de
secciones cuadráticas y si el intervalo [a, b] es dividido en 2n secciones iguales,
entonces el área de f (x) puede ser aproximada por la regla de Simpson cuya expresión
está dada de la siguiente manera:
Isimp =
b−a
[f (x0 ) + 4f (x1 ) + 2f (x2 ) + 4f (x3 ) + · · · + 2f (x2n−2 )
6n
+4f (x2n−1 ) + f (x2n )]
(2.12)
donde xi representan los valores finales de cada sección, para i = 1, 2, · · ·, n − 1;
x0 = a, y x2n = b.
En MATLAB, la regla de Simpson se implementa en forma adaptiva por medio de
la función quad; la tabla 2.1 muestra su sintaxis.
quad(f,a,b) aproxima la integral de una función f (x) dentro de los lı́mites finitos
[a, b], usando un algoritmo recursivo adaptable de cuadratura de Simpson, donde
a, b ∈ IR. El error de integración numérica que usa es 1e-06. La función f (x) puede
ser escalar o vectorial. En el caso vectorial quad retorna un vector de salida donde
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.4
109
Integración numérica
Tabla 2.1 Funciones de cuadratura
Retorna el área de la función en el
quad(’nombre funcion’,a,b)
intervalo comprendido entre a y b
usando la regla de Simpson.
Emplea un error absoluto de tolerancia tol en lugar del valor por default 1e-06 sobre el intervalo [a, b].
q = quad(fun,a,b,tol)
Valores grandes de tol producen integración numérica muy rápida, pero con menor exactitud.
cada componente tiene la integral de la correspondiente componente de la función
vectorial f (x). La función quad puede ser menos eficiente (pobre exactitud) con
funciones no suaves.
♣ Ejemplo 2.8
Calcular la integral por el método de Simpson de la función raı́z cuadrática
√
f (x) = x para intervalos no negativos [a, b].
Solución
√
La función raı́z cuadrada f (x) = x puede ser integrada analı́ticamente sobre el
intervalo [a, b], a, b ∈ IR+ de la siguiente forma:
b√
I=
a
x dx =
3
2 3
(b 2 − a 2 ).
3
(2.13)
Este procedimiento sirve de referencia para comparar el valor numérico que calcula
el método de Simpson.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
110
Capı́tulo 2: Métodos numéricos
√
El cuadro 2.9 contiene el programa para calcular la integral de la función f (x) = x
por el método de Simpson sobre un intervalo no negativo [a, b] especificado por
el usuario, y el resultado es comparado con el método analı́tico (2.13) el cual se
encuentra implementado en la lı́nea 17.
Por precaución, sobre los datos del intervalo definido por el usuario se inserta la
instrucción if para verificar que los extremos del intervalo sean positivos y además
que cumplan a < b.
Se hace la aclaración que dentro del lenguaje de programación de MATLAB la
función sqrt acepta valores negativos y retorna números complejos. Sin embargo,
en modelado dinámico y control de robots manipuladores usando moldeo de energı́a
(estabilidad de Lyapunov) no se requiere la teorı́a de números complejos.
Código Fuente 2.9
Integración Simpson
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 simpson1.m
%Función quad para calcular la integral de la
%función raı́z cuadrada por el método de Simpson.
%El resultado se compara con la integral analı́tica.
%El intervalo de integración es definido por el usuario.
Integración Simpson
1
3
clc;
clear all;
close all;
4
disp(’Método de Simpson’)
5
% los valores del intervalo [a, b] son proporcionados
6
% por el usuario desde el teclado
a=input(’Introduzca el valor inicial del intervalo de integración: ’);
b=input(’Introduzca el valor final del intervalo de integración: ’);
2
7
8
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.4
111
Integración numérica
Código Fuente 2.10
Integración Simpson
% Continuación del programa 2.9
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 simpson1.m
Integración Simpson
9
10
11
12
if a>=0 && b>= 0
if a>b
disp(’Error: el intervalo positivo [a,b] debe cumplir a<b.’)
return
13
end
14
% regla de Simpson
15
% la función raı́z cuadrada (sqrt) es indicada como
16
% cadena de caracteres en la función quad
17
I simp=quad(’sqrt’,a,b);
18
% método analı́tico
I a=2/3*(b∧(3/2)-a∧ (3/2));
fprintf(’Valor analı́tico= %f \n Simpson: %f \n’,I a,I simp)
19
20
21
else % Para el caso de valores negativos
disp(’Error en los valores del intervalo de integración.’)
disp(’El intervalo [a,b] con a<b debe contener únicamente valores positivos.’)
22
23
24
end
La salida del programa cap2 simpson1.m produce resultados idénticos entre el
método de Simpson con el analı́tico:
Valor analı́tico=33.333333
Simpson=33.333333
corresponde al intervalo a=0 y b=10.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
112
Capı́tulo 2: Métodos numéricos
♣ Ejemplo 2.9
Calcular la integral de la función f (x) = x5 por el método de Simpson.
Solución
La integral de la función f (x) = x5 está dada por:
b
I=
x5 dx =
a
1 6
(b − a6 ).
6
(2.14)
El cuadro 2.11 contiene el código fuente para aproximar la integral de la función
cuadrática f (x) = x2 por el método de Simpson sobre un intervalo de [0, 10]. En la
lı́nea 6, la función cuadrática es utilizada a través de un manejador de funciones:
f=@(x)x.∧ 5; e incorporada la función quad(f,a,b) en la lı́nea 7.
Código Fuente 2.11
Método de Simpson
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 simpson.m
Método de Simpson
1
2
3
4
clc;
clear all;
close all;
7
a=0; b=10;
x=a:b;
f= @(x)x.∧ 5; %función cuadrática
I simp=quad(f,a,b);
8
I a= (1/6)*(b∧ 6-a∧ 6); % método analı́tico
9
% comparación entre el método analı́tico y el de Simpson
5
6
10
fprintf(’Valor analı́tico= %f \n Simpson: %f \n’,I a,I simp)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.4
Integración numérica
113
La salida del programa cap2 simpson.m es la siguiente:
Valor analı́tico=166666.666667
Simpson=166666.666667
corresponde al intervalo [0, 10].
2.4.3
2.4.3. Funciones de cuadratura
MATLAB tiene varias funciones que calculan la integral de funciones por métodos
numéricos conocidas como funciones de cuadratura. Adicional a la regla de Simpson
quad, existen más opciones que se presentan a continuación:
quad8
La función quad8(’nombre funcion’,a,b) retorna el área de la función en el
intervalo [a, b] usando la regla de Newton-Cotes 8 panel.
quadl
q = quadl(f,a,b) aproxima la integral de la función f en un intervalo finito [a, b]
dentro de un error 1e-06 usando el algoritmo recursivo adaptable de cuadratura de
Lobatto. La sintaxis de quadl requiere que la función f sea una función manejador.
quadl acepta funciones vectoriales y retorna un vector con la integral de cada
componente. quadl puede ser más eficiente (alta exactitud) que la función quad
con funciones suaves.
quadgk
La función quadgk tiene buena eficiencia para funciones oscilatorias, y soporta
intervalos de integración infinitos, ası́ como manejar moderadamente valores
singulares. Una ventaja de esta función es que soporta integración de contorno a lo
largo de trayectorias continuas por trozos. Si el intervalo de integración es infinito,
es decir [a, ∞], entonces para que la integral de f (x) exista, f (x) debe caer como
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
114
Capı́tulo 2: Métodos numéricos
x → ∞. Esta es una condición para poderse utilizar quadgk, particularmente para
funciones oscilatorias sobre intervalos infinitos, f (x) debe caer muy rápida.
Una ventaja que tiene la función quadgk es que integrará funciones que tienen
puntos singulares no muy fuertes. Si la función tiene puntos singulares dentro del
intervalo (a, b), entonces lo recomendable es escribir la integral como la suma de
integrales sobre subintervalos con puntos singulares como puntos finales, computar
cada integral con quadgk y sumar los resultados.
quadv
La función quadv vectoriza a quad para una función vectorial.
2.4.4
2.4.4. Método de Euler
Un método ampliamente utilizado en robótica y sistemas mecatrónicos es la
integración numérica discreta, la cual se puede establecer directamente del método
de Euler.
Por ejemplo al derivar con respecto al tiempo la integral I(t) de la función f (t) se
obtiene lo siguiente:
t2
I(t) =
˙ = f (t) ∀t ∈ [t1 , t2 ].
f (t)dt ⇒ I(t)
(2.15)
t1
Partiendo de la definición matemática de la derivada se tiene:
˙
I(t)
=
lı́m
t→0
I(t +
t) − I(t)
t
(2.16)
(2.17)
donde
t = t2 − t1 , representa un infinitésimo intervalo de tiempo.
˙
˙
˙ k ) entonces el
Si aproximamos a la derivada I(t)
en su forma discreta I(t)
I(t
tiempo discreto está dado por tk = kh, k = 1, 2, · · ·, n y h es el periodo de muestreo.
De esta forma se cumple tk−1 = (k − 1)h y tk = tk − tk−1 = kh − (k − 1)h = h.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.4
Integración numérica
115
˙ k ) se puede realizar por diferenciación numérica
Por lo tanto la derivada discreta I(t
de la posición I(tk ) de la siguiente forma:
˙ k) =
I(t
I(tk ) − I(tk−1 )
I(tk ) − I(tk−1 )
= f (tk ).
=
tk − tk−1
h
(2.18)
La expresión 2.18 se conoce como método de Euler y sirve para estimar la velocidad
por diferenciación numérica de la posición.
Despejando I(tk ) de la expresión (2.18), la integral discreta adquiere la siguiente
forma:
I(tk ) = I(tk−1 ) + hf (tk )
(2.19)
La expresión (2.19) es muy simple, se convierte en una sumatoria y es adecuada para
poderse implementar como algoritmo recursivo.
♣ Ejemplo 2.10
Calcular la integral de la función f (t) = sen(t) por el método de Euler en forma
recursiva para el periodo de integración t ∈ [0, 10] segundos. El incremento del
tiempo es por pasos de un milisegundo.
Solución
En el cuadro 2.12 se presenta el código fuente que implementa el método de Euler
para integrar la función f (t) = sen(t). El intervalo de integración es de 0 a 10
segundos, con incremento de un milisegundo. Este mismo incremento se toma como
el valor del periodo de muestreo h = 0.001. Para propósitos de comparación el
resultado generado por el método de Euler se compara con el método trapezoidal.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
116
Capı́tulo 2: Métodos numéricos
Código Fuente 2.12
Método de Euler
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 euler.m
Método de Euler
1
clc;
2
clear all;
close all;
h=0.001; % periodo de muestreo
t=0:h:10; % intervalo de integración
3
4
5
6
7
f=sin(t); % función a integrar
I e=0; % condición inicial de la integral por
8
% método de Euler
9
% método comparativo trapezoidal
I trap=trapz(t,f);
10
11
12
13
14
% método comparativo regla de Simpson
I simp=quad(’sin’,0,10);
[m, n]=size(t); % Orden del vector de tiempo
for k=1:n
15
I e=I e+h*f(k);
16
end
17
fprintf(’Método Euler= %f \n Método Trapezoidal= %f \n Regla de Simpson = %f
\n’,I e,I trap, I simp)
La salida del programa cap2 euler.m produce el siguiente resultado.
Método Euler= 1.838799
Método Trapezoidal= 1.839071
Regla de Simpson= 1.839072
Los resultados corresponden al intervalo [0, 10], con incrementos de 0.001.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.5
Sistemas dinámicos de primer orden
117
Obsérvese que existe un mayor error de integración del método de Euler con
respecto a los métodos trapezoidal y el de Simpson. Sin embargo, en robótica se
utiliza el método de Euler para estimar la velocidad de movimiento del robot por
diferenciación numérica de la posición.
2.5 Sistemas dinámicos de primer orden
L
os sistemas dinámicos están formados por ecuaciones diferenciales, ya que
representan la estructura matemática fundamental para modelar la dinámica
de los robots manipuladores y de cualquier sistema mecatrónico. A través de estas
ecuaciones es posible estudiar en detalle todos los fenómenos fı́sicos que se encuentran
presentes en la estructura mecánica de los robots.
Particularmente la ecuación diferencial ordinaria de primer orden:
ẋ = f (x)
(2.20)
representa la base matemática del modelado dinámico y control de robots
manipuladores. Donde x ∈ IRn es la solución de la ecuación diferencial (2.20);
también representa la variable de estado, la cual proporciona información sobre
la dinámica del sistema, por esta razón x es que es una función continua del tiempo
x = x(t). En otras palabras dentro de las propiedades intrı́nsecas de las variables de
estado se encuentra que es una función implı́cita del tiempo. La variable ẋ representa
los cambios de estado dinámicos x(t) en el tiempo.
La ecuación 2.20 es un sistema dinámico autónomo para modelar dinámica lineal
y no lineal de sistemas mecatrónicos y robóticos. Este tipo de ecuación dinámica
se emplea en la simulación, diseño de algoritmos de control, análisis y estudio de
fenómenos fı́sicos y construcción de sistemas mecatrónicos.
Prácticamente cualquier sistema dinámico autónomo (que no depende de manera
explı́cita del tiempo) cuyo modelo matemático esté caracterizado por ecuaciones
diferenciales de cualquier orden puede ser convertido mediante un adecuado cambio
de variables de estado a la forma de la ecuación 2.20, entonces se puede simular
mediante un adecuado procedimiento de integración numérica.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
118
Capı́tulo 2: Métodos numéricos
2.5.1
2.5.1. Método de Runge-Kutta
Uno de los métodos más importante para integración numérica de ecuaciones
diferenciales de primer orden (2.20) son los métodos de Runge-Kutta. Dichos
métodos se basan en aproximar la solución a través de series de Taylor. El método
más simple, el denominado método de primer orden, usa una serie de expansión de
Taylor de primer orden, el método de segundo orden usa la serie de expansión de
Taylor de segundo orden, y ası́ sucesivamente (el método de Euler es equivalente al
de primer orden de Runge-Kutta). MATLAB tiene funciones del método de RungeKutta para los órdenes segundo, tercero, cuarto y quinto.
La serie de Taylor para evaluarla en el tk -ésimo tiempo a la función x(tk ) está dada
por la siguiente expresión:
x(tk ) = x(tk−1 ) + (tk − tk−1 )ẋ(tk−1 ) +
(tk − tk−1 )n
n!
(tk − tk−1 )2
ẍ(tk−1 ) + · · · +
2!
n derivadas
· ·x· · · · + · · ·
(tk−1 )
(2.21)
El término tk − tk−1 representa un pequeño intervalo el cual será representado por
h = tk − tk−1 = kh − (k − 1)h, entonces la serie de Taylor queda de la siguiente
forma:
n derivadas
h2
hn
· ·x· · · · + · · ·
x(tk ) = x(tk−1 ) + hẋ(tk−1 ) + ẍ(tk−1 ) + · · · +
(tk−1 )
2!
n!
(2.22)
Método de Runge-Kutta de primer orden
La integración numérica de la ecuación 2.20 por el método de Runge-Kutta de primer
orden está dado de la siguiente manera:
x(tk ) = x(tk−1 ) + hẋ(tk−1 ) = x(tk−1 ) + hf (tk−1 )
Alfaomega
(2.23)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.5
Sistemas dinámicos de primer orden
119
La interpretación geométrica de la ecuación (2.23) significa que el valor de estimación
de x(tk ) es igual a la lı́nea tangente que la une con el valor x(tk−1 ) como se muestra
en la figura 2.8. Este es un proceso iterativo para todos los puntos x(tk ), con
k = 1, 2, · · ·, n. El primer método de Runge-Kutta es muy simple, ya que aproxima
Figura 2.8 Cálculo de x(tk ) usando el primer el método de Runge-Kutta primer
orden.
la función con una serie de Taylor corta que une los puntos tk y tk−1 con lı́neas
tangentes, por lo cual la exactitud es pobre si el paso h = tk − tk−1 es grande o si la
pendiente de la función cambia rápidamente.
Método de Runge-Kutta de orden mayor
Los métodos de Runge-Kutta de orden mayor (dos, tercero, cuarto, y quinto) se usan
para aproximar funciones desconocidas; la aproximación se realiza a través de varias
lı́neas tangentes, por lo tanto la exactitud es mejorada. Por ejemplo, en el método de
integración de cuarto orden usa la serie de Taylor con las primeras cuatro derivadas,
es decir la estimación de la función x(tk ) es a través de 4 lı́neas tangentes.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
120
Capı́tulo 2: Métodos numéricos
Funciones ode
MATLAB tiene las funciones para integrar la solución numérica de ecuaciones
diferenciales ordinarias de primer orden llamadas ode.
ode45
La sintaxis de la función ode45 es la siguiente:
[t,x]=ode45(’nombre funcion’,ts,cond iniciales,opciones)
La función ode45 utiliza los métodos de Runge-Kutta de cuarto y quinto orden.
nombre funcion representa una función M-File donde está implementado el sistema
dinámico en la estructura matemática ẋ = f (x).
La función ode45 retorna la solución del sistema ẋ = f(x), es decir x, ası́ como
el vector de tiempo t. El tiempo de simulación o el intervalo de integración se
encuentra especificado por ts = [tinicial, tfinal], por ejemplo se puede especificar
como un intervalo [0, 10]. También es válido expresarlo como: ts = 0 : 0.001 : 10, el
cual incluye incrementos de tiempo de un milisegundo. Las condiciones iniciales
se encuentran determinadas por cond iniciales, su forma depende del orden
del sistema. Por ejemplo, para un sistema escalar cond inciales=0; para el caso
vectorial x(0) ∈ IR3 , tenemos cond inciales=[0;0;0].
El cuarto parámetro de opciones es muy importante debido a que contiene las
propiedades de integración numérica, y de eso depende la simulación del sistema.
Para tal efecto se emplea la función odeset de la siguiente forma:
opciones=odeset(’RelTol’,1e-3,’AbsTol’,1e-6,’InitialStep’,1.0e-3,’MaxStep’,1.0e-3)
Error de integración
En cada i-ésimo paso de integración se estima un error local de la iésima componente de la solución; este error debe ser menor o igual
que el error aceptable, el cual es una función de la tolerancia relativa
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.5
121
Sistemas dinámicos de primer orden
RelTol y de la tolerancia absoluta AbsTol. La expresión para e(i)
satisface la siguiente condición: |e(i)| = max(RelTol|x(i), AbsTol(i)|).
RelTol representa el error relativo de tolerancia que se
aplica a todas las componentes xi del vector solución
RelTol
x ∈ IRn .Este parámetro también controla el número
correcto de dı́gitos en todas las componentes xi . El
valor tı́pico RelTol= 1e-3, el cual corresponde al 0.1 %
de exactitud.
Error absoluto de tolerancia que se aplica a todas
las componentes individuales xi del vector solución x.
También determina la exactitud cuando la solución se
aproxima a cero.
Si AbsTol es un vector, entonces su dimensión debe ser
AbsTol
la misma del vector x. El valor de cada componente
de AbsTol se aplica a la correspondiente componente
xi .
Si AbsTol es un escalar, ese valor se aplica a todas las
componentes xi del vector solución x.
Generalmente, el valor tı́pico que se le asigna a AbsTol
es: AbsTol= 1e-6.
NormControl significa la norma del error relativo. Esta opción solicita a la función ode45 que el error
de integración en cada paso cumpla con la siguiente
NormControl
condición: e ≤ max(RelTol x , AbsTol). Se habilita/deshabilita como: on (off). Para funciones suaves, la función ode45 entrega un error equivalente a la
exactitud solicitada. La exactitud es menor para problemas donde el intervalo de integración es grande y
para problemas moderadamente inestables.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
122
Capı́tulo 2: Métodos numéricos
Paso de integración
Especifica el valor inicial del paso de integración.
Representa una cota superior en la magnitud del
primer paso. En caso de no especificarlo, entonces el
InitialStep
tamaño del paso se obtiene como la pendiente de la
solución en el tiempo inicial. Si la pendiente de todas
las componentes de la solución es cero, entonces el
procedimiento puede generar un tamaño de paso muy
grande. Por lo tanto, es recomendable iniciar con un
valor adecuado esta opción.
Representa una cota superior del tamaño del paso,
es un valor escalar positivo que se obtiene de la
MaxStep
siguiente forma: 0.1|tinicial − tfinal |. La ecuación
diferencial tiene soluciones o coeficientes periódicos,
es recomendable inicializar MaxStep= 14 del periodo.
La función ode45 es la que presenta mayor exactitud en el método de integración
para el sistema ẋ = f(x). Sin embargo, debido a esto también puede tomar más
tiempo en dicho proceso.
A continuación se describe otras opciones de funciones para resolver ecuaciones
diferenciales ordinarias de primer orden, cuya sintaxis es exactamente la misma que
la función ode45. Sin embargo, tienen otras caracterı́sticas operativas.
ode23
La función ode23 utiliza el segundo y tercer método de integración. Tiene menor
exactitud comparada con la función ode45. Sin embargo, puede realizar más rápido
el proceso de integración numérica. La sintaxis está dada por:
[t,x]=ode23(’nombre funcion’,ts,cond iniciales,opciones)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.5
Sistemas dinámicos de primer orden
123
ode113
[t,x]=ode113(’nombre funcion’,ts,cond iniciales,opciones)
Esta función se recomienda para resolver sistemas dinámicos complicados; mantiene
un error de integración riguroso. La función ode113 es un método de integración de
orden variable propuesto por Adams-Bashforth-Moulton.
ode15s
[t,x]=ode15s(’nombre funcion’,ts,cond iniciales,opciones)
Para el caso en que el proceso de integración de la función ode45 sea muy lento
debido a la rigidez del sistema dinámico, entonces es recomendable usar la función
ode15s. Esta función es de orden variable, multi pasos basada en diferenciación
numérica (backward o método Gear).
ode23s
[t,x]=ode23s(’nombre funcion’,ts,cond iniciales,opciones)
Es muy útil para sistemas dinámicos masa-resorte con alta rigidez en que el resorte
la matriz de masas es constante. La función ode23s se basa en el método modificado
de segundo orden de Rosenbrock. Debido a que el proceso de integración es por
pequeños pasos, puede ser más eficiente que la función ode15s para tolerancias
pequeñas en el error de integración. Además es mucho más efectivo en sistemas
dinámicos con rigidez donde ode15s no lo es.
ode23t
[t,x]=ode23t(’nombre funcion’,ts,cond iniciales,opciones)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
124
Capı́tulo 2: Métodos numéricos
La función ode23t emplea el método trapezoidal usando una interpolación libre. Es
recomendable para resolver sistemas dinámicos moderados en la rigidez del resorte,
sin utilizar amortiguamiento. La exactitud en la integración es baja.
ode23tb
[t,x]=ode23tb(’nombre funcion’,ts,cond iniciales,opciones)
La función ode23tb es una combinación de métodos de Runge-Kutta y diferenciación
numérica (backward) de segundo orden. Para sistemas dinámicos con alta rigidez del
resorte y errores de integración muy pequeños, la exactitud de integración es baja.
2.5.2
2.5.2. Simulación de sistemas dinámicos ẋ = f (x)
A continuación se presenta una serie de ejemplos ilustrativos cuya finalidad es
mostrar el empleo de las funciones ode en simulación de sistemas mecatrónicos y
robots manipuladores.
♣ Ejemplo 2.11
Considere un sistema dinámico lineal escalar dado de la siguiente forma:
ẋ(t) = −ax(t) + bu(t)
y(t) = cx(t)
donde x es la solución del sistema dinámico y representa la variable de estado.
La entrada del sistema es u(t) y la respuesta es y. Los parámetros están dados
por a, b, c ∈ IR+ .
Realizar la simulación del sistema usando integración numérica a través de la
función ode45. Para una entrada u = 1, y parámetros a = 1.33, b = 2.6 y c = 1.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.5
Sistemas dinámicos de primer orden
125
Solución
El sistema dinámico lineal escalar tiene una función de transferencia (control clásico)
dada por:
x
u
=
b
s+a
y = cx =
cb
s+a
donde s = jw, j representa la parte imaginaria o compleja, y w ∈ IR+ es la frecuencia
en rad/seg. El parámetro a ∈ IR+ es el ancho de banda del sistema y b ∈ IR+ significa
la ganancia del sistema. Por otro lado, c ∈ IR+ es una ganancia de un amplificador
operacional que acopla de manera adecuada la impedancia entre la variable de estado
x y la respuesta del sistema y.
Para obtener la ecuación diferencial (modelo dinámico) a partir de la función de
transferencia, entonces s no representa frecuencia, en este caso se interpreta como
d
un operador s = dt
:
b
x
=
u
s+a
y
donde se ha empleado que sx =
d
dt x
⇒ sx + ax = bu
⇒ ẋ = −ax + bu
=
cx
= ẋ.
La figura 2.9 muestra el diagrama a bloques del sistema dinámico lineal.
Figura 2.9 Diagrama a bloques de un sistema dinámico lineal.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
126
Capı́tulo 2: Métodos numéricos
El programa que implementa al sistema dinámico lineal o planta de estudio se
encuentra contenido en el cuadro 2.13 archivo cap2 ejemplo26 (M-File). Para
resolver el sistema dinámico, se emplea la función de integración numérica ode45.
Por facilidad, se emplea una entrada constante de magnitud unitaria. Los valores de
los parámetros de la planta son a = 1.33 y b = 2.6. La ganancia del amplificador es
unitaria c = 1.
Para ejecutar correctamente la función cap2 ejemplo26 se requiere del programa
simuejemplo26 que se encuentra listado en el cuadro 2.13, donde se definen las
propiedades de integración usando la función odeset, las cuales son incorporadas en
la función ode45. El tiempo de simulación es de 0 a 10 segundos con incrementos de
una milésima de segundo.
La salida del programa 2.13 se presenta en la figura 2.10, observe que la respuesta a
una entrada constante de magnitud unitaria no produce sobre impulso para sistemas
lineales de primer orden. En estado estacionario, la salida x(t) llega a un valor de
1.9549 (frecuencia cero o DC: s = 0) debido a que la función de transferencia adquiere
la forma ab = 1.9549.
Figura 2.10 Respuesta a una entrada constante unitaria del sistema lineal escalar.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.5
Sistemas dinámicos de primer orden
Código Fuente 2.13
127
Sistema lineal escalar
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 ejemplo26
% Simulación de un sistema lineal escalar
% de la forma ẋ = −ax + bu
%Entradas de la función: t tiempo
% x vector de estados
% ẋ (xp) es la velocidad del estado x
% u es la entrada al sistema
% a, b son los parámetros
% Salida derivada de la variable de estados: xp
% Para su correcta ejecución requiere del archivo
%cap2 simuejemplo26
Sistema lineal escalar
1
function xp =cap2 ejemplo26(t,x)
2
%parámetros del sistema: a, b.
3
%el parámetro a representa el ancho de banda
4
5
%del sistema dinámico lineal.
a=1.33;
6
%la proporción
7
%de la función de transferencia en frecuencia cero.
b=2.6;
8
9
b
a
es la ganancia
%señal de entrada unitaria
u=1;
10
11
12
%sistema dinámico lineal escalar
xp=-a*x+b*u;
13
%fin de función
14
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
128
Capı́tulo 2: Métodos numéricos
Código Fuente 2.14
Simulación del ejemplo 2.11
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 simuejemplo26
% Realiza la simulación de un sistema dinámico lineal escalar
% Requiere del archivo cap2 ejemplo26.m
Simulación del ejemplo 2.11
1
2
clc;
clear all;
3
close all;
4
%tiempo de simulación
ti=0; %tiempo inicial
tf = 10; % tiempo de simulación (segundos)
5
6
7
8
9
h=0.001; % incremento de un milisegundo
ts=ti:h:tf; % vector de tiempo
cond iniciales=0;
10
%opciones del proceso de integración numérica
11
opciones=odeset(’RelTol’,h, ’AbsTol’,1e-06,’InitialStep’,h,’MaxStep’,h);
12
% función ode45 para integración numérica
13
% solución del sistema x(t) por integración numérica Runge-Kutta de cuarto y
quinto orden:
14
disp(’Simulación de un sistema lineal escalar’)
[t,x]=ode45(’cap2 ejemplo26’,ts,cond iniciales,opciones);
15
16
% ganancia del amplificador que acopla impedancia de la variable de estados x(t)
con la salida.
17
c=1;
18
%salida del sistema
y=c*x;
19
20
21
% gráfica del sistema lineal escalar
plot(t,y)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.5
129
Sistemas dinámicos de primer orden
♣ ♣ Ejemplo 2.12
Considere un sistema dinámico lineal de segundo orden, dado por la siguiente
ecuación:
ẋ(t) =
0
1
−ωn2 −2ρωn
y(t) = [ 1 0 ] x(t)
x(t) +
0
ωn
u(t)
donde x ∈ IRn es el vector solución del sistema dinámico y representa la variable
de estado. La entrada del sistema es u(t) y la respuesta es y. Los parámetros están
dados por: ωn ∈ IR+ es la frecuencia natural del sistema, ρ ∈ IR+ es el factor de
amortiguamiento (damping) y s = jw, j es la componente imaginaria o compleja,
w es la frecuencia en rad/seg, t es la evolución del tiempo.
Solución
El sistema dinámico lineal de segundo orden puede ser deducido de la siguiente
función de transferencia
y
u
=
ωn
.
s2 + 2ρωn s + ωn2
Manipulando la función de transferencia y considerando que s =
s2 y(t) = ÿ(t), sy(t) = ẏ(t), se obtiene lo siguiente:
y
ωn
= 2
u
s + 2ρωn s + wn2
d
dt ,
s2 =
d2
dt2 ,
⇒ s2 y(t) + 2ρωn sy(t) + ωn2 y(t) = ωn u(t)
⇒ ÿ(t) + 2ρωn ẏ(t) + ωn2 y(t) = ωn u(t).
Ahora se realiza un cambio adecuado de variable. Sea x1 (t) = y(t), x2 (t) = ẋ1 (t) =
ẏ(t), entonces
ẋ2 (t) + 2ρωn x2 (t) + ωn2 x1 (t) = ωn u(t).
Por lo tanto, el sistema dinámico de la forma ẋ(t) = Ax(t) + Bu(t) está dado de la
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
130
siguiente forma:
Capı́tulo 2: Métodos numéricos
x1
0
1
0
d x1
u
=
+
2
dt x2
x2
−ωn −2ρωn
ωn
x
A
B
ẋ
x1
y = cT x = [ 1 0 ]
.
x2
El programa que implementa al sistema dinámico lineal de segundo orden se
encuentra descrito en el cuadro 2.15 que corresponde al archivo cap2 ejemplo27
(M-File). Para resolver el sistema dinámico por integración numérica, se emplea la
función ode45. Por facilidad, se emplea una entrada constante unitaria para estudiar
la respuesta del sistema para varios valores de amortiguamiento ρ y frecuencia de
resonancia ωn .
Para ejecutar correctamente la función cap2 ejemplo27 se requiere del programa
simuejemplo27 que se encuentra listado en el cuadro 2.15, donde se definen las
propiedades de integración usando la función odeset, las cuales son incorporadas en
la función ode45. El tiempo de simulación es de 0 a 10 segundos con incrementos de
una milésima de segundo.
La salida del programa 2.15 se presenta en la figura 2.11, observe que la respuesta
a una entrada constante de magnitud unitaria puede generar varios sobre impulsos,
esto depende del valor que tome ρ. Por ejemplo, para valores de 0 < ρ < 1 se le
conoce como sub-amortiguado, se caracteriza por presentar una etapa transitoria
muy abrupta, rápida y compuesta por varios sobre impulsos y oscilaciones. Cuando
ρ = 1 se le conoce como amortiguamiento crı́tico, disminuye considerablemente
las oscilaciones. Sobre amortiguado es para valores de ρ > 1 el cual no presenta
oscilaciones, es muy lento para llegar a la etapa transitoria.
La figura 2.11 fue obtenida variando los valores de ρ = 0.2, 0.4, 0.6, 0.8, 1, 2, para
generar la respuesta sub-amortiguada, amortiguamiento crı́tico y sobre amortiguada.
Se puede observar las oscilaciones muy pronunciadas que presenta en la etapa subamortiguada y a medida que ρ va aumentando su valor, entonces las oscilaciones
gradualmente van disminuyendo hasta desaparecer completamente para ρ > 1.
Cuando ρ = 0, el sistema oscila a la frecuencia natural de resonancia ωn .
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.5
Sistemas dinámicos de primer orden
Código Fuente 2.15
131
Sistema lineal de segundo orden
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 ejemplo27
%Sistema dinámico lineal de segundo orden
%Para su correcta ejecución requiere del
%programa cap2 simuejemplo27
%Entradas: t tiempo
% x vector de estados
% Salida xp=Ax+Bu
% la matriz A está formada por ρ factor
% de amortiguamiento y ωn la frecuencia natural
% de resonancia mecánica.
Sistema lineal de segundo orden
1
function xp =cap2 ejemplo27(t,x)
2
% frecuencia natural de resonancia
wn=1;
3
4
% factor de amortiguamiento
rho=1;
A=[ 0, 1;
-wn∧ 2, -2*rho*wn];
5
6
7
8
10
%matriz B
B=[0;
wn];
11
%señal de entrada
12
u=1;
13
%sistema dinámico lineal
xp=A*x+B*u;
9
14
15
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
132
Capı́tulo 2: Métodos numéricos
Código Fuente 2.16
Simulación del ejemplo 2.12
%MATLAB Aplicado a Robótica y Mecatrónica
%Capı́tulo 2 Métodos numéricos
%Editorial Alfaomega
%Fernando Reyes Cortés
%Archivo cap2 simuejemplo27
% Simulación: sistema dinámico lineal de primer orden
% requiere del archivo cap2 ejemplo27.m
Simulación del ejemplo 2.12
1
clc; clear all; close all;
2
% parámetros de simulación:
3
ti=0; tf = 10; h=0.001;
4
% intervalo de simulación
ts=ti:h:tf;
cond iniciales=[0;0];
5
6
7
10
opciones=odeset(’RelTol’,h, ’AbsTol’,1e-06,’InitialStep’,h,’MaxStep’,h);
disp(’Simulación de un sistema lineal de segundo orden’)
[t,x]=ode45(’cap2 ejemplo27’,ts,cond iniciales,opciones);
y=x(:,1); %salida del sistema
11
plot(t,y)
8
9
Figura 2.11 Respuesta a una entrada escalón.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
2.6
Resumen
133
2.6 Resumen
M
étodos de integración y diferenciación numérica representan una herramienta poderosa de cómputo en la implementación práctica para análisis y estudios de esquemas de control en simulación y en evaluación práctica de sistemas
mecatrónicos y robots manipuladores.
Existen varios métodos prácticos para resolver una integral, entre los más
importantes se encuentran trapezoidal, Simpson, Euler recursivo, Runge-Kutta. Sin
embargo, dependiendo de la naturaleza del problema, la selección de un método
influye directamente en el desempeño, calidad y fidelidad del proceso de simulación
o experimentación.
Por ejemplo, el método recursivo de Euler es muy rápido y puede ser incluido en el
código del experimento para realizarse en tiempo real. Sin embargo, la exactitud con
que aproxima la integral es pobre en contraste con otros métodos como el trapezoidal
o el de Simpson, que pudieran ser mejores opciones para propósitos de simulación.
Para el caso de esquemas de control de robots manipuladores donde se involucre
alguna integral como el caso del algoritmo proporcional integral derivativo, el método
recursivo de Euler puede ser una buena opción a pesar de que la exactitud en la
aproximación de dicha integral no sea bueno. Esta caracterı́stica no es importante
debido a que el desempeño del algoritmo de control depende de la sintonı́a de las
ganancias y por lo tanto la pobre exactitud queda absorbida por la ganancia integral.
Para el estudio y análisis de la dinámica en sistemas mecatrónicos o robots
manipuladores es importante convertir mediante un adecuado cambio de variables
de estado (variables fase) el modelo dinámico a la forma de una ecuación diferencial
de primer orden ẋ = f (x).
La simulación de estos sistemas dinámicos se realiza por medio de la función ode45
(método de Runge-Kutta para orden cuarto y quinto), con pasos de integración de un
milisegundos. Las propiedades del método de integración, ası́ como las condiciones
iniciales del vector x(0) se configuran con la función odeset.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
134
Capı́tulo 2: Métodos numéricos
Parte I referencias selectas
E
xiste una extensa literatura sobre los aspectos básicos de MATLAB,
ası́ como métodos numéricos. A continuación se presenta literatura selecta
correspondiente a la Parte I donde el lector puede profundizar sobre los tópicos
presentados.
Capı́tulo 1 Conceptos básicos
http://www.mathworks.com
Delores M. Etter. “Engineering problem solving with MATLAB”.
Second edition. Prentice-Hall. 1997.
Shoichiro Nakamura. “Análisis numérico y visualización gráfica
con MATLAB ”. Pearson Eduación. 1997.
Ashish Tewari. “Modern control design with MATLAB and Simulink”.
John Wiley & Sons, LTD. 2002.
The MathWorks. “Matehmatics: The language of technical computing”.
The MathWorks. 2005.
The MathWorks “Getting started with MATLAB 7 ”. The MathWorks. 2007.
David
Báez
López
&
Ofelia
Cervantes
Villagomez.
“ MatLab con aplicaciones a la ingenierı́a, fı́sica y finanzas”.
2da edición Alfaomega, diciembre 2011.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
135
Parte I problemas propuestos
Capı́tulo 2 Métodos numéricos
Tom M. Apostol. ‘Calculus’. Reverté. 2da. ed., vols. I y II, 2006.
Norman B. Hasser, Joseph P. La Salle, Joseph A. Sullivan.
‘Análisis matemático’. Trillas, 1970.
Watson Fulks. ‘Cálculo avanzado’. Limusa. 1983.
Adrian Biran & Moshe Breiner. ‘MatLab for engineers’. Addison
Wesley, 1997.
William H Press, Saul A. Teukoisky, William T. Vetterling,
& Brian P. Flannery. ‘Numerical recipes in C++’. Cambridge
university Press. 2002.
Parte I problemas propuestos
E
n esta sección se presentan una serie de ejercicios con la finalidad que el lector
mejore sus conocimientos sobre métodos numéricos.
Capı́tulo 1 Conceptos básicos
1.1 Considere el programa 1.13, realizar los cambios necesarios en el código fuente
para encontrar los mı́nimos y máximos locales de la función.
1.2 Dado la siguiente secuencia de números:
datos = {1, 4, −3, 8, 12, 7, 2, 5, −12, 5, 7, 1, 0, 2, 22, 15, 4, 6, 2, −1, −3, 11}
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
136
Capı́tulo 2: Métodos numéricos
escribir un programa donde se use instrucciones if, for, while para realizar
lo siguiente:
(a) Ordenar los números de menor a mayor.
(b) Ordenar los números de mayor a menor.
(c) Encontrar el mı́nimo y máximo.
1.3 Calcular la norma euclidiana de los siguientes vectores:
⎡
1
⎤
⎢
⎥
⎢ −0.888 ⎥
⎢
⎥
⎥
x = ⎢
⎢ 4.35 ⎥
⎢
⎥
⎣ 3 ⎦
⎡
4
⎢ 6
⎢
y=⎢
⎣ 5.67
4
⎤
⎥
⎥
⎥
⎦
−0.90
⎡
0.001
⎤
⎢
⎥
4
⎢
⎥
⎢
⎥
⎢
⎥.
z=⎢
7
⎥
⎢
⎥
⎣ −12.333 ⎦
3
4
Para todos los vectores x ∈ IR5 , y ∈ IR4 , z ∈ IR5 , obtener la norma euclidiana
a través de los siguientes métodos.
(a) x =
(b) x =
(c) x =
√
xT x.
n
i=1 .
x21 + x22 + x23 + x24 + x25 .
(d) x =norma(x,2).
1.4 En referencia del ejercicio inmediato anterior considere los vectores x, y;
implementar la multiplicación y división entre las componentes de los vectores
a través operaciones con arreglos.
1.5 Obtener la gráfica de las siguientes funciones:
(a) f (x) = x2 , −10 < x < 10.
(b) f (x) = tan(x), −15 < x < 15.
(c) f (x) =
x
,
1+x2
−100 < x < 100.
(d) f (x) = [ 1 − e−0.01∗x ] senh(x), −3 < x < 3.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
137
Parte I problemas propuestos
Capı́tulo 2 Métodos numéricos
2.1 Considere los siguientes sistemas de ecuaciones lineales:
⎤
⎡ ⎤
⎡
2
2x1 + 3.33x2 + 4.56x3
⎥
⎢ ⎥
⎢
⎣ 4 ⎦ = ⎣ 8x1 + 12.56x2 + 8.12x3 ⎦
9
−3x1 + 8.45x2 − 7.12x3
⎡
6
⎤
⎡
⎤
1.11x1 + 8.13x2 + 2.14x3 + 6.73x4 + 12.55x5
⎢
⎥
⎢
⎥
⎢ −4x1 + −8.34x2 + 4.67x3 + 4.10x4 + 2.48x5 ⎥
⎢ −3 ⎥
⎥
⎢
⎢
⎥
⎢ 10.44 ⎥ = ⎢ 1.2x1 + −5.6x2 + 2.12x3 + −3.24x4 + 12.55x5 ⎥ .
⎢
⎢
⎥
⎥
⎢
⎥
⎢
⎥
⎣ 2.35x1 + 4.5x2 + 5.89x3 + 0.78x4 + 0.34x5 ⎦
⎣ 6.12 ⎦
0
0.67x1 + 1.21x2 + −0.98x3 + 0.34x4 + 16.12x5
Resuelva el sistema de ecuaciones usando los siguientes métodos
(a) x = A−1 y.
(b) x=inv(A)y.
(c) x=A\y.
(d) x=linesolve(A,y).
(e) Regla de Cramer.
2.2 ¿Qué argumentos puede utilizar para obtener la derivada de la función |t|?
2.3 ¿Cómo puede obtener la derivada con respecto al tiempo de una función
discontinua como la función signo(t)?
2.4 Aproximar la derivada con respecto al tiempo por diferenciación numérica de
las siguientes funciones:
f1 (t) = t7
f2 (t) = |t|
f3 (t) = signo(t)
f4 (t) = tanh(t)
f5 (t) =
atan (t)
Comparar los resultados con el correspondiente método analı́tico.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
138
Capı́tulo 2: Métodos numéricos
2.5 Calcular la integral de las siguientes funciones:
μ
I1 =
μ
x7 dx
I2 =
μi
μ
I3 =
signo(x)dx
I4 =
μi
μ
I5 =
|x|dx
μi
μ
tanh(x)dx
μi
atan (x) dx
μi
considere el intervalo de integración μ ∈ [−10, 10].
Realice el cálculo de la integral para cada función utilizando los siguientes
métodos:
(a) Trapezoidal.
(b) Simpson.
(c) Euler.
comparar y analizar los resultados.
2.6 Utilizar el programa del ejemplo 2.7 para calcular la integral de la siguientes
funciones
(a) e−x
(b) cos(x)
(c) x6
realizando un barrido del intervalo de integración por pasos de 0.001 para
x ∈ [−10, 10]. Comparar los resultados obtenidos con su respectivo método
analı́tico.
2.7 Realizar la simulación de los siguientes sistemas dinámicos (t ∈ [0, 10]):
(a)
ẋ =
(b)
ẋ =
Alfaomega
ẋ1
ẋ2
ẋ1
ẋ2
=
=
sen(x2 )
x31
atan (x1 + x2 )
cos(x2 x1 )
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Parte II
Cinemática
La Parte II está dedicada al estudio de la cinemática directa de robots
manipuladores y sistemas mecatrónicos, y se componen de tres capı́tulos. El capı́tulo
3 incluye Preliminares matemáticos para apoyar la representación de matrices
homogéneas. El capı́tulo 4 Cinemática directa cubre los temas de cinemática
directa e inversa, cinemática diferencial y jacobiano de robots manipuladores,
ası́ como la metodologı́a Denavit-Hartenberg. El capı́tulo 5 Cinemática directa
cartesiana está destinado para analizar el modelo que relaciona las coordenadas
cartesianas con las coordenadas articulares para las principales configuraciones de
los robots industriales (sin tomar en cuenta la orientación de la herramienta de
trabajo).
Capı́tulo 3 Preliminares matemáticos
incluye
los temas de producto punto entre vectores, matrices ortogonales y sus
propiedades matemáticas, reglas de rotación, matrices de transformación
homogénea para traslación y rotación, ası́ como la presentación de varios
ejemplos ilustrativos y el desarrollo de librerı́as para MATLAB.
Capı́tulo 4 Cinemática directa
presenta los conceptos de
cinemática directa, cinemática inversa, cinemática diferencial y el jacobiano del
robot. También explica la metodologı́a de Denavit-Hartenberg la cual usa un
grupo de parámetros geométricos para determinar la matriz de transformación
homogénea que caracteriza al modelo cinemático de robots manipuladores
industriales.
Capı́tulo 5
Cinemática directa cartesiana
realiza un análisis detallado de la cinemática cartesiana de las principales
configuraciones de robots industriales. Un conjunto de librerı́as se desarrollan
para llevar a cabo simulación con robots manipuladores.
La parte II concluye con:
Referencias selectas
Problemas propuestos
Capı́tulo
3
Preliminares
matemáticos
i
Hi−1
=
3.1 Introducción
3.2 Producto interno
3.3 Matrices de rotación
3.4 Reglas de rotación
3.5 Transformaciones de traslación
3.6 Transformaciones homogéneas
3.7 Librerı́as para matrices homogéneas
3.8 Resumen
Rii−1
dii−1
0T
1
Objetivos
Presentar los preliminares matemáticos para la cinemática directa de
robots manipuladores y sistemas mecatrónicos, asimismo desarrollar librerı́as en lenguaje MATLAB (toolbox) para las matrices de transformación homogénea de rotación y traslación.
Objetivos particulares:
Producto interno de vectores.
Matrices de rotación y traslación.
Transformaciones homogéneas.
Librerı́as de matrices homogéneas para MATLAB.
3.1
Introducción
143
3.1 Introducción
E
l posicionamiento del extremo final del robot en el espacio tridimensional
(pose) requiere de 6 coordenadas: 3 coordenadas para la posición cartesiana
y 3 coordenadas para la orientación de la herramienta de trabajo. A la relación que
existe entre las coordenadas articulares del robot con las coordenadas cartesianas y
la orientación de la herramienta de trabajo colocada en el extremo final del robot se
le denomina cinemática directa.
Como parte de la representación matemática de la cinemática directa de robots
manipuladores se encuentra el uso de transformaciones homogéneas para representar
orientación y traslación de la herramienta de trabajo, con respecto al sistema de
referencia fijo ubicado generalmente en la base del robot.
Como preámbulo al tema de matrices de transformación homogénea están los
conceptos de producto punto o escalar entre vectores y matrices ortogonales.
El producto punto permite utilizar proyecciones de ortogonalidad de los ejes
principales de un sistema de referencia Σ1 (x1 , y1 , z1 ) relativo a otro sistema
de referencia Σ0 (x0 , y0 , z0 ). Otro de los temas de prerrequisito es el de las
matrices ortogonales para modelar la orientación y traslación de la herramienta
de trabajo respecto al sistema fijo del robot Σ0 (x0 , y0 , z0 ). Resaltan las propiedades
matemáticas de las matrices ortogonales que facilitan el análisis y descripción de
movimientos de rotación y traslación. En función de las propiedades matemáticas
de las matrices ortogonales se generan diferentes reglas de rotación.
Las matrices homogéneas incluyen estos conceptos para ofrecer una representación
compacta de la matriz de rotación, que determina la orientación relativa de un
sistema de referencia Σ1 (x1 , y1 , z1 ) con respecto a un sistema de referencia fijo
Σ0 (x0 , y0 , z0 ) y del vector de coordenadas o de traslación x0 = [ x0 , y0 , z0 ]T .
Con la estructura matemática de la transformación homogénea se desarrolla un
conjunto de librerı́as para propósitos de simulación de cinemática directa de robots
manipuladores y sistemas mecatrónicos.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
144
Capı́tulo 3: Preliminares matemáticos
3.2 Producto interno
P
ara modelar la orientación de la herramienta de trabajo del robot se encuentra
el producto escalar o producto interno, también conocido como producto punto
(dot product), el cual permite utilizar los conceptos de la geometrı́a euclidiana
tradicionales como longitudes, ángulos, proyecciones geométricas, ortogonalidad en
dos y tres dimensiones de los sistemas de referencia asociados al robot y de la
herramienta de trabajo.
El término espacio euclidiano se denomina ası́ en honor del matemático y filósofo
griego Euclides, y se utiliza para distinguirlo de otro tipo de espacios como los
espacios curvos de la geometrı́a no euclidiana y la teorı́a de la relatividad de Einstein.
El espacio euclidiano es un tipo de espacio geométrico donde se satisfacen los axiomas
de la geometrı́a de Euclides. Como casos particulares del espacio euclidiano se
encuentran la recta real, el plano y el espacio tridimensional, que corresponden a las
dimensiones 1, 2 y 3, respectivamente.
El concepto abstracto de espacio euclidiano geométrico se generaliza para el caso
general de espacio euclidiano n-dimensional, el cual también se considera como un
espacio vectorial n-dimensional real.
Al producto interno x · y es una operación definida sobre dos vectores x, y ∈ IRn de
un espacio euclidiano cuyo resultado es un número o escalar (los espacios vectoriales
que incluyen al producto interno reciben el nombre de espacios prehilbertianos).
Considere los siguientes vectores x, y ∈ IRn , el producto interno vectorial se define
como:
x · y = xT y =
n
xi yi = x1 y1 + x2 y2 + · · · + xn yn .
(3.1)
i=1
El producto punto se le llama producto escalar debido a que también se puede
realizar como: x · y = xT y.
En un espacio euclidiano real, el producto interno (3.1) también acepta una definición
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.2
145
Producto interno
geométrica dada por:
x·y = x
y cos(θ)
(3.2)
donde θ es el ángulo que forman los vectores x y y (ver figura 3.1), y las
normas euclidianas se encuentran definidas por x = x21 + x22 + · · · + x2n , y =
y12 + y22 + · · · + yn2 , respectivamente.
Geométricamente y cos(θ) representa la proyección del vector y sobre la dirección
del vector x, como se presenta en la figura 3.1. El concepto de proyección geométrica
se usa particularmente en las matrices rotacionales para modelar la orientación del
sistema de referencia de la herramienta de trabajo del robot.
Figura 3.1 Producto interno vectorial x · y.
Considere x, y, z ∈ IRn , y α ∈ IR; el producto interno tiene las siguientes
propiedades:
Conmutativa: x · y = y · x.
Distributiva: z · (x + y) = z · x + z · y.
Asociativa: αx · y = x · αy = x · yα.
La expresión geométrica del producto escalar permite calcular el coseno del
ángulo θ existente entre los vectores x y y de la siguiente manera:
cos(θ) =
x·y
x1 y1 + x2 y2 + · · · + xn yn
=
.
2
x y
x1 + x22 + · · · + x2n y12 + y22 + · · · + yn2
Vectores ortogonales: x · y = 0 ⇒ x ⊥ y, θ =
π
2
rad (90 grados).
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
146
Capı́tulo 3: Preliminares matemáticos
Vectores paralelos o con la misma dirección si el ángulo que forman es 0 rad
(0 grados) o π rad (180 grados): x · y = x y .
x · x = 0 ⇐⇒ x = 0 ∈ IRn .
Si x = 0 ⇒ x · x > 0.
La norma
euclidiana de un vector x se puede expresar como: x =
√
n
2
xT x =
x21 + x22 + · · · + x2n .
i=1 xi =
√
x·x=
MATLAB contiene la función dot(x,y) para realizar la operación producto interno
x · y de los vectores x, y ∈ IRn , con la siguiente estructura de sintaxis:
x·y =
dot(x,y)
x · y = dot(x,y,n)
x · y=dot(x,y,n) retorna el producto escalar de los vectores x, y con dimensión n.
Nota: el producto punto x · y equivale a realizar la operación en MATLAB:
x · y=x’*y.
La norma euclidiana x de un vector x ∈ IRn , también conocida como norma 2, se
puede calcular utilizando la función norm con la siguiente sintaxis:
x =norm(x,2)
♣ Ejemplo 3.1
Sean x, y ∈ IR2 con las siguientes componentes respectivamente:
2
8
x =
y=
4
−3
obtener el producto punto x · y y el ángulo θ que forman entre los vectores x, y.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.2
147
Producto interno
Solución
Puesto que los vectores x, y ∈ IR2 están formados por x = [ 2 4 ]T y y = [ 8 −3 ]T ,
y tomando en cuenta la definición del producto punto se obtiene lo siguiente:
x · y = x1 y1 + x2 y2 = 2 (8) − 4 (3) = 16 − 12 = 4.
El ángulo que forman los vectores x y y se obtiene como:
cos(θ) =
=
x·y
x1 y1 + x2 y2
=
2
x y
x1 + x22 y12 + y22
4
4
= 0.1046
√
=
2
2
2
2
(4.4721)(8.544)
2 + 4 8 + (−3)
lo que significa que θ =1.465 rad (83.99 grados).
Observe que evidentemente se cumple:
√ √
x · y = x y cos(θ) = 20 73 cos(1.465) = (4.472135)(8.544003)(0.1046) = 4.
El cuadro 3.1 presenta el código fuente para realizar el desarrollo del ejemplo 3.1.
Código Fuente 3.1
Producto interno o escalar
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %Programa cap3 prodint.m
Producto interno o escalar
1
2
3
4
5
6
clc; clear all; close all;
disp(’Producto interno o escalar de vectores’)
x = [2; 4 ]; %vector columna de dos renglones x ∈ IR2
y = [8; -3]; %vector columna de dos renglones y ∈ IR2
xdoty=dot(x,y) %producto interno x · y usando la función dot
xdoty m=x’*y %forma matemática del producto interno x · y
7
theta=acos(x’*y/(norm(x,2)*norm(y,2))) %ángulo que forman los vectores
x, y ∈ IR2
8
%forma geométrica del producto interno: x · y = x
xdoty geometrica=norm(x,2)*norm(y,2)*cos(theta)
9
y cos(θ)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
148
Capı́tulo 3: Preliminares matemáticos
3.3 Matrices de rotación
L
a figura 3.2 muestra dos sistemas de referencia cartesianos, asociados a
un cuerpo rı́gido, representados por Σ0 ( x0 , y0 , z0 ) y Σ1 ( x1 , y1 , z1 ), ambos
sistemas comparten el mismo origen. El sistema de referencia Σ1 ( x1 , y1 , z1 )
mantiene una orientación relativa al sistema de referencia fijo Σ0 ( x0 , y0 , z0 ).
Figura 3.2 Sistemas de referencia fijo Σ0 y rotado Σ1 .
Considérese un punto p sobre el cuerpo rı́gido, con respecto al sistema Σ0 ( x0 y0 z0 )
tiene coordenadas p0 = [x0 , y0 , z0 ]T , el mismo punto p se representa como p1 =
[x1 , y1 , z1 ]T con respecto al sistema de referencia Σ1 ( x1 , y1 , z1 ). El problema que
se plantea es encontrar la relación que hay entre las coordenadas de un punto
p1 en el sistema de referencia Σ1 ( x1 , y1 , z1 ) con el vector p0 definido en el
sistema de referencia Σ0 ( x0 , y0 , z0 ). Considere vectores bases para cada sistema
de referencia Σ0 y Σ1 . Sean {i0 , j 0 , k0 } vectores unitarios a lo largo de los
ejes x0 , y0 , z0 , respectivamente. Es decir, i0 = [ 1, 0, 0 ]T , j 0 = [ 0, 1, 0 ]T , k0 =
[ 0, 0, 1 ]T . Similarmente se definen los vectores unitarios {i1 , j 1 , k1 } para el sistema
Σ1 ( x1 , y1 , z1 ).
Un vector que va desde el origen común para ambos sistemas hasta el punto p, puede
ser expresado en función de cualquiera de las dos bases de vectores unitarios de la
siguiente forma:
p0 = p0xi0 + p0y j 0 + p0z k0
Alfaomega
con respecto al sistema Σ0
(3.3)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.3
149
Matrices de rotación
p1 = p1xi1 + p1y j 1 + p1z k1
con respecto al sistema Σ1
(3.4)
Los vectores p0 , p1 representan al mismo punto p. Tomando en cuenta las ecuaciones
(3.3) y (3.4) la relación que hay entre sus componentes adquiere la siguiente forma:
p0x = p0 · i0 = p1 · i0
= p1xi1 · i0 + p1y j 1 · i0 + p1z k1 · i0
(3.5)
p0y = p0 · j 0 = p1 · j 0
= p1xi1 · j 0 + p1y j 1 · j 0 + p1z k1 · j 0
(3.6)
p0z = p0 · k0 = p1 · k 0
= p1xi1 · k 0 + p1y j 1 · k0 + p1z k1 · k0 .
(3.7)
Estas ecuaciones pueden ser escritas de manera compacta como:
p0 = R10 p1
(3.8)
donde R10 representa la siguiente matriz
⎡
i1 · i0
⎢
1
R0 = ⎣ i1 · j 0
j1 · j0
⎥
k1 · j 0 ⎦ .
i1 · k 0
j 1 · k0
k1 · k0
j 1 · i0
k1 · i0
⎤
(3.9)
La matriz R10 ∈ IR3×3 es la matriz de transformación de las coordenadas del
punto p del sistema de referencia Σ1 ( x1 , y1 , z1 ) hacia las coordenadas del sistema
Σ0 ( x0 , y0 , z0 ). En otras palabras, dado un punto p1 en el sistema Σ1 ( x1 , y1 , z1 ),
entonces R10 p1 representa el mismo vector expresado con respecto al sistema de
referencia Σ0 ( x0 , y0 , z0 ).
Obsérvese que las columnas de R10 son los cosenos directores de los ejes coordenados
x1 , y1 , z1 respecto de los ejes coordenados x0 , y0 , z0 . Por ejemplo, la primera columna
[i1 · i0 , i1 · j0 , i1 · k0 ]T especifica la dirección del eje x1 relativa al sistema de referencia
Σ0 .
Similarmente se puede obtener el punto p1 en función del punto p0 :
p1x = p1 · i1 = p0 · i1
= p0x i0 · i1 + p0y j 0 · i1 + p0z k 0 · i1
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
150
Capı́tulo 3: Preliminares matemáticos
p1y = p1 · j 1 = p0 · j 1
= p0x i1 · j 1 + p0y j 1 · j 1 + p0z k1 · j 1
p1z = p1 · k 1 = p0 · k1
= p0x i1 · k1 + p0y j 1 · k 1 + p0z k 1 · k1
p1 = R01 p0
⎡
i0 · i1
⎢
0
R1 = ⎣ i0 · j 1
j0 · j 1
⎥
k0 · j 1 ⎦ .
i0 · k 1
j 0 · k1
k0 · k1
j 0 · i1
k0 · i1
⎤
(3.10)
(3.11)
La matriz R01 ∈ IR3×3 (3.11) representa la matriz inversa de la transformación R10
(3.9). Debido a que el producto interno de vectores unitarios cumple la propiedad
conmutativa, entonces i1 · j 1 = j 1 · i1 , i0 · j 0 = j 0 · i0 , etc., por lo que resulta:
−1 1 T
R01 = R10
= R0
(3.12)
La matriz R10 cuya inversa es su transpuesta se denomina matriz ortogonal. La
norma de los vectores columna de R10 son de magnitud unitaria y mutuamente
ortogonales, el determinante de R10 es ±1. Si el sistema de referencia se selecciona
de acuerdo con la regla de la mano derecha, entonces el determinante de R10 es 1.
La matriz R10 se denomina matriz de rotación y pertenece a la clase de matrices
ortogonales que se denotan como SO(3).
Notación
La matriz R10 representa la orientación del sistema Σ1 ( x1 , y1 , z1 ) respecto al sistema
Σ0 ( x0 , y0 , z0 ). R21 representa la orientación del sistema Σ2 ( x2 , y2 , z2 ) respecto al
sistema Σ1 ( x1 , y1 , z1 ), y ası́ sucesivamente. Mientras que la transformación inversa
R01 significa la orientación del sistema de referencia Σ0 ( x0 , y0 , z0 ) relativa al sistema
de referencia Σ1 ( x1 , y1 , z1 ). De manera análoga, R12 es la transformación inversa de
coordenadas del sistema de referencia Σ1 ( x1 , y1 , z1 ) hacia el sistema Σ2 ( x2 , y2 , z2 ).
Hay varios métodos para expresar la orientación del sistema de referencia
Σ1 (x1 , y1 , z1 ) con respecto al sistema de referencia fijo Σ0 (x0 , y0 , z0 ), entre los más
usuales se encuentra la rotación con respecto a uno de los ejes principales x0 , y0 , y0 .
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.3
151
Matrices de rotación
A continuación se tratan los casos de rotación alrededor de un eje principal.
3.3.1
3.3.1. Matriz de rotación alrededor del eje z0
Considere que el sistema de referencia Σ1 ( z1 , y1 , z1 ) el cual se encuentra rotado un
ángulo θ alrededor del eje z0 del sistema Σ0 ( z0 , y0 , z0 ). Obtener la matriz resultante
de transformación R10 .
Como se muestra en la figura 3.3, los ejes z0 y z1 son paralelos. El signo del ángulo
θ está dado por la regla de la mano derecha. Por convención, un ángulo positivo es
aquel cuyo sentido de rotación es contrario al movimiento de las manecillas del reloj.
Figura 3.3 Rotación de un ángulo θ alrededor del eje z.
De la figura 3.3 se obtienen las siguientes ecuaciones:
i1 · i0 = cos(θ)
j 1 · i0 = − sen(θ)
j 1 · j 0 = cos(θ)
i1 · j 0 = sen(θ)
k0 · k1 = 1
todos los demás productos punto son cero, puesto que el ángulo que existe entre los
vectores unitarios i0 , i1 , j 0 , y j 1 con k0 y k 1 es de 90 grados, excepto entre ellos
mismos, puesto que k0 y k1 forman un ángulo de 0 grados: k1 · i0 = cos( π2 ) =
0, k1 · j 0 = cos( π2 ), i1 · k0 = cos( π2 ) = 0, y j 1 · k 0 = cos( π2 ) = 0.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
152
Capı́tulo 3: Preliminares matemáticos
Notación
La matriz (3.13) se conoce como matriz de rotación alrededor del eje z y es
representada por Rz (θ).
⎡
− sen(θ) 0
cos(θ)
⎢
Rz (θ) = ⎣ sen(θ)
0
⎤
⎥
0⎦.
cos(θ)
0
(3.13)
1
La matriz de rotación Rz (θ) se interpreta como una matriz que especifica la
orientación del sistema de referencia Σ1 ( x1 , y1 , z1 ) relativo al sistema de referencia
Σ0 ( x0 , y0 , z0 ).
⎡
⎤
cos(θ) − sen(θ) 0
⎢
⎥
p0 = Rz (θ)p1 = ⎣ sen(θ)
cos(θ)
0 ⎦ p1 .
(3.14)
0
0
1
Por convención considérese que el ángulo θ es positivo en el sentido contrario al
movimiento de las manecillas del reloj.
La relación inversa que determina la orientación del sistema Σ0 ( x0 , y0 , z0 ) con
respecto al sistema Σ1 ( x1 , y1 , z1 ) está dada por:
⎡
⎤
cos(θ)
sen(θ) 0
⎢
⎥
(3.15)
p1 = RTz ( θ )p0 = ⎣ − sen(θ) cos(θ) 0 ⎦ p0 .
0
0
1
Por lo tanto, un punto p0 en el sistema Σ0 ( x0 , y0 , z0 ) es transformado hacia un
punto p1 en el sistema Σ1 ( x1 , y1 , z1 ) incluyendo su orientación relativa.
Otra forma de obtener la matriz Rz ( θ ) que relaciona la orientación θ del sistema
de referencia Σ1 ( z1 , y1 , z1 ) con respecto al eje z0 del sistema de referencia
Σ0 ( z0 , y0 , z0 ) es por medio de una proyección geométrica, es decir, analizando la
proyección de los ejes x1 , y1 sobre los ejes x0 , y0 como se ve en la figura 3.4.
Los ejes z1 y z0 son paralelos entre sı́, el plano x1 − y1 se encuentra rotado un ángulo
θ con respecto al plano x0 − y0 , entonces la proyección del punto p1 = [p1x, p1y , p1z ]T
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.3
153
Matrices de rotación
Figura 3.4 Rotación θ grados del plano x1 − y1 con respecto al plano x0 − y0 .
sobre los ejes del sistema Σ0 son:
p0x = p1x cos(θ) − p1y sen(θ)
p0y = p1x sen(θ) + p1y cos(θ)
p0z = p1z
⎡
cos(θ)
⎢
p0 = Rz (θ)p1 = ⎣ sen(θ)
− sen(θ)
cos(θ)
0
0
0
⎤
⎥
0 ⎦ p1 .
1
Propiedades de la matriz de rotación Rz (θ)
La matriz de rotación Rz (θ) tiene varias propiedades importantes que a continuación
se presentan:
Rz ( 0 ) = I, I ∈ IR3×3 es la matriz identidad.
Rz ( θ )Rz ( β ) = Rz ( β )Rz ( θ ) = Rz ( θ + β ) = Rz ( β + θ ).
Rz ( θ )−1 = Rz ( −θ ).
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
154
Capı́tulo 3: Preliminares matemáticos
Rz ( θ )T = Rz ( θ )−1 .
Rz ( θ )Rz ( θ )T = Rz ( θ )T Rz ( θ ) = I.
det[Rz ( θ )] = 1 si el sistema de referencia cartesiano Σ ( z, y, z ) es seleccionado
por la regla de la mano derecha, en otro caso det[Rz ( θ )] = −1.
Función matriz de rotación Rz ( θ )
La función matriz de rotación Rz ( θ )
⎡
cos(θ)
⎢
Rz ( θ ) = ⎣ sen(θ)
0
− sen(θ) 0
cos(θ)
0
⎤
⎥
0⎦
1
tiene la siguiente sintaxis:
R=Rz(θ)
donde θ ∈ IR es el ángulo de rotación alrededor del eje z, y representa el argumento
de entrada. Retorna la matriz de rotación R.
El cuadro 3.2 contiene el programa en código fuente para evaluar en forma simbólica
las propiedades matemáticas de la matriz de rotación Rz ( θ ). Para simplificar el
álgebra simbólica es recomendable utilizar la función simplify.
Para expresiones matemáticas con variables simbólicas, la función simplify
resulta importante para obtener un resultado matemático compacto, es decir
factorizado y reducido.
Cuando un programa se encuentra combinando cálculos numéricos con variables
simbólicas, se recomienda usar la función vpa con una precisión de tres dı́gitos a
través de digits(3).
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.3
155
Matrices de rotación
Código Fuente 3.2
Función Rz (θ)
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %Archivo Rz.m
Función Rz (θ)
1
function R=Rz(theta)
2
dato=whos(’theta’);
if strcmp(dato.class, ’sym’) %para variables simbólicas
R=simplify([cos(theta), -sin(theta), 0;
sin(theta), cos(theta), 0;
3
4
5
6
0, 0, 1]);
else %cálculos numéricos
digits(3);
7
8
9
R=simplify([ double(cos(theta)), double(-sin(theta)), 0;
double(sin(theta)), double(cos(theta)), 0;
0, 0, 1]);
10
11
12
13
end
end
♣ ♣ Ejemplo 3.2
Escribir un programa en MATLAB para comprobar las propiedades de la matriz
de rotación Rz (θ)
Solución
En el cuadro 3.5 se presenta el programa en código fuente para MATLAB de las
propiedades de la matriz de rotación Rz ( θ ).
Para que el resultado simbólico sea compacto o simplificado se emplea la función
simplify.
Para visualizar los resultados de las propiedades matemáticas de la matriz Rz ( θ ) es
necesario no insertar en cada lı́nea el operador ;).
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
156
Capı́tulo 3: Preliminares matemáticos
Cuando se trabaja únicamente con variables simbólicas es importante
utilizar la función simplify para obtener resultados algebraicos compactos.
Cuando hay una combinación entre variables simbólicas y cálculos numéricos
es recomendable usar la función double como en el cuadro del código 3.2
de la matriz Rz ( θ ). Otras opciones que se pueden usar son la función vpa
y digits(3) (ver el código 3.8).
Código Fuente 3.5
Propiedades de la matriz de rotación Rz (θ)
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %Archivo cap3 propiedadesRz.m
Propiedades de la matriz de rotación Rz (θ)
1
clc;
2
4
clear all;
close all;
syms a b real
5
%resultados simbólicos
6
simplify(Rz(a)*Rz(b)) %Rz ( a )Rz ( b )
simplify(Rz(b)*Rz(a)) %Rz ( b )Rz ( a )
−1
simplify(inv(Rz(a))) %Rz ( a )
3
7
8
−1
12
simplify(Rz(-a)) %Rz ( a ) = Rz ( −a )
T
−1
simplify(Rz(a)’) %Rz ( a ) = Rz ( a )
T
simplify(Rz(a)’*Rz(a)) %Rz ( a ) Rz ( a ) = I
T
simplify(Rz(a)*Rz(a)’) %Rz ( a )Rz ( a ) = I
13
simplify(det(Rz(a))) %det[Rz ( a )]=1
14
15
%cálculo numérico
theta=90*pi/180; θ =
16
Rz(theta) %Rz ( θ )
9
10
11
Alfaomega
π
2
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.3
Matrices de rotación
157
♣ Ejemplo 3.3
Escribir un algoritmo en lenguaje MATLAB que realice la rotación de 90 grados
alrededor del eje z0 de una imagen de prueba (flecha).
Solución
El programa 3.4 contiene el código para realizar la rotación de la imagen de prueba.
El vector p0 = [ px0 , py0 , pz0 ]T tiene las coordenadas de la imagen de prueba definidas
en el sistema de referencia Σ0 (x0 , y0 , z0 ). El ángulo de rotación θ es de 90 grados con
respecto al eje z0 . El sistema Σ1 (x1 , y1 , z1 ) tiene la imagen rotada con respecto
al sistema Σ0 (x0 , y0 , z0 ). La matriz de rotación Rz0 ( π2 ) relaciona la orientación
que tiene la imagen rotada definida en Σ1 (x1 , y1 , z1 ) en relación al sistema fijo
Σ0 (x0 , y0 , z0 ).
En la figura 3.5 se muestra el resultado del programa en ambos sistemas de referencia
Σ0 (x0 , y0 , z0 ) y el sistema de referencia rotado Σ1 (x1 , y1 , z1 ).
Figura 3.5 Rotación de 90 grados alrededor del eje z0 .
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
158
Capı́tulo 3: Preliminares matemáticos
Código Fuente 3.4
Rotación alrededor del eje z0
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %Archivo cap3 rotacionRz.m
Rotación alrededor del eje z0
1
clc;
2
clear all;
close all;
3
4
5
6
7
8
9
⎡
⎤
px0
⎢
⎥
%coordenadas del vector p0 = ⎣ py0 ⎦
px0
pxo=[0,0,0,0,0,6,7,7, 8, 8, 9,9, 10,10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 12, 13, 14,14,
14, 14, 14, 14, 14, 14,14, 14, 15, 15, 16,16, 17,17,18,19,20,21];
pyo=[0,0,0,0,0,9,9,10,9, 11, 9,12, 1, 2, 3, 4, 5, 6,7, 8, 9, 12, 12, 12, 12,1, 2, 3, 4, 5,
6, 7, 8, 9, 12, 9, 12, 9, 11, 9, 10, 9,0,0,0 ];
pzo=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
theta=90*3.1416/180.0;
12
%matriz de rotación Rz ( θ )
R ztheta=[ cos(theta), -sin(theta), 0;
sin(theta), cos(theta), 0;
0, 0,1];
13
%conversión de coordenadas del sistema Σ0 (x0 , y0 , z0 ) al sistema Σ1 (x1 , y1 , z1 )
14
% p1 = Rz ( θ )p0
Sigma1=R ztheta*[pxo; pyo; pzo];
⎡
⎤
px1
⎢
⎥
% p1 = ⎣ py1 ⎦
10
11
15
16
19
pz1
px1=Sigma1(1,:);
py1=Sigma1(2,:);
pz1=Sigma1(3,:);
20
%puntos graficados en los sistemas p0 ∈ Σ0 (x0 , y0 , z0 ) y p1 ∈ Σ1 (x1 , y1 , z1 )
21
plot3(pxo,pyo,pzo,’.’,px1,py1,pz1,’x’)
17
18
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.3
159
Matrices de rotación
♣ Ejemplo 3.4
Considere un punto p1 = [p1x, p1y , p1z ]T = [0.8, 0.5, 1]T en el sistema de referencia
Σ1 ( z1 , y1 , z1 ), el cual mantiene una orientación relativa de 90 grados alrededor
del eje z0 del sistema fijo Σ0 ( z0 , y0 , z0 ). Obtener la proyección del punto p1 en el
sistema fijo Σ0 .
Solución
El punto p1 = [p1x, p1y , p1z ]T = [0.8, 0.5, 1]T se encuentra en el sistema de referencia
Σ1 ( z1 , y1 , z1 ), la conversión de coordenadas al sistema de referencia fijo se realiza a
través de: p0 = R(z, θ)p1 , obteniendo lo siguiente:
⎡
⎤⎡
⎤
cos( π2 ) − sen( π2 ) 0
0.8
⎢
⎥⎢
⎥
p0 = ⎣ sen( π2 )
cos( π2 )
0 ⎦ ⎣ 0.5 ⎦
0
0
1
1
⎡
⎤
−0.5
⎢
⎥
= ⎣ 0.8 ⎦ .
1
Nótese que el punto p0 en el sistema
convertir al punto p1 en el sistema de
de la siguiente relación:
⎡
cos( π2 )
⎢
p1 = ⎣ − sen( π2 )
⎡
0
⎤
de referencia fijo Σ0 ( z0 , y0 , z0 ) se puede
referencia rotado Σ1 ( z1 , y1 , z1 ), a través
sen( π2 ) 0
cos( π2 )
0
⎤⎡
−0.5
⎤
⎥⎢
⎥
0 ⎦ ⎣ 0.8 ⎦
1
1
0.8
⎢
⎥
= ⎣ 0.5 ⎦ .
1
La figura 3.6 muestra la descripción geométrica del punto p1 y su proyección sobre
el sistema de referencia Σ0 ( z0 , y0 , z0 ). Observe que los ejes z0 y z1 se mantienen
paralelos entre sı́.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
160
Capı́tulo 3: Preliminares matemáticos
Figura 3.6 Rotación relativa de 90 grados del sistema Σ1 alrededor del eje z0 .
♣ Ejemplo 3.5
Considere un paralelepı́pedo rectangular definido en el sistema de referencia
Σ0 ( z0 , y0 , z0 ); rotar el poliedro 180 grados alrededor del eje z0 . Describir la
proyección del sistema de referencia rotado Σ1 ( z1 , y1 , z1 ) en el sistema de
referencia fijo.
Solución
Sea p0 = [p0x, p0y , p0z ]T un punto sobre el paralelepı́pedo rectangular, al rotar este
punto p0 180 grados con respecto al eje z0 se mueve rı́gidamente junto con todo el
sólido quedando en el punto p1 = [p1x, p1y , p1z ]T .
Todos los puntos que pertenecen al poliedro están sujetos a la siguiente
transformación: p1 = Rz ( π )p0 , es decir los puntos p0 definidos en el sistema
Σ0 (x0 , y0 , z0 ) son transformados a coordenadas p1 en el sistema Σ1 (x1 , y1 , z1 ) por
medio de la matriz de rotación Rz ( π ). La interpretación geométrica de la rotación
del poliedro 90 grados alrededor del eje z0 se presenta en la figura 3.7.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.3
161
Matrices de rotación
Figura 3.7 Rotación de 180 grados alrededor del eje z0 de un paralelepı́pedo
rectangular.
3.3.2
3.3.2. Matriz de rotación alrededor del eje x0
Considere el sistema de referencia Σ1 ( z1 , y1 , z1 ) el cual está rotado un ángulo θ
alrededor del eje x0 del sistema Σ0 ( z0 , y0 , z0 ); obtener la matriz resultante de
rotación.
En la figura 3.8 se muestra la rotación del sistema Σ1 ( z1 , y1 , z1 ) con respecto al eje
x0 del sistema fijo Σ0 ( z0 , y0 , z0 ); el ángulo de rotación θ gira alrededor del eje x0
en sentido positivo (contrario a las manecillas del reloj).
En este caso el ángulo de rotación que existe entre los ejes x0 y x1 es cero,
puesto que son ejes paralelos. Para la primera columna [ i1 · i0 i1 · j 0 i1 · k0 ]T
de la matriz de rotación R10 (θ) ecuación (3.9) tiene las siguientes componentes:
i1 · i0 = cos(0) = 1, i1 · j 0 = cos( π2 ) = 0; i1 · k0 = cos( π2 ) = 0. La segunda
columna [ j 1 · i0 j 1 · j 0 j 1 · k0 ]T adquiere la siguiente forma: j 1 · i0 = cos( π2 ) = 0,
j 1 · j 0 = cos(θ) y j 1 · k0 = cos(θ − π2 ) = sen(θ).
Finalmente, la tercera columna [ k1 · i0
k1 · j 0
k 1 · k0 ]T se encuentra definida
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
162
Capı́tulo 3: Preliminares matemáticos
Figura 3.8 Rotación de un ángulo θ alrededor del eje x0 .
como: k 1 · i0 = cos( π2 ) = 0, k1 · j 0 = cos(θ + π2 ) = − sen(θ) y k1 · k 0 = cos(θ).
Por lo tanto, la matriz correspondiente de rotación está dada por:
⎡
⎤
1
0
0
⎢
⎥
R10 (θ) = ⎣ 0 cos(θ) − sen(θ) ⎦ .
0 sen(θ)
cos(θ)
(3.16)
Observe que los ejes x0 y x1 coinciden entre sı́, y el plano z1 − y1 se desplaza un
ángulo θ de derecha a izquierda con respecto al plano x0 − y0 .
Notación
La matriz (3.16) cuyo ángulo de rotación θ se realiza alrededor del eje x se denota
por Rx ( θ ) y su estructura matemática es:
⎡
1
0
⎢
Rx( θ ) = ⎣ 0 cos(θ)
0
sen(θ)
0
⎤
⎥
− sen(θ) ⎦ .
(3.17)
cos(θ)
Las propiedades de la matriz de rotación Rx ( θ ) son las mismas para Rz ( θ ).
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.3
163
Matrices de rotación
3.3.3
3.3.3. Matriz de rotación alrededor del eje y0
Considere los sistemas de referencia Σ1 ( z1 , y1 , z1 ) y Σ0 ( z0 , y0 , z0 ), el sistema
Σ1 ( z1 , y1 , z1 ) se encuentra rotado un ángulo θ alrededor del eje y0 del sistema fijo
Σ0 ( z0 , y0 , z0 ). Obtener la matriz resultante de rotación.
De la figura 3.9 se puede obtener la matriz que relaciona la orientación relativa
del sistema de referencia Σ1 ( z1 , y1 , z1 ) con respecto al sistema de referencia fijo
Σ0 ( z0 , y0 , z0 ). El ángulo de rotación θ es alrededor del eje y0 .
La matriz R10 (θ) adquiere la siguiente expresión:
⎡
⎢
R10 (θ) = ⎣
cos(θ)
0
sen(θ)
0
1
0
− sen(θ) 0
⎤
⎥
⎦
(3.18)
cos(θ)
Figura 3.9 Rotación de un ángulo θ del sistema Σ1 alrededor del eje y0 del sistema
Σ0 .
Observe que la rotación del ángulo θ alrededor del eje y0 mueve el plano z1 − x1 .
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
164
Capı́tulo 3: Preliminares matemáticos
Notación
La matriz de rotación (3.18) describe la orientación relativa del sistema
Σ1 ( z1 , y1 , z1 ) con respecto al sistema de referencia fijo Σ0 ( z0 , y0 , z0 ) usando una
rotación alrededor del eje y0 , la cual se denota por:
⎡
⎤
cos(θ)
0 sen(θ)
⎢
⎥
Ry ( θ ) = ⎣
0
1
0 ⎦
− sen(θ) 0 cos(θ)
(3.19)
Las propiedades de Ry ( θ ) son las mismas que Rz ( θ ).
3.4 Reglas de rotación
G
eneralmente la descripción de la orientación del sistema de referencia de la
herramienta de trabajo del robot colocada en el extremo final del robot con
respecto al sistema de referencia fijo en la base del robot involucra varias rotaciones
sucesivas (composición de rotaciones). Existen varios métodos que permiten definir
el orden o reglas de las rotaciones consecutivas.
Composición de rotaciones para sistemas de referencia sucesivos
Considere tres sistemas de referencia cartesianos definidos por Σ0 ( x0 , y0 , z0 )
(sistema fijo), Σ1 ( x1 , y1 , z1 ) tiene una rotación relativa al sistema fijo y sea el
sistema de referencia Σ2 ( x2 , y2 , z2 ) cuya orientación relativa es con respecto al
sistema de referencia Σ1 ( x1 , y1 , z1 ). Todos los sistemas de referencia cartesianos
comparten el mismo origen como se presenta en la figura 3.10.
El problema que se plantea es encontrar la expresión matemática que relaciona la
orientación del sistema de referencia Σ2 ( x2 , y2 , z2 ) relativo al sistema de referencia
fijo Σ0 ( x0 , y0 , z0 ).
Puesto que los tres sistemas de referencia tienen el mismo origen, entonces un punto
p puede ser representado en función de las coordenadas p0 , p1 , p2 de la siguiente
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.4
165
Reglas de rotación
Figura 3.10 Composición de rotaciones.
forma:
p0 = R10 p1
(3.20)
p1 = R21 p2
(3.21)
donde la matriz R10 representa la orientación del sistema de referencia Σ1 ( x1 , y1 , z1 )
con respecto al sistema de referencia Σ0 ( x0 , y0 , z0 ), y la matriz R21 describe
la orientación del sistema de referencia Σ2 ( x2 , y2 , z2 ) respecto al sistema
Σ1 ( x1 , y1 , z1 ).
Por lo tanto, la relación que hay entre un punto p0 ∈ Σ0 ( x0 , y0 , z0 ) con las
coordenadas p2 ∈ Σ2 ( x2 , y2 , z2 ) está determinada por la siguiente expresión:
p0 = R10 R21 p2
(3.22)
donde R10 R21 representa la orientación del sistema de referencia Σ2 ( x2 , y2 , z2 )
respecto al sistema fijo Σ0 ( x0 , y0 , z0 ), y significa una regla de composición para
establecer el orden para transformar un punto p desde su representación en el sistema
Σ2 ( x2 , y2 , z2 ) a su correspondiente representación en el sistema Σ0 ( x0 , y0 , z0 ).
La regla de transformación R10 R21 establece que el primer paso es transformar el
punto p2 en coordenadas del sistema Σ1 ( x1 , y1 , z1 ) por medio de R21 , posteriormente
al punto p0 por medio de R10 . La regla de composición de rotaciones sucesivas se
establece como:
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
166
Capı́tulo 3: Preliminares matemáticos
R20 = R10 R21
(3.23)
La regla de composición de rotaciones (3.23) puede ser interpretada de la siguiente
manera: supóngase que inicialmente los tres sistemas Σ1 , Σ2 y Σ3 coinciden. Primero
se rota el sistema de referencia Σ1 ( x1 , y1 , z1 ) relativo a Σ0 ( x0 , y0 , z0 ) de acuerdo
a la transformación R10 . Ahora con los sistemas de referencia coincidentes Σ1 y
Σ2 , se rota el sistema Σ2 ( x2 , y2 , z2 ) relativo a Σ1 ( x1 , y1 , z1 ) de acuerdo a la
transformación R21 . El sistema de referencia Σ2 ( x2 , y2 , z2 ) tiene una orientación
con respecto al sistema de referencia Σ0 ( x0 , y0 , z0 ) dado por la matriz R10 R21 como
se muestra en la figura 3.11.
Figura 3.11 Regla de composición de rotaciones sucesivas.
La regla de composición de rotación sucesivas (3.23) se basa en generar nuevos
sistemas de referencia consecutivos. Por ejemplo, se forma el sistema de referencia
Σ1 ( x1 , y1 , z1 ) como consecuencia de rotar un ángulo determinado alrededor de
uno de los ejes principales del sistema Σ0 ( x0 , y0 , z0 ), seguido por otra rotación
ahora alrededor del eje y1 del sistema actual Σ1 ( x1 , y1 , z1 ) para obtener el sistema
de referencia Σ2 ( x2 , y2 , z2 ). Realizando giros en diferente orden, se obtienen otros
tipos de representaciones.
Es importante subrayar que la multiplicación de matrices de rotación no es
conmutativa, en consecuencia el orden de las rotaciones no es conmutativo.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.4
Reglas de rotación
167
♣ Ejemplo 3.6
Considere el procedimiento de rotación que se muestra en la figura 3.12; obtener la
matriz resultante que define la rotación del sistema de referencia Σ2 con respecto
al sistema de referencia Σ0 .
Solución
En la figura 3.12 se pueden observar los tres sistemas de referencia Σ0 , Σ1 y Σ2 .
Todos los sistemas de referencia comparten el mismo origen.
Figura 3.12 Rotación con respecto al sistema actual.
En el esquema izquierdo de la figura 3.12 se encuentran definidos los sistemas de
referencia Σ0 ( x0 , y0 , z0 ) y Σ1 ( x1 , y1 , z1 ). Los ejes y0 y y1 son paralelos entre sı́;
existe una rotación por un ángulo φ alrededor del eje y0 que se representa por la
matriz Ry0 ,φ . Posteriormente, continúa una rotación por un ángulo θ alrededor del
eje z1 para generar el sistema de referencia Σ2 ( x2 , y2 , z2 ) (parte central de la figura
3.12), los ejes z1 y z2 son paralelos entre sı́. La orientación relativa del sistema Σ2
con respecto al sistema de referencia Σ1 está determinada por la matriz Rz1 ( θ ).
El esquema derecho de la figura 3.12 muestra la orientación del sistema de referencia
Σ2 con respecto al sistema de referencia Σ0 , cuya matriz de rotación se encuentra
dado por:
R20 = R10 R21 = Ry0 ( φ ) Rz1 ( θ )
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
168
Capı́tulo 3: Preliminares matemáticos
⎡
⎢
= ⎣
cos(φ)
0
sen(φ)
0
1
0
⎤⎡
cos(θ)
− sen(θ)
⎥⎢
⎦ ⎣ sen(θ) cos(cos(θ))
− sen(φ) 0 cos(φ)
0
0
⎡
⎤
cos(ψ) cos(θ)
− cos(ψ) sen(θ) sen(ψ)
⎢
⎥
= ⎣
sen(θ)
cos(θ)
0
⎦
− sen(φ) cos(θ)
sen(φ) sen(θ)
cos(φ)
0
⎤
⎥
0⎦
1
donde R10 = Ry0 ( φ ) y R21 = Rz1 ( θ ).
Para mostrar que el orden de las rotaciones es importante, considere el caso donde
las rotaciones se realizan en orden inverso: R20 = R21 R10 = Rz1 ( θ )Ry0 ( φ ). Es decir,
primero la rotación alrededor del eje z1 , seguida por una rotación alrededor del eje
y0 . Entonces, la matriz resultante está dada por:
R20 = Rz1 ( θ ) Ry0 ( φ )
⎡
⎤⎡
⎤
cos(θ)
− sen(θ) 0
cos(φ)
0 sen(φ)
⎢
⎥⎢
⎥
= ⎣ sen(θ) cos(cos(θ)) 0 ⎦ ⎣
0
1
0 ⎦
0
0
1
− sen(φ) 0 cos(φ)
⎡
⎤
cos(θ) cos(ψ) − sen(θ) cos(θ) sen(ψ)
⎢
⎥
= ⎣ sen(θ) cos(ψ)
cos(θ)
sen(θ) sen(ψ) ⎦
− sen(ψ)
0
cos(ψ)
Observe que es importante el orden de rotaciones: R20 = R10 R21 . Es decir, en general
R20 = R21 R10 .
♣ ♣ Ejemplo 3.7
Considere una figura de prueba (flecha) que se encuentra definida en el sistema
de referencia Σ0 (x0 , y0 , z0 ). Realizar rotaciones sucesivas por un ángulo θ =
π
2
alrededor de los eje z0 , del sistema resultante Σ1 (x1 , y1 , z1 ) realizar una rotación
θ=
π
2
alrededor del eje x1 , y finalmente del sistema generado Σ2 (x2 , y2 , z2 ) rotar
alrededor del eje y2 por θ = π2 .
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.4
Reglas de rotación
169
Solución
La figura de prueba es una flecha cuyas coordenadas se encuentran definidas en
el sistema de referencia Σ0 (x0 , y0 , z0 ), cada coordenada de la figura de prueba se
encuentra especificada por un punto p0 = [ px0 , py0 , pz0 ]T . Un observador en el
sistema de referencia Σ0 (x0 , y0 , z0 ) verá a la figura de prueba sin ningún efecto
de rotación. Sin embargo, después de realizar la rotación Rz0 ( π2 ) un observador
colocado en el sistema de referencia Σ0 (x0 , y0 , z0 ) verá a dicha figura rotada 90
grados en el nuevo sistema generado Σ1 (x1 , y1 , z1 ). Las coordenadas de la flecha en
el sistema Σ1 (x1 , y1 , z1 ) son p1 = Rz0 ( π2 )p0 . Posteriormente se realiza una nueva
rotación de 90 grados alrededor del eje x1 , dada por: Rx1 ( π2 ), con esto se genera
el sistema Σ2 (x2 , y2 , z2 ). Las coordenadas de la flecha en este sistema Σ2 (x2 , y2 , z2 )
están especificadas por p2 = Rx1 ( π2 )p1 . La última rotación consiste en girar a la
imagen de prueba (flecha) 90 grados alrededor del eje y2 . Esta rotación genera el
sistema de referencia Σ3 (x3 , y3 , z3 ) con coordenadas de la imagen p3 = Ry2 ( π2 )p2 .
La relación del sistema de referencia Σ3 (x3 , y3 , z3 ) con el sistema de referencia
Σ0 (x0 , y0 , z0 ) es: p3 = Ry2 ( π2 )Rx1 ( π2 )Rz0 ( π2 )p0 o p0 = [ Ry2 ( π2 )Rx1 ( π2 )Rz0 ( π2 ) ]T p3 .
La figura 3.13 muestra la sucesión de rotaciones.
Figura 3.13 Rotaciones sucesivas de la figura de prueba alrededor de los ejes
z0 , x1 , y2 .
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
170
Capı́tulo 3: Preliminares matemáticos
Código Fuente 3.5
Rotaciones alrededor de los ejes z0 , x1 , y2
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %Archivo cap3 rotacion.m
Rotaciones alrededor de los ejes z0 , x1, y2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clc; clear all; close all;
pzo=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
pyo=[0,0,0,0,0,9,9,10,9, 11, 9,12, 1, 2, 3, 4, 5, 6,7, 8, 9, 12, 12, 12, 12,1, 2, 3, 4, 5,
6, 7, 8, 9, 12, 9, 12, 9, 11, 9, 10, 9,0,0,0 ];
pxo=[0,0,0,0,0,6,7,7, 8, 8, 9,9, 10,10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 12, 13, 14,14,
14, 14, 14, 14, 14, 14,14, 14, 15, 15, 16,16, 17,17,18,19,20,21];
theta=90*3.1416/180.0;
R ztheta=[ cos(theta), -sin(theta), 0; sin(theta), cos(theta), 0; 0, 0,1];
R xtheta=[ 1, 0, 0; 0, cos(theta), -sin(theta); 0, sin(theta), cos(theta)];
R ytheta=[ cos(theta), 0, sin(theta); 0, 1, 0; -sin(theta), 0, cos(theta)];
⎡ ⎤
⎡ ⎤T
x1
x0
⎢ ⎥
⎢ ⎥
%⎣ y1 ⎦ = Rz (θ) ⎣ y0 ⎦
z1
z0
Sigma1=R ztheta*[pxo; pyo; pzo];
px1=Sigma1(1,:);py1=Sigma1(2,:); pz1=Sigma1(3,:);
⎡ ⎤
⎡ ⎤
x2
x1
⎢ ⎥
⎢ ⎥
%⎣ y2 ⎦ = Rx(θ) ⎣ y1 ⎦
z2
z1
Sigma2=R xtheta*[px1; py1; pz1];
px2=Sigma2(1,:); py2=Sigma2(2,:); pz2=Sigma2(3,:);
⎡ ⎤
⎡ ⎤
x3
x2
⎢ ⎥
⎢ ⎥
%⎣ y3 ⎦ = Ry (θ) ⎣ y2 ⎦
z3
z2
Sigma3=R ytheta*[px2; py2; pz2];
px3=Sigma3(1,:); py3=Sigma3(2,:); pz3=Sigma3(3,:);
plot3(pxo,pyo,pzo,’.’,px1,py1,pz1,’x’,px2,py2,pz2,’o’,px3,py3,pz3,’o’)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.5
171
Transformaciones de traslación
3.5 Transformaciones de traslación
C
onsidere el sistema de referencia cartesiano fijo Σ0 ( x0 , y0 , z0 ) y el sistema de
referencia Σ1 ( x1 , y1 , z1 ), donde sus respectivos orı́genes son no coincidentes.
El origen del sistema de referencia Σ1 se encuentra desplazado una distancia d10 con
respecto al origen del sistema Σ0 , como se muestra en la figura 3.14.
Figura 3.14 Transformaciones de traslación y rotación del sistema Σ1 con respecto
al sistema Σ0 .
El vector d10 está expresado en coordenadas del sistema Σ0 : d10 = [ d10x, d10y , d10z ]T ,
entonces cualquier punto p tiene representación p0 y p1 . La relación general entre
los sistemas de referencia Σ0 ( x0 , y0 , z0 ) y Σ1 ( x1 , y1 , z1 ) incluyendo la matriz de
rotación R10 y el vector de traslación d10 es:
p0 = d10 + R10 p1
⎡
d10x
⎤
(3.24)
⎡
p1x
⎤
⎥
⎢
⎥
⎢
= ⎣ d10y ⎦ + R10 ⎣ p1y ⎦ .
d10z
p1z
Para el caso de tres sistemas de referencia cartesianos Σ0 (x0 y0 z0 ), Σ1 (x1 y1 z1 ) y
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
172
Capı́tulo 3: Preliminares matemáticos
Σ2 (x2 y2 z2 ) (ver figura 3.15) se obtienen las siguientes expresiones:
p0 = d10 + R10 p1
(3.25)
d21
(3.26)
p1 =
+ R21 p2
Figura 3.15 Traslación y rotación de Σ1 y Σ2 con respecto al sistema Σ0 .
Sustituyendo la ecuación (3.26) en (3.25) se tiene:
p0 = d10 + R10 d21 + R10 R21 p2 .
(3.27)
Por lo tanto, la regla de transformación de traslación y orientación de un punto p2
en el sistema Σ2 (x2 y2 z2 ) hacia un punto p0 en el sistema Σ0 (x0 y0 z0 ) adquiere la
siguiente estructura:
p0 = d20 + R20 p2
(3.28)
donde
R20 = R10 R21
d20 = d10 + R10 d21
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.6
173
Transformaciones homogéneas
3.6 Transformaciones homogéneas
L
a notación más común para representar la transformación de traslación y
rotación en forma compacta se conoce como transformación homogénea.
Por ejemplo, para representar el caso de traslación y rotación del sistema Σ1 (x1 y1 z1 )
con respecto al sistema Σ0 (x0 y0 z0 )
p0 = d10 + R10 p1
la transformación homogénea se realiza con la siguiente notación:
1
R0 d10
1
H0 =
0T 1
⎡
⎤
.
Matriz
de
Vector
de
..
⎢
⎥
⎢
⎥
rotación
traslación
⎥
= ⎢
⎢
⎥
..
⎣
⎦
···
.
···
0T
(3.29)
1
donde R10 ∈ SO(3) y d10 ∈ IR3 . Para propósitos de acoplamiento en dimensiones, el
vector 0T y el número 1 aparecen en el último renglón.
La representación inversa que relaciona el punto p1 en función del punto p0 adquiere
la siguiente forma:
T
T
p1 = −R10 d10 + R10 p0
entonces, la transformación homogénea inversa está determinada por:
1T
T
R0
−R10 d10
1 −1
=
H0
0T
1
(3.30)
Las matrices de rotación permiten modelar la orientación de la herramienta de
trabajo colocada en el extremo final del robot, y junto con las transformaciones
homogéneas dentro de una sola matriz incluye la orientación y posición de la
herramienta de trabajo, formando la estructura del modelo cinemático directo.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
174
Capı́tulo 3: Preliminares matemáticos
3.7 Librerı́as para matrices homogéneas
E
n esta sección se presentan las librerı́as de transformación homogénea de
rotación y traslación con respecto a los ejes principales x, y, z.
Matrices de transformación homogénea de rotación
Las matrices de transformación homogénea de rotación con respecto a los ejes x, y, z,
respectivamente, tienen la siguiente estructura:
3 2 3⎤
⎡21
⎡ 2 cos(θ) 0 sen(θ) 3 2 0 3 ⎤
0
0
0
cos(θ) − sen(θ) 5
0 sen(θ)
cos(θ)
[0
0
0]
⎡ 2 cos(θ) − sen(θ) 0 3
4 sen(θ)
cos(θ)
05
HRx(θ) = ⎣
40
HRz (θ) = ⎣
0
0
[0
0
1
0]
405
0
1
⎦ HRy (θ) = ⎣
2 3⎤
0
405
0
1
4
0
1
− sen(θ) 0
[0
0
5
0
cos(θ)
0]
405
0
1
⎦
⎦
Matrices de transformación homogénea de traslación
Las matrices de transformación homogénea de traslación con respecto a los ejes
x, y, z respectivamente tienen la siguiente estructura:
21 0 03 2d3 21 0 03 203 21 0 03 203 40 1 05 405
40 1 05 4d5
40 1 05 405
HTy (d) =
HTz (d) =
HTx(d) =
0
0
d
0 0 1
0 0 1
0 0 1
[0
0
0]
1
[0
0
0]
1
[0
0
0]
1
Matriz de transformación homogénea Denavit-Hartenberg
La matriz de transformación homogénea Denavit Hartenberg tiene la forma
siguiente:
⎡
⎢R
H = ⎢
⎣
0T
Alfaomega
⎡ ⎤
x ⎤
⎢ ⎥
⎣y ⎦⎥
⎥
z ⎦
1
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.7
Librerı́as para matrices homogéneas
175
3.7.1
3.7.1. Matriz de transformación homogénea HRx (θ)
La sintaxis de la función de transformación homogénea de rotación HRx(θ) alrededor
del eje x está dada por:
RHx=HRx(θ)
donde θ es el ángulo de rotación alrededor del eje x y es la variable de la función
HRx(θ). Retorna la matriz de transformación homogénea RHx.
Código Fuente 3.6
Función HRx(θ)
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %función HRx.m
Función HRx(θ)
1
2
function RHx=HRx(theta)
dato=whos(’theta’);
3
if strcmp(dato.class, ’sym’) %variables simbólicas
RHx=[1, 0, 0, 0;
0, cos(theta), -sin(theta), 0;
4
5
6
0, sin(theta), cos(theta), 0;
0, 0, 0, 1];
else digits(3); %cálculos numéricos
RHx=round([1, 0, 0, 0;
7
8
9
10
0, vpa(cos(theta),3), vpa(-sin(theta),3), 0;
0, vpa(sin(theta),3), vpa(cos(theta),3), 0;
0, 0, 0, 1]);
11
12
13
14
end
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
176
Capı́tulo 3: Preliminares matemáticos
3.7.2
3.7.2. Matriz de transformación homogénea HRy (θ)
La sintaxis de la función de transformación homogénea de rotación HRy (q) alrededor
del eje y está dada por:
RHy=HRy(θ)
donde θ es el ángulo de rotación alrededor del eje y y es la variable de la función
HRy(θ). Retorna la matriz de transformación homogénea RHy.
Código Fuente 3.7
Función HRy (θ)
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %función HRy.m
Función HRy (θ)
1
function RHy=HRy(theta)
2
dato=whos(’theta’); if strcmp(dato.class, ’sym’) %variables
simbólicas
RHy=[cos(theta), 0, sin(theta), 0;
0, 1, 0, 0;
3
4
5
-sin(theta), 0, cos(theta), 0;
0, 0, 0, 1];
else digits(3); %cálculos numéricos
6
7
8
RHy=round([ vpa(cos(theta),3), 0, vpa(sin(theta),3), 0;
0, 1, 0, 0;
vpa(-sin(theta),3), 0, vpa(cos(theta),3), 0;
0, 0, 0, 1]);
9
10
11
12
13
end
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.7
Librerı́as para matrices homogéneas
177
3.7.3
3.7.3. Matriz de transformación homogénea HRz (θ)
La sintaxis de la función de transformación homogénea de rotación HRz (θ) alrededor
del eje z está dada por:
RHz=HRz(θ)
donde θ es el ángulo de rotación alrededor del eje z y es la variable de la función
HRz(θ). Retorna la matriz de transformación homogénea RHz.
Código Fuente 3.8
Función HRz (θ)
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %función HRz.m
Función HRz (θ)
1
2
3
4
function RHz=HRz(theta)
dato=whos(’theta’);
if strcmp(dato.class, ’sym’) %variables simbólicas
RHz=[cos(theta), -sin(theta), 0, 0;
5
sin(theta), cos(theta), 0, 0;
0, 0, 1, 0;
0, 0, 0, 1];
else digits(3); %cálculos numéricos
6
7
8
9
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;
10
11
12
0, 0, 0, 1]);
13
14
end
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
178
Capı́tulo 3: Preliminares matemáticos
3.7.4
3.7.4. Matriz de transformación homogénea HTx (d)
La sintaxis de la función de transformación homogénea de traslación HTx(d) a lo
largo del eje x está dada por:
THx=HTx(d)
donde d es el desplazamiento de traslación sobre el eje x. Retorna la matriz de
transformación homogénea THx.
Código Fuente 3.9
Función HTx(d)
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %función HTx.m
Función HTx(d)
1
2
3
function Tx=HTx(d)
Tx=[ 1 0 0 d; 0 1 0 0; 0 0 1 0; 0 0 0 1];
end
3.7.5
3.7.5. Matriz de transformación homogénea HTy (d)
La sintaxis de la función de transformación homogénea de traslación HTy (d) a lo
largo del eje y está dada por:
THy=HTy(d)
donde d es el desplazamiento lineal de traslación sobre el eje y. Retorna la matriz
de transformación homogénea THy.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.7
Librerı́as para matrices homogéneas
Código Fuente 3.10
179
Función HTy (d)
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %función HTy.m
Función HTy (d)
1
function Tz=HTy(d)
2
3
Tz=[ 1 0 0 0; 0 1 0 d; 0 0 1 0; 0 0 0 1];
end
3.7.6
3.7.6. Matriz de transformación homogénea HTz (d)
La sintaxis de la función de transformación homogénea de traslación HTz (d) a lo
largo del eje z está dada por:
THz=HTz(d)
donde d es el desplazamiento lineal de traslación sobre el eje z. Retorna la matriz
de transformación homogénea THz.
Código Fuente 3.11
Función HTz (d)
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %función HTz.m
Función HTz (d)
1
2
3
function Tz=HTz(d)
Tz=[ 1 0 0 0; 0 1 0 0; 0 0 1 d; 0 0 0 1];
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
180
Capı́tulo 3: Preliminares matemáticos
3.7.7
3.7.7. Matriz de transformación DH
La función H DH(H) extrae de la matriz de transformación homogénea H la matriz
de rotación y el vector de coordenadas cartesianas.
La sintaxis de la función de transformación homogénea DH está dada por:
[R vect d vect cero c]=H DH(H)
donde H es la variable de entrada y representa la matriz de transformación
homogénea. Retorna la matriz de rotación R , el vector de coordenadas cartesianas
vect d, el vector vect cero=[0, 0, 0]T y la constante unitaria c=1.
Código Fuente 3.12
Función H DH
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 3 Cinemática %función H DH.m
Función H DH
1
2
3
function [R vect d vect cero c]=H DH(H)
for i=1:3
for j=1:3
4
R(i,j)=H(i,j);
5
end
6
end
7
%estructura de la matriz de transformación homogénea
8
vect d=[H(1,4); H(2,4); H(3,4)];
vect cero=[0;0;0]’;
c=1;
9
10
11
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
3.8
Resumen
181
3.8 Resumen
C
inemática de robots manipuladores y sistemas mecatrónicos encuentra su
fundamento en una clase particular de matrices denominadas ortogonales.
Estos preliminares matemáticos constituyen la base para desarrollar propiedades,
reglas y operaciones de traslación y rotación entre dos sistemas de referencia
Σ0 (x0 , y0 , z0 ) y Σ1 (x1 , y1 , z1 ) bajo una estructura matemática denominada matriz
de transformación homogénea.
La matriz ortogonal R10 representa la orientación del sistema de referencia
Σ0 (x0 , y0 , z0 ) con respecto al sistema Σ1 (x1 , y1 , z1 ). De particular interés son las
matrices de rotación Rx( θ ), Ry ( θ ), Rz ( θ ) ya que representan la rotación alrededor
de los ejes principales x, y, z, respectivamente. El orden como se realice la rotación
determina la regla o procedimiento de orientar un sistema de referencia con respecto
a otro.
En este capı́tulo se ha desarrollado un conjunto de librerı́as para realizar operaciones
de traslación y rotación. La librerı́a R=Rz(θ) realiza la rotación del sistema de
referencia Σ1 (x1 , y1 , z1 ) con respecto al sistema de referencia Σ0 (x0 , y0 , z0 ). Esta
función puede trabajar con variables simbólicas y también para realizar aplicaciones
numéricas. De manera análoga se puede implementar las funciones R=Rx(θ) y
R=Ry(θ).
Cuando hay combinación de cálculos numéricos con variables simbólicas, como es
el caso de las matrices de transformación homogénea (rotación y traslación) la
funciones vpa, round y double pueden ayudar a presentar el resultado numérico
de manera conveniente.
Por otro lado, para simplificar las expresiones simbólicas se recomienda usar la
función simplify, por lo que el lector puede modificar el código fuente de las
librerı́as desarrolladas para presentar resultados simbólicos o numéricos a su entera
conveniencia.
La tabla 3.1 contiene el resumen de las librerı́as para realizar las matrices de
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
182
Capı́tulo 3: Preliminares matemáticos
transformación homogénea de traslación y rotación.
Tabla 3.1 Matrices de transformación homogénea
Función
Sintaxis
Matriz de transformación
homogénea de rotación al-
RHx=HRx(θ) θ ∈ IR.
rededor del eje x
Matriz de transformación
homogénea de rotación al-
RHy=HRy(θ) θ ∈ IR.
rededor del eje y
Matriz de transformación
homogénea de rotación al-
RHz=HRz(θ) θ ∈ IR.
rededor del eje z
Matriz de transformación
homogénea de traslación
THx=HTx(d) d∈ IR.
sobre el eje x
Matriz de transformación
homogénea de traslación
THy=HTy(d) d∈ IR.
sobre el eje y
Matriz de transformación
homogénea de traslación
THz=HTz(d) d∈ IR.
sobre el eje z
[R vect d vect cero c]=H DH(H)
Matriz de transformación
homogénea
Hartenberg
Denavit-
R∈ SO(3) es la matriz de rotación
vect d es el vector con coordenadas cartsianas:
[x
y
z ]T
vect cero=[ 0, 0, 0 ]T
c=1.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Cinemática directa
Capı́tulo
4
li
αi
.
di .. βi
θi
.
i
Hi−1
= HRzi (θi )HTzi (di .. βi )HTxi (li)HRxi (αi )
4.1 Introducción
4.2 Cinemática inversa
4.3 Cinemática diferencial
4.4 Clasificación de robots industriales
4.5 Convención Denavit-Hartenberg
4.6 Resumen
Objetivos
Presentar el modelo de cinemática directa de las principales configuraciones de robots industriales considerando los parámetros geométricos y
desarrollar librerı́as en lenguaje MATLAB (toolbox) que permitan realizar
aplicaciones en el área de cinemática directa de robots manipuladores.
Objetivos particulares:
Matrices de rotación.
Transformaciones homogéneas.
Método de Denavit-Hartenberg.
Cinemática directa cartesiana.
Librerı́as de análisis y diseño de cinemática de robots industriales.
4.1
185
Introducción
4.1 Introducción
C
inemática es la parte de la fı́sica que estudia el movimiento de sistemas
mecánicos, sin tomar en cuenta las fuerzas que originan dicho movimiento,
por lo tanto no involucra ecuaciones diferenciales como en el caso de la dinámica.
Al estudio de la cinemática de sistemas mecatrónicos y robots manipuladores se
le denomina cinemática directa, se refiere al estudio analı́tico del movimiento
del robot con respecto a un sistema de referencia cartesiano fijo Σ0 ( x0 , y0 , x0 )
relacionando la dependencia que existe entre las coordenadas articulares o
generalizadas q ∈ IRn , y los parámetros geométricos (longitudes del i-ésimo eslabón
li ), con coordenadas cartesianas [ x, y, z ]T ∈ IR3 y la orientación [ θ, φ, ψ ]T ∈ IR3 del
extremo final del robot a través de una función vectorial f R continua y diferenciable
en la variable de estado q, generalmente no lineal.
Cinemática directa es una función vectorial f R (li, q) que relaciona las
coordenadas articulares q ∈ IRn y propiedades geométricas del sistema mecánico
li con las coordenadas cartesianas [ x, y, z ]T ∈ IR3 del robot y la orientación
[ θ, φ, ψ ]T ∈ IR3 de la herramienta colocada en el extremo final. Es decir f R :
IRn → IRm tal que:
⎡
x
⎤
⎢y⎥
⎢ ⎥
⎢ ⎥
⎢z⎥
⎢ ⎥ = f R (li, q)
⎢θ⎥
⎢ ⎥
⎢ ⎥
⎣φ⎦
(4.1)
ψ
donde n indica el número de grados de libertad y la dimensión del vector
de coordenadas articulares q, m es la dimensión conjunta de las coordenadas
cartesianas y la orientación de la herramienta de trabajo.
De manera general, el posicionamiento del extremo final del robot en el espacio
tridimensional (pose) requiere de 6 coordenadas (m = 6): 3 coordenadas para la
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
186
Capı́tulo 4: Cinemática directa
posición cartesiana y 3 coordenadas para la orientación de la herramienta de trabajo.
Dependiendo de la aplicación del robot se pueden requerir menos coordenadas
de posición y orientación. Por ejemplo, un robot para pintura de armaduras
automotrices requiere las 6 coordenadas, en contraste con un robot que corta figuras
de plástico sobre un plano requiere 2 coordenadas cartesianas de posición y ninguna
de orientación. Cuando n > m se denomina robots redundantes. El empleo de la
cinemática directa resulta de utilidad en la planificación de trayectorias y en el
control cartesiano. El papel fundamental de la cinemática directa, es computar la
posición y orientación del extremo final del robot manipulador como una función de
las variables articulares.
Un robot manipulador se considera como una serie de eslabones interconectados
a través de articulaciones (servomotores) rotacionales o prismáticas en forma de
cadena cinemática abierta, es decir el extremo final donde se coloca la herramienta
no se encuentra conectada mecánicamente a la primera articulación (base) del
robot. Desde el punto de vista topológico, la cadena cinemática se considera
abierta cuando los dos extremos de la cadena no se tocan. De otra manera la
cadena cinemática formarı́a un lazo si sus dos extremos están mecánicamente
unidos.
La estructura mecánica del robot manipulador se caracteriza por tener un número
de grados de libertad, los cuales determinan en forma única su configuración.
Tı́picamente, cada grado de libertad está asociado a una articulación (variable
articular q).
4.2 Cinemática inversa
D
ada la posición del extremo final del robot en coordenadas cartesianas
[x, y, z]T y la orientación [ψ, θ, φ]T , con respecto a un sistema de referencia fijo
Σ0 (x0 , y0 , z0 ), ası́ como los parámetros geométricos li , entonces surge la pregunta
natural: ¿pueden obtenerse las coordenadas articulares del robot q para que el
extremo final del robot se posicione en las coordenadas cartesianas solicitadas, con
la orientación requerida?
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
4.3
Cinemática diferencial
187
El problema planteado se conoce como cinemática inversa y representa un área
de la robótica de mayor complejidad que la cinemática directa. Para un robot
manipulador siempre es posible encontrar el modelo de cinemática directa, mientras
que en la cinemática inversa pueden haber varias soluciones e inclusive no existir
solución analı́tica; si este es el caso, entonces como posibles formas de solución pueden
proponerse redes neuronales, métodos numéricos, iterativos, geométricos, etcétera.
La cinemática inversa es un problema no lineal que relaciona las coordenadas
articulares en función de las coordenadas cartesianas y la orientación de la
herramienta del extremo final del robot manipulador
q = f −1
R (x, y, z, li, θ, φ, ψ)
(4.2)
donde f −1
R (x, y, z, li, θ, φ, ψ) es función inversa de la ecuación (4.1).
4.3 Cinemática diferencial
L
a cinemática diferencial directa es la derivada con respecto al tiempo de la
cinemática directa
v
d
d
= f R (q)
(4.3)
[ x y z θ φ ψ ]T =
dt
dt
w
∂f R (q)
=
q̇ = J(q)q̇.
∂q
Como se ve, ésta relaciona la velocidad articular q̇ ∈ IRn con la velocidad lineal
d
d
[ x, y, z ]T = [ ẋ, ẏ, ż ]T ∈ IR3 y la velocidad angular ẇ = dt
[ θ, φ, ψ ]T =
v = dt
[ θ̇, φ̇, ψ̇ ]T ∈ IR3 , además el mapeo es descrito en términos de una matriz J(q) =
∂ f R (q )
∈ IR6×n denominada jacobiano del robot o jacobiano analı́tico:
∂q
Jv (q)
J(q) =
.
(4.4)
Jw (q)
Jv (q) ∈ IR3×n relaciona la velocidad articular q̇ ∈ IRn con la velocidad lineal v ∈ IR3 ,
mientras que Jw (q) ∈ IR3×n relaciona la velocidad angular w ∈ IR3 con la velocidad
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
188
Capı́tulo 4: Cinemática directa
articular q̇ ∈ IRn , es decir:
v
w
= J(q)q̇ =
Jv (q)q̇
.
Jw (q)q̇
(4.5)
El jacobiano del robot representa una importante herramienta en robótica que sirve
para caracterizar a un robot manipulador, encontrar configuraciones singulares,
analizar redundancia, determinar la cinemática diferencial inversa, ası́ como describir
la relación entre la fuerza aplicada y los pares o torques resultantes del extremo final.
Es indispensable para el análisis y diseño de algoritmos de control cartesiano.
Hay varias formas de seleccionar la orientación de la herramienta del robot
manipulador: si de manera particular dicha orientación es representada por los
ángulos de Euler (un sistema de referencia asociado al extremo final del robot o
a la herramienta de trabajo), entonces la velocidad angular w = [ θ̇, φ̇, ψ̇ ]T ∈ IR3
relaciona la matriz jacobiano analı́tico, como se encuentra descrita en la ecuación
(4.3). Otra posible forma de modelar la orientación de la herramienta del robot es
expresarla directamente en un sistema de referencia especı́fico, por ejemplo al origen
localizado en la base del robot, entonces a la matriz J(q) se le denomina jacobiano
geométrico que depende de la configuración del robot manipulador. El jacobiano
analı́tico difiere del jacobiano geométrico: básicamente la diferencia se encuentra en
cómo modelar la orientación de la herramienta de trabajo del robot.
La cinemática diferencial inversa representa la relación entre la velocidad articular
q̇ con la velocidad lineal de movimiento v y la velocidad angular w, expresada en
términos de la matriz inversa del jacobiano del robot:
q̇ = J
−1
(q)
v
w
(4.6)
donde J −1 (q) ∈ IR6×n es la matriz inversa del jacobiano del robot, la cual existe si
es una matriz cuadrada y su determinante es diferente a cero.
Si el determinante del jacobiano del robot J(q) es cero, entonces se dice que no es
de rango completo y se presentan problemas de singularidades.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
4.4
189
Clasificación de robots industriales
Singularidad significa que no es posible indicarle un movimiento arbitrario
al extremo final del robot, es decir para una velocidad lineal v y velocidad
angular w finitas puede corresponder una velocidad articular q̇ infinita.
Puede existir un conjunto infinito de soluciones para la cinemática directa.
La cinemática inversa diferencial tiene un número infinito de soluciones.
En control cartesiano la fuerza aplicada al robot puede provocar un par
infinito a las articulaciones del robot.
Dependiendo del tipo de robot, las singularidades pueden generar un número
infinito de puntos de equilibrio en la ecuación en lazo cerrado, formada por
la dinámica del robot y la estructura cartesiana de control.
4.4 Clasificación de robots industriales
U
n robot industrial está compuesto por una serie consecutiva de eslabones y
articulaciones para formar una cadena en cinemática abierta, la cual es la
estructura mecánica básica de un robot industrial. La cadena en cinemática abierta
está formada de la siguiente manera: la primera articulación sirve para formar la
base; a continuación siguen conexiones sucesivas entre articulaciones y eslabones, en
el extremo final del último eslabón no hay articulación, generalmente se destina a
colocar la herramienta de trabajo para llevar a cabo una aplicación especı́fica. El
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
190
Capı́tulo 4: Cinemática directa
extremo final del robot no se encuentra conectado fı́sicamente a la base como se
muestra en la figura 4.1:
Figura 4.1 Cadena en cinemática abierta.
Las articulaciones se construyen por medio de un servomotor y representan la
interconexión entre dos eslabones consecutivos. Una articulación puede realizar
sólo un tipo de movimiento, ya sea lineal, también conocida como prismática, y
rotacional. La figura 4.2 presenta el tipo de articulaciones:
Figura 4.2 Tipo de articulaciones: rotacional y lineal o prismática.
La figura 4.3 muestra la analogı́a entre el brazo humano y un brazo robot o robot
industrial. La articulación de la base corresponde a la cintura. La articulación
del hombro (shoulder) debe ser la de mayor capacidad con respecto a las otras
articulaciones, ya que es la que mueve y soporta el peso de la articulación del codo
(elbow) y de la herramienta de trabajo, ası́ como la carga de objetos que realice
durante una determinada aplicación.
Dependiendo del tipo de articulaciones (lineales o rotacionales) que se encuentran
incluidas en la estructura mecánica en cinemática abierta de la base, hombro y
codo del robot (sin incluir las articulaciones de la orientación de la herramienta de
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
4.4
Clasificación de robots industriales
191
Figura 4.3 Base, hombro y codo de un robot industrial.
trabajo), se desprende la clasificación general de robots manipuladores industriales,
también conocidos como brazos robots: antropomórfico, esférico, cilı́ndrico, SCARA
y cartesiano.
Tabla 4.1 Clasificación de robots industriales
Robot
Caracterı́sticas
Antropomórfico (RRR)
SCARA (RRP)
Esférico (RRP)
3 articulaciones rotacionales
2 articulaciones rotacionales y 1 prismática
2 articulaciones rotacionales y 1 prismática
Cilı́ndrico (RPP)
Cartesiano (PPP)
1 articulación rotacional y 2 prismáticas
3 articulaciones prismáticas
La nomenclatura empleada en robots industriales para representar el tipo de
movimiento que realizan sus articulaciones está dada de la siguiente manera:
R significa articulación tipo rotacional, mientras que la letra P representa una
articulación prismática. El orden en que se presentan corresponde a las articulaciones
de la base, hombro y codo, respectivamente. Por ejemplo, en la tabla 4.1 la notación
robot cilı́ndrico (RPP) significa que la base es una articulación rotacional, mientras
que el hombro y codo corresponden a articulaciones prismáticas.
En la figura 4.4 se muestra la clasificación de las 5 configuraciones de robots
industriales.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
192
Capı́tulo 4: Cinemática directa
Figura 4.4 Clasificación de los robots industriales.
4.5 Convención Denavit-Hartenberg
E
l método de Denavit-Hartenberg es una herramienta ampliamente conocida en
el área de ingenierı́a, ya que ofrece un procedimiento sencillo para obtener el
modelo cinemático directo cuya estructura queda en términos de la transformaciones
homogéneas.
Jaques Denavit y Richard S. Hartenberg en 1955 presentaron un procedimiento
para obtener una representación mı́nima de la orientación y traslación de robots
manipuladores. Consiste en determinar una tabla de parámetros relacionados con
los eslabones del robot. La convención Denavit-Hartenberg toma como referencia el
diagrama de un robot manipulador en cadena cinemática abierta como se muestra
en la figura 4.5.
Las variables articulares en la representación Denavit-Hartenberg se denotan con θi
para el tipo rotacional, prismática o lineal por di; este parámetro di también hace
el papel de representar el ancho del servomotor de la articulación rotacional más el
espesor de la placa métalica del eslabón, en este caso se denota por el sı́mbolo βi ; la
longitud del eslabón se representa con li y el ángulo de separación entre los ejes zi
y zi−1 se denota con αi .
El ángulo θi es el ángulo entre los ejes xi−1 y xi medido alrededor del eje zi−1 ; di es
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
4.5
193
Convención Denavit-Hartenberg
Figura 4.5 Convención Denavit-Hartenberg para un robot manipulador.
la distancia del origen del sistema de referencia i − 1 a la intersección del eje xi con
el eje zi−1 . Su medición se realiza a lo largo del eje zi−1 , como se indica en la figura
4.6. Adicionalmente a las variables articulares θi y di, hay 2 parámetros constantes
que describen caracterı́sticas especı́ficas del eslabón i-ésimo. Esos parámetros son:
el parámetro li se define como la distancia a lo largo del eje xi desde el origen del
sistema de referencia coordenado i − 1 hasta la intersección del eje zi−1 con el eje xi .
El otro parámetro es el ángulo entre los ejes zi y zi−1 se denota por αi , su medición
es respecto a un plano normal a xi . Una medición de ángulo positivo para αi se toma
en dirección del eje zi−1 hacia zi . Por ejemplo, para un robot con 6 articulaciones
rotacionales se requieren de 24 elementos para describir completamente su modelo
cinemático (li, αi , βi, θi).
Selección de sistemas de referencia
En la metodologı́a Denavit-Hartenberg, primero se describirá la convención para
asignar los sistemas de referencia cartesianos asociados a los eslabones del robot.
En este punto es necesario aclarar que en la literatura de robótica, la convención
Denavit-Hartenberg no es única, depende de la selección de los sistemas de referencia
cartesianos en las articulaciones y eslabones, ası́ como en sus eslabones adyacentes.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
194
Capı́tulo 4: Cinemática directa
Figura 4.6 Convención para medir θi y αi .
La cinemática directa del robot proporciona las coordenadas cartesianas del extremo
final del robot relativo a un sistema de referencia cartesiano fijo Σ0 (x0 , y0 , z0 ); en la
figura 4.5 se muestra la asignación de sistemas de referencia para las articulaciones
i − 1-ésima, i-ésima e i + 1 de un robot manipulador.
En general se tiene el siguiente procedimiento:
El eje zi se asigna rı́gidamente a la articulación i + 1. Es decir, z0 es el eje de
la articulación 1, z1 es el eje de la articulación 2, y ası́ sucesivamente.
Localizar el origen oi del sistema de referencia Σi ( xi , yi , zi ) en la intersección
del eje zi con la normal común a los ejes zi−1 y zi .
Seleccionar el eje xi−1 sobre la normal que une los ejes zi−1 y zi en dirección
de la articulación i − 1 hacia la articulación i.
Definir el ángulo de torsión αi , este es el ángulo entre los ejes zi y zi−1 y se
mide con valor positivo en el sentido de las manecillas del reloj sobre el eje xi .
Seleccionar el eje yi por la regla de la mano derecha.
La convención Denavit-Hartenberg proporciona una representación no única para
los siguientes casos:
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
4.5
Convención Denavit-Hartenberg
195
Para el sistema de referencia Σ0 ( x0 , y0 , z0 ) sólo la dirección del eje z0 es
especificada, entonces su origen o0 y el eje x0 pueden ser seleccionados de
manera arbitraria.
Para el sistema de referencia Σn ( xn , yn , zn ) no existe la articulación n + 1,
entonces el eje zn no está completamente definido, mientras que el eje xn es
normal al eje zn−1 . Tı́picamente la n-ésima articulación es rotatoria, por lo
tanto zn se alinea en la dirección de zn−1 .
Cuando dos ejes consecutivos zi y zi−1 son paralelos entre sı́, la normal común
entre ellos no es única.
Cuando dos ejes consecutivos zi y zi−1 se interceptan, la dirección del eje xi
es arbitraria.
Cuando la articulación i-ésima es lineal o prismática, entonces la dirección de
zi es arbitraria.
De acuerdo con esta convención previamente descrita, a continuación se resumen los
parámetros del i-ésimo eslabón:
1. li es la longitud del i-ésimo eslabón, es la distancia del eje zi−1 hacia el eje zi
medida sobre el eje xi−1 .
2. αi es el ángulo de torsión, el cual representa el ángulo entre los ejes zi−1 a zi
medido en el sentido de las manecillas del reloj sobre el eje xi .
3. di se emplea en articulaciones lineales o prismáticas y representa el desplazamiento lineal. Cuando la articulación es rotacional, entonces representa el offset o
espesor del servomotor (la distancia de xi−1 a xi medido sobre el eje zi−1 ), se
denota por βi .
4. θi es el desplazamiento rotacional de xi−1 a xi medido alrededor del eje zi−1 . El
signo positivo de θi es el sentido contrario a las manecillas del reloj.
Obsérvese que li y βi siempre serán positivos puesto que corresponden a longitudes,
mientras que αi , di, θi representan cantidades con signo.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
196
Capı́tulo 4: Cinemática directa
4.5.1
4.5.1. Algoritmo Denavit-Hartenberg
A continuación se describe el procedimiento para encontrar la cinemática directa a
través de la convención Denavit-Hartenberg.
1. Localizar la dirección de los ejes z0 , z1 , · · · , zn−1 .
2. Establecer el sistema de referencia cartesiano fijo Σ0 ( x0 , y0 , z0 ) cuyo origen es
colocado sobre el sistema de referencia en la base del robot. Los ejes x0 , y0 son
determinados de acuerdo con la regla de la mano derecha.
Una vez que el sistema de referencia Σ0 ( x0 , y0 , z0 ) ha sido establecido, se inicia
un proceso iterativo en el cual se define el sistema de referencia Σi ( xi , yi , zi )
usando el sistema de referencia Σi−1 (xi−1 ,yi−1 , zi−1 ), iniciando con el sistema
de referencia Σ1 ( x1 , y1 , z1 ). En la figura 4.5 se muestra el procedimiento.
Llevar a cabo los pasos 3 al 5 para la articulaciones i = 1, · · ·, n − 1.
3. Localizar el origen oi en la intersección de la normal común que une al eje zi con
el eje zi−1 .
Si el eje zi intercepta al eje zi−1 colocar oi en la intercepción.
Para el caso en que los ejes zi y zi−1 son paralelos:
Si la articulación i-ésima es rotacional, colocar el origen oi sobre la
articulación i-ésima, tal que di = 0.
Si la articulación i-ésima es prismática, colocar el origen oi en un punto
lı́mite fı́sico de la articulación i-ésima, por ejemplo en un punto extremo.
4. Seleccionar el eje xi a lo largo de la normal común que une a los ejes zi−1 y zi ,
en dirección de la articulación i − 1 hacia la articulación i.
5. Determinar yi por la regla de la mano derecha.
6. Establecer el sistema de referencia del extremo final Σn ( xn , yn , zn ).
Si la articulación n-ésima es rotatoria, entonces alinear el eje zn con el
eje zn−1
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
4.5
197
Convención Denavit-Hartenberg
Si la articulación n-ésima es prismática, entonces seleccionar el eje zn de
forma arbitraria. El eje xn debe cumplir el paso 4.
7. Establecer la tabla 4.2 de parámetros de eslabones.
8. Obtener las matrices de transformaciones homogéneas (4.7):
i
Hi−1
para i = 1, 2, · · · , n − 1.
Tabla 4.2 Parámetros Denavit-Hartenberg
Caracterı́sticas de eslabones
li
di
αi
Longitud del eslabón i-ésimo.
Articulaciones lineales o prismáticas. Tambı́en
representa el espesor del servomotor (βi ).
Ángulo entre los ejes zi−1 y zi medido con respecto al eje xi .
articulaciones rotacionales; representa el ángulo
θi
entre los ejes xi−1 y xi medido alrededor del eje
zi−1 .
i
En la representación Denavit-Hartenberg cada transformación homogénea Hi−1
se
representa por el producto de cuatro transformaciones básicas:
i
= HRzi−1 (θi )HTzi−1 (di (βi ))HTxi−1 (li )HRxi−1 (αi)
Hi−1
⎡
⎤
⎤⎡
cos(θi ) − sen(θi ) 0 0
1 0 0
0
⎢ sen(θ )
⎢
cos(θi )
0 0⎥
0 ⎥
i
⎢
⎥
⎥⎢0 1 0
= ⎢
⎥
⎥⎢
⎣
0
0
1 1 ⎦ ⎣ 0 0 1 di (βi) ⎦
0
0
⎤⎡
0 0 li
1
⎢0 1 0 0 ⎥⎢0
⎢
⎥⎢
⎢
⎥⎢
⎣0 0 1 0 ⎦⎣0
⎡
⎡
0 1
0
1
cos(αi )
sen(αi)
0
0
0 0 0 1
cos(θi ) − sen(θi ) cos(αi )
⎢ sen(θ )
i
⎢
= ⎢
⎣
0
0
cos(θi ) cos(αi )
sen(αi )
0
0 0 0
0
0
(4.7)
1
⎤
− sen(αi ) 0 ⎥
⎥
⎥
cos(αi )
0⎦
0
1
sen(θi ) sen(αi )
li cos(θi )
0
1
⎤
− cos(θi ) sen(αi ) li sen(θi ) ⎥
⎥
⎥
cos(αi )
di (βi) ⎦
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
198
Capı́tulo 4: Cinemática directa
n−1 n
La transformación homogénea total se obtiene como H0n = H01 H12 · · · Hn−2
Hn−1 .
La cinemática directa es la forma general de transformaciones homogéneas que
concatena los sistemas de referencia cartesianos asociados a los eslabones del robot,
todos relativos al sistema de referencia fijo Σ0 .
4.6 Resumen
C
inemática directa relaciona las coordenadas articulares y propiedades
geométricas del sistema mecánico con las coordenadas cartesianas del robot
y la orientación de la herramienta colocada en el extremo final. En este capı́tulo
se ha presentado los conceptos de cinemática inversa, cinemática diferencial y la
importancia que presenta el jacobiano del robot en control cartesiano y en el tema
de singularidades. Para las finalidades de la presente obra, cuando se relaciona
las coordenadas articulares con las coordenadas cartesianas sin tomar en cuenta
la orientación de la herramienta de trabajo, se denomina cinemática directa
cartesiana, la cual será la base de análisis de las principales configuraciones de
robots industriales.
El procedimiento Denavit-Hartenberg permite obtener el modelo de cinemática
directa de robots manipuladores con eslabones en serie a través de la siguiente tabla
de parámetros 3.1:
Tabla 4.3 Parámetros DH
Eslabóni
li
αi
di
θi
La formulación Denavit-Hartenberg queda expresada en términos de matrices
homogéneas con el estricto orden de transformaciones de traslación y rotación:
i
= HRzi (θi+1 )HTzi (di+1 )HTxi (li+1 )HRxi (αi+1 )
Hi−1
⎡
⎤
cos(θi ) − sen(θi ) cos(αi )
sen(θi ) sen(αi ) li cos(θi )
⎢ sen(θ )
cos(θi ) cos(αi )
− cos(θi ) sen(αi) li sen(θi ) ⎥
i
⎢
⎥
= ⎢
⎥
⎣
⎦
cos(αi )
di
0
sen(αi )
0
Alfaomega
0
0
1
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Capı́tulo
5
Cinemática directa
cartesiana
5.1 Introducción
5.2 Brazo robot antropomórfico
5.3 Configuración SCARA
5.4 Robot esférico
5.5 Manipulador cilı́ndrico
5.6 Configuración cartesiana
5.7 Resumen
Objetivos
Presentar el análisis de cinemática directa cartesiana, cinemática inversa y
matriz jacobiano de las principales configuraciones de robots industriales
considerando los parámetros geométricos y desarrollar librerı́as en
lenguaje MATLAB (toolbox) que permitan realizar aplicaciones en el área
de cinemática directa de robots manipuladores.
Objetivos particulares:
Modelo de cinemática directa.
Modelo de cinemática inversa.
Jacobiano.
Librerı́as de análisis y diseño de cinemática de robots industriales.
5.1
201
Introducción
5.1 Introducción
E
sta sección analiza la cinemática directa cartesiana de las configuraciones más
importantes en robótica industrial tales como el brazo robot (antropomórfico),
configuración SCARA, esférico, cilı́ndrico y cartesiano. El análisis cinemático que se
presenta es tomando en cuenta la relación que existe entre las coordenadas articulares
con las coordenadas cartesianas del extremo final del robot (cinemática directa
cartesiana), no se incluye la orientación de la herramienta de trabajo ubicada en
el extremo final del robot.
Para el análisis cinemático cartesiano se utiliza la metodologı́a Denavit-Hartenberg,
y por lo tanto dicho modelo queda en función de transformaciones homogéneas.
El jacobiano analı́tico del robot se deduce como la derivada parcial de la cinemática
directa cartesiana con respecto al vector de posición articular; el jacobiano analı́tico
del robot proporciona información sobre el problema de singularidades que puede
presentar el movimiento del robot en su espacio de trabajo. Esta información es muy
importante en aplicaciones donde interviene la inversa de la matriz jacobiana, ya que
una singularidad significa que el determinante es cero para un conjunto especı́fico
de valores de las posiciones articulares.
Debido a la importancia que tiene la cinemática inversa en la programación de tareas
en espacio cartesiano y la conversión al espacio articular, se presenta la solución
geométrica en detalle para cada una de las configuraciones de robots industriales.
Un conjunto de librerı́as en código fuente de MATLAB se desarrollan y documentan
de la matriz de transformación homogénea, cinemática directa cartesiana, jacobiano
y su determinante, cinemática inversa, en variables simbólicas y aplicaciones
numéricas de todas las configuraciones analizadas. El código fuente de los ejemplos,
aplicaciones y librerı́as de cada robot manipulador se encuentra disponible en el sitio
WEB del libro:
http://virtual.alfaomega.com.mx
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
202
Capı́tulo 5: Cinemática directa cartesiana
5.2 Brazo robot antropomórfico
D
entro de la clasificación de robots industriales, el robot antropomórfico
o brazo robot es la configuración que más se utiliza debido a la destreza
que presenta el movimiento del extremo final como una consecuencia de sus
tres articulaciones rotacionales, lo cual lo hace ideal para un amplio espectro de
aplicaciones tales como: industriales, quirófanos robotizados, fisioterapia, asistencia
a personas con capacidades diferenciadas, maniobras submarinas y espaciales, etc.
La configuración antropomórfica se divide en tres casos de estudio: péndulo robot,
robot planar de 2 grados de libertad y el brazo robot (movimiento tridimensional).
Péndulo robot
Como un caso particular del robot de 3 grados de libertad antropomórfico, se
encuentra el péndulo robot de 1 grado de libertad formado por un servomotor que
tiene acoplado mecánicamente una barra metálica de longitud l1 y está sometido al
fenómeno de gravedad. El movimiento del péndulo se encuentra en el plano vertical
x0 − y0 como se indica en la figura 5.1.
Figura 5.1 Péndulo robot.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
203
Brazo robot antropomórfico
Cinemática directa cartesiana del péndulo robot
El origen del sistema de referencia cartesiano Σ0 (x0 , y0 , z0 ) se coloca sobre la
articulación del péndulo (en el respaldo del estator del servomotor), el eje z0 se
alinea con el eje de giro del servomotor el cual es perpendicular al plano x0 − y0 .
El servomotor del péndulo tiene un espesor de longitud β1 el cual ya incluye el
ancho de la barra metálica. El origen del sistema de referencia Σ1 (x1 , y1 , z1 ) se
coloca en el extremo final de la barra y se mueve de manera conjunta al péndulo, el
origen Σ1 tiene las siguientes coordenadas con respecto al origen de Σ0 (x0 , y0 , z0 ):
[l1 cos(q1 ), l1 sen(q1 ), β1 ]. Debido al espesor β1 el origen de Σ1 mantiene una distancia
β1 sobre el eje z0 . Los ejes z1 y z0 son paralelos entre sı́, por lo tanto el ángulo α1
que existe entre ellos es α1 = 0.
El plano x1 − y1 tiene una rotación de q1 grados con respecto al plano x0 − y0 del
sistema fijo Σ0 (x0 , y0 , z0 ), y la matriz Rz0 ( q1 ) determina dicha rotación:
⎡
− sen(q1 ) 0
cos(q1 )
⎢
R10 = Rz0 ( q1 ) = ⎣ sen(q1 )
cos(q1 )
0
0
⎤
⎥
0⎦.
1
Los parámetros Denavit-Hartenberg correspondientes al péndulo-robot se encuentran especificados en la tabla 5.1.
Tabla 5.1 DH del péndulo
Eslabón
l
α
d
θ
1
l1
0
β1
q1
La matriz de transformación homogénea H01 se obtiene de la ecuación (4.7), que para
el caso del péndulo-robot adquiere la siguiente forma:
H01 = HR (z0 , q1 )HT (z0 , β1 )HT (x0 , l1)HR (x0 , 0)
⎡
⎤
cos(q1 ) − sen(q1 ) 0 l1 cos(q1 )
⎢ sen(q )
cos(q1 )
0 l1 sen(q1 ) ⎥
1
⎢
⎥
= ⎢
⎥.
⎣
⎦
0
0
1
β1
0
0
0
(5.1)
(5.2)
1
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
204
Capı́tulo 5: Cinemática directa cartesiana
Las coordenadas cartesianas del extremo final del péndulo robot (cinemática directa
cartesiana), es decir el origen del sistema Σ1 (x1 , y1 , z1 ) con respecto al sistema fijo
Σ0 (x0 , y0 , z0 ) se encuentra determinado por:
⎡
x0
⎤
⎡
l1 cos(q1 )
⎤
⎢ ⎥
⎢
⎥
⎣ y0 ⎦ = ⎣ l1 sen(q1 ) ⎦ .
z0
β1
(5.3)
Las coordenadas cartesianas del extremo final del péndulo dependen de la ubicación
de la posición de casa (home position), la cual es el punto de reposo u origen del
péndulo que corresponde a q1 = 0. Como se puede apreciar en la figura 5.1, la
posición de casa está colocada sobre el eje x0+ . La matriz de rotación Rz0 ( q1 )
que determina la rotación entre los sistemas de referencia fijo Σ0 (x0 , y0 , z0 ) y
Σ1 (x1 , y1 , z1 ) fue obtenida con respecto al primer cuadrante, es decir en el plano
x0+ − y0+ .
Otra posibilidad para ubicar la posición de casa del péndulo es colocar el origen
q1 = 0 sobre el lado negativo del eje y0 como se muestra en la figura 5.2.
Figura 5.2 Cambio de posición de casa del péndulo sobre el eje y0− .
En este caso, para poder obtener la matriz de rotación resultante del péndulo en la
nueva ubicación de la posición de casa, la matriz Rz0 ( q1 ) debe ser precedida por
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
205
Brazo robot antropomórfico
una rotación de un ángulo igual a - π2 alrededor del eje z0 , es decir:
⎡
cos(q1 )
⎢
R10 = Rz0 ( − π2 ) ⎣ sen(q1 )
− sen(q1 ) 0
cos(q1 )
⎤
⎥
0⎦
0
⎤⎡
0
1
⎤
0 1 0
cos(q1 ) − sen(q1 ) 0
⎢
⎥⎢
⎥
= ⎣ −1 0 0 ⎦ ⎣ sen(q1 )
cos(q1 )
0⎦
0 0 1
0
0
1
⎡
⎤
sen(q1 ) cos(q1 ) 0
⎢
⎥
= ⎣ − cos(q1 ) sen(q1 ) 0 ⎦
0
0
1
⎡
La matriz de transformación homogénea para
está determinada como:
⎡
cos(q1 ) − sen(q1 )
⎡
π ⎢
cos(q1 )
⎢ Rz0 ( − 2 ) ⎣ sen(q1 )
H01 = ⎢
0
0
⎣
el péndulo-robot (IV cuadrante)
0
⎤
⎡
⎥
0⎦
1
Rz0 ( − π2
0T
⎡
sen(q1 )
⎢ − cos(q )
1
⎢
= ⎢
⎣
0
0
cos(q1 )
1
0
l1 sen(q1 )
⎤
sen(q1 ) 0 −l1 cos(q1 ) ⎥
⎥
⎥.
⎦
0
1
β1
0
⎤
⎤
⎥
⎢
) ⎣ l sen(q) ⎦ ⎥
⎥(5.4)
β1
⎦
l cos(q)
0
(5.5)
1
Las coordenadas del extremo final del péndulo respecto a la posición de casa colocada
sobre el eje y0− adquiere la siguiente forma:
⎡
x0
⎤
⎡
l1 sen(q1 )
⎤
⎢ ⎥
⎢
⎥
⎣ y0 ⎦ = ⎣ −l1 cos(q1 ) ⎦
β1
z0
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
(5.6)
Alfaomega
206
Capı́tulo 5: Cinemática directa cartesiana
Jacobiano del péndulo
Debido a que el péndulo robot es un sistema escalar, no tiene matriz jacobiana. Sin
embargo, se puede realizar la siguiente interpretación partiendo de la cinemática
diferencial:
−l1 sen(q1 )
d l1 cos(q1 )
∂f R (q1 )
v =
=
q̇1
q̇1 =
dt l1 sen(q1 )
∂q1
l1 cos(q1 )
q̇1
−l1 sen(q1 )
0
=
(5.7)
= J(q1 )q̇
q̇
0
l cos(q1 )
1
1
J(q1 )
q̇
el jacobiano J(q1 ) se puede pensar como está expresado en la ecuación (5.7). Nótese
que existe una singularidad cuando la variable articular q1 = 0, ±nπ, ya que su
determinante está dado como: det[J(q1 )] = −l12 sen(q1 ) cos(q1 ). También existen
singularidades en q1 = ±n π2 , esto último puede verificarse en la cinemática inversa
(5.8), si q1 = ±n π2 ⇒ x0 = 0, entonces se indefine la función arco-tangente (por
ejemplo división entre cero).
Cinemática inversa del péndulo
La cinemática inversa se obtiene despejando la variable q1 de la ecuación (5.3),
obteniendo:
y0
q1 = atan
.
(5.8)
x0
Función transformación homogénea del péndulo H01
La función transformación homogénea del péndulo H01 se encuentra expresada como:
H01 =H pendulo()
El código MATLAB de la función transformación homogénea del péndulo se describe
en el cuadro 5.1. En la lı́nea 5 despliega la tabla 5.1 de parámetros DH. La lı́nea 7
contiene el cálculo de la matriz homogénea H01 = HRz0 (q1 )HTz0 (β1 )HTx0 (l1 )HRx0 (0)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
Brazo robot antropomórfico
207
y en la lı́nea 8 se emplea la función H DH(H10) para obtener la matriz de rotación y
las coordenadas cartesianas.
Código Fuente 5.1
H pendulo.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
H pendulo.m
1
2
function H=H pendulo()
syms l1 q1 beta1 real
3
5
disp(’Parámetros Denavit-Hartenberg del péndulo’)
disp(’[ l alpha d q]’) dh=[l1, 0, beta1, q1];;
disp(dh)
6
%H01 = HRz0 (q1 )HTz0 (β1 )HTx0 (l1 )HRx0 (0)
7
H10=HRz(q1)*HTz(beta1)*HTx(l1)*HRx(0) ;
[R10, cinemat pendulo, cero, c]=H DH(H10);
H=[R10, cinemat pendulo;;
cero, c];
4
8
9
10
11
end
Función cinemática directa cartesiana del péndulo
La función de cinemática directa cartesiana del péndulo tiene la siguiente sintaxis:
[x0 , y0 , z0 ]=cinematica pendulo(β1, l1, q1 )
donde β1 , l1, q1 representan el ancho del servomotor y espesor de la barra metálica,
longitud de la barra metálica y posición articular del péndulo, respectivamente. Esta
función retorna las coordenadas cartesianas del extremo final del péndulo ubicadas
en el sistema Σ0 (x0 , y0 , z0 ).
El código de la función de cinemática cartesiana del péndulo se encuentra en el
cuadro 5.2; se contempla el caso simbólico y numérico.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
208
Capı́tulo 5: Cinemática directa cartesiana
Código Fuente 5.2
cinematica pendulo.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinematica pendulo.m
1
2
3
function [x0, y0, z0]=cinematica pendulo(beta1,l1,q1)
dato1=whos(’beta1’); dato2=whos(’l1’); dato3=whos(’q1’);
v1=strcmp(dato1.class, ’sym’); v2=strcmp(dato2.class, ’sym’);
4
v3=strcmp(dato3.class, ’sym’); digits(3);
if (v1 & v2 & v3) %caso simbólico
x0=l1*cos(q1);
y0=l1*sin(q1);
5
6
7
8
z0=beta1;
9
end
else %caso numérico
10
11
x0=double(simplify(vpa(l1*cos(q1),3)));
y0= double(simplify(vpa(l1*sin(q1),3)));
z0=double(simplify(vpa(beta1,3)));
12
13
14
end
Función cinemática inversa del péndulo
La función de cinemática inversa del péndulo se encuentra expresada como:
q1 =cinv pendulo(x0 , y0 )
donde x0 , y0 representan las coordenadas del extremo final del péndulo con respecto
al sistema Σ0 (x0 , y0 , z0 ). Esta función retorna la posición articular q1 del péndulo;
observe que el modelo de cinemática inversa no depende del grosor del servomotor
(β1 ).
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
209
Brazo robot antropomórfico
El código de la función de cinemática inversa se encuentra en el cuadro 5.3.
Código Fuente 5.3
cinv pendulo.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinv pendulo.m
1
function q1=cinv pendulo(x0,y0)
2
%cinemática inversa del péndulo
3
q1=atan(y0/x0);
4
end
♣ Ejemplo 5.1
Desarrollar un programa para MATLAB que presente de manera simbólica los
parámetros DH, cinemática cartesiana y el jacobiano del péndulo. Además,
contemple el análisis donde la posición de casa se traslada del primer al cuarto
cuadrante.
Solución
En el cuadro 5.4 se presenta el programa que permite desplegar en forma sı́mbolica
los parámetros DH, cinemática cartesiana y el jacobiano del péndulo.
La lı́nea 7 obtiene la transformación homogénea del péndulo H01 empleando la
función H01 =H pendulo(). La lı́nea 9 deduce la matriz de rotación R10 y la cinemática
cartesiana f R (q1 ) a través de la función H DH(H01 ).
En la lı́nea 11 se realiza una rotación HRz0 ( − π2 ) (-90 grados alrededor del eje z0 )
para trasladar la posición de casa al cuarto cuadrante. De la lı́nea 13 a la 20 se
presenta un ejemplo numérico, para trasladar las coordenadas del extremo final en
la rotación del primer al cuarto cuadrante.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
210
Capı́tulo 5: Cinemática directa cartesiana
El programa 5.4 contiene la descripción completa del modelo cinemático directo del
péndulo robot, el cual emplea las funciones de transformación homogénea H01 incluye
la matriz de rotación R10 que relaciona la rotación del extremo final del eslabón con
respecto a la base del péndulo, ası́ como la cinemática directa cartesiana en variables
simbólicas como aplicación numérica.
Código Fuente 5.4
cap5 pendulo.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cap5 pendulo.m
1
4
clc;
clear all;
close all;
format short
5
syms beta1 l1 q1 real
6
7
%H01 = HRz0 (q1 )HTz0 (β1 )HTx0 (l1 )HRx0 (0)
H10=H pendulo() %H01
8
%obtiene la matriz de rotación R10 y cinemática directa f r (q)
2
3
11
[R10, frq pendulo, cero, c]=H DH(H10) %R10 , f R (β1 , l1 , q1 )
jac pendulo=jacobian(frq pendulo, q1)
H10a=HRz(-pi/2)*H10 %H01 a = HRz0 ( − π2 ) H01
12
%ejemplo numérico
13
q1=55*pi/180; %posición angular del péndulo
beta1=0.1; %ancho del servomotor más espesor de la barra
l1=0.45; beta1=0.1; %longitud del péndulo y espesor del servomotor
9
10
14
15
16
17
%cinemática cartesiana cuadrante I: f RI (β1 , l1 , q1 )
[x0,y0,z0]=cinematica pendulo(beta1,l1,q1)
18
%cinemática directa en el cuadrante IV
19
%f RIV (β1 , l1 , q1 ) = Rz (− π2 )f RI (β1 , l1 , q1)
20
Rz(-pi/2)*cinematica pendulo(beta1,l1,q1)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
Brazo robot antropomórfico
211
Robot planar vertical de dos grados de libertad
La figura 5.3 muestra un robot de dos grados de libertad con articulaciones
rotacionales que se mueve en el plano vertical x0 − y0 . El sistema de referencia
fijo Σ0 (x0 , y0 , z0 ) se coloca en el respaldo del servomotor del hombro, de tal forma
que el eje z0 coincida con el eje de rotación (perpendicular al plano de la hoja). El
ancho de cada servomotor y espesor de la barra metálica están determinados por β1
y β2 . Los ejes x0 , y0 se seleccionan con la regla de la mano derecha.
Cinemática directa cartesiana del brazo robot de 2 gdl
El sistema de referencia Σ1 (x1 , y1 , z1 ) se coloca en el extremo final del primer eslabón,
el eje z1 se coloca paralelo al eje z0 (α1 = 0). El origen del sistema Σ1 (x1 , y1 , z1 ) se
ubica en la intersección del eje x0 con el eje z1 (cuando q1 = 0) y está a una distancia
β1 sobre el eje z0 . El origen del sistema de referencia Σ2 (x2 , y2 , z2 ) se coloca en el
extremo final del robot. El ancho del servomotor del codo y el espesor de la segunda
barra miden β2 . Cuando q2 = 0 el origen de Σ2 se encuentra a una distancia l2 sobre
el eje x1 y a una distancia β2 sobre el eje z1 . Los ejes xi , yi , con i = 1, 2 se seleccionan
con la regla de la mano derecha. Los ejes z1 y z2 son paralelos entre sı́ (α2 = 0).
Figura 5.3 Robot planar vertical de dos gdl.
En la tabla 5.2 se muestran los parámetros de los eslabones para la convención
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
212
Capı́tulo 5: Cinemática directa cartesiana
Denavit-Hartenberg de un robot planar de dos grados de libertad.
Tabla 5.2 DH del robot de 2 gdl
Eslabón
li
αi
di
θi
1
l1
0
β1
q1
2
l2
0
β2
q2
Generalmente la posición de casa para un robot de dos grados de libertad se
selecciona sobre el eje x0+ , midiendo el ángulo q1 en sentido contrario a las manecillas
del reloj, es decir del eje x0+ hacia el eje y0+ , con esta consideración se obtienen las
siguientes matrices de transformación homogénea:
H01 = HRz0 ( q1 ) HTz0 ( β1 ) HTx0 ( l1 ) HRx0 ( 0 )
⎡
⎤
cos(q1 ) − sen(q1 ) 0 l1 cos(q1 )
⎢ sen(q )
cos(q1 )
0 l1 sen(q1 ) ⎥
1
⎢
⎥
= ⎢
⎥
⎣
⎦
0
0
1
β1
0
0
0
0
H02 = H01 H12
⎡ cos(q1 + q2 )
= ⎣
(5.10)
1
H12 = HRz1 ( q2 ) HTz1 ( β2 ) HTx1 ( l2 ) HRx1 ( 0 )
⎡
⎤
cos(q2 ) − sen(q2 ) 0 l2 cos(q2 )
⎢ sen(q )
cos(q2 )
0 l2 sen(q2 ) ⎥
2
⎢
⎥
= ⎢
⎥
⎣
⎦
0
0
1
β2
0
(5.9)
0
(5.11)
(5.12)
1
sen(q1 + q2 )
0
− sen(q1 + q2 )
cos(q1 + q2 )
0
0
0
1
0
0
0
l1 cos(q1) + l2 cos(q1 + q2 ) ⎤
l1 sen(q1) + l2 sen(q1 + q2 )
⎦.
β1 + β2
(5.13)
1
La cinemática directa de las coordenadas cartesianas del extremo final del robot (sin
tomar en cuenta la orientación de la herramienta de trabajo) está dada por:
⎡ ⎤
⎤
⎡
x0
l1 cos(q1 ) + l2 cos(q1 + q2 )
⎢ ⎥
⎥
⎢
(5.14)
⎣ y0 ⎦ = f R (q) = ⎣ l1 sen(q1 ) + l2 sen(q1 + q2 ) ⎦ .
z0
Alfaomega
β1 + β2
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
213
Brazo robot antropomórfico
Obsérvese que la coordenada z0 incluye el espesor de los dos servomotores con sus
respectivos espesores de las barras metálicas, de tal forma que el origen del sistema
Σ2 (x2 , y2 , z2 ) se encuentra a una distancia β1 + β2 sobre el eje z0 del sistema fijo
Σ0 (x0 , y0 , z0 ).
La posición de casa de un robot manipulador planar de dos grados de libertad
también puede ser ubicada sobre el eje y0− . Esto equivale a hacer una rotación
alrededor del eje z0 por -90 grados para la articulación del hombro, es decir:
HRz0 ( − π2 ) H01 y también para articulación del codo HRz1 ( − π2 ) H12 . El ángulo q1 se
mide del eje y0− hacia el eje x0+ (valor positivo en sentido contrario a las manecillas
del reloj) como se muestra en la figura 5.4.
Figura 5.4 Rotación de la posición de casa por -90 grados alrededor del eje z0 .
H01 y0−
π
H01
= H R z0 −
2
⎡ 0 1 0 0⎤⎡
−1
= ⎣ 0
0
0
0
0
0
1
0
cos(q1)
0
⎦ ⎣ sen(q1 )
0
0
1
0
⎤
− sen(q1)
0
l1 cos(q1 )
cos(q1 )
0
0
0
1
0
l1 sen(q1 )
⎦
β1
1
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
214
Capı́tulo 5: Cinemática directa cartesiana
⎡
sen(q1 )
cos(q1 )
⎢ − cos(q )
1
⎢
= ⎢
⎣
0
H12 y1−
sen(q1 ) 0
0
1
l1 sen(q1 )
⎣ −1
0
⎡
0
0
0
0
1
0
⎦ ⎣ sen(q2)
0
0
0
0
1
sen(q2 )
⎢ − cos(q )
2
⎢
= ⎢
⎣
0
=
=
⎣ − cos(q1 + q2 )
0
0
⎡
sen(q1 + q2 )
0
0
1
0
0
0
sen(q2 ) 0
0
H01 y0− H12 y1−
cos(q2 )
0
0
cos(q2 )
0
1
0
0
⎤
−l1 cos(q1 ) ⎥
⎥
⎥
⎦
β1
0
0
0
1
π
H12
= H R z1 −
2
⎡ 0 1 0 0 ⎤ ⎡ cos(q2 ) − sen(q2 )
=
H02 y0−
0
l2 cos(q2 ) ⎤
l2 sen(q2 )
⎦
β2
l2 sen(q2 )
⎤
1
−l2 cos(q2 ) ⎥
⎥
⎥
⎦
β2
1
⎤
cos(q1 + q2 )
0
l1 sen(q1 ) + l2 sen(q1 + q2 )
sen(q1 + q2 )
0
0
0
1
0
−l1 cos(q1 ) − l2 cos(q1 + q2 )
⎦
β1 + β2
1
El mismo resultado se puede obtener premultiplicando la matriz homogénea de
rotación HRz0 ( − π2 ) a la matriz de transformación homogénea H02 (5.13). Es decir,
H02 y0− = HRz0 ( − π2 ) H02 .
Por lo que la cinemática directa de coordenadas cartesianas para un robot planar
de dos grados de libertad cuya posición inicial es sobre el eje y0 negativo:
⎡
x0
⎤
⎡
l1 sen(q1 ) + l2 sen(q1 + q2 )
⎤
⎢ ⎥
⎢
⎥
⎣ y0 ⎦ = ⎣ −l1 cos(q1 ) − l2 cos(q1 + q2 ) ⎦
β1 + β2
z0
(5.15)
Debido a que la rotación se realiza alrededor de los ejes z1 y z2 , ambos paralelos al
eje z0 , no existe ninguna modificación de coordenadas de los parámetros geométricos
β1 y β2 . Por lo que el origen del sistema Σ2 (x2 , y2 , z2 ) siempre tendrá una distancia
β1 + β2 sobre el eje z0 .
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
215
Brazo robot antropomórfico
Jacobiano del brazo robot de 2 gdl
El jacobiano analı́tico del robot de 2 gdl se obtiene como:
J(q) =
∂f R (β1 , β2, l1 , l2, q)
∂q
tomando en cuenta que los parámetros geométricos β1 , β2 , l1, l2 son constantes, y
considerando la posición de casa sobre el eje x0 (primer cuadrante):
J(q) =
−l1 sen(q1 ) − l2 sen(q1 + q2 ) −l2 sen(q1 + q2 )
l1 cos(q1 ) + l2 cos(q1 + q2 )
l2 cos(q1 + q2 )
∈ IR2×2 (5.16)
El determinante del jacobiano es det[J(q)] = l1 l2 sen(q2 ), el cual es cero para
q2 = 0, ±nπ y q1 cualquier valor. Por lo tanto, cuando la articulación del codo
tiene alguno de esos valores para q2 el robot entra en una singularidad. Esto es
importante en aplicaciones donde interviene q̇ = J(q)−1 v.
Cinemática inversa del brazo robot de 2 gdl
La cinemática inversa (sin tomar en cuenta la orientación de la herramienta
de trabajo) de un robot manipulador de dos grados de libertad se obtiene por
procedimiento geométrico (ver figura 5.5).
Figura 5.5 Cinemática inversa de un robot planar de dos grados de libertad.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
216
Capı́tulo 5: Cinemática directa cartesiana
El ángulo ϑ que se encuentra dentro del triángulo formado por los lados adyacente
l1 + l2 cos(q2 ), cateto opuesto l2 sen(q2 ) y la hipotenusa x20 + y02 , del teorema de
Pitágoras se obtiene la solución para la variable articular q2 :
x20 + y02 = [l1 + l2 cos(q2 )]2 + l22 sen2 (q2 )
:1
2
2
2
2
= l1 + l2 [cos (q
+ sen (q2 )] + 2l1 l2 cos(q2 )
2 )
= l12 + l22 + 2l1 l2 cos(q2 )
q2 = acos (
x20 +y02 −l21 −l22
2l1l2
)
Observe que el ángulo ϑ satisface:
ϑ =
l2 sen(q2 )
atan
l1 + l2 cos(q2 )
Ahora, tomando los ángulos ϑ + q1 dentro del triángulo formado por los catetos
adyacente x0 , opuesto y0 y la hipotenusa x20 + y02 se cumple la siguiente expresión:
y0
ϑ + q1 = atan
x0
Entonces, la variable articular q1 adquiere la siguiente forma:
y0
q1 = atan
−ϑ
x0
l2 sen(q2 )
y0
− atan
= atan
x0
l1 + l2 cos(q2 )
Por lo tanto, la cinemática inversa de un robot de 2 gdl no depende de β1 y β2
debido a que no hay proyecciones de estos parámetros sobre el plano x0 − y0 :
q2 = acos (
q1 =
Alfaomega
atan
x20 +y02 −l21 −l22
2l1 l2
y0
x0
)
− atan
l2 sen(q2 )
l1 + l2 cos(q2 )
(5.17)
(5.18)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
217
Brazo robot antropomórfico
Función transformación homogénea del robot 2 gdl H02
La función transformación homogénea H02 del robot planar vertical de 2 gdl se
encuentra expresada como:
H02 =H r2gdl()
esta función retorna H02 la transformación homogénea del robot planar vertical de 2
gdl. El código MATLAB de la función transformación homogénea H02 del robot de
2 gdl se encuentra en el cuadro 5.5.
Código Fuente 5.5
H r2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
H r2gdl.m
1
2
3
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’)
4
disp(’[ l alpha d q]’)
dh=[l1, 0, beta1, q1; l2, 0, beta2, q2];
disp(dh)
5
6
%H01 = HRz0 (q1 )HTz0 (β1 )HTx0 (l1 )HRx0 (0)
H10=HRz(q1)*HTz(beta1)*HTx(l1)*HRx(0)
7
8
%H12 = HRz0 (q2 )HTz0 (β2 )HTx0 (l2 )HRx0 (0)
H21=HRz(q2)*HTz(beta2)*HTx(l2)*HRx(0)
H20=simplify(H10*H21); % H02 = H01 H12
[R20, cinemat r2gdl, cero, c]=H DH(H20)
9
10
11
12
H=[R20, cinemat r2gdl; % R20 (q1 , q2 ), f R (q1 , q2)
cero, c];
13
14
15
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
218
Capı́tulo 5: Cinemática directa cartesiana
Función cinemática directa del robot de 2 gdl
La función de cinemática directa de un robot de 2 gdl se encuentra dada por:
[x0 , y0 , z0 ]=cinematica r2gdl(β1, l1 , q1 , β2, l2 , q2 )
donde los argumentos de entrada son los parámetros geométricos β1 , l1, β2 , l2 y
posiciones articulares q1 , q2 del hombro y codo, respectivamente. Esta función retorna
las coordenadas cartesianas (x0 , y0 , z0) en el sistema Σ0 (x0 , y0 , z0 ).
Código Fuente 5.6
cinematica r2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinematica r2gdl.m
1
2
3
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’);
4
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);
5
6
7
8
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));
9
10
11
14
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);
15
z0=beta1+beta2;
12
13
16
17
end
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
Brazo robot antropomórfico
219
Función cinemática inversa del robot de 2 gdl
La función de cinemática inversa de un robot de 2 gdl tiene la siguiente sintaxis:
[q1 , q2 ]=cinv r2gdl(l1, l2, x0 , y0 )
donde los argumentos de entrada son los parámetros geométricos l1 , l2 y las
coordenadas cartesianas del extremo final x0 , y0 en el sistema Σ0 (x0 , y0 , z0 ). Esta
función retorna las coordenadas articulares del hombro q1 y codo q2 .
Código Fuente 5.7
cinv r2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinv r2gdl.m
1
function [q1 q2]=cinv r2gdl(l1,l2,x0,y0)
2
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)));
3
4
end
♣ ♣ Ejemplo 5.2
Diseñar un programa para MATLAB que permita desplegar en forma simbólica
los parámetros DH, cinemática cartesiana y el jacobiano del robot vertical planar
de 2 gdl. Además, programar una aplicación donde el extremo final del robot
trace un cı́rculo de radio r = 0.2m, con centro en [ xc , yc ]T = [ 0.3, −0.3 ]T m, con
periodo de movimiento de 6.28 segundos.
Solución
El programa 5.8 contiene el código fuente para MATLAB que soluciona el problema
planteado. En la lı́nea 4 se obtiene la matriz de transformación homogénea H02 del
robot de 2 gdl y en la lı́nea 7 se obtiene la matriz de rotación R20 y la cinemática
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
220
Capı́tulo 5: Cinemática directa cartesiana
directa cartesiana f R (l1 , q1 , l2 , q2 ). Las lı́neas 12 y 13 despliegan en forma simbólica
el jacobiano y su determinante, respectivamente. La ecuación del cı́rculo se encuentra
implementada en las lı́neas 21 y 22:
x
y
=
xc + r sen(t)
yc + r cos(t)
donde xc , yc representan el centro del cı́rculo, r es el radio.
La lı́nea 24 convierte las coordenadas cartesianas del cı́rculo en coordenadas
articulares (q1 , q2 ) por medio de la función cinv r2gdl(l1, l2 , x, y), y en la lı́nea
26 se transforman las coordenadas articulares (q1 , q2 ) en las coordenadas cartesianas
del extremo final del robot en el sistema Σ0 (x0 , y0 , z0 ). Se genera una base de tiempo
de 100 segundos con incrementos de 1 mseg. El periodo de trazo del cı́rculo es de
6.28 segundos ( sen(wt), con w = 2π f = 1, entonces t = 2π segundos).
La figura 5.6 muestra el cı́rculo generado por el extremo final del robot (ver lı́nea
27) durante una simulación de 100 segundos, lo que significa que el robot traza 15
cı́rculos que se superponen en la misma figura.
Figura 5.6 Trayectoria circular que traza el robot de 2 gdl.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
221
Brazo robot antropomórfico
Código Fuente 5.8
cap5 robot2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cap5 robot2gdl.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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]= l1 l2 sen(q2 )
%ejemplo numérico
t=0:0.001:100;%parámetros del cı́rculo: [ xc , yc ]T = [ 0.3, −0.3 ]T y radio r = 0.2
18
xc=0.3; yc=-0.3; r=0.20;
l1=0.45; l2=0.45;
beta1=0.1; beta2=0.1;
19
q1=[]; q2=[];
20
22
% ecuación del cı́rculo
x=xc+r*sin(t) ;
y=yc+r*cos(t) ;
23
% cinemática inversa
24
[q1,q2]=cinv r2gdl(l1,l2,x,y) ;
25
%coordenas cartesianas del extremo final del robot de 2 gdl
[x0, y0, z0]=cinematica r2gdl(beta1,l1,q1,beta2,l2,q2) ;
plot(x0,y0)
17
21
26
27
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
222
Capı́tulo 5: Cinemática directa cartesiana
Robot antropomórfico (RRR)
La gran mayorı́a de los robots industriales tienen la configuración antropomórfica
(brazos robots) ya que presentan mayor destreza en su espacio de trabajo debido a
que sus eslabones están unidos por articulaciones rotacionales. El espacio de trabajo
de la configuración antropomórfica corresponde a una esfera, cuyo radio corresponde
a la suma de longitudes de los eslabones. Por similitud con la forma anatómica con
el brazo humano, la segunda articulación se conoce como hombro (shoulder) y
la tercera articulación se llama codo (elbow). La figura 5.7 muestra ejemplos de
robots industriales antropomórficos de la compañı́a ABB y FANUC que se utilizan
en aplicaciones de traslado de objetos.
Figura 5.7 Robots industriales en configuración antropomórfica: ABB y FANUC.
Cinemática directa cartesiana del brazo robot de 3 gdl
Considérese un robot manipulador antropomórfico de tres grados de libertad como
el que se presenta en la figura 5.8, donde el sistema de referencia fijo Σ0 (x0 , y0 , z0 )
se encuentra en la base del robot, el eje z0 coincide con el eje de rotación de la
articulación de la base. Los sistemas de referencia Σ1 (x1 , y1 , z1 ), Σ2 (x2 , y2 , z2 ) y
Σ3 (x3 , y3 , z3 ) están seleccionados de tal forma que sus ejes z1 , z2 y z3 coincidan
con sus respectivos ejes de rotación de cada articulación. El eje z1 del sistema
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
223
Brazo robot antropomórfico
Σ1 (x1 , y1 , z1 ) se encuentra ortogonal al eje z0 (α1 = π2 ); el eje z1 es paralelo al
eje z2 (α2 = 0) y el eje z2 se ha considerado paralelo al eje zh de la herramienta de
trabajo (α3 = 0). Note que el plano x2 − y2 se encuentra rotado un ángulo q3 con
respecto al plano x1 − y1 .
Figura 5.8 Robot antropomórfico.
La tabla 5.3 contiene los parámetros Denavit-Hartenberg para el robot antropomórfico de tres grados de libertad.
Tabla 5.3 DH del robot de 3 gdl
li
αi
di
θi
1
0
π
2
l 1 + β1
q1
2
l2
0
β2
q2
3
l3
0
β3
q3
Eslabón
Los parámetros geométricos de cada servomotor son: β1 , β2 , β3 representan el ancho
y espesor de las placas metálicas para la base, hombro y codo, respectivamente; l1
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
224
Capı́tulo 5: Cinemática directa cartesiana
es la distancia que se encuentra la articulación de la base con respecto al origen del
sistema fijo Σ0 (x0 , y0 , z0 ); l2 y l3 son las longitudes de los eslabones del hombro y
codo, respectivamente.
Las matrices de transformaciones homogéneas para la configuración antropomórfica
adquieren la siguiente forma:
H01 = HRz0 ( q1 ) HTz0 ( l1 + β1 ) HTx0 ( 0 ) HRx0 ( π2 )
⎤
⎡ cos(q1 ) 0 sen(q1)
0
= ⎣
H12
sen(q1 )
0
0
1
− cos(q1 )
0
0
0
0
(5.19)
0
⎦
l 1 + β1
(5.20)
1
= HRz1 ( q2 ) HTz1 ( β2 ) HTx1 ( l2 ) HRx1 ( 0 )
⎡ cos(q2 ) − sen(q2 ) 0 l2 cos(q2 ) ⎤
= ⎣
sen(q2 )
cos(q2 )
0
l2 sen(q2 )
0
0
0
0
1
0
β2
1
(5.21)
⎦
(5.22)
H23 = HRz2 ( q3 ) HTz2 ( β2 ) HTx2 ( l3 ) HRx2 ( 0 )
⎡ cos(q3 ) − sen(q3 ) 0 l3 cos(q3 ) ⎤
= ⎣
sen(q3 )
cos(q3 )
0
l3 sen(q3 )
0
0
0
0
1
0
β3
1
(5.23)
⎦
(5.24)
Por lo tanto, la matriz homogénea del robot antropomórfico de 3 gdl moviéndose en
su espacio tridimensional es:
H03 = H01 H12H23
cos(q ) cos(q
=
1
2 + q3 )
sen(q1 ) cos(q2 + q3 )
sen(q2 + q3 )
0
− cos(q1 ) sen(q2 + q3 )
− sen(q1 ) sen(q2 + q3 )
cos(q2 + q3 )
0
sen(q1 )
− cos(q1 )
0
0
(5.25)
[ β2 + β3 ] sen(q1 ) + cos(q1 ) [ l2 cos(q2 ) + l3 cos(q2 + q3 ) ]
− [ β2 + β3 ] cos(q1 ) + sen(q1 ) [ l2 cos(q2 ) + l3 cos(q2 + q3 ) ]
l1 + β1 + l2 sen(q2 ) + l3 sen(q2 + q3 )
1
Las coordenadas cartesianas del extremo final del robot manipulador antropomórfico
de 3 gdl se encuentran relacionadas con las coordenadas articulares de la siguiente
forma:
⎡
x0
⎤
⎡
[ β2 + β3 ] sen(q1 ) + cos(q1 ) [ l2 cos(q2 ) + l3 cos(q2 + q3 ) ]
⎤
⎢ ⎥
⎢
⎥
⎣ y0 ⎦ = ⎣ − [ β2 + β3 ] cos(q1 ) + sen(q1) [ l2 cos(q2 ) + l3 cos(q2 + q3 ) ] ⎦ (5.26)
l1 + β1 + l2 sen(q2 ) + l3 sen(q2 + q3 )
z0
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
Brazo robot antropomórfico
225
Cinemática inversa
La cinemática inversa del robot antropomórfico de 3 gdl consiste en obtener las
posiciones articulares en función de las coordenadas cartesianas de la ecuación (5.26).
Una forma para resolver dicho planteamiento es utilizar el método geométrico, con
esta intención considere la proyección de los eslabones del hombro y del codo sobre
el plano x0 − y0 (ver figura 5.8); dicha proyección se amplı́a en la figura 5.9 para
llevar a cabo el análisis geométrico correspondiente a la variable q1 .
Observe que existe proyección geométrica sobre el plano x0 − y0 de los parámetros
β2 y β3 de los servomotores, debido a que los ejes z1 y z2 quedan paralelos a dicho
plano, lo que no sucede para los casos del péndulo y robot de 2 gdl.
Figura 5.9 Método geométrico de la cinemática inversa 3 gdl para obtener q1 .
De la figura 5.9 tenemos que ϑ = ρ + q1 ⇒ q1 = ϑ − ρ. Observe que el ángulo ϑ se
y0
obtiene en función de las coordenadas cartesianas (x0 , y0 ) satisface ϑ = atan x0 .
Además, tomando en cuenta el triángulo con lı́nea punteada, el ángulo ρ queda en
función del cateto opuesto (formado por el ancho de los servomotores β2 + β3 ) y el
cateto adyacente formado por la diferencia de la hipotenusa (r = x20 + y02 ) y del
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
226
Capı́tulo 5: Cinemática directa cartesiana
cateto opuesto obtiene la siguiente forma:
⎛
ρ =
⎞
β2 + β3
atan ⎝ x20
+
y02
− ( β2 + β3 )
⎠
2
Por lo tanto, la variable articular q1 adquiere la siguiente estructura:
⎛
⎞
β2 + β3
y0
⎠
− atan ⎝ q1 = ϑ − ρ = atan
x0
2
2
2
x0 + y0 − ( β2 + β3 )
(5.27)
Para obtener la variable articular q3 considérese como referencia el ángulo ϑ del
triángulo formado por el cateto adyacente l2 + l3 cos(q3 ), cateto opuesto l3 sen(q3 )
y por la hipotenusa x20 + y02 + z02 (ver figura 5.10). Es importante recalcar que los
ángulos ϑ y q2 se miden en dirección positiva con respecto al plano horizontal x0 −y0
hacia el eje z0 .
Figura 5.10 Método geométrico para obtener q2 y q3 de la cinemática inversa 3 gdl.
Empleando el teorema de Pitágoras se obtiene una posible solución para q3 en
términos de la función arco-tangente:
x20 + y02 + z02 = [l2 + l3 cos(q3 )]2 + l32 sen2 (q3 )
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
227
Brazo robot antropomórfico
:1
l22 + l32 [cos2
(q
+sen2 (q3 )] +
3 )
l22 + l32 + 2l2 l3 cos(q3 )
x20 + y02 + z02 − l22 − l32
=
=
cos(q3 ) =
2l2 l3 cos(q3 )
2l2 l3
2
x20 + y02 + z02 − l22 − l32
2l2 l3
⎛#
$ 2 2 2 2 2 %2 ⎞
x0 +y0 +z0 −l2 −l3
⎟
⎜ 1−
2l2l3
⎟
atan ⎜
⎠
⎝
x20 +y02 +z02 −l22 −l23
1−
sen(q3 ) =
q3 =
2l2l3
En referencia a la figura 5.10, obsérvese que el triángulo formado por los lados
x20 + y02 , z0 y la hipotenusa x20 + y02 + z02 , tomando en cuenta que la tangente de
(q3 )
,
los ángulos ϑ + q2 satisface: tan (ϑ + q2 ) = √ z20 2 , además tan (ϑ) = l2l3+lsen
3 cos(q3 )
x0 +y0
usando identidades trigonométricas de la función tangente se obtiene:
tan (ϑ + q2 ) =
z0
tan (q2 ) + tan (ϑ)
=
2
1 − tan (q2 ) tan (ϑ)
x0 + y02
Realizando sencillos pasos algebraicos, para determinar la función tangente de q2 :
tan (q2 ) + tan ϑ =
'
tan (q2 ) 1 +
√ z20 2
x0 +y0
tan (ϑ)
(
=
z0
x20
+
z0
x20 + y02
√
tan (q2 ) =
=
y02
z0
−
tan (q2 ) tan (ϑ)
2
x0 + y02
− tan ϑ
z0
− tan ϑ
x20 +y02
(
'
1 + √ z20 2 tan (ϑ)
x0 +y0
='
(q3)
z0
− l2l3+lsen
3 cos(q3 )
x20 +y02
l sen(q )
+ √ z20 2 l23+l3 cos(q33 )
x0 +y0
√
1
[ l2 + l3 cos(q3 ) ] z0 − l3 sen(q3 ) x20 + y02
x20 + y02 [ l2 + l3 cos(q3 ) ] + z0 l3 sen(q3 )
Por lo tanto, la cinemática inversa que relaciona las coordenadas articulares q1 , q2 , q3
en función de las coordenadas cartesianas x0 , y0 , z0 del extremo final de un robot
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
(
228
Capı́tulo 5: Cinemática directa cartesiana
antropomórfico de 3 gdl que se mueve en su espacio tridimensional, considerando el
espesor de los servomotores tiene la siguiente forma:
q1 =
atan
y0
x0
− atan ⎝ q3 =
β2 + β3
⎠
x20
+ y02
(5.28)
2
− ( β2 + β3 )
*
[ l2 + l3 cos(q3 ) ] z0 − l3 sen(q3 ) x20 + y02
atan 2
x0 + y02 [ l2 + l3 cos(q3 ) ] + z0 l3 sen(q3 )
⎛
'
(2 ⎞
(2l2 l3 )2 − x20 + y02 + z02 − l22 − l32
⎠
atan ⎝
x20 + y02 + z02 − l22 − l32
)
q2 =
⎞
⎛
(5.29)
(5.30)
El jacobiano de un robot antropomórfico de tres grados de libertad está dado por:
⎤
⎡
j11 j12 j13
⎥
⎢
(5.31)
J(q) = ⎣ j21 j22 j23 ⎦
j31 j32 j33
j11 = [ β2 + β3 ] cos(q1 ) − sen(q1 ) [ l2 cos(q2 ) + l3 cos(q2 + q3 ) ]
j12 = − cos(q1 ) [ l2 sen(q2 ) + l3 sen(q2 + q3 ) ]
j13 = −l3 cos(q1 ) sen(q2 + q3 )
j21 = [ β2 + β3 ] sen(q1 ) + cos(q1 ) [ l2 cos(q2 ) + l3 cos(q2 + q3 ) ]
j22 = − sen(q1 ) [ l2 sen(q2 ) + l3 sen(q2 + q3 ) ]
j23 = −l3 sen(q1 ) sen(q2 + q3 )
j31 = 0,
j32 = l2 cos(q2 ) + l3 cos(q2 + q3 ),
j33 = l3 cos(q2 + q3 )
Jacobiano del brazo robot de 3 gdl
El determinante del jacobiano del brazo robot de 3 gdl está dado por:
det[J(q)]
=
−l22 l3 cos(q2 ) sen(q3 ) − l2 l23 sen(q2 ) cos(q3 )2 − l2 l23 cos(q2 ) sen(q3) cos(q3) + l2 l23 sen(q2 )
(5.32)
existen un número infinito de configuraciones singulares para q2 = 0 ± nπ y
q3 = 0 ± nπ. Sin embargo, el ángulo q1 no interviene con los puntos singulares.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
229
Brazo robot antropomórfico
Función transformación homogénea del robot antropomórfico de 3 gdl H03
La función transformación homogénea H03 del robot antropomórfico de 3 gdl tiene
la siguiente sintaxis:
H03 =H r3gdl()
esta función retorna H03 la matriz de transformación homogénea del brazo robot con
articulaciones rotacionales de 3 gdl. El código en lenguaje MATLAB de la función
transformación homogénea H03 del robot de 3 gdl está en el cuadro 5.9.
Código Fuente 5.9
H r3gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
H r3gdl.m
1
4
function H=H r3gdl()
syms q1 q2 q3 beta1 beta2 beta3 l1 l2 l3 alpha1 alpha2 alpha3 real
disp(’Parámetros Denavit-Hartenberg del robot planar vertical de 3 gdl’)
disp(’[ l alpha d q]’)
5
dh=[l1, pi/2, l1+beta1, q1; l2, 0, beta2, q2; l3, 0, beta3, q3]; disp(dh)
6
% H01 = HRz0 (q1 )HTz0 (l1 + β1 )HTx0 (0)HRx0 ( π2 )
H10=simplify(HRz(q1)*HTz(l1+beta1)*HTx(0)*HRx(pi/2));
2
3
7
% H12 = HRz1 (q2 )HTz1 (β2 )HTx1 (l2 )HRx1 (0)
H21=simplify(HRz(q2)*HTz(beta2)*HTx(l2)*HRx(0)) ;
8
9
% H23 = HRz2 (q3 )HTz2 (β3 )HTx2 (l3 )HRx2 (0)
H32=simplify(HRz(q3)*HTz(beta3)*HTx(l3)*HRx(0));
H30=simplify(H10*H21*H32,3); % H03 = H01H12 H23
[R30, cinemat r3gdl, cero, c]=H DH(H30); % R30 , f R (q1 , q2 , q3 )
10
11
12
13
14
H=[R30, cinemat r3gdl;
cero, c];
15
16
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
230
Capı́tulo 5: Cinemática directa cartesiana
Función cinemática directa del brazo robot de 3 gdl
La función de cinemática directa para las coordenadas cartesianas del extremo final
del brazo robot de 3 gdl se encuentra dada por:
[x0 , y0 , z0 ]=cinematica r3gdl(β1 , l1, q1 , β2 , l2, q2 , β3, l3 , q3 )
donde l1 es la distancia sobre el eje z0 donde se encuentra localizado el servomotor
de la articulación de la base; l2 , l3 son las longitudes del hombro y codo,
respectivamente; Ancho de los servomotores β1 , β2, β3 ; q1 , q2 , q3 son las posiciones
articulares. Esta función retorna las coordenadas cartesianas (x0 , y0 , z0 ).
Código Fuente 5.10
cinematica r3gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinematica r3gdl.m
1 function [x0, y0, z0]=cinematica r3gdl(beta1,l1,q1,beta2,l2,q2,beta3,l3,q3)
2
3
4
dato1=whos(’beta1’); dato2=whos(’l1’); dato3=whos(’q1’);
dato4=whos(’beta2’); dato5=whos(’l2’); dato6=whos(’q2’);
dato7=whos(’beta3’); dato8=whos(’l3’); dato9=whos(’q3’);
5
6
7
8
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’);
v7=strcmp(dato7.class, ’sym’);v8=strcmp(dato8.class, ’sym’);
9
10
11
v9=strcmp(dato9.class, ’sym’); digits(3);
if (v1 & v2 & v3 & v4 & v5 & v6 & v7 & v8 & v9) %caso simbólico
x0=simplify(vpa((beta2+beta3)*sin(q1)+cos(q1)*(l3*cos(q2 + q3) + l2*cos(q2)),3));
12
13
14
y0=simplify(vpa(-(beta2+beta3)*cos(q1)+sin(q1)*(l3*cos(q2 + q3) + l2*cos(q2)),3));
z0=simplify(vpa( l1 +beta1+ l3*sin(q2 + q3) + l2*sin(q2) ,3));
x0=vpa(x0); y0=vpa(y0);
15
16
17
18
else %caso numérico
x0=(beta2+beta3)*sin(q1)+cos(q1).*(l3*cos(q2 + q3) + l2*cos(q2));
y0=-(beta2+beta3)*cos(q1)+sin(q1).*(l3*cos(q2 + q3) + l2*cos(q2));
z0=l1 +beta1+ l3*sin(q2 + q3) + l2*sin(q2);
19
end
20 end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
231
Brazo robot antropomórfico
Función cinemática inversa del brazo robot de 3 gdl
La función de cinemática inversa del brazo robot de 3 gdl tiene la siguiente forma
sintáctica:
[q1 , q2 , q3 ]=cinv r3gdl(β2, β3 , l2, l3 , x0, y0 , z0 )
donde los argumentos de entrada son los parámetros geométricos del robot β1 , β2 , β3
representan espesor de los servomotores de la base, hombro y codo, respectivamente;
l1 es la distancia sobre el eje z0 donde se ubica la articulación de la base; l2 y
l3 longitudes del hombro y codo, respectivamente. Las coordenadas cartesianas
del extremo final del robot x0 , y0 , z0 se encuentran expresadas en el sistema
Σ0 (x0 , y0 , z0 ). Esta función retorna las coordenadas articulares (q1 , q2 , q3 ) de la base,
hombro y codo, respectivamente.
Código Fuente 5.11
cinv r3gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinv r3gdl.m
1
2
function [q1, q2, q3]=cinv r3gdl(beta2,beta3,l2,l3,x0,y0,z0)
v1=sqrt(x0.*x0+y0.*y0-(beta2+beta3)∧ 2);
3
5
%articulación de la base q1
q1=atan(y0./x0)-atan((beta2+beta3)./v1);
c3=(x0.*x0+y0.*y0+z0.*z0-l2∧2-l3∧ 2)./(2*l2*l3);
6
s3=sqrt(1-c3.*c3);
7
%articulación del codo q3
q3=atan(s3./c3);
s2=(z.*(l2+l3.*c3)-l3*s3.*sqrt(x0.*x0+y0.*y0))./(x0.*x0+y0.*y0+z0.*z0);
4
8
9
10
c2=((l2+l3.*c3).*sqrt(x0.*x0+y0.*y0)+l3*s3.*z)./(x0.*x0+y0.*y0+z0.*z0);
q2=atan(s2./c2); %articulación del hombro
11
12
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
232
Capı́tulo 5: Cinemática directa cartesiana
♣♣♣ Ejemplo 5.3
Diseñar un programa en lenguaje MATLAB que permita desplegar en forma
simbólica los parámetros DH, cinemática cartesiana y el jacobiano del robot
antropomórfico de 3 gdl. Asimismo programar una aplicación donde el extremo
final del robot trace trayectorias circulares sobre el eje z0 .
Solución
El programa 5.12 presenta el código fuente en lenguaje MATLAB que despliega en
forma simbólica los parámetros DH, cinemática cartesiana, matriz jacobiana y su
determinante (ver lı́neas 6 a la 16).
De la lı́nea 23 a la 25 se encuentra la implementación de la trayectoria circular con
barrido de 1 mm sobre el eje z0 : [ x y z ]T = [ xc + r sen(t) yc + r cos(t) t ],
siendo xc , yc el centro del cı́rculo, r es el radio, t es la evolución del tiempo. En
la lı́nea 26 la trayectoria circular es convertida a coordenadas articulares usando la
cinemática inversa y en la lı́nea 27 se obtiene las coordenadas que el extremo final
del robot traza como se muestra en la figura 5.11.
Figura 5.11 Trazo que realiza el extremo final del brazo robot de 3 gdl.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.2
Brazo robot antropomórfico
Código Fuente 5.12
233
cap5 r3gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cap5 r3gdl.m
1
clc;
2
clear all;
close all;
format short
syms q1 q2 q3 beta1 beta2 beta3 l1 l2 l3 alpha1 alpha2 alpha3 real
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
H30=H r3gdl() ;
disp(’Tansformación homogénea del robot antropomórfico de 3 gdl’);
disp(H30);
[R30, cinemat r3gdl,cero, c]=H DH(H30) ;
disp(’Matriz de rotación’);
disp(R30);
disp(’cinemática directa’);
disp(cinemat r3gdl);
[x0, y0,z0]= cinematica r3gdl(beta1,l1,q1,beta2,l2,q2,beta3,l3,q3); disp([x0; y0;z0])
jac r3gdl=jacobian([x0; y0;z0], [q1;q2;q3])
det r3gdl=simplify(vpa(det(jac r3gdl),3))
%ejemplo numérico
l1=0; l2=0.45; l3=0.45;
t=0:0.001:100;
xc=0.3; yc=-0.3; r=0.20;
beta1=0.12; beta2=0.01; beta3=0.01;
q1=[]; q2=[]; q3=[];
x=xc+r*sin(t) ;
y=yc+r*cos(t);
z=t;
[q1, q2, q3]=cinv r3gdl(beta2,beta3,l2,l3,x,y,z);
[x0, y0,z0]=cinematica r3gdl(beta1,l1,q1,beta2,l2,q2,beta3,l3,q3);
plot3(x0,y0,z0)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
234
Capı́tulo 5: Cinemática directa cartesiana
5.3 Configuración SCARA (RRP)
L
a configuración SCARA (Selective Compliance Assembly Robot Arm)
representa una geometrı́a especial de robots industriales; es un brazo planar
antropomórfico con dos articulaciones rotacionales y la tercera articulación es
prismática o lineal para manipular objetos. La figura 5.12 muestra un ejemplo de
un robot industrial en la configuración SCARA. Esta configuración aprovecha las
ventajas que proporciona el brazo robot antropomórfico de 2 gdl moviéndose en el
plano horizontal; en este caso la energı́a potencial es constante (par gravitacional
cero), la estructura mecánica es de alta rigidez para soportar cargas en forma vertical
y para control de fuerza. La configuración SCARA es adecuada para tareas de
ensamble con pequeños objetos.
Figura 5.12 Robot KR 10 SCARA R600 (Compañı́a KUKA).
Cinemática directa cartesiana
El espacio de trabajo del robot SCARA es un cilindro que se describe en la figura
5.13, el radio del cilindro es igual a la suma de las longitudes de los eslabones
de las articulaciones rotacionales l2 + l3 . El origen del sistema de referencia fijo
Σ0 (x0 , y0 , z0 ) se coloca rı́gidamente en el piso, de tal forma que sobre el eje z0 la
articulación de la base del robot queda a una distancia l1 más el ancho del servomotor
y espesor de la barra metálica representado por β1 . El eje de rotación de la primera
articulación rotacional q1 (base) coincide con el eje z0 . El sistema de referencia
Σ1 (x1 , y1 , z1 ) se encuentra colocado rı́gidamente en el extremo final del primer
eslabón, donde se intercepta al eje de rotación de la segunda articulación rotacional
q2 con el eje x0 ; las coordenadas del origen del sistema Σ1 (x1 , y1 , z1 ) con respecto
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.3
Configuración SCARA (RRP)
235
a Σ0 (x0 , y0 , z0 ) son [ l2 cos(q1 ) l2 sen(q1 ), l1 + β1 ]T . Cuando q1 = 0 significa que el
plano x1 − y1 mantiene una rotación con referencia al plano fijo x0 − y0 , entonces
la matriz R10 = Rz0 ( q1 ) describe la rotación del sistema Σ1 (x1 , y1 , z1 ) con respecto
al sistema fijo Σ0 (x0 , y0 , z0 ). Los ejes z0 y z1 son paralelos entre sı́ y mantienen la
misma dirección, por lo tanto el ángulo que existe entre ellos es α1 = 0. El sistema
de referencia Σ1 (x1 , y1 , z1 ) mide la variable articular q2 alrededor del eje z1 . El plano
x1 − y1 tiene una rotación por un ángulo q1 con respecto al plano x0 − y0 .
Figura 5.13 Espacio de trabajo del robot SCARA.
El sistema de referencia Σ2 (x2 , y2 , z2 ) se coloca en la parte final del segundo
eslabón, justo en la intersección del eje x1 con el desplazamiento lineal d3 . Las
coordenadas del origen del sistema Σ2 (x2 , y2 , z2 ) con respecto a Σ1 (x1 , y1 , z1 ) son
[ l3 cos(q2 ) l3 sen(q2 ) l1 + β1 + β2 ]T , siendo β2 el ancho del segundo servomotor
más el espesor de la segunda barra metálica. El ángulo que hay entre los ejes x1 y x2
es q2 . Cuando q2 = 0 se encuentran alineados dichos ejes, para el caso donde q2 = 0,
la rotación que hay entre los sistemas de referencia Σ1 (x1 , y1 , z1 ) y Σ2 (x2 , y2 , z2 ) es
descrita por la matriz R21 = Rz1 ( q2 ). La medición de la tercera articulación lineal d3
se realiza sobre el eje z2 , por lo tanto este eje está alineado sobre su desplazamiento
lineal teniendo movimiento positivo en dirección hacia abajo, que corresponde a una
dirección negativa del eje z1 o z0 como se muestra en la figura 5.13. El sistema de
referencia Σ2 (x2 , y2 , z2 ) se obtiene a partir del sistema Σ1 (x1 , y1 , z1 ), rotando un
ángulo α2 = π alrededor del eje x1 , por lo tanto los ejes z2 y z1 son paralelos entre
sı́, pero con dirección contraria.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
236
Capı́tulo 5: Cinemática directa cartesiana
En la configuración SCARA todos los ejes zi con i = 0, 1, 2 son paralelos entre sı́,
pero debe notarse que el eje z2 mantiene una rotación de 180 grados con respecto al
eje z1 o al eje z0 . La razón por la cual el eje z2 mantiene un dirección positiva hacia
abajo es por aspectos técnicos, es decir los objetos a manipular se encuentran frente
de la herramienta de trabajo. Se ha considerado que el eje z2 es paralelo al eje de la
herramienta (α3 = 0).
Con la anterior descripción de los sistemas de referencia Σ0 (x0 , y0 , z0 ) al Σ2 (x2 , y2 , z2 )
para la configuración SCARA produce el siguiente conjunto de parámetros DenavitHartenberg que se presenta en la tabla 5.4:
Tabla 5.4 Parámetros DH del robot SCARA
Eslabón
li
αi
di
θi
1
0
0
l 1 + β1
q1
2
l2
π
β2
q2
3
l3
0
d3
0
De acuerdo con la tabla 5.4 el robot SCARA tiene las siguientes matrices de
transformación homogénea:
H01 = HRz0 ( q1 ) HTz0 ( l1 + β1 ) HTx ( l2 ) HRx ( 0 )
⎡
⎤
cos(q1 ) − sen(q1 ) 0 l2 cos(q1 )
⎢ sen(q )
cos(q1 )
0 l2 sen(q1 ) ⎥
1
⎢
⎥
= ⎢
⎥
⎣
0
0
1
l 1 + β1 ⎦
H12
0
0
0
1
= HRz1 ( q2 ) HTz1 ( β2 ) HTx1 ( l3 ) HRx1 ( π )
⎡
⎤
sen(q2 )
0
l3 cos(q2 )
cos(q2 )
⎢ sen(q ) − cos(q ) 0 l sen(q ) ⎥
2
2
3
2 ⎥
⎢
= ⎢
⎥
⎣
⎦
0
0
−1
β2
0
H23
Alfaomega
0
0
(5.33)
(5.34)
1
= HRz2 ( 0 ) HTz2 ( d3 ) HTx2 ( 0 ) HRx2 ( 0 )
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.3
237
Configuración SCARA (RRP)
⎡
1 0 0
0
⎤
⎢0 1 0 0 ⎥
⎢
⎥
= ⎢
⎥
⎣ 0 0 1 d3 ⎦
H03
(5.35)
0 0 0 1
= H01 H12 H23
⎡ cos(q1 + q2 )
⎣
sen(q1 + q2 )
0
0
sen(q1 + q2 )
− cos(q1 + q2 )
0
0
0
0
−1
0
l2 cos(q1 ) + l3 cos(q1 + q2 ) ⎤
l2 sen(q1 ) + l3 sen(q1 + q2 )
⎦
l1 + β1 + β2 − d3
1
(5.36)
El modelo de cinemática directa para el robot SCARA está dada por la siguiente
expresión:
⎡
x0
⎤
⎡
l2 cos(q1 ) + l3 cos(q1 + q2 )
⎤
⎢ ⎥
⎥
⎢
⎣ y0 ⎦ = f R (q) = ⎣ l2 sen(q1 ) + l3 sen(q1 + q2 ) ⎦
z0
l 1 + β1 + β2 − d 3
(5.37)
Función transformación homogénea SCARA
El conjunto de ecuaciones que describen la rotación y coordenadas cartesianas del
extremo final del robot SCARA (5.33)-(5.37) permiten desarrollar una librerı́a con
variables simbólicas para MATLAB H SCARA() con la siguiente sintaxis:
H03 = H SCARA()
esta función retorna la matriz de transformación homogénea H03 la cual está formada
con la matriz de rotación R30 que relaciona la rotación del extremo final del robot
con respecto al sistema fijo Σ0 (x0 , y0 , z0 ) y la cinemática directa que relaciona las
coordenadas articulares con las coordenadas cartesianas f R (q). Además, también
despliega la tabla 5.4 con los parámetros Denavit-Hartenberg del robot SCARA.
El programa 5.13 contiene el código MATLAB de la función transformación
homogénea del robot SCARA:
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
238
Capı́tulo 5: Cinemática directa cartesiana
Código Fuente 5.13
H SCARA.m
%Transformación homogénea del robot SCARA H03
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
H SCARA.m
1
function H=H SCARA()
2
syms q1 q2 q3 beta1 beta2 l1 l2 l3 d1 d2 d3 alpha1 alpha2 alpha3 real
disp(’Transformación Homogénea H03 del robot SCARA’)
disp(’Parámetros Denavit-Hartenberg del robot SCARA’)
disp(’[ l alpha d q]’)
3
4
5
6
8
%tabla de parámetros DH del robot SCARA
dh=[0, 0,l1+beta1, q1; l2, pi, beta2, q2; l3, 0, d3, 0]; %despliega parámetros
DH del robot SCARA
disp(dh)
9
%cálculo de las matrices de transformación homogénea de cada articulación
7
11
%H01 = HRz0 ( q1 ) HTz0 ( l1 + β1 ) HTx ( l2 ) HRx ( 0 )
H10=HRz(q1)*HTz(l1+beta1)*HTx(l2)*HRx(0);
12
%H12 = HRz1 ( q2 ) HTz1 ( β2 ) HTx1 ( l3 ) HRx1 ( π )
13
H21=HRz(q2)*HTz(beta2)*HTx(l3)*HRx(pi);
14
15
%H23 = HRz2 ( 0 ) HTz2 ( d3 ) HTx2 ( 0 ) HRx2 ( 0 )
H32=HRz(0)*HTz(d3)*HTx(0)*HRx(0);
16
%transformación homogénea del robot SCARA
17
%H03 = H01 H12 H23
18
H30=simplify(H10*H21*H32);
19
%deducción de la matriz de rotación R30
20
21
%ası́ como la cinemática directa cartesiana f R (q1 , q2, d3 ) del robot SCARA
[R30, cinemat scara, cero, c]=H DH(H30);
22
%estructura de la matriz homogénea
23
H=[R30, cinemat scara;
cero, c];
10
24
25
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.3
239
Configuración SCARA (RRP)
Función cinemática directa
La función cinemática directa del robot SCARA se define como:
[x0 , y0 , z0 ]=cinematica SCARA(β1, β2 , l1 , l2, l3 , q1 , q2 , d3 )
donde los argumentos de entrada son los parámetros geométricos:β1, β2 , l1, l2 , l3 y
las variables articulares q1 , q2 , d3 . Esta función retorna las coordenadas x0 , y0 , z0 en
espacio cartesiano del sistema de referencia fijo Σ0 (x0 , y0 , z0 ).
En el cuadro 5.14 se presenta el código en lenguaje MATLAB de la cinemática
directa del robot SCARA.
Código Fuente 5.14
cinematica SCARA.m
%cinemática directa robot SCARA
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinematica SCARA.m
1
2
3
function [x0, y0, z0]=cinematica SCARA(beta1,beta2,l1,l2,l3,q1,q2,d3)
x0=l2*cos(q1)+l3*cos(q1+q2);
y0=l2*sin(q1)+l3*sin(q1+q2);
4
5
z0=l1+beta1+beta2-d3;
end
Jacobiano del robot SCARA
El jacobiano del robot SCARA se encuentra de la siguiente forma:
∂f R (q)
∂q
⎡
−l2 sen(q1 ) − l3 sen(q1 + q2 )
⎢
= ⎣ l2 cos(q1 ) + l3 cos(q1 + q2 )
J(q1 , q2 , d3) =
−l3 sen(q1 + q2 )
l3 cos(q1 + q2 )
0
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
0
0
(5.38)
⎤
⎥
0 ⎦
−1
Alfaomega
240
Capı́tulo 5: Cinemática directa cartesiana
el determinante del jacobiano del robot SCARA tiene la siguiente forma:
det[J(q1 , q2 , d3 )] = −l2 l3 sen(q2 )
(5.39)
lo que significa que se presentan problemas de singularidad cuando q2 = 0, ±nπ.
Cinemática inversa del robot SCARA
El ancho de los servomotores y espesor de las barras metálicas (β1 , β2 ) no tienen
proyección sobre el plano x0 − y0 ; sólo contribuyen en la coordenada z0 , como en el
caso del péndulo y robot antropomórfico de 2 gdl, entonces la cinemática inversa del
robot SCARA toma la siguiente expresión:
q2 = acos (
)
y0
l3 sen(q2 )
− atan
x0
l2 + l3 cos(q2 )
= l1 + β1 + β2 − z0
q1 =
d3
x20 +y02 −l22 −l23
2l2 l3
atan
(5.40)
(5.41)
(5.42)
Función cinemática inversa del robot SCARA
La función cinemática inversa del robot SCARA tiene la siguiente sintaxis:
[d3 , q2 , q1 ]=cinv SCARA(β1 , β2 , l1, l2, l3 , x0 , y0 , z0 )
donde β1 , β2, l1 , l2, l3 son los parámetros geométricos del robot SCARA, x0 , y0 , z0 son
las coordenadas en espacio cartesiano en el sistema fijo Σ0 (x0 , y0 , z0 ); esta función
retorna las coordenadas articulares d3 , q2 , q1 .
El programa 5.15 contiene el código fuente MATLAB de la cinemática inversa del
robot SCARA, para facilitar la implementación de procedimientos recursivos con
pase de parámetros escalares o vectoriales, la cinemática inversa es programada con
operaciones entre arreglos.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.3
241
Configuración SCARA (RRP)
Código Fuente 5.15
cinv SCARA.m
%cinemática inversa robot SCARA
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinv SCARA.m
1
function [d3 q2 q1]=cinv SCARA(beta1,beta2,l1,l2,l3,x0,y0,z0)
2
q2=acos((x0.*x0+y0.*y0-l2*l2-l3*l3)/(2*l2*l3));
q1=atan(y0./x0)-atan((l3*sin(q2))./(l2+l3*cos(q2)));
d3=l1+beta1+beta2-z0;
3
4
5
end
♣ ♣ Ejemplo 5.4
Realizar una aplicación numérica del robot SCARA para que el extremo final
lleve a cabo el trazo de una rosa polar de radio r = 0.1 m y con centro en
las coordenadas cartesianas [ x0
y0
z0 ]T = [ 0.3 −0.3 −0.5 ]T m. Asimismo
presentar en forma simbólica la matriz jacobiana, determinante y cinemática
directa.
Solución
En el cuadro 5.16 se presenta el código en lenguaje MATLAB en variables
simbólicas de la matriz de transformación homogénea H03 del robot SCARA usando la función H30=H SCARA()
(ver lı́nea 4). En la lı́nea 5 empleando la función H DH(H30) se obtiene la
matriz de rotación R30 a través de la
función [R30 , f R (q), 0T , 1]=H DH(H30).
La matriz jacobiano se obtiene en la
lı́nea 6 y su determinante en la lı́nea
7. La aplicación numérica consiste en
que el extremo final del robot SCARA trace una rosa polar de radio
r = 0.1 m, y con centro en las coordenadas cartesianas [ x0 y0 z0 ]T =
[ 0.3 −0.3 −0.5 ]T m. La ecuación
en coordenadas cartesianas de la rosa
polar (lineas 19 a la 21) está dada por:
6t
r = 0.1 sen( ) x = xc + r sen3 (t)
7
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
242
y = yc + r cos3 (t)
Capı́tulo 5: Cinemática directa cartesiana
z = −0.5
donde xc , yc representan el centro de la
flor, r es el radio de los pétalos y t es
el tiempo.
El cálculo de las coordenadas cartesianas de la rosa polar se realiza en
forma iterativa usando la instrucción
for· · ·end (lı́neas 16 a la 24). En la
lı́nea 24 se convierten las coordenadas cartesianas de la rosa polar a
coordenadas articulares del robot empleando la función cinv SCARA(· · ·).
En la lı́nea 27 se usa la función
cinematica SCARA(· · ·) para convertir las coordenadas articulares del robot a coordenadas cartesianas, entonces el extremo final del robot realiza
el trazo de la figura 5.14. El programa
que se presenta en el cuadro 5.17 realiza la misma función del programa 5.16;
la finalidad de mostrarlo es ilustrar el
cálculo de las coordenadas cartesianas
de la rosa polar sin utilizar la forma recursiva de la instrucción for, es decir
se emplean operaciones con arreglos en
lugar del proceso iterativo con escalares.
Observe que en las funciones
cinv SCARA y cinematica SCARA se
encuentran implementadas para soportar ambos tipos de pase de parámetros (recursivo y por arreglos), lo que
facilita la implementación de varias
Alfaomega
aplicaciones en control de robots manipuladores.
Es muy importante aclarar que el dibujo realizado por el robot SCARA (figura 5.14) no implica control del robot
o una simulación de la dinámica del
mismo. Estos programas ilustran sólo
el empleo de la cinemática inversa y su
conversión a coordenadas cartesianas
del extremo final del robot para trazar
una figura en su espacio de trabajo.
Figura 5.14 Trayectoria del robot SCARA.
Cuando las coordenadas articulares
del robot provienen de un sistema
dinámico como puede ser la ecuación
en lazo cerrado (modelo dinámico del
robot y algoritmo de control), entonces se trata de una simulación de un
esquema de control. La cinemática no
reproduce los fenómenos fı́sicos del robot.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.3
Configuración SCARA (RRP)
Código Fuente 5.16
243
SCARA.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
SCARA.m
1
2
3
4
5
clc; clear all; close all; format short
syms theta l d alpha q real
syms q1 q2 d3 beta1 beta2 l1 l2 l3 alpha1 alpha2 alpha3 real
H30=H SCARA() ;
7
[R30, frq scara, cero, c]=H DH(H30);
jac scara=jacobian(frq scara, [q1;q2;d3]);
det scara=simplify(det(jac scara))
8
%ejemplo numérico
9
11
%parámetros geométricos del robot SCARA
l1=0.45; l2=0.45; l3=0.45; beta1=0.1; beta2=0.1;
t=0:0.001:100;
12
%ecuación de la figura centro en xc,yc y radio r
13
xc=0.3; yc=-0.3;
q1=[]; q2=[];z0=[]; d3=[];
[n m]=size(t); % dimensión del vector de tiempo
for k=1:m %forma recursiva
6
10
14
15
16
17
20
%ecuación cartesiana de la figura rosa polar
r=0.1*sin(6*t(k)/7); % radio de la figura
x=xc+r*(sin(t(k)))∧ 3 ;
y=yc+r*(cos(t(k)))∧ 3;
21
z=-0.5 ;
22
% conversión de coordenadas cartesianas de la rosa polar
23
%a coordenadas articulares del robot SCARA
[d3(k), q2(k), q1(k)]=cinv SCARA(beta1,beta2,l1,l2,l3,x,y,z) ;
18
19
24
25
end
26
%trayectoria del robot SCARA en el sistema Σ0 (x0 , y0 , z0 )
[x0, y0, z0]=cinematica SCARA(beta1,beta2,l1,l2,l3,q1,q2,d3);
plot3(x0,y0,z0)
27
28
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
244
Capı́tulo 5: Cinemática directa cartesiana
Código Fuente 5.17
SCARA1.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
SCARA1.m
1
2
3
4
5
6
7
clc; clear all; close all;
format short
syms theta l d alpha q real
syms q1 q2 d3 beta1 beta2 l1 l2 l3 alpha1 alpha2 alpha3 real
H30=H SCARA();
[R30, frq scara, cero, c]=H DH(H30);
8
jac scara=jacobian(frq scara, [q1;q2;d3]);
det scara=simplify(det(jac scara))
9
%ejemplo numérico
10
%parámetros geométricos del robot SCARA
11
l1=0.45; l2=0.45; l3=0.45; beta1=0.1; beta2=0.1;
t=0:0.001:100;
12
13
14
15
%ecuación de la rosa polar centro en xc,yc y radio r
xc=0.3; yc=-0.3;
17
q1=[]; q2=[];z0=[]; d3=[];
[n m]=size(t); % dimensión del vector de tiempo
r=0.1*sin(6*t/7); %radio de la rosa polar
18
%ecuación cartesiana de la rosa polar
19
21
x=xc+r.*(sin(t).∧ 3);
y=yc+r.*(cos(t).∧ 3);
z(1:m)=-0.5; %coordenada sobre el eje z0
22
% conversión de coordenadas cartesianas de la rosa polar
23
%a coordenadas articulares del robot SCARA
24
[d3, q2, q1]=cinv SCARA(beta1,beta2,l1,l2,l3,x,y,z);
25
%trayectoria del robot SCARA en el sistema Σ0 (x0 , y0 , z0 )
[x0, y0, z0]=cinematica SCARA(beta1,beta2,l1,l2,l3,q1,q2,d3);
plot3(x0,y0,z0)
16
20
26
27
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.4
Robot esférico (RRP)
245
5.4 Robot esférico (RRP)
L
a configuración esférica de robots manipuladores presenta dos articulaciones
rotacionales (base y hombro) y la articulación del codo corresponde al tipo
prismática o lineal como se muestra en la figura 5.15. Los ejes de movimiento de las
articulaciones son mutuamente perpendiculares entre sı́. Dentro de los ejemplares
de esta configuración se encuentra el robot Standford, cuya principal aplicación es
el mecanizado de piezas automotrices y la manipulación de objetos sobre piso.
Figura 5.15 Robot manipulador en configuración esférica.
Cinemática directa cartesiana
El espacio de trabajo de la configuración esférica corresponde a una esfera hueca,
cuyo radio se encuentra en función del desplazamiento lineal d3 de la articulación
prismática del codo. El eje z0 se alinea con el eje de giro de la articulación rotacional
de la base q1 y el origen del sistema de referencia fijo Σ0 (x0 , y0 , z0 ) se ubica en
el piso de tal forma que la articulación de la base está a una altura l1 sobre el
eje z0 . El ancho del servomotor de la base y el espesor de la placa metálica están
representados por β1 . Por otro lado, el eje z1 determina la medición de la variable
articular q2 del hombro y se encuentra alineado con el eje de rotación de esta
articulación. Los ejes z1 y z0 son perpendiculares entre sı́. El sistema de referencia
Σ1 (x1 , y1 , z1 ) se coloca en el dorso del servomotor de la articulación del hombro y las
coordenadas del origen de este sistema respecto al sistema fijo Σ0 (x0 , y0 , z0 ) están en:
[ β1 cos(q1 ) β1 sen(q1 ) l1 + β1 ]T . El eje z2 se alinea con el desplazamiento lineal de
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
246
Capı́tulo 5: Cinemática directa cartesiana
la articulación prismática d3 y las coordenadas del origen del sistema Σ2 (x2 , y2 , z2 )
con referencia al sistema Σ1 (x1 , y1 , z1 ) se encuentran localizadas en: [ 0 0 β2 ]T .
Los ejes z0 , z1 y z2 son perpendiculares entre sı́.
Figura 5.16 Configuración esférica.
La tabla 5.5 presenta los parámetros de la convención Denavit-Hartenberg para el
robot en la configuración esférica.
Tabla 5.5 DH del robot esférico
li
αi
di
θi
1
0
l 1 + β1
q1
2
0
- π2
π
2
β2
q2
3
0
0
d3
0
Eslabón
Las matrices de transformación homogénea para el robot en la configuración esférica
tienen la siguiente estructura:
H01 = HRz0 ( q1 ) HTz0 ( l1 + β1 ) HTx0 ( 0 ) HRx0 ( − pi
2 )
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.4
⎡
cos(q1 )
0
⎢ sen(q ) 0
1
⎢
= ⎢
⎣
0
−1
H12
H23
247
Robot esférico (RRP)
− sen(q1 )
cos(q1 )
0
0
0
0
= HRz1 ( q2 ) HTz1 ( β2 ) HTx0
⎡
sen(q2 )
cos(q2 ) 0
⎢ sen(q ) 0 − cos(q )
2
2
⎢
= ⎢
⎣
0
1
0
0
⎤
⎥
⎥
⎥
l 1 + β1 ⎦
0
(5.43)
1
( 0 ) HRx1 ( π2 )
⎤
0
0 ⎥
⎥
⎥
β2 ⎦
(5.44)
0
0
0
1
= HRz2 ( 0 ) HTz2 ( d3 ) HTx2 ( 0 ) HRx2 ( 0 )
⎡
⎤
1 0 0 0
⎢0 1 0 0 ⎥
⎢
⎥
= ⎢
⎥
⎣ 0 0 1 d3 ⎦
0 0 0
(5.45)
1
(5.46)
H03
=
H01 H12 H23
⎡ cos(q1 ) cos(q2 )
= ⎣
sen(q1) cos(q2 )
− sen(q2 )
0
− sen(q1 )
cos(q1 ) sen(q2 )
cos(q1 )
0
0
sen(q1 ) sen(q2)
cos(q2 )
0
−β2 sen(q1 ) + d3 sen(q2 ) cos(q1) ⎤
β2 cos(q1 ) + d3 sen(q2 ) sen(q1 )
l1 + β1 + d3 cos(q2 )
1
⎦(5.47)
La cinemática directa de un robot manipulador en configuración esférica es:
⎡ ⎤
⎡
⎤
x
−β2 sen(q1 ) + d3 sen(q2 ) cos(q1 )
⎢ ⎥
⎢
⎥
⎣ y ⎦ = ⎣ β2 cos(q1 ) + d3 sen(q2 ) sen(q1 ) ⎦
z
l1 + β1 + d3 cos(q2 )
(5.48)
El jacobiano del robot esférico tiene la siguiente forma:
J(q1 , q2 , d3) =
−β2 cos(q1 ) − d3 sen(q1 ) sen(q2)
d3 cos(q1 ) cos(q2)
cos(q1 ) sen(q2 )
d3 cos(q1 ) sen(q2 ) − β2 sen(q1 )
0
d3 cos(q2 ) sen(q1 )
−d3 sen(q2 )
sen(q1 ) sen(q2)
cos(q2 )
(5.49)
Determinante det[J(q1 , q2 , d3 )] = −d23 sen(q2 )
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
248
Capı́tulo 5: Cinemática directa cartesiana
Función transformación homogénea robot esférico
La función matriz de transformación homogénea H esferico() del brazo robot en
la configuración esférica tiene la siguiente sintaxis:
H03 = H esferico()
esta función retorna la matriz de transformación homogénea H03 integrada por la
matriz de rotación R30 que describe la rotación del extremo final del robot con
respecto al sistema fijo Σ0 (x0 , y0 , z0 ) y la cinemática directa cartesiana f R (q) que
relaciona las coordenadas articulares. Además, también despliega en forma simbólica
la tabla 5.5 con los parámetros Denavit-Hartenberg. El programa 5.18 contiene el
código MATLAB de la función transformación homogénea del robot esférico.
Código Fuente 5.18
H esferico.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
H esferico.m
1
function H=H esferico()
2
syms q1 q2 q3 beta1 beta2 l1 l2 l3 d1 d2 d3 alpha1 alpha2 alpha3 real
disp(’Parámetros Denavit-Hartenberg del robot SCARA’) disp(’[ l alpha d q]’)
dh=[0, -pi/2, l1+beta1, q1; 0, pi/2, beta2, q2; 0, 0, d3, 0]; disp(dh)
3
4
%H01 = HRz0 (q1 )HTz0 (l1 + β1 )HTx0 (0)HRx0 (− π2 )
H10=HRz(q1)*HTz(l1+beta1)*HTx(0)*HRx(-pi/2);
5
6
%H12 = HRz1 (q2 )HTz1 (β2 )HTx1 (0)HRx1 ( π2 )
H21=HRz(q2)*HTz(beta2)*HTx(0)*HRx(pi/2);
H32=HRz(0)*HTz(d3)*HTx(0)*HRx(0); %H23 = HRz2 (0)HTz2 (d3 )HTx2 (0)HRx2 (0)
H30=simplify(H10*H21*H32);%H03 = H01 H12 H23
7
8
9
10
11
[R30, cinemat esferico, cero, c]=H DH(H30);
H=[R30, cinemat esferico; cero, c];
12
13
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.4
249
Robot esférico (RRP)
Función cinemática directa del robot esférico
La función de cinemática directa que relaciona las coordenadas cartesianas del
extremo final con las coordenadas articulares del brazo robot en configuración
esférica está dada por la siguiente sintaxis (el código en lenguaje MATLAB se
encuentra en el cuadro 5.19):
[x0 , y0 , z0 ]=cinematica esferico(β1, β2 , l1, q1 , q2 , d3)
Código Fuente 5.19
cinematica esferico.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinematica esferico.m
1
2
3
4
function [x0, y0,z0]=cinematica esferico(beta1,beta2,l1,q1,q2,d3)
dato1=whos(’beta1’); dato2=whos(’beta2’); dato3=whos(’l1’);
dato4=whos(’q1’); dato5=whos(’q2’); dato6=whos(’d3’);
v1=strcmp(dato1.class, ’sym’); v2=strcmp(dato2.class, ’sym’);
5
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
6
7
8
9
x0=simplify(vpa(-beta2*sin(q1)+d3*cos(q1)*sin(q2),3));
y0=simplify(vpa(beta2*cos(q1) + d3*sin(q1)*sin(q2),3));
z0=simplify(vpa(beta1 + l1 + d3.*cos(q2),3));
10
11
12
15
x0=vpa(x0); y0=vpa(y0); z0=vpa(z0);
else %caso numérico
x0=-beta2*sin(q1)+d3.*cos(q1).*sin(q2);
y0= beta2*cos(q1) + d3.*sin(q1).*sin(q2);
16
z0=beta1 + l1 + d3.*cos(q2);
13
14
17
18
end
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
250
Capı́tulo 5: Cinemática directa cartesiana
donde l1 es la distancia sobre el eje z0 donde está ubicada la articulación de la base;
q1 , q2 , d2 , d3 son las posiciones articulares de la base, hombro y codo, respectivamente.
Retorna las coordenadas cartesianas (x0 , y0 , z0 ) en el sistema Σ0 (x0 , y0 , z0 ).
Cinemática inversa
Para obtener la cinemática inversa de la configuración esférica se emplea el
método geométrico que se presenta a detalle en la figura 5.17. Los ángulos ϑ + q1
satisfacen tan (ϑ + q1 ) = xy00 . Note que el ángulo ϑ queda ubicado en el interior
del triángulo formado por el cateto adyacente x20 + y02 − β22 , cateto opuesto β2
y la hipotenusa
x20 + y02 , entonces tan (ϑ) = √ 2 β2 2 2 . La proyección del
x0 +y0 −β2
movimiento de la articulación d3 sobre el plano x0 − y0 es d3 cos(q2 − π2 ) =
x20 + y02 − β22 . Ahora, tomando en cuenta la siguiente identidad
d3 sen(q2 ) =
tan (ϑ)+tan (q1 )
trigonométrica tan (ϑ + q1 ) = 1−tan
(ϑ) tan (q1 ) , se obtiene la expresión tan (q1 ) =
√ 2 2 2
−x0 β2 +y0 x0 +y0 −β
z0 −(l1 +β1 )
√
. Por otro lado, se tiene que tan (q2 − π2 ) = √
y para
y0 β2 +x0 x20 +y02 −β22
x20 +y02 −β22
d3 = x20 + y02 − β22 + [z0 − (l1 + β1 )]2 .
Figura 5.17 Cinemática inversa de la configuración esférica.
La cinemática inversa de la configuración esférica toma la siguiente forma:
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.4
251
Robot esférico (RRP)
)
q1
q2
d3
*
−x0 β2 + y0 x20 + y02 − β 2
= atan
y0 β2 + x0 x20 + y02 − β22
*
)
z0 − (l1 + β1 )
π
+ atan =
2
x20 + y02 − β22
=
x20 + y02 − β22 + [z0 − (l1 + β1 )]2
(5.50)
(5.51)
(5.52)
Función cinemática inversa robot esférico
La sintaxis de la función de cinemática inversa de la configuración esférica es (ver
código en el cuadro 5.20); esta función retorna las coordenadas articulares.
[q1, q2, d3]=cinv esferico(β1, β2 , l1, x0 , y0 , z0 )
Código Fuente 5.20
cinv esferico.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinv esferico.m
1
2
function [q1, q2, d3]=cinv esferico(beta1,beta2,l1,x0,y0,z0)
w1=y0.*sqrt(x0.*x0+y0.*y0-beta2*beta2)-x0*beta2;
3
w2=x0.* sqrt(x0.*x0+y0.*y0-beta2*beta2)+y0*beta2;
q1=atan(w1./w2);
w3=z0-(l1+beta1);
w4=sqrt(x0.*x0+y0.*y0-beta2*beta2);
4
5
6
7
q2=pi/2+atan(w3./w4);
d3=sqrt(x0.*x0+y0.*y0-beta2*beta2+(z0-(l1+beta1)).*(z0-(l1+beta1)));
8
9
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
252
Capı́tulo 5: Cinemática directa cartesiana
♣♣♣ Ejemplo 5.5
Escribir un programa en lenguaje MATLAB que permita desplegar en forma
simbólica los parámetros DH, matriz homogénea, cinemática cartesiana, jacobiano
y determinante del robot esférico. Además, programar una aplicación donde el
extremo final del robot trace un conjunto de figuras circulares. El radio de cada
cı́rculo es r = 0.25 m, con centro en el plano (x0 , y0 ) = (0.3, −0.3) m, cada cı́rculo
estará desplazado un milı́metro sobre el eje z0 (de 0 a 100 mm).
Solución
El programa que permite resolver el
problema planteado se encuentra en el
cuadro 5.21. La información simbólica del robot esférico se encuentra en
las lı́neas 4 a la 15 (parámetros DH,
matriz homogénea, cinemática directa, jacobiano y determinante del robot
cilı́ndrico).
La figura circular se encuentra implementada en la lı́nea 18 a la 24, con la
siguiente ecuación:
x = xc + r sen(t)
x0 , y0 y el desplazamiento variable
está dado por z. La lı́nea 25 convierte
las coordenadas cartesianas del cı́rculo a coordenadas articulares del robot usando la función cinv esferico.
La lı́nea 26 realiza la conversión de
coordenadas articulares a coordenadas
cartesianas del extremo final del robot (cinematica esferico). La figura 5.18 muestra el trazo realizado por
el extremo final del robot esférico (ver
lı́nea 27). .18
5.6.
y = yc + r cos(t)
z = kt
donde r es el radio del cı́rculo, t es la
evolución del tiempo, k [mm/seg] es
una constante positiva que convierte
el tiempo a milı́metros, las coordenadas [ xc , yc ]T = [ 0.3, −0.3 ]T m representan el centro del cı́rculo en el plano
Alfaomega
Figura 5.18 Aplicación del robot esférico.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.4
253
Robot esférico (RRP)
Código Fuente 5.21
cap5 esferico.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cap5 esferico.m
1
clc; clear all; close all;
2
format short
syms q1 q2 d3 beta1 beta2 l1 alpha1 alpha2 alpha3 real
H30=H esferico();
disp(’Transformación homogénea del robot esférico’);
3
4
5
6
7
8
9
10
11
12
13
disp(H30);
[R30, cinemat esferico,cero, c]=H DH(H30);
disp(’Matriz de rotación’);
disp(R30);
disp(’cinemática directa’);
disp(cinemat esferico);
[x0, y0,z0]=cinematica esferico(beta1,beta2,l1,q1,q2,d3);
15
disp([x0; y0;z0])
jac esferico=jacobian([x0; y0;z0], [q1;q2;d3])
det esferico=simplify(vpa(det(jac esferico),3))
16
%ejemplo numérico
17
l1=0.5; beta1=0.10; beta2=0.05;
t=0:0.001:100; [n m]=size(t);
14
18
19
20
21
22
23
24
25
%ecuación del cı́rculo con centro en xc,yc y radio r
xc=0.3; yc=-0.3; r=0.25;
q1=[]; q2=[]; d3=[]; k=1;
x=xc+r.*sin(t);
y=yc+r.*cos(t);
z=k*t;
26
[q1, q2, d3]=cinv esferico(beta1,beta2,l1,x,y,z);
[x0, y0,z0]=cinematica esferico(beta1,beta2,l1,q1,q2,d3);
27
plot3(x0,y0,z0)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
254
Capı́tulo 5: Cinemática directa cartesiana
5.5 Manipulador cilı́ndrico (RPP)
L
a configuración cilı́ndrica tiene la articulación de la base rotacional,
mientras que las articulaciones del hombro y codo son lineales o prismáticas.
Entre las aplicaciones más importantes de los robots manipuladores en esta
configuración se encuentran procesos para desbastar moldes, traslado de objetos,
ensamble de piezas en espacios horizontales y transporte de objetos. En la figura
5.19 se muestra la configuración cilı́ndrica.
Figura 5.19 Robot en configuración cilı́ndrica.
Cinemática directa cartesiana
El espacio de trabajo de la configuración cilı́ndrica que se muestra en la figura
5.21 tiene la forma de un cilindro hueco con radio directamente proporcional al
desplazamiento lineal d3 y altura variable d2 . El origen del sistema de referencia
cartesiano fijo Σ0 (x0 , y0 , z0 ) se ubica convenientemente en el piso, de tal forma que
la articulación rotacional de la base se encuentra a una distancia l1 sobre el eje z0 .
Este eje se alinea con el eje de rotación del servomotor, de esta forma la variable
articular q1 gira alrededor del eje z0 . El ancho del servomotor y espesor de las placas
metálicas que se utilizan para acoplar mecánicamente la siguiente articulación se
encuentra expresado por el parámetro geométrico β1 . Note que el parámetro l1
produce sólo coordenadas positivas para z0 , cuando este parámetro es cero o el
origen de Σ0 (x0 , y0 , z0 ) se coloca sobre la articulación de la base, entonces puede
haber coordenadas negativas en z0 .
El sistema Σ1 (x1 , y1 , z1 ) sirve para medir la coordenada lineal d2 de la articulación
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.5
Manipulador cilı́ndrico (RPP)
255
del hombro, las coordenadas de Σ1 (x1 , y1 , z1 ) con respecto al sistema Σ0 (x0 , y0 , z0 )
son: [ 0, 0, l1 + β1 ]T . El eje z1 se alinea con el desplazamiento lineal de la variable
d2 y los ejes z0 y z1 son paralelos entre sı́. El sistema de referencia Σ1 (x1 , y1 , z1 ) se
encuentra rotado un ángulo q1 con respecto al sistema fijo Σ0 (x0 , y0 , z0 ), la matriz
de rotación que relaciona dicha rotación entre estos dos sistemas de referencia es:
R10 = Rz0 ( q1 ).
Figura 5.20 Espacio de trabajo del robot cilı́ndrico.
La articulación del codo tiene asociado el sistema de referencia Σ2 (x2 , y2 , z2 ) para
medir el desplazamiento lineal de la variable d3 . Este sistema se genera por rotar
un ángulo − π2 radianes alrededor del eje x1 , de tal forma que el eje z2 determina
el desplazamiento lineal d2 . Note que una consecuencia de esta rotación alrededor
del eje x1 , es que el eje z2 queda alineado sobre el eje y1 , de tal forma que para
q1 = 0, el desplazamiento lineal de d3 coincide sobre el eje y0 . Debido a esto, para la
articulación lineal del codo el ángulo alrededor del eje z0 es q1 + π2 . Observe también
la dirección para coordenadas negativas del eje y2 coincide con la dirección positiva
de los ejes z0 y z1 .
Las coordenadas del origen del sistema Σ2 (x2 , y2 , z2 ) con respecto al sistema
Σ1 (x1 , y1 , z1 ) son: [ 0, 0, l1 + β1 ]T . El eje z2 es perpendicular a los ejes z0 y z1 . La
forma en que están indicados los sistemas de referencia Σ0 (x0 , y0 , z0 ), Σ1(x1 , y1 , z1 )
y Σ2 (x2 , y2 , z2 ) en la figura 5.21 determinan la posición de casa del brazo robot en
configuración cilı́ndrica, es decir para esa configuración de sistemas de referencia las
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
256
Capı́tulo 5: Cinemática directa cartesiana
variables articulares tienen un valor de [ q1 , d2, d3 ]T = [ 0, 0, l1 + β1 ]T . La variable
lineal de codo normalmente es calibrada para dar valor cero en z0 = l1 + β1 ,
desplazamientos mayores a esta longitud son positivos, o en caso contrario negativos.
Para otro tipo de posición de casa, la cinemática directa del robot cilı́ndrico adquiere
una forma cartesiana diferente.
Los parámetros geométricos de espesor y ancho β2 , β3 de los servomotores de las
articulaciones del hombro y codo son absorbidos como parte de las caracterı́sticas
mecánicas de sus articulaciones, por lo que no influyen directamente en la expresión
analı́tica de la cinemática directa del brazo robot en configuración cilı́ndrica.
En la tabla 5.6 se muestran los parámetros del robot manipulador en la configuración
cilı́ndrica.
Tabla 5.6 DH del robot cilı́ndrico
Eslabón
li
αi
di
θi
1
0
0
l 1 + β1
q1
2
0
- π2
d2
0
3
0
0
d3
0
Con la tabla 5.6 el robot en la configuración cilı́ndrica tiene las siguientes matrices
de transformación homogénea:
H01 = HRz0 ( q1 ) HTz0 ( β1 + l1 ) HTx0 ( 0 ) HRx0 ( 0 )
⎡
⎤
cos(q1 ) − sen(q1 ) 0
0
⎢ sen(q )
cos(q1 )
0
0 ⎥
1
⎢
⎥
= ⎢
⎥
⎣
0
0
1 l 1 + β1 ⎦
H12
0
0
0
1
= HRz0 ( 0 ) HTz0 ( d2 ) HTx0 ( 0 ) HRx0 ( − pi
2 )
⎡
⎤
1 0 0 0
⎢0 0 1 0 ⎥
⎢
⎥
= ⎢
⎥
⎣ 0 −1 0 d2 ⎦
0
H23
Alfaomega
0
0
(5.53)
(5.54)
1
= HRz0 ( 0 ) HTz0 ( d3 ) HTx0 ( 0 ) HRx0 ( 0 )
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.5
257
Manipulador cilı́ndrico (RPP)
⎡
1
⎢0
⎢
= ⎢
⎣0
0
0 0
⎤
0 ⎥
⎥
⎥
0 1 d3 ⎦
1 0
0 0
H03 = H01 H12 H23
⎡ cos(q1 )
= ⎣
0
(5.55)
1
sen(q1 )
0
0
0
−1
− sen(q1 )
cos(q1 )
0
0
0
0
− sen(q1 )d3 ⎤
d3 cos(q1 )
⎦
l1 + β1 + d2
(5.56)
1
El modelo de cinemática directa para el robot manipulador cilı́ndrico está dado de
la siguiente forma:
⎡ ⎤
⎡
⎤
x
−d3 sen(q1 )
⎢ ⎥
⎢
⎥
(5.57)
⎣ y ⎦ = f R (q) = ⎣ d3 cos(q1 ) ⎦
z
l 1 + β1 + d 2
Jacobiano del robot cilı́ndrico
El jacobiano del brazo robot en configuración cilı́ndrica se expresa de la siguiente
forma:
⎡
⎤
− cos(q1 )d3 0 − sen(q1 )
∂f R (q) ⎢
⎥
J(q1 , d2, d3 ) =
= ⎣ −d3 sen(q1 ) 0
cos(q1 ) ⎦
(5.58)
∂q
0
1
0
cuyo determinante está dado por:
det[J(q1 , d2, d3 )] = d3
(5.59)
la única singularidad que presenta el brazo robot en configuración cilı́ndrica es
cuando la articulación lineal del codo es d3 = 0, mientras que las variables q1 , d2 ∈ IR
pueden tener cualquier valor. De ahı́ que es recomendable para algunas aplicaciones
donde se involucra la inversa de la matriz jacobiana que la variable articular lineal
d3 = 0. En algunos robots este problema se evita insertando sensores, interruptores
o por programación para deshabilitar el movimiento del robot cuando la articulación
lineal d3 pasa por el origen del sistema Σ0 (x0 , y0 , z0 ).
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
258
Capı́tulo 5: Cinemática directa cartesiana
Función transformación homogénea robot cilı́ndrico
La función matriz de transformación homogénea del brazo robot en configuración
cilı́ndrica tiene la siguiente sintaxis:
H03 = H cilindrico()
retorna la matriz de transformación homogénea H03 compuesta por la matriz de
rotación R30 y la cinemática directa cartesiana f R (q) que relaciona las coordenadas
cartesianas del extremo final con las coordenadas articulares. También despliega los
parámetros Denavit-Hartenberg en forma simbólica que se muestran en la tabla 5.6.
El programa 5.22 contiene el código de la función transformación homogénea.
Código Fuente 5.22
H cilindrico.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
H cilindrico.m
1 function H=H cilindrico()
2
syms q1 d2 d3 beta1 l1 alpha1 alpha2 alpha3 real
3
disp(’Parámetros Denavit-Hartenberg del robot cilı́ndrico’);
4
5
6
disp(’[ l alpha d q]’);
dh=[0, 0, l1+beta1, q1; 0, -pi/2, d2, 0; 0, 0, d3, 0];
disp(dh)
7
%H01 = HRz0 (q1 )HTz0 (l1 + β1 )HTx0 (0)HRx0 (0)
8
H10=HRz(q1)*HTz(l1+beta1)*HTx(0)*HRx(0);
9
%H12 = HRz1 (0)HTz1 (d2 )HTx1 (0)HRx1 (− π2 )
10
H21=HRz(0)*HTz(d2)*HTx(0)*HRx(-pi/2);
11
%H23 = HRz2 (0)HTz2 (d3 )HTx2 (0)HRx2 (0)
12
13
14
H32=HRz(0)*HTz(d3)*HTx(0)*HRx(0);
H30=simplify(H10*H21*H32); % H03 = H01 H12 H23
[R30, cinemat cilindrico, cero, c]=H DH(H30);
15
16
H=[R30, cinemat cilindrico;
cero, c];
17 end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.5
259
Manipulador cilı́ndrico (RPP)
Función cinemática directa del robot cilı́ndrico
La función de cinemática directa del brazo robot cilı́ndrico está por:
[x0 , y0 , z0 ]=cinematica cilindrico(β1, l1, q1 , d2, d3 )
donde q1 , d2 , d3 son las posiciones articulares de la base, hombro y codo,
respectivamente. Retorna las coordenadas cartesianas (x0 , y0 , z0 ) en el sistema
Σ0 (x0 , y0 , z0 ). El cuadro 5.23 contiene el código en lenguaje MATLAB para la función
cinemática del robot cilı́ndrico:
Código Fuente 5.23
cinematica cilindrico.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinematica cilindrico.m
1
2
function [x0, y0,z0]=cinematica cilindrico(beta1,l1,q1,d2,d3)
dato1=whos(’beta1’); dato2=whos(’l1’); dato3=whos(’q1’);
3
dato4=whos(’d2’); dato5=whos(’d3’); 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’); digits(3);
if ( v1 & v2 & v3 & v4 & v5) % caso simbólico
4
5
6
7
x0= -d3*sin(q1);
y0= d3*cos(q1);
z0=l1+beta1+d2;
8
9
10
13
x0=vpa(x0); y0=vpa(y0); z0=vpa(z0);
else %caso numérico
x0= -d3.*sin(q1);
y0= d3.*cos(q1);
14
z0=l1+beta1+d2;
11
12
15
16
end
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
260
Capı́tulo 5: Cinemática directa cartesiana
Cinemática inversa
La cinemática inversa del brazo robot en configuración cilı́ndrica se obtiene de la
cinemática directa (5.57) de la siguiente forma: primero que nada, debe considerarse
que debido a que la posición de casa [ q1 , d2, d3 ]T = [ 0, 0, 0 ]T seleccionada para este
brazo robot se caracteriza por la articulación del codo d3 está alineada sobre el eje
y0 (los eje y0 y z2 coinciden cuando q1 = 0), entonces el desplazamiento rotacional
de la base alrededor del ejez0 espor un ángulo q1 + π2 (ver figura 5.21). Por lo tanto,
se cumple: q1 +
π
2
= atan − xy00 .
La articulación del hombro tiene un desplazamiento lineal sobre el eje z0 , entonces
d2 = z0 − (l1 + β1 ). La articulación del codo d3 proyecta su movimiento sobre el
plano x0 − y0 , por lo que puede tomar dos posibles soluciones: d3 = ± x20 + y02 .
Figura 5.21 Cinemática inversa del robot cilı́ndrico.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.5
Manipulador cilı́ndrico (RPP)
261
La cinemática inversa del brazo robot en configuración cilı́ndrica está dada como:
q1
d2
d3
x0
π
= − + atan −
2
y0
= z0 − (l1 + β1 )
= ± x20 + y02
(5.60)
(5.61)
(5.62)
Función cinemática inversa robot cilı́ndrico
La función de cinemática inversa del robot cilı́ndrico convierte las coordenadas
cartesianas del extremo final (x0 , y0 , z0 ) en función de las coordenadas articulares
(q1 , d2, d3 ) con la siguiente sintaxis:
[q1 , d2, d3 ]=cinv cilindrico(β1, l1, x0 , y0 , z0 )
donde β1 , l1 son los parámetros geométricos, x0 , y0 , z0 son las coordenadas
cartesianas del extremo final. Esta función retorna las coordenadas articulares
q1 , d2, d3 de la base, hombro y codo, respectivamente. El cuadro 5.24 contiene la
implementación de la función cinemática inversa del brazo robot cilı́ndrico.
Código Fuente 5.24
cinv cilindrico.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinv cilindrico.m
1
2
function [q1, d2,d3]=cinv cilindrico(beta1,l1,x0,y0,z0)
q1= -pi/2+atan(-x0./y0);
3
d2=z0-(l1+beta1);
d3= sqrt(x0.*x0+y0.*y0);
4
5
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
262
Capı́tulo 5: Cinemática directa cartesiana
♣♣♣ Ejemplo 5.6
Escribir un programa en lenguaje MATLAB que permita desplegar en forma
simbólica los parámetros DH, cinemática cartesiana, jacobiano y determinante
del robot cilı́ndrico. Asimismo programar una aplicación donde el extremo final
del robot realice el trazo de una rosa polar con centro en [ 0.3, −0.3, 0.5] y radio
r = 0.15.
Solución
El desplegado simbólico de los parámetros DH, cinemática directa y jacobiano del robot cilı́ndrico se encuentra en el cuadro 5.25. En la lı́nea 4
se obtiene la matriz de transformación
homogénea H03 utilizando la función
H cilindrico(). La matriz de transformación homogénea H03 se utiliza como argumento de entrada en la función D HD(H03 ) para obtener la matriz
de rotación R30 y la cinemática directa
(lı́nea 5). El jacobiano y su determinante se despliegan en las lı́neas 11 y
12, respectivamente.
el centro de la figura (ver lı́neas 1922), l1 + β1 = 0.45 El vector tiempo es de 0 a 100 segundos, con incrementos de un milisegundo. Las
coordenadas cartesianas de la rosa polar son convertidas a coordenadas articulares usando la función
cinv cilindrico(β1, l1 , x, y, z) (ver
lı́nea 24). La lı́nea 26 contiene la conversión de coordenadas cartesianas
del extremo final del robot a coordenadas articulares usando la función
cinematica cilindrico(q1, d2 , d3).
La lı́nea 27 exhibe la figura 5.22 trazada por el robot cilı́ndrico.
La figura “rosa polar”tiene la siguiente
ecuación:
r = 0.05 + 0.1 sen(t)
x = xc + r sen(t)
y = yc + r cos(t)
z = l1 + β1 + 0.05
donde las coordendas [ xc , yc , z ]T son
Alfaomega
Figura 5.22 Aplicación del robot cilı́ndrico.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.5
263
Manipulador cilı́ndrico (RPP)
Código Fuente 5.25
cap5 cilı́ndrico.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cap5 cilı́ndrico.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
clc; clear all; close all;
format short
syms q1 d2 d3 beta1 l1 alpha1 alpha2 alpha3 real
H30=H cilindrico(); disp(’Transformación homogénea del robot cilı́ndrico’);
[R30, cinemat cilindrico,cero, c]=H DH(H30);
disp(’Matriz de rotación’);
disp(R30);
disp(’cinemática directa’); disp(cinemat cilindrico);
[x0, y0,z0]=cinematica cilindrico(beta1,l1,q1,d2,d3);
disp([x0; y0;z0])
jac cilindrico=jacobian([x0;y0;z0], [q1;d2;d3])
det cilindrico=simplify(vpa(det(jac cilindrico),3))
%ejemplo numérico
t=0:0.001:100;
%ecuación de la rosa polar con centro en (xc,yc) y radio r
xc=0.3; yc=-0.3; beta1=0.05; l1=0.40;
q1=[]; d2=[]; d3=[]; r=0.2;
[n m]=size(t);
21
r=0.05+0.1*sin(t);
x=xc+r.*sin(t);
y=yc+r.*cos(t);
22
z(1:m)=l1+beta1+0.05;
23
%conversión de coordenadas cartesianas a coordenadas articulares del robot
[q1, d2, d3]=cinv cilindrico(beta1,l1,x,y,z);
20
24
25
26
%coordenadas cartesianas del extremo final del robot
[x0, y0,z0]=cinematica cilindrico(beta1,l1,q1,d2,d3);
27
plot3(x0,y0,z0) %trayectoria trazada por el robot
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
264
Capı́tulo 5: Cinemática directa cartesiana
5.6 Configuración cartesiana (PPP)
L
os robots manipuladores que incluyen sus tres primeras articulaciones del tipo
prismático o lineales se denominan robots cartesianos, también conocidos
como robots pórticos o lineales, por lo que no tienen articulaciones rotacionales.
Existen varias aplicaciones de los robots cartesianos, entre ellas: corte de mascarillas,
graficadores o plotters, taladros automáticos, mesas de medición de coordenadas
como la que se muestra la figura 5.23, impresoras láser o de matriz son otros ejemplos
de robots cartesianos con 2 gdl.
Figura 5.23 Robot cartesiano.
Particularmente, la configuración cartesiana facilita la programación del extremo
final del robot y sus potenciales aplicaciones, ya que la cinemática directa es un
mapa lineal entre coordenadas articulares y cartesianas. Sin embargo, la estructura
mecánica del robot cartesiano presenta baja destreza de movilidad comparado con la
configuración antropomórfica debido a que todas sus articulaciones son prismáticas.
Cinemática cartesiana
En la figura 5.24 se muestra el espacio de trabajo del robot cartesiano, tiene forma
de un paralelepı́pedo recto. El sistema de referencia cartesiano fijo Σ0 (x0 , y0 , z0 ) se
selecciona de manera conveniente. El eje z0 determina el desplazamiento lineal de
la primera articulación prismática d1 , el origen del sistema Σ0 (x0 , y0 , z0 ) se ubica
en [ 0, 0, l1 ] siendo l1 una longitud con respecto al nivel del piso, l1 representa la
longitud de las barras del robot cartesiano. Los ejes x0 y y0 quedan alineados por la
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.6
Configuración cartesiana (PPP)
265
regla de la mano derecha. El siguiente sistema de referencia Σ1 (x1 , y1 , z1 ) se obtiene
rotando el eje x0 un ángulo α1 = − π2 , quedando el eje z1 en dirección positiva de
la variable d2 . Observe que el eje y1 apunta en dirección negativa del eje z0 y el eje
x1 es paralelo al eje x0 , separado evidentemente por la dimensión fı́sica de la mesa
cartesiana denotada por la longitud l2 . El sistema Σ2 (x2 , y2 , z2 ) sirve para medir el
desplazamiento lineal de la variable articular d3 . Sin embargo, la obtención de este
tercer sistema de referencia no es trivial, ya que no se puede deducir directamente
del sistema Σ1 (x1 , y1 , z1 ) debido a que no existe un ángulo α2 alrededor del eje x1
que genere directamente el sistema de referencia Σ2 (x2 , y2 , z2 ).
Figura 5.24 Espacio de trabajo del robot cartesiano.
Para obtener el sistema de referencia Σ2 (x2 , y2 , z2 ), primero se emplea un sistema
de referencia auxiliar denominado Σ2a(x2a , y2a, z2a) el cual se obtiene realizando
una rotación de 90 grados con respecto al eje z1 , esta rotación hace que el eje x2a
permanezca paralelo al eje y1 . Debe observarse que los ejes z1 y z2a son paralelos
entre sı́ de tal manera que sus coordenadas (d2 ) entre estos ejes sean idénticas. El
origen del sistema de referencia auxiliar Σ2a(x2a, y2a, z2a) es el mismo que el sistema
de referencia Σ1 (x1 , y1 , z1 ), pero el sistema Σ2a(x2a, y2a, z2a) mantiene una rotación
relativa al sistema Σ1 (x1 , y1 , z1 ) expresada por la matriz rotación Rz1 ( π2 ), es decir:
⎡
⎡ ⎤
⎤
x2a
x2
⎢
⎢
⎥
⎥
T
⎣ y2a ⎦ = Rz1 ( π2 ) ⎣ y2 ⎦
z2a
z2
Posteriormente, girando un ángulo α2 =
π
2
alrededor del eje x2a se obtiene el sistema
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
266
Capı́tulo 5: Cinemática directa cartesiana
de referencia Σ2 (x2 , y2 , z2 ) donde la articulación prismática d3 se mueve linealmente
sobre el eje z2 . Esta última rotación α2 alrededor del eje x2 determina el ángulo
entre los ejes z2 y z1 . Los ejes z0 , z1 y z2 son mutuamente perpendiculares entre sı́.
En la figura 5.25 se muestra la secuencia de rotaciones. El paso 1 corresponde al
sistema fijo Σ0 (x0 , y0 , z0 ), rotando un ángulo α1 = − π2 alrededor del eje x0 genera el
sistema Σ1 (x1 , y1 , z1 ). El paso 2 consiste en rotar por un ángulo π2 alrededor del eje
z1 para generar el sistema de referencia Σ2a(x2a , y2a, z2a), este sistema es auxiliar y
sirve para generar el sistema Σ2 (x2 , y2 , z2 ). Para eso el paso 3 consiste en rotar un
ángulo α2 = − π2 alrededor del eje x2a .
Figura 5.25 Sistemas de referencia del robot cartesiano.
La tabla de parámetros del robot manipulador de 3 gdl en configuración cartesiana
queda de la siguiente forma:
Tabla 5.7 Parámetros Denavit-Hartenberg para el robot cartesiano de 3 gdl
Eslabón
Alfaomega
li
αi
di
θi
1
0
d1
0
2
0
- π2
- π2
d2
0
3
0
0
d3
0
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.6
267
Configuración cartesiana (PPP)
La matriz de transformación homogénea para la primera articulación toma la
siguiente forma:
H01 = HRz0 ( 0 ) HTz0 ( d1 ) HTx0 ( 0 ) HRx0 ( − π2 )
⎡
⎤
1 0 0 0
⎢0 0 1 0 ⎥
⎢
⎥
= ⎢
⎥
⎣ 0 −1 0 d1 ⎦
(5.63)
0
H12
0 0 1
= HRz1 ( 0 ) HTz1 ( d2 ) HTx1 ( 0 ) HTx1 ( − π2 )
⎡
⎤
1 0 0 0
⎢0 0 1 0 ⎥
⎢
⎥
= ⎢
⎥
⎣ 0 −1 0 d2 ⎦
0
0
H2a = HRz1 (
= H R z1 (
⎡
0 −1
⎢1
⎢
= ⎢
⎣0
0
0
π T
2 )
π T
2 )
1
H12
HRz1 ( 0 ) HTz2 ( d2 ) HTx1 ( 0 ) HTx1 ( − π2 )
0 0
⎤⎡
H12
1
0
0
⎢
0 0⎥
⎥⎢0 0
⎥⎢
1 0 ⎦ ⎣ 0 −1
0
0 1
0
0
0
0
0
⎤
⎡
0
0
⎢
0 ⎥
⎥ ⎢ −1 0
⎥=⎢
0 d2 ⎦ ⎣ 0 −1
1
0
1
H23 = HRz2 ( 0 ) HTz2 ( d3 ) HTx2 ( 0 ) HTx2
1
0
⎤
0 ⎥
⎥
⎥ (5.65)
0 d2 ⎦
0
0
⎡
0 0 1
⎤
1 0 0 0
⎢0 1 0 0 ⎥
⎢
⎥
(0) = ⎢
⎥
⎣ 0 0 1 d3 ⎦
⎤
⎡
H03
(5.64)
0 0 0
(5.66)
1
0 0 1 d3
⎢ 0 −1 0 d ⎥
2⎥
⎢
= H01 RTz, π H12 H23 = ⎢
⎥
2
⎣
1 0 0 d1 ⎦
H2a
0
0
0
1
La cinemática directa del robot cartesiano está dado por:
⎡ ⎤
⎡ ⎤
x0
d3
⎢ ⎥
⎢ ⎥
⎣ y0 ⎦ = ⎣ d2 ⎦
z0
(5.67)
d1
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
268
Capı́tulo 5: Cinemática directa cartesiana
Jacobiano del robot cartesiano
La matriz jacobiano del robot cartesiano está dado por:
⎡
J(d3 , d2, d1 ) =
1 0 0
⎤
∂f R (q) ⎢
⎥
= ⎣0 1 0⎦
∂q
0 0 1
(5.68)
cuyo determinante es unitario det[J(d3 , d2 , d1)] = 1.
La configuración cartesiana ofrece ventajas debido que no tiene singularidades.
Función transformación homogénea robot cartesiano
La sintaxis de la función transformación homogénea del brazo robot cartesiano es:
H03 =H cartesiano()
esta función retorna la matriz de transformación homogénea H03 compuesta por
la matriz de rotación R30 que describe la rotación del extremo final del robot con
respecto al sistema fijo Σ0 (x0 , y0 , z0 ) y la cinemática directa cartesiana f R (q) que
relaciona las coordenadas articulares. Además, también despliega los parámetros
Denavit-Hartenberg en forma simbólica de la tabla 5.7.
El programa 5.26 contiene el código MATLAB de la función transformación
homogénea del robot cartesiano. Utiliza las matrices de transformación homogéneas
de rotación HRz ( qi ) y traslación HTz ( d ) para el cálculo de cada una de las
matrices homogéneas de las articulaciones: H01 , H12 , H23 . También emplea la función
H DH(H30) para obtener la matriz de rotación R30 y la cinemática directa cartesiana
f R (d1 , d2, d3 ).
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.6
269
Configuración cartesiana (PPP)
Código Fuente 5.26
H cartesiano.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
H cartesiano.m
1
function H=H cartesiano()
2
syms l1 l2 l3 d1 d2 d3 alpha1 alpha2 alpha3 real
disp(’Parámetros Denavit-Hartenberg del robot cartesiano’)
disp(’[ l alpha d q]’)
dh=[0, -pi/2, d1, 0; 0, -pi/2, d2, 0; 0, 0, d3, 0];
3
4
5
6
7
%despliega tabla de parámetros DH
disp(dh)
8
%cálculo de las matrices de transformación homogénea de cada articulación
9
%H01 = HRz0 ( 0 ) HTz0 ( d1 ) HTx0 ( 0 ) HRx0 ( − π2 )
H10=HRz(0)*HTz(d1)*HTx(0)*HRx(-pi/2);
10
%H12 = HRz1 ( 0 ) HTz1 ( d2 ) HTx1 ( 0 ) HTx1 ( − π2 )
H21=HRz(0)*HTz(d2)*HTx(0)*HRx(-pi/2);
11
12
14
%H12 a = HRz1 ( π2 ) H12
H21a=simplify((HRz(pi/2))’*H21);
15
%H23 = HRz2 ( 0 ) HTz2 ( d3 ) HTx2 ( 0 ) HTx2 ( 0 )
16
H32=HRz(0)*HTz(d3)*HTx(0)*HRx(0);
17
18
%H03 = H01 H12 a H23
H30=simplify(H10*H21a*H32);
19
%matriz de rotación R30 y cinemática directa f R (d1 , d2, d3 )
20
[R30, cinemat cartesiano, cero, c]=H DH(H30);
21
%Forma la matriz de transformación homogénea del robot cartesiano
3
R0 f R (d1 , d2 , d3)
%H=
1
0T
H=[R30, cinemat cartesiano;
cero, c];
T
13
22
23
24
25
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
270
Capı́tulo 5: Cinemática directa cartesiana
Función cinemática directa del robot cartesiano
La sintaxis de la función de cinemática directa de la configuración cartesiana es:
[x0 , y0 , z0 ]=cinematica cartesiano(d3, d2, d1 )
donde d3 , d2 , 13 son las posiciones articulares del robot en configuración cartesiana.
Esta función retorna las coordenadas cartesianas (x0 , y0 , z0 ) en el sistema
Σ0 (x0 , y0 , z0 ). El cuadro 5.27 contiene función cinemática del robot cartesiano.
Código Fuente 5.27
cinematica cartesiano.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinematica cartesiano.m
1
2
3
function [x0, y0, z0]=cinematica cartesiano(d3,d2,d1)
dato1=whos(’d1’); dato2=whos(’d2’); dato3=whos(’d3’);
v1=strcmp(dato1.class, ’sym’); v2=strcmp(dato2.class, ’sym’);
4
v3=strcmp(dato3.class, ’sym’); digits(3);
if ( v1 & v2 & v3) %caso simbólico
x0=d3; y0=d2; z0=d1; x0=vpa(x0); y0=vpa(y0); z0=vpa(z0);
else %caso numérico
5
6
7
8
x0=d3; y0=d2; z0=d1;
9
10
end
end
Función cinemática inversa robot cartesiano
La función de cinemática inversa del robot cartesiano convierte las coordenadas
cartesianas del extremo final (x0 , y0 , z0 ) en el sistema Σ0 (x0 , y0 , z0 ) a las coordenadas
articulares (d1 , d2, d3 ), bajo la siguiente sintaxis:
[d3 , d2, d1 ]=cinv cartesiano(x0, y0 , z0 )
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.6
271
Configuración cartesiana (PPP)
Esta función retorna las coordenadas articulares. El cuadro 5.28 contiene el código
de la cinemática inversa del robot cartesiano:
Código Fuente 5.28
cinv cartesiano.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cinv cartesiano.m
1
function [d3, d2, d1]=cinv cartesiano(x0,y0,z0)
2
3
d3=x0; d2=y0; d1=z0;;
end
♣♣♣ Ejemplo 5.7
Escribir un programa en lenguaje MATLAB que permita desplegar en forma
simbólica los parámetros DH, cinemática directa y el jacobiano del robot
cartesiano. Además, implementar una aplicación donde el extremo final del robot
trace una rosa polar, con centro en [ 0.3, −0.3, 0.5 ]T m y radio r = 0.1 m.
Solución
El programa que se presenta en el
cuadro 5.29 permite desplegar en forma simbólica los parámetros DH, cinemática directa, jacobiano del robot
cartesiano y matriz de transformación
homogénea H03 . De la lı́nea 19 a la 25
se obtienen las coordenadas cartesianas de la figura rosa polar, dichas coordenadas son trazadas por el extremo
final del robot como se indica en la figura 5.26.
Figura 5.26 Rosa polar.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
272
Capı́tulo 5: Cinemática directa cartesiana
Código Fuente 5.29
cap5 cartesiano.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 5 Cinemática directa cartesiana.
cap5 cartesiano.m
1
clc;
2
clear all;
close all;
format short
syms d1 d2 d3 alpha1 alpha2 alpha3 real
3
4
5
6
7
8
9
10
11
12
13
H30=H cartesiano();
disp(’Transformación homogénea del robot cartesiano’); disp(H30);
[R30, cinemat cartesiano,cero, c]=H DH(H30);
disp(’Matriz de rotación’); disp(R30);
disp(’cinemática directa’);
disp(cinemat cartesiano);
[x0, y0,z0]=cinematica cartesiano(d3,d2,d1);
15
disp([x0; y0;z0])
jac cartesiano=jacobian([x0;y0;z0], [d3;d2;d1])
det cartesiano=simplify(vpa(det(jac cartesiano),3))
16
%ejemplo numérico
17
t=0:0.001:100;
18
%ecuación de la flor con 8 pétalos centro en xc,yc y radio r
xc=0.3; yc=-0.3 ;
d1=[]; d2=[]; d3=[]; r=0.2;
14
19
20
21
22
23
24
25
26
27
28
[n m]=size(t);
r=0.1*cos(pi*t);
x=xc+r.*sin(t);
y=yc+r.*cos(t);
z(1:m)=0.5 ;
[d3, d2, d1]=cinv cartesiano(x,y,z);
[x0, y0,z0]=cinematica cartesiano(d3,d2,d1);
plot3(x0,y0,z0)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.7
Resumen
273
5.7 Resumen
C
inemática directa cartesiana de robots manipuladores permite una descripción entre las coordenadas cartesianas del extremo final del robot manipulador
y las coordenadas articulares. La convención Denavit-Hartenberg es una herramienta de la ingenierı́a de suma utilidad para la obtención del modelo de cinemática
directa de robots manipuladores la cual establece que la matriz de transformación
homogénea de la i-ésima articulación se compone de 4 parámetros: li es la longitud
de los eslabones, αi el ángulo que hay entre el eje zi−1 y zi , di es el desplazamiento
lineal sobre el eje zi−1 ; cuando la i-ésima articulación no es prismática o lineal, entonces di representa el ancho del servomotor y espesor de la placa metálica, en este
caso se especifica por βi . Para articulaciones rotacionales alrededor del eje zi−1 se
denota por qi .
De acuerdo al análisis de cinemática directa cartesiana para cada configuración de
robots industriales (antropomórfica, SCARA, esférico, cilı́ndrico y cartesiano), se han
desarrollado un conjunto de librerı́as de cinemática directa de robots manipuladores
para MATLAB (toolbox) que permiten obtener los parámetros Denavit-Hartenberg,
la matriz homogénea, cinemática directa, matriz jacobiano y su determinante en
función de los parámetros geométricos como longitudes li y también tomando en
cuenta el ancho de la i-ésima articulación y espesor de la placa metálica (βi ) que se
emplea para acoplar mecánicamente la siguiente articulación del robot.
Este conjunto de librerı́as tienen la ventaja de trabajar en forma simbólica, ya
que despliegan no sólo las ecuaciones de cinemática, también permiten realizar
aplicaciones numéricas como manejo de coordenadas con valores especı́ficos o
trayectorias de curvas para que el extremo final del robot pueda trazarlas.
La programación indistinta en lenguaje MATLAB de variables simbólicas y
numéricas resulta de gran utilidad sobre todo en el análisis cinemático, planeación
de trayectorias, guiado del robot en su espacio de trabajo y detección de puntos
singulares en la cinemática diferencial o en procesos donde involucra la matriz inversa
del jacobiano del robot.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
274
Capı́tulo 5: Cinemática directa cartesiana
En el sitio WEB del libro se encuentran disponibles todos los programas fuentes en
MATLAB de las funciones de cinemática cartesiana, matrices de transformación
homogénea, cinemática inversa, jacobianos y determinantes, ası́ como diversas
aplicaciones de las configuraciones analizadas de robots manipuladores.
Para una rápida identificación de las librerı́as desarrolladas, a continuación se resume
la sintaxis del conjunto de funciones para cinemática directa cartesiana con pase de
parámetros de entrada y datos que retorna de cada las configuraciones de robots
manipuladores analizados.
La tabla 5.8 contiene la descripción de funciones de cinemática para la configuración
antropomórfica considerando los casos de estudio del péndulo robot, robot planar
vertical de 2 gdl y robot con movimiento tridimensional en su espacio de trabajo (3
gdl).
Tabla 5.8 Configuración antropomórfico
Función
Sintaxis
H01 =H pendulo()
[x0 , y0 , z0 ]=cinematica pendulo(β1, l1 , q1 )
Péndulo
q1 =cinv pendulo(x0, y0 )
H02 =H r2gdl()
Robot antropomórfico vertical planar de 2 gdl
[x0 , y0 , z0 ]=cinematica r2gdl(β1, l1 , q1 , β2 , l2, q2 )
J(q1 , q2 )=jacobiano r2gdl(β1 , l1, q1 , β2 , l2, q2 )
det[J(q1 , q2 )]=det jac r2gdl(β1 , l1 , q1 , β2, l2 , q2 )
[q1 , q2 ]=cinv r2gdl(l1, l2 , x0 , y0 )
H03 =H r3gdl()
Robot antropomórfico de 3
gdl
[x0 , y0 , z0 ]=cinematica r3gdl(β1, l1 , q1 , β2 , l2 , q2 , β3 , l3 , q3 )
J(q1 , q2 , q3 )=jacobiano r3gdl(β1, l1 , q1 , β2 , l2 , q2 , q3 )
det[J(q1, q2 , q3 )]=detjac r3gdl(β1, l1 , q1 , β2 , l2 , q2 , q3 )
[q1 , q2 , q3 ]=cinv r3gdl(β2 , β3, l2 , l3, x0 , y0 , z0 )
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
5.7
275
Resumen
En la tabla 5.9 se resume las funciones de transformación homogénea H03 , cinemática
directa, cinemática inversa, matriz jacobiano y su determinante del brazo robot en
configuración SCARA.
Tabla 5.9 Configuración SCARA
Función
Sintaxis
Matriz de transformación
homogénea
[x0 , y0 , z0 ]=cinematica SCARA(β1 , β2, l1 , l2, l3 , q1 , q2 , d3 )
Cinemática directa
J(q1 , q2 , d3)=jacobiano SCARA(β1, l1 , q1 , β2 , l2, q2 )
Jacobiano
Determinante
H03 =H SCARA()
del
jaco-
biano
det[J(q1 , q2 , d3 )]=detjac SCARA(β1 , l1, q1 , β2 , l2 , q2 )
[d3 , q2 , q1 ]=cinv SCARA(β1 , β2, l1 , l2, l3 , x0 , y0 , z0 )
Cinemática inversa
El conjunto de librerı́as para la configuración esférica se presenta en la tabla 5.10.
Tabla 5.10 Configuración esférica
Función
Sintaxis
Matriz de transformación
homogénea
[x0 , y0 , z0 ]=cinematica esferico(β1, β2 , l1, q1 , q2 , d3)
Cinemática directa
J(q1 , q2 , d3)=jacobiano esferico(β1, l1 , q1 , β2, l2 , q2 )
Jacobiano
Determinante
H03 = H esferico()
del
jaco-
det[J(q1 , q2 , d3 )]=detjac esferico(β1, l1 , q1 , β2 , l2, q2 )
biano
Cinemática inversa
[q1, q2, d3]=cinv esferico(β1, β2 , l1, x0 , y0 , z0 )
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
276
Capı́tulo 5: Cinemática directa cartesiana
La tabla 5.11 contiene las librerı́as del brazo robot en configuración cilı́ndrica.
Tabla 5.11 Configuración cilı́ndrica
Función
Sintaxis
Matriz de transformación
homogénea
[x0 , y0 , z0 ]=cinematica cilindrico(β1, l1 , q1 , d2, d3 )
Cinemática directa
J(q1 , q2 , d3 )=jacobiano cilindrico(β1, l1, q1 , β2, l2 , q2 )
Jacobiano
Determinante
H03 = H cilindrico()
del
jaco-
biano
det[J(q1 , q2 , d3 )]=detjac cilindrico(β1, l1 , q1 , β2 , l2, q2 )
[q1 , d2, d3 ]=cinv cilindrico(β1, l1, x0 , y0 , z0 )
Cinemática inversa
Para el caso del brazo robot cartesiano, las librerı́as que corresponde a esta
configuración se encuentran en la tabla 5.12. La cinemática directa resulta muy
simple debido a que su cinemática es lineal: [ x0 y0 z0 ]T = [ d1 d2 d3 ]T , por
lo que el jacobiano es la matriz identidad y su determinante es unitario, es decir:
det[J(d1 , d2 , d3 )] = 1. La cinemática inversa también es lineal [ d1 d2 d3 ]T =
[ x0 y0 z0 ]T .
Tabla 5.12 Configuración cartesiana
Función
Sintaxis
Matriz de transformación
homogénea
H03 = H cartesiano()
Cinemática directa
[x0 , y0 , z0 ]=cinematica cartesiano(d3, d2 , d1)
Cinemática inversa
[d3 , d2 , d1]=cinv cartesiano(x0 , y0 , z0 )
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
277
Parte II: Referencias selectas
Parte II: Referencias selectas
E
xiste una extensa literatura sobre la cinemática directa de robots manipuladores. Particularmente se recomienda al lector la siguiente bibliografı́a:
J. Denavit &
R.S. Hartenberg.
“A kinematic notation for lower-pair mechanisms based on matrices”.
Trans ASME J. Appl. Mech, 23:215-221,1955
R.S. Hartenberg & J. Denavit. “Kinematic synthesis of linkages”.
McGraw-Hill, New York, NY, 1964.
R.M. Murray,
Z.
Li
and S.S.
Sastry.
“A mathematical introduction to robotic manipulation”.
CRC
Press (1994).
Lorenzo Sciavicco & Bruno Siciliano.
“Modeling and control for robot manipulators”.
McGraw
Hill
International Editions. 1996.
Mark W.
Spong
and
Seth
Hutchinson,
M.
Vidyasagar.
“Robot modeling and control”. John Wiley and Sons, Inc. 2006.
John J. Craig. “Robótica”. Tercera edición. Pearson Prentice-Hall.
2006.
Fernando Reyes.
“Robótica: control de robots manipuladores ”.
Editorial Alfaomega, 2011.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
278
Capı́tulo 5: Cinemática directa cartesiana
Parte II: Problemas propuestos
E
n esta sección se presenta una serie de ejercicios con la finalidad de que el lector
mejore sus conocimientos sobre métodos numéricos.
Capı́tulo 3 Preliminares matemáticos
3.1 Considere los siguientes vectores:
⎡ ⎤
x0
⎢ ⎥
x = ⎣ y0 ⎦
z0
⎡
8
⎤
⎢
⎥
y = ⎣ 10.2 ⎦
3.12
Realizar un programa en MATLAB para obtener:
(a) La norma euclidiana de cada vector.
(b) El producto punto: x · y.
(c) Calcular el ángulo θ que existe entre los vectores.
Realice la programación considerando variables simbólicas y aspectos
numéricos.
3.2 Considere las siguientes coordenadas en
⎡ ⎤
x0
⎢ ⎥
⎣ y0 ⎦ =
z0
el sistema de referencia Σ0 (x0 , y0 , z0 )
⎡
⎤
8
⎢
⎥
⎣ 10.2 ⎦
3.12
Realizar un programa en MATLAB que realice las siguientes rotaciones:
(a) Alrededor del eje z0 por un ángulo
π
2.
(b) Alrededor del eje x0 por un ángulo − π2 .
(c) Alrededor del eje y0 por un ángulo 43 π
Analice y discuta sus resultados.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
279
Parte II: Problemas propuestos
3.3 Sea Ry ( θ ) ∈ SO(3) una matriz ortogonal donde θ ∈ IR es el ángulo de
rotación alrededor del eje y. Implementar el código MATLAB correspondiente
para comprobar las siguientes propiedades (usar programación simbólica y
numérica):
(a) Ry ( 0 ) = I, I ∈ IR3×3 es la matriz identidad.
(b) Ry ( θ )Ry ( β ) = Ry ( β )Ry ( θ ) = Ry ( θ + β ) = Ry ( β + θ ).
(c) R−1
y (θ) = Ry ( −θ )
(d) RTy ( θ ) = R−1
y (θ).
(e) Ry ( θ )RTy ( θ ) = RTy ( θ )Ry ( θ ) = I.
(f) det[Ry ( θ )] = 1 si el sistema de referencia Σ0 (x0 , y0 , z0 ) es seleccionado
por la regla de la mano derecha, en otro caso det[Ry ( θ )] = −1
3.4 Describir el significado de una matriz de rotación.
3.5 Describir el significado de una matriz homogénea.
3.6 ¿Cuáles son las principales propiedades de una matriz homogénea?
Capı́tulo 4 Cinemática
4.1 ¿Cómo define cinemática?
4.2 ¿Qué es cinemática directa?
4.3 ¿Cuáles son las caracterı́sticas principales de la cinemática directa?
4.4 ¿Qué es cinemática inversa? Explicar claramente su función principal.
4.5 Explicar el concepto de cinemática diferencial.
4.6 ¿Qué es el jacobiano del robot?
4.7 ¿Cuál es la diferencia que existe entre el jacobiano analı́tico con el geométrico?
4.8 Explicar el concepto de posición y rotación de robots manipuladores.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
280
Capı́tulo 5: Cinemática directa cartesiana
4.9 Explicar el significado de una singularidad.
4.10 Explicar el concepto de posición de casa de un robot manipulador.
4.11 ¿Cuál es la diferencia entre rotación y orientación?
4.12 ¿Por qué la expresión analı́tica de la cinemática directa depende de la posición
de casa?
4.13 ¿Cuáles son los tipos de robots industriales que existen?
4.14 Explicar cinco aplicaciones para cada una de las configuraciones: antropomórfica, SCARA, esférica, cilı́ndrica y cartesiana.
4.15 ¿Qué robot representa mayores ventajas?
4.16 Desde el punto de vista mecánico, ¿qué tipo de robot presenta mayor
complejidad?
4.17 Explicar las ventajas que presenta la convención Denavit-Hartenberg.
4.18 Describir los parámetros de análisis que presenta la convención DenavitHartenberg.
4.19 De manera general, se requieren seis coordenadas para posicionar y orientar
el extremo final del robot en el espacio tridimensional: ¿Por qué la convención
Denavit-Hartenberg sólo utiliza cuatro parámetros?
4.20 ¿Cuales son las principales hipótesis que debe satisfacer la convención DenavitHartenberg?
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Parte II: Problemas propuestos
281
Capı́tulo 5 Cinemática directa cartesiana
5.1 Considere un sistema mecatrónico denominado centrı́fuga como el que se
muestra en en la figura 5.27.
Figura 5.27 Centrı́fuga.
Obtener:
(a) La tabla de parámetros DH.
(b) La matriz homogénea.
(c) Cinemática directa.
(d) Cinemática inversa.
Asimismo, realizar un programa que despliegue en forma simbólica los
anteriores incisos.
5.2 Considere el robot manipulador en configuración cartesiana. Suponga que se
selecciona el sistema de referencia fijo Σ0 (x0 , y0 , z0 ) de tal forma que el eje z0
determina el desplazamiento de la variable d1 como se muestra en la figura
5.28.
Llevar a cabo los pasos necesarios en los respectivos sistemas de referencia
Σ0 (x0 , y0 , z0 ), Σ1 (x1 , y1 , z1 ), Σ2 (x2 , y2 , z2 ) para obtener el modelo de cinemática directa. ¿En este caso se requiere un sistema auxiliar Σ2a(x2a, y2a, z2a)?
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
282
Capı́tulo 5: Cinemática directa cartesiana
¿Este procedimiento presenta alguna ventaja con el desarrollado en la sección
5.6 del robot cartesiano?
Figura 5.28 Robot cartesiano.
Del procedimiento obtenido, deducir el jacobiano del robot.
5.3 Considere un robot industrial en la configuración antropomórfica; desarrolle
un programa en MATLAB para que el extremo final del robot trace una rosa
polar de 12 pétalos con centro en [ 0.3, −0.3, 0.5 ]m.
5.4 Desarrollar un programa en MATLAB para que el extremo final de un
brazo robot en la configuración SCARA trace la palabra ROBOT en
estilo caligráfico. Dicha palabra deberá iniciar en las siguientes coordenadas:
[ x0 , y0 , z0 ]T = [ 0.3, 0.5, 0.2] m. La longitud y altura de la palabra es propuesta
por el usuario.
5.5 Desarrollar un programa en MATLAB para que el extremo final de un brazo
robot en la configuración cilı́ndrica trace la palabra HOLA en estilo italizada.
Dicho trazo deberá empezar en las siguientes coordenadas: [ x0 , y0 , z0 ]T =
[ 0.4, 0.7, 0.8 ] m.
5.6 Desarrollar un programa en MATLAB para que el extremo final de un
brazo robot en la configuración esférica trace la palabra HOLA con tipo de
letra romana. Dicha palabra deberá comenzar en las siguientes coordenadas:
[ x0 , y0 , z0 ]T = [ 0.35, 0.6, 0.2] m.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Parte III
Dinámica
La Dinámica como área de las ciencias exactas permite explicar todos los fenómenos
fı́sicos de un sistema mecatrónico o robot manipulador y llevar a cabo procesos de
simulación. Bajo esta temática se ubican los objetivos de la Parte III compuesta
por dos capı́tulos: Capı́tulo 6 Dinámica, presenta la técnica de simulación para
sistemas mecatrónicos y robots manipuladores en base a una ecuación diferencial
ordinaria de primer orden descrita por variables de estado; modelos dinámicos de
varios sistemas mecatrónicos y robots manipuladores se desarrollan en código fuente
para MATLAB. La técnica de mı́nimos cuadrados para obtener el valor numérico
de los parámetros del modelo dinámico se detalla en el Capı́tulo 7 Identificación
paramétrica.
Capı́tulo 6 Dinámica
presenta la forma de simular modelos
dinámicos descritos en variables de estado. Generalmente la mayorı́a de los
sistemas fı́sicos tienen su modelo dinámico con ecuaciones diferenciales de
orden mayor o igual a dos en variables fı́sicas o generalizadas. La técnica de
simulación consiste en convertir el modelo dinámico a una ecuación diferencial
de primer orden mediante un adecuado cambio de variables de estado. Se
desarrollan librerı́as en lenguaje MATLAB para simular la dinámica de
sistemas mecatrónicos y robots manipuladores.
Capı́tulo 7 Identificación paramétrica
presenta
cincos esquemas de regresión lineal para realizar identificación paramétrica
de sistemas mecatrónicos y robots manipuladores. Los esquemas de regresión
presentados son los modelos: dinámico, dinámico filtrado, energı́a, potencia y
potencia filtrada. La técnica de mı́nimos cuadrados recursivo es implementada
como librerı́a para MATLAB cubriendo los casos: escalar y multivariable de
sistemas dinámicos.
La Parte III también incluye:
Referencias selectas
Problemas propuestos
Dinámica
Capı́tulo
6
6.1 Introducción
6.2 Estructura matemática para simulación
6.3 Sistema masa-resorte-amortiguador
6.4 Sistema lineal escalar
6.5 Centrı́fuga
6.6 Péndulo
6.7 Robot de 2 gdl
6.8 Robot de 3 gdl
6.9 Robot cartesiano de 3 gdl
6.10 Resumen
Objetivos
Presentar la técnica de simulación de modelado de robots manipuladores
y sistemas mecatrónicos a través de la estructura de ecuación diferencial
ordinaria en variables fase.
Objetivos particulares:
Estructura matemática fundamental de simulación.
Sistema masa resorte amortiguador.
Centrı́fuga.
Robot antropomórfico: péndulo, robot de 2 y 3 gdl.
Robot cartesiano de 3 gdl.
Aplicaciones en control de posición.
6.1
Introducción
287
6.1 Introducción
R
obots manipuladores son sistemas mecánicos muy complejos cuya descripción
analı́tica requiere de ecuaciones diferenciales. La naturaleza no lineal,
multivariable y fuerte acoplamiento en su comportamiento dinámico ofrece un amplio
espectro en la formulación de problemas de control teóricos y prácticos. El modelo
dinámico del robot manipulador permite explicar todos los fenómenos fı́sicos que
se encuentran en su estructura mecánica, tales como efectos inerciales, fuerzas
centrı́petas y de Coriolis, par gravitacional y fricción, los cuales son fenómenos fı́sicos
propios de la naturaleza dinámica del robot. Hay varios métodos de modelado de la
fı́sica como el de Newton o el de Hamilton. Sin embargo, la mejor opción como
metodologı́a de modelado la representa las ecuaciones de movimiento de EulerLagrange debido a las propiedades matemáticas que se deducen de manera natural,
ya que facilitan el análisis y diseño de algoritmos de control.
El modelo dinámico de robots manipuladores es fundamental en aplicaciones de
simulación, diseño y construcción del sistema mecánico, ası́ como en análisis y diseño
de algoritmos de control. En el área de simulación el modelo dinámico es estratégico
debido a que puede reproducir todos los fenómenos fı́sicos del robot sin la necesidad
de usar un robot real (realidad virtual), y esta caracterı́stica resulta clave para
evaluar algoritmos de control, técnicas de planeación de trayectorias, programación
de aplicaciones industriales, etc. La simulación es el empleo del modelo dinámico
para analizar y describir su comportamiento dinámico en una computadora o sistema
mı́nimo digital y de ahı́ inferir aplicaciones. Es importante no confundir simulación
con animación, ya que son procesos diferentes; la animación no requiere incorporar
efectos dinámicos en el movimiento del robot, generalmente son ecuaciones estáticas
como la cinemática directa.
La construcción de un robot se fundamenta en el modelo dinámico; los esquemas y
planos de ingenierı́a de los eslabones se deducen directamente del modelo dinámico
y se trasladan a un programa CAD para su maquinado y construcción mecánica.
De esta forma, un robot industrial puede ser estudiado y se pueden hacer las
adecuaciones pertinentes antes de llegar a la etapa de construcción fı́sica.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
288
Capı́tulo 6: Dinámica
6.2 Estructura matemática para simulación
L
a gran mayorı́a de los sistemas mecánicos contienen como parte del modelo
dinámico ecuaciones diferenciales de orden mayor o igual a 2. Sin embargo,
para propósitos de simulación es recomendable transformar ese modelo a un sistema
dinámico compuesto por una ecuación diferencial ordinaria de primer orden debido
a que este tipo de ecuaciones es conocida, está ampliamente documentada y es fácil
de programar.
La estructura de una ecuación diferencial ordinaria (ode) de primer orden tiene la
siguiente forma:
ẋ = f (x)
(6.1)
donde x ∈ IRn se conoce como variable de estado fase, la cual proporciona
información interna sobre la dinámica del sistema, es una función continua en el
tiempo x = x(t), n ∈ N es un número natural que indica la dimensión euclidiana,
la derivada temporal de la variable de estado ẋ ∈ IRn existe y también es continua
en el tiempo ẋ = ẋ(t). La notación ẋ significa ẋ = dxdt(t) . La función f ∈ IRn es un
mapa vectorial continua en la variable de estado x(t).
La estructura matemática ẋ = f (x) es para ambos sistemas: lineales y no lineales.
La caracterı́stica de ser lineal o no lineal es referente a la variable de estado.
El modelo (6.1) se conoce como sistema dinámico autónomo, debido a que la
variable tiempo t se encuentra presente de manera implı́cita, es decir no aparece
como parte de la estructura matemática, se encuentra incluida como parte de las
propiedades de la variable de estado x(t). La gran mayorı́a de los sistemas mecánicos
corresponden a esta forma, sobre todo considerando que no hay variación temporal
de sus parámetros, los cuales se consideran constantes al menos en un tiempo
suficientemente grande.
De otra manera se tendrı́a como parte de la ecuación (6.1) dependencia explı́cita
del tiempo, es decir ẋ = f (x, t); a este tipo de sistemas se les conoce como sistema
dinámicos no autónomos, los cuales no non objetos de estudio en la presente obra.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.2
289
Estructura matemática para simulación
♣ Ejemplo 6.1
Convertir a la forma ẋ = f (x) el siguiente sistema lineal expresado por la función
de transferencia:
y
u
=
2
s2 + 3s + 1
donde y ∈ IR es la respuesta del sistema, u ∈ IR es la entrada.
Solución
El concepto de función de transferencia es exclusivo para sistemas lineales, se define
como la relación de la salida y la entrada cuando las condiciones iniciales del sistema
son cero.
Es necesario aclarar que el término s que aparece en una función de transferencia
significa frecuencia y es un número imaginario formado como: s = jw, siendo w una
variable que indica frecuencia, cuyas unidades son rad/seg. Cuando transformamos
la función de transferencia a una ecuación diferencial, entonces s adquiere otra
d
interpretación, en este caso funciona como un operador s = dt
. Bajo este escenario,
d d
d2
2
debe interpretarse que s = dt dt = dt2 (teniendo en mente condiciones iniciales
cero).
Por lo tanto, el procedimiento para convertir la función de transferencia del sistema
a una ecuación diferencial ordinaria de primer orden es el siguiente:
y
u
2
⇒ s2 y + 3sy + y = 2u
+ 3s + 1
⇒ ÿ + 3ẏ + y = 2u
=
s2
donde se ha empleado s2 y = ÿ, sy = ẏ. La notación ẏ =
dy(t)
dt ,
ÿ =
d2 y(t)
dt2
Ahora, se requiere un cambio de variable de estado, sea x1 = y, x2 = ẋ1 ,
ẋ2 = −3x2 − x1 + 2u entonces:
ÿ + 3ẏ + y = 2u ⇒
ẋ2 +3 x2 + x1 = 2u
ÿ
ẏ
y
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
290
Capı́tulo 6: Dinámica
d x1
dt x
2 ẋ
=
0
1
−1
−3
x1
x
2
f ( x)
+
0
2
u
donde x = [ x1 , x2 ]T .
Cuando la ecuación diferencial original se encuentra en la forma de variables
fase ẋ = f(x), entonces el sistema dinámico (convertido) ya tiene la estructura
matemática adecuada para realizar simulación usando la función ode45(· · ·).
♣ Ejemplo 6.2
Convertir a la forma ẋ = f(x) el siguiente sistema no lineal:
α2 ÿ + α1 sen(ẏ) + α0 cos(y) = βu
donde y ∈ IR es la respuesta del sistema, u ∈ IR es la entrada, α2 , α1 , α0 , β ∈ + .
Solución
La función de transferencia es exclusiva de sistemas lineales, para un sistema no
lineal no existe dicho concepto.
La conversión a la forma de ecuación diferencial ordinaria de primer orden en
variables fase se realiza de la siguiente forma. Sea x1 = y, x2 = ẋ1 , x2 =
(−α1 sen(x2 )−α0 cos(x1 )+βu)/α2 . Por lo tanto, la estructura matemática solicitada
es:
x2
d x1
=
1
dt x2
[ βu − α1 sen(x2 ) − α0 cos(x1 ) ]
α0
ẋ
f ( x)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.3
291
Sistema masa-resorte-amortiguador
6.3 Sistema masa-resorte-amortiguador
U
no de los sistema mecánicos tı́picos que ha sido estudiado ampliamente
en cursos de control automático de la carreras de ingenierı́a mecatrónica y
electrónica es el sistema masa resorte amortiguador. La importancia de este sistema
radica en comprender su comportamiento dinámico para entender el funcionamiento
cualitativo de otros sistemas, por ejemplo: circuitos eléctricos (resistencia, capacitor,
inductancia), esquemas de control (algoritmo proporcional derivativo de robots
manipuladores).
Considere un sistema dinámico como el que se muestra en la figura 6.1, formado
por una masa m que se encuentra unida a un resorte de rigidez k y constante
de amortiguamiento b debido a la viscosidad del medio ambiente. La entrada
está especificada por una fuerza f y el desplazamiento de la masa por x.
Figura 6.1 Sistema masa resorte amortiguador.
El modelo dinámico que describe al sistema masa resorte amortiguador se encuentra
dado por:
f
Fuerza externa
=
mẍ
Fuerza inercial
+
bẋ
Fricción viscosa
+
kx
Ley de Hooke
La función de transferencia del sistema masa resorte amortiguador está dada por:
x
1
=
(6.2)
2
f
ms + bs + k
la ecuación caracterı́stica de los polos del sistema está dada por
√
−b ± b2 − 4mk
s =
(6.3)
2k
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
292
Capı́tulo 6: Dinámica
El sistema masa resorte amortiguador oscilará cuando se cumpla (b2 − 4mk) < 0, y
será amortiguado si (b2 − 4mk) > 0.
La conversión de la ecuación (6.2) a una ecuación diferencial ordinaria de primer
orden en variables fase ẋ = [ x, ẋ ]T se realiza de la siguiente forma:
ẋ
d x
(6.4)
=
dt ẋ
m−1 [ f − bẋ − kx ]
ẋ
f ( x)
♣ Ejemplo 6.3
Considere el modelo dinámico del sistema masa resorte amortiguador (6.4)
utilizando los valores numéricos de los parámetros del sistema de la tabla 6.1.
Realizar un programa en MATLAB para graficar el desplazamiento lineal x y la
velocidad de la masa cuando se le aplica una fuerza constante f = 50N durante 5
segundos y después de este tiempo desaparece la fuerza aplicada.
Tabla 6.1 Parámetros del sistema masa resorte amortiguador
Masa
Fricción viscosa
m=5 kg
b =0.16 kg/seg
Rigidez
k =0.6 kg/seg2
Solución
El programa en código MATLAB que contiene el modelo dinámico del sistema masa
resorte amortiguador (6.4) se describe en el cuadro 6.2. En este programa la variable
x mra representa el desplazamiento lineal que tiene de la masa al aplicarse una
fuerza constante de 5N durante 5 segundos. Por medio del programa 6.1 se realiza
la simulación del sistema.
En la figura 6.2 (modo oscilatorio) se muestra el desplazamiento lineal x mra
y la velocidad de movimiento xp mra que tiene la masa. Por los valores que
presentan en la tabla 6.1 el sistema masa resorte amortiguador satisface la condición
(b2 − 4mk) < 0 de la ecuación (6.3) que corresponde a un oscilador, por eso cuando
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.3
Sistema masa-resorte-amortiguador
293
desaparece la fuerza constante después de 5 segundos el sistema se queda oscilando
permanentemente (el tiempo de simulación es de 100 segundos).
En realidad el sistema masa resorte amortiguador cuando se encuentra en la
configuración de oscilador debido a los valores numéricos de sus parámetros, el
sistema empezará a oscilar con una condición diferente a cero, independientemente
de la magnitud de la fuerza aplicada.
Ahora, supóngase que los valores de los parámetros son: m=5 kg, la constante de
rigidez del resorte k = 2 kg/seg2 y el coeficiente de fricción viscosa b = 4 Kg/seg; con
estos valores se configura el sistema masa resorte amortiguador en modo amortiguado
de tal forma que en la ecuación (6.3) satisface (b2 − 4mk) > 0, es decir el factor de
amortiguamiento es adecuado para evitar oscilaciones y grandes sobre impulsos en
la respuesta transitoria.
La figura 6.2 muestra la simulación en modo amortiguado. Únicamente, durante los
primeros 5 segundos se le aplica la fuerza de f =5 N. Después de este transitorio
la masa regresa a su posición inicial, restableciéndose la elongación del resorte y
desapareciendo el efecto de amortiguamiento. Obsérvese que cuando desaparece
la fuerza constante, la posición del sistema es atraı́da por el punto de equilibrio,
quedando en reposo.
Código Fuente 6.1
Simulador de smr.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa smr simu.m
Simulador de smr.m
1
clc; clear all; close all; format short
2
%parámetros de simulación
ti=0; h=0.0025; tf = 100; ts=ti:h:tf;
3
4
5
opciones=odeset(’RelTol’,1e-3,’InitialStep’, 2.5e-3, ’MaxStep’,2.5e-3);
[t,x]=ode45(’mra’,ts,[0; 0],opciones);
6
plot(t,x(:,1),t,x(:,2))
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
294
Capı́tulo 6: Dinámica
Código Fuente 6.2
Sistema masa resorte amortiguador
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa mra.m
%requiere del programa mra simu.m
Sistema masa resorte amortiguador
1
function xp =mra(t,x)
2
%vector de estados
3
4
%posición articular
x mra=x(1);
5
%velocidad articular
6
xp mra=x(2);
7
%parámetros del sistema masa resorte amortiguador
8
%masa
m=5;
9
10
%constante de rigidez del resorte
11
k=0.6;
12
13
%amortiguamiento: coeficiente de fricción viscosa
b=0.16;
14
%fuerza aplicada durante 5 segundos
15
18
if (t<5)
f=5;
else
f=0;
19
end
20
21
%aceleración del sistema masa resorte amortiguador
xpp mra=(f-b*xp mra-k*x mra)/m;
22
%vector de salida
23
xp=[ xp mra ; %velocidad articular
xpp mra] ; %aceleración articular
16
17
24
25
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.4
295
Sistema lineal escalar
Figura 6.2 Respuesta del sistema masa resorte amortiguador.
6.4 Sistema lineal escalar
S
istemas lineales se utilizan ampliamente como estimadores de velocidad,
filtrado en robots manipuladores y sistemas mecatrónicos. La estructura
matemática básica de un sistema lineal escalar de primer orden en variables fase
está dada por:
ẋ = −ax + bu
(6.5)
y = cx
(6.6)
donde a, b, c ∈ IR+ son los parámetros del sistema, x, ẋ ∈ IR son la variable de
estado y la derivada temporal de la variable de estado, respectivamente; la entrada
es u ∈ IR y la salida del sistema está dada por y ∈ IR.
La función de transferencia del sistema lineal (6.5)-(6.6) tiene la siguiente forma:
y
u
=
1
b 1
cb
=c
=c b1 a
s+a
a Ts + 1
as + 1
(6.7)
donde T = a1 , se conoce como la constante de tiempo. Para una constante de tiempo
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
296
Capı́tulo 6: Dinámica
pequeña la respuesta del sistema es rápida, de otra manera si la constante de tiempo
es grande, la respuesta del sistema es lenta.
Por otro lado, la función de transferencia representa un filtro pasa-bajas, donde a
significa la frecuencia de corte, también determina el ancho de banda del filtro y ab
es la ganancia (frecuencia cero).
6.4.1
6.4.1. Estimador de velocidad y filtrado
Entre las aplicaciones del sistema lineal (6.5)-(6.6) se encuentra como estimador de
velocidad y filtrado para robots manipuladores y sistemas mecatrónicos. Por ejemplo,
si qi representa la i-ésima posición articular de un robot, la manera de estimar la
i-ésima velocidad q̇i es por medio de la siguiente forma:
q̇i ≈ Ḟi = −λFi + λqi
(6.8)
donde λ es la frecuencia de corte del filtro de ganancia unitaria, Fi es i-ésimo estado
del filtro, representa la señal filtrada de la entrada (qi ), y Ḟi es la estimación de la
velocidad q̇i .
Para comprobar la afirmación que Fi representa la señal filtrada de qi , considere la
función de transferencia de (6.8):
Fi =
λ
qi
λ+s
observe que la señal de entrada qi es procesada por el filtro pasa bajas
(6.9)
λ
s+λ .
Además, la derivada temporal de la señal filtrada de la entrada qi aproxima a la
derivada temporal de q̇i (velocidad), es decir q̇i ≈ Ḟi ; este procedimiento es válido
para cualquier articulación del robot.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.4
297
Sistema lineal escalar
♣ Ejemplo 6.4
Escribir un programa en MATLAB para analizar la respuesta del sistema lineal
(6.5)-(6.6) para una entrada unitaria u = 1.
Solución
El programa que realiza la implementación del sistema lineal escalar de primer orden
(6.5-6.6) se encuentra en el cuadro 6.3. La señal de entrada u es una constante de
magnitud unitaria. El programa principal que realiza la simulación se encuentra
en el cuadro 6.4. El tiempo de simulación es de 5 segundos y la respuesta a la
entrada unitaria no contiene sobre impulsos en régimen transitorio tal y como se
describe en la figura 6.3. Dentro de las caracterı́sticas en la respuesta a un escalón o
entrada constante de un sistema lineal, el transitorio no presentará sobre impulsos
y de manera suave convergerá al valor de la entrada. En la primera constante de
tiempo T , la respuesta ha alcanzado el 63.2 % del valor de la magnitud de la entrada
u. Para este ejemplo la constante de tiempo es T = 13 = 0.3333 segundos, en la
segunda constante de tiempo 2T la respuesta del sistema ha alcanzado el 86.5 % del
valor final.
Código Fuente 6.3
Sistema lineal escalar
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa sle.m
Sistema lineal escalar
1
2
3
function xp =sle(t,x)
a=3;
b=3;
4
u=1;
xp=-a*x+b*u;
5
6
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
298
Capı́tulo 6: Dinámica
Para las constantes de tiempo 3T, 4T y 5T la respuesta tiene 95 %, 98.2 % y 99.3 %
del valor final, respectivamente. Para finalidades prácticas después de 5T , se puede
decir que el sistema ha entrado en estado estacionario.
Figura 6.3 Respuesta a un escalón del sistema lineal escalar.
Código Fuente 6.4
sle simu
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa sle simu.m
% este programa requiere del archivo: sle.m
sle simu
1
clc; clear all; close all;
2
format short
3
%tiempo de simulación (segundos)
ti=0; h=0.0025; tf = 5;
ts=ti:h:tf; %vector tiempo
4
5
6
7
opciones=odeset(’RelTol’,1e-3,’InitialStep’,2.5e-3,’MaxStep’,2.5e-3);
[t,x]=ode45(’sle’,ts,0,opciones);
8
plot(t,x)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.4
299
Sistema lineal escalar
♣ Ejemplo 6.5
Escribir un programa en MATLAB para que un sistema lineal escalar realice el
filtrado de una señal contaminada con ruido u = 5 sen(t) + ruido(t).
Solución
Considere una señal u(t) con una envolvente de ruido de la siguiente forma: u =
5 sen(t) + random(’Normal’,t,t), se empleará el sistema lineal ẋ = −3x + 3u(t) para
obtener la señal filtrada de la entrada u(t). El programa que implementa la función
filtro a través de un sistema lineal se encuentra en el cuadro 6.5. Como generador
de ruido se emplea la función de datos aleatorios random utilizando distribución
’Normal’ de datos, la cual se añade a la función senoidal 5 sen(t).
El programa principal que realiza la simulación se encuentra en el cuadro 6.6, en
la lı́nea 7 se resuelve numéricamente el filtro, en la lı́nea 8 se reproduce la señal
de entrada contaminada, y se compara con la señal libre de ruido contenida en la
variable x(t) (lı́neas 8 y 9). La figura 6.4 muestra la comparación entre la señal
original u con ruido y filtrada (figura izquierda).
Código Fuente 6.5
Aplicación filtrado
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa filtro.m
Aplicación filtrado
1
2
3
function xp=filtro(t,x)
u=5*sin(t)+random(’Normal’,t,t);
a=3;
4
b=3;
xp=-a*x+b*u;
5
6
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
300
Capı́tulo 6: Dinámica
En la gráfica derecha de la figura 6.4 se presentan los detalles de la señal filtrada;
observe que esta señal está restaurada lo mejor posible después de haber sido
contaminada con ruido. El filtro tiene un parámetro de sintonı́a llamado frecuencia
de corte, que en este caso es a = 3rad/seg. Este parámetro puede adquirir otro valor
para mejorar la calidad de filtrado de la señal de entrada u.
Figura 6.4 Filtrado de señales.
Código Fuente 6.6
sle simu
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa sle simu.m
% este programa requiere del archivo: filtro.m
sle simu
1
2
3
4
5
6
7
8
9
10
clc; clear all; close all;
format short
%tiempo de simulación (segundos)
ti=0; h=0.0025; tf = 5;
ts=ti:h:tf; %vector tiempo
opciones=odeset(’RelTol’,1e-3,’InitialStep’,2.5e-3,’MaxStep’,2.5e-3);
[t,x]=ode45(’filtro’,ts,0,opciones);
u=5*sin(t)+random(’Normal’,t,t);
subplot(2,2,1); plot(t,u)
subplot(2,2,2); plot(t,x)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.5
301
Centrı́fuga
6.5 Centrı́fuga
L
a centrı́fuga es un sistema mecatrónico que se describe en la figura 6.5, el cual
consta de un servomotor que gira alrededor del eje z0 , el ángulo de rotación
está descrito por la variable q1 . La distancia del origen del sistema de referencia
fijo Σ0 (x0 , y0 , z0 ) al extremo final está representado por l1 + l2 sen(δ), donde l1 es
la longitud del servomotor más la longitud del rotor, l2 es la longitud de la barra
metálica que se encuentra acoplada al rotor, y δ es un ángulo constante que significa
la inclinación de la barra l2 con respecto a la horizontal, lc2 representa el centro
de masa y el momento de inercia I del servomotor de la centrı́fuga. El movimiento
rotatorio de la centrı́fuga describe un cı́rculo sobre el plano x0 − y0 . La acción de la
gravedad g se encuentra en dirección contraria al eje z0 .
Figura 6.5 Centrı́fuga.
El modelo dinámico de una centrı́fuga es una ecuación diferencial de segundo orden
expresada de la siguiente manera:
τ
2 sen(δ) + I
= [ mlc2
sm ] q̈ + bq̇ + fc signo(q̇) + fe [1 − |signo(q̇)|]
(6.10)
La ecuación (6.10) puede ser convertida a una ecuación diferencial ordinaria de
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
302
Capı́tulo 6: Dinámica
primer orden de la forma ẋ = f (x), a través de la siguiente expresión:
q̇1
d q1
(6.11)
=
−1
2 sen(δ) + I
dt q̇1
[ m1 lc2
[ τ1 − b1 q̇ − fc1 signo(q̇1) − fe1 [1 − |signo(q̇1 )|] ]
sm ]
ẋ
f ( x)
6.6.
♣ Ejemplo 6.6
Considere el modelo dinámico de la centrı́fuga expresado como una ecuación
diferencial de primer orden (6.11). Tomar en cuenta los valores numéricos de los
parámetros de la centrı́fuga que aparecen en la tabla 6.2. Realizar un programa
en MATLAB para que la centrı́fuga gire a una revolución por segundo en ambos
sentidos (positivo/negativo).
Tabla 6.2 Parámetros de la centrı́fuga
Masa
de
la
centrı́fuga
Fricción viscosa
m1 =5 kg
b1 =0.12 Nm-seg/rad
Centro de ma-
Longitud de la
sa de la barra
barra
lc2=0.01m
l2 =0.15m
Fricción
de
Coulomb
fc1 =0.11 Nm
Fricción estática
fe1 =0.09 Nm
Momento
de
Ángulo de in-
inercia
del
clinación de la
rotor
Ism =0.08 Nm-seg2 /rad
barra
δ=
45π
180
rad
Solución
El modelo numérico se obtiene combinando el modelo dinámico (6.11) con los valores
numéricos de los parámetros de la centrı́fuga contenidos en la tabla 6.2.
q̇1
d q1
(6.12)
=
1
dt q̇1
0.0804 [ τ1 − 0.12 q̇ − 0.11 signo(q̇1 ) − 0.09 [1 − |signo(q̇1 )|] ]
para lograr que el sistema mecatrónico oscile en ambos sentidos a una revolución
por segundo (360 grados/seg), se requiere que su movimiento sea generado por una
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.5
303
Centrı́fuga
energı́a tipo senoidal. Es decir, al servomotor se le aplica una energı́a de la forma
τ1 = 2 sen(t), para generar un movimiento cı́clico. Con este tipo de energı́a la
centrı́fuga funciona como una lavadora; cuando se requiera implementar la función
centrifugado, entonces el tipo de energı́a aplicada al servomotor es a través de un
par constante.
El programa centrifuga.m 6.7 contiene el modelo dinámico de la centrı́fuga
con los parámetros de la tabla 6.2. La ecuación programada corresponde a la
estructura de variables de estados de los modelos 6.11 o 6.12. El programa principal
centrifuga simu 6.8 realiza la solución numérica del modelo dinámico de la
centrı́fuga usando el método de integración numérica de Runge-Kutta de la función
ode45(· · ·).
Código Fuente 6.7
centrifuga
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa centrifuga.m
centrifuga
1
2
3
function xp = centrifuga( t,x)
m1=5; %masa de la centrı́fuga
lc2=0.01; % centro de masa de la barra inclinada
4
delta=45*pi/180; %ángulo de inclinación de la barra l2
I sm=0.08; % momento de inercia del rotor del servomotor
b1=0.12; fc1=0.11; fe1=0.09; %coeficientes de fricción
q1=x(1); % posición articular
5
6
7
8
qp1=x(2); % velocidad articular
tau=2*sin(t); % energı́a aplicada al servomotor
9
10
11
%aceleración rotacional de la centrı́fuga
qpp1=(tau1-b1*qp1-fc1*sign(qp1)-fe1*(1-abs(sign(qp1))))/
12
(m1*lc2*lc2*sin(delta)+I sm);
xp=[ qp1; qpp1 ]; % vector de salida
13
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
304
Capı́tulo 6: Dinámica
Código Fuente 6.8
centrifuga simu
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa centrifuga simu.m
% este programa requiere del archivo: centrifuga.m
centrifuga simu
1
2
3
4
5
6
7
clc; clear all; close all;
format short
%tiempo de simulación (segundos)
ti=0; h=0.0025; tf = 10;
ts=ti:h:tf; %vector tiempo
opciones=odeset(’RelTol’,1e-3,’InitialStep’,2.5e-3,’MaxStep’,2.5e-3);
8
%integración numérica del modelo dinámico de la centrı́fuga
[t,x]=ode45(’centrifuga’,ts,[0; 0],opciones);
9
%graficar variable articular de la posición q1 =x(:,1)
10
%la velocidad de movimiento está dada por q̇1 =x(:,2)
11
plot(t,x(:,1),t,x(:,2))
La figura 6.6 describe la forma de
desplazamiento rotacional que tiene la variable articular q1 cuando se aplica energı́a de la forma
τ1 = 2 sen(t), el movimiento de
la centrı́fuga es oscilatorio; este es
el principio básico de funcionamiento de las lavadoras. Con el tipo de
energı́a senoidal aplicada al servomotor, la centrı́fuga gira 360 grados por segundo alrededor del eje z0 ,
cambiando su sentido de giro cada
Figura 6.6 Movimiento de la centrı́fuga.
Alfaomega
periodo t =6.28 segundos.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.6
305
Péndulo
6.6 Péndulo
A
ctualmente el péndulo es una planta de estudio vigente debido a su dinámica
no lineal y sus aplicaciones prácticas, lo que lo convierte en un sistema clave
para propósitos de investigación cientı́fica, y en docencia representa una herramienta
pedagógica muy útil para la enseñanza de la dinámica de sistemas. La figura 6.7
muestra un péndulo robot el cual está formado por un servomotor y una barra
metálica de longitud l1 . El sistema de referencia se elige de tal manera que el eje z0
coincida con el eje de rotación del servomotor (perpendicular al plano de la hoja).
La acción de la gravedad g está dirigida en dirección del eje y0 negativo. El momento
de inercia se denota por Ism , el centro de masa se representa como lc1 y la masa del
péndulo por m1 .
Figura 6.7 Péndulo robot.
El modelo dinámico de un péndulo-robot está dado por:
(6.13)
τ
=
[ mlc2
+ I ] q̈ + mglc sen(q) + bq̇ + fc signo(q̇) + fe [1 − |signo(q̇)|]
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
306
Capı́tulo 6: Dinámica
♣ Ejemplo 6.7
Considere el modelo dinámico del péndulo (6.13) y realice un programa en lenguaje
MATLAB para describir los fenómenos fı́sicos del sistema. Para llevar a cabo la
simulación, considere los valores numéricos de los parámetros del péndulo que
presenta la tabla 6.3.
Solución
El péndulo robot prototipo de la figura 6.7 tiene un servomotor de transmisión
directa con un torque máximo de 15Nm (±15 Nm para el primer y tercer cuadrante,
respectivamente). La longitud de la barra l1 es de 0.45m, los valores numéricos de
los parámetros que forman el modelo dinámico como el momento de inercia, centro
de gravedad, coeficientes de fricción viscosa, Coulomb y estática están concentrados
en la tabla 6.3.
Tabla 6.3 Parámetros del péndulo robot
Masa
m1 =3.88 kg
Centro de masa
Fricción viscosa
b1 =0.16 Nm-seg/rad
Longitud
lc1=0.081 m
l1 =0.45 m
Fricción de Coulomb
fc1 =0.19 Nm
Mom. de inercia del rotor
Fricción estática
fe1 =0.20 Nm
Cap. del servomotor
Ir1 =0.16 Nm-seg2 /rad
±15Nm
La masa m1 del péndulo incluye la masa de la barra, rotor del servomotor y tornillos.
El centro de masa lc1 del péndulo se calcula de la siguiente manera:
lc1 =
lcrotor mrotor + lcbarra mbarra + lctornillos mtornillos
mrotor + mbarra + mtornillos
El centro de masa del rotor lcrotor es cero debido a las propiedades geométricas del
servomotor, y además el origen del sistema de referencia Σ0 (x0 , y0 , z0 ) se coloca
en el centro de masa lcrotor . Los tornillos sujetan la barra metálica de aluminio al
rotor del servomotor; estos tornillos se encuentran igualmente espaciados sobre una
circunferencia cuyo centro pasa el eje de rotación, el cual está alineado con el eje
z0 . Por lo tanto, el centro de masa de los tornillos lctornillos es cero. El momento de
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.6
307
Péndulo
inercia del péndulo I1 es igual a la contribución del momento de inercia del rotor del
2
servomotor Ir1 más el momento de inercia de la barra de aluminio m1 lc1
(teorema
de ejes paralelos de inercias).
Los programas 6.9 y 6.10 realizan la simulación del péndulo. La energı́a aplicada al
servomotor del péndulo es tipo senoidal, por ejemplo de la forma τ1 = sin(t), donde
t es la evolución del tiempo. Este tipo de torque produce un movimiento oscilatorio
en su espacio de trabajo sobre el plano x0 − y0− , entonces se genera desplazamiento
rotacional q1 alrededor del eje z0 y velocidad de movimiento articular q̇1 ; con estas
variables es posible obtener la dinámica del péndulo tales como efector inercial (I1 q̈),
fricción (b1 q̇1 + fc1 signo ( q̇1 )) y par gravitacional (m1 glc1 sen(q1 )).
La figura 6.8 muestra la respuesta
del péndulo robot a una señal de entrada τ 1 = sen(t); se emplea la cinemática directa del péndulo (y0 vs
x0 ) para graficar el desplazamiento
del extremo final del robot en su espacio de trabajo. En este caso, la posición de casa del péndulo se ubica
sobre el eje y0− . La posición articular en función del tiempo q1 (t) toma un perfil parecido a la señal de
entrada τ1 (t); la variable articular
q̇1 (t) representa la velocidad de movimiento, y adquiere magnitudes de
0.5 rad/seg (90 grados/seg) en amFigura 6.8 Respuesta del péndulo.
bas direcciones (positivo/negativo).
El fenómeno de fricción viscosa y de Coulomb se grafica en función de la velocidad
de movimiento (fricción vs velocidad q̇1 ); note que dicho fenómeno disipativo se
encuentra ubicado dentro del primer y tercer cuadrante. La magnitud que alcanza el
fenómeno de fricción es de 0.4 Nm, que representa el 2.6 % de la capacidad máxima
del servomotor. El fenómeno de fricción convierte la energı́a cinética en energı́a
térmica.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
308
Capı́tulo 6: Dinámica
Código Fuente 6.9
Péndulo
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa pendulo.m
% este programa requiere del archivo pendulo simu.m
Péndulo
1
function xp =pendulo(t,x)
2
3
%vector de estados
q1=x(1); %posición articular
4
qp1=x(2); %velocidad articular
5
%parámetros del péndulo
m1=3.88; %masa
lc1=0.081; %centro de masa
6
7
8
g=9.81; %constante de aceleración gravitacional
I r1=0.16; %momento de inercia del rotor
9
10
11
%momento de inercial total del péndulo
I1=m1*lc1*lc1+I r1;
12
%fricción del péndulo
13
15
b1=0.16; %coeficiente de fricción viscosa
fc1=0.19; %fricción de Coulomb
fe1=0.2; %fricción de estática
16
%par aplicado al servomotor del péndulo
17
tau1=sin(t);
18
%aceleración articular del péndulo
qpp1=(tau1-b1*qp1-fc1*sign(qp1)- fe1*(1-abs(sign(qp1)))-m1*g*lc1*sin(q1))
/gamma1;
14
19
20
%vector de salida
xp=[ qp1 ; %xp(1)=qp1=x(2) velocidad articular
qpp1] ; %xp(2)=qpp1 aceleración articular
21
22
23
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.6
309
Péndulo
Código Fuente 6.10
péndulo simu
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
péndulo simu
1
2
3
4
5
6
7
8
9
10
clear; close all;
clc;
format short g
x0=[0; 0]; %condición inicial
ti=0; h=0.0025; tf = 5; %tiempo de simulación
ts=ti:h:tf; %vector de tiempo
opciones=odeset(’RelTol’,1e-3,’InitialStep’,2.5e-3,’MaxStep’,2.5e-3);
%simulación del péndulo robot
[t, x]=ode45(’pendulo’,[ti:0.01:tf], x0,opciones);
11
%asignación de posiciones y velocidades articulares
q1 =x(:,1); %Posición articular
12
qp1=x(:,2); %Velocidad articular
13
%cinemática directa del péndulo
14
15
%posición de casa sobre el eje y0−
x ef=0.45*sin(q1);
16
y ef=-0.45*cos(q1);
17
%fenómeno de fricción
b1=0.16; %coeficiente de fricción viscosa
fc1=0.19; %fricción de Coulomb
18
19
20
21
22
23
24
25
26
fe1=0.20; %fricción estática
friccion=b1*qp1+fc1*sign(qp1)+fe1*(1-abs(sign(qp1)));
%gráficas de cinemática directa, posición, velocidad, y fricción, respectivamente.
subplot(2,2,1); plot(x ef,y ef)
subplot(2,2,2); plot(t,q1)
subplot(2,2,3); plot(t,qp1)
subplot(2,2,3); plot(qp,friccion)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
310
Capı́tulo 6: Dinámica
6.7 Robot de 2 gdl
R
obots manipuladores de 2 gdl tienen amplias aplicaciones sobre el plano
x0 − y0 : pintado de objetos, ensamble, estibado, etc. Considere el robot
manipulador de 2 gdl que se muestra en la figura 6.9.
Figura 6.9 Robot manipulador de 2 gdl.
El modelo dinámico de un robot manipulador antropomórfico de 2 gdl está dado por
la siguiente expresión:
τ = M (q)q̈ + C(q, q̇)q̇ + g(q) + f f (q̇, f e )
=
2
2
+ m2l12 + m2 lc2
+ 2m2l1lc2 cos(q2 ) + I1 + I2
m1lc1
2
m2lc2
+ m2 l1lc2 cos(q2 ) + I2
2 + m l l cos(q ) + I
m2 lc2
2 1 c2
2
2
2 +I
m2 lc2
2
Alfaomega
M (q)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
q̈
6.7
311
Robot de 2 gdl
+
g
−2m2 l1 lc2 sen(q2 )q̇2
−m2 l1 lc2 sen(q2 )q̇2
m2 l1 lc2 sen(q2 )q̇1
0
C(q ,q̇ )
q̇ +
lc1m1 sen(q1 ) + m2 l1 sen(q1 ) + m2 lc2 sen(q1 + q2 )
m2 lc2 sen(q1 + q2 )
g (q )
+
b1 q̇1 + fc1 signo(q̇1 ) + [1 − |signo(q̇1 )|]sat(τ1 ; f 1 )
b2 q̇2 + fc2 signo(q̇2 ) + [1 − |signo(q̇2 )|]sat(τ2 ; f 2 )
f f (q̇,f e )
La terminologı́a y significado de los parámetros del robot de 2 gdl se encuentran en
la tabla 6.4.
Tabla 6.4 Parámetros del robot planar de 2 gdl
Eslabón
Hombro
Codo
Significado
Notación
Valor
Masa del eslabón 1
m1
23.902 kg
Longitud del eslabón 1
l1
0.45 m
Inercia del eslabón 1
I1
1.266 Nm seg2/rad
Centro de masa del eslabón 1
lc1
0.091 m
Coeficiente de fricción viscosa
b1
2.288 Nm seg/rad
Coeficiente de fricción de Coulomb
fc1
7.17 Nm
Coeficiente de fricción estática
fe1
8.8 Nm
Masa del eslabón 2
m2
3.88 kg
Longitud del eslabón 2
l2
0.45 m
Inercia del eslabón 2
I2
0.093 Nm seg2/rad
Centro de masa del eslabón 2
lc2
0.048
Coeficiente de fricción viscosa
b2
0.175 Nm seg/rad
Coeficiente de fricción de Coulomb
fc2
1.734 Nm
Coeficiente de fricción estática
fe2
1.87 Nm
g
9.81 m/seg2
Aceleración debida a la gravedad
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
312
Capı́tulo 6: Dinámica
τ1
τ2
=
2.351 + 0.1676 cos(q2 ) 0.102 + 0.0838 cos(q2 )
0.102 + 0.0838 cos(q2 )
−0.1676 sen(q2 )q̇2
−0.0838 sen(q2 )q̇2
0.084 sen(q2 )q̇1
0.0
C(q ,q̇ )
M (q)
g
0.102
3.9211 sen(q1 ) + 0.1862 sen(q1 + q2 )
0.1862 sen(q1 + q2 )
g (q )
q̇1
q̈1
q̈2
+
q̇2
+
+
2.288q̇1 + 7.17 signo ( q̇1 ) + 8.8 [ 1 − | signo ( q˙2 ) | ]
0.175q̇2 + 1.734 signo ( q̇2 ) ) + 1.87 [ 1 − | signo ( q˙1 ) | ]
f f (q̇,f e )
La figura 6.10 muestra la respuesta
de las posiciones articulares (q1 , q2 )
del robot manipulador de 2 gdl en
configuración antropomórfica cuando se le aplica señales de prueba del
par aplicado (6.14). La sintonı́a de
las amplitudes de estas señales para
τ1 y τ2 se deben seleccionar de manera conveniente de tal forma que no
se sature los servoamplificadores, y
no producir velocidades articulares
a 720 grados/seg.
Figura 6.10 Respuesta del robot de 2 gdl.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.7
313
Robot de 2 gdl
Código Fuente 6.11
robot2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
robot2gdl.m
1
2
3
4
function xp =robot2gdl(t,x)
q1=x(1); q2=x(2); q = [q1; q2]; %vector de posición articular
qp1=x(3); qp2=x(4); qp = [qp1; qp2]; %vector de velocidad articular
m1=23.902; l1=0.45; lc1=0.091; I1=1.266;
5
b1=2.288; fc1=7.17; fe1=8.8;
m2=3.880; l2=0.45;
lc2=0.048; I2=0.093;
6
7
8
b2=0.175; fc2=1.734; fe2=1.87; g=9.81;
m11=m1*lc1*lc1+m2*l1*l1+m2*lc2*lc2+2*m2*l1*lc2*cos(q2)+I1+I2;
m12=m2*lc2*lc2+m2*l1*lc2*cos(q2)+I2;
m21=m12;
9
10
11
12
m22=m2*lc2*lc2+I2;
M=[m11, m12; m21, m22];
c11=-2*m2*l1*lc2*sin(q2)*qp2;
c12=-m2*l1*lc2*sin(q2)*qp2;
13
14
15
16
c21=m2*l1*lc2*sin(q2)*qp1;
c22=0;
C=[ c11, c12; c21, c22];
gq11=(lc1*m1++m2*l1)*sin(q1)+m2*lc2*sin(q1+q2);
17
18
19
20
gq21=m2*lc2*sin(q1+q2);
gq=g*[gq11; gq21];
fr=[b1*qp1+fc1*sign(qp1)+fe1*(1-abs(sign(qp1)));
21
22
23
26
b2*qp2+fc2*sign(qp2)+fe2*(1-abs(sign(qp2)))];
tau=[(1-exp(-0.8*t))*29.0+ 68*sin(16*t+0.1) + 9*sin(20*t+0.15);
(1-exp(-1.8*t))*1.2+ 8*sin(26*t+0.08)+2*sin(12*t+0.34) ];
qpp = M∧ (-1)*(tau-C*qp-gq-fr);
27
xp = [qp1; qp2; qpp(1); qpp(2)];
24
25
28
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
314
Capı́tulo 6: Dinámica
Las señales de prueba para el par aplicado se encuentran expresadas por:
τ1 = [ 1 − e−0.8t ] 29.0 + 68 sen(16t + 0.1) + 9 sen(20t + 0.15)
(6.14)
τ2 = [ 1 − e−1.8t ] 1.2 + 8 sen(26t + 0.08) + 2 sen(12t + 0.34)
(6.15)
Código Fuente 6.12
cap6 robot2gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap6 robot2gdlsimu.m
1
2
clc; clear all; close all;
format short
3
ti=0; h=0.0025; tf = 10; ts=ti:h:tf; %vector tiempo
4
5
%configuración de la función ode45()
opciones=odeset(’RelTol’,1e-3,’InitialStep’,2.5e-3,’MaxStep’,2.5e-3);
6
%condiciones iniciales [ q(0), q̇(0) ] = [ 0, 0, 0, 0 ] . %integración numérica de la
7
dinámica del robot de 2 gdl
[t,x]=ode45(’robot2gdl’,ts,[0; 0; 0; 0],opciones);
8
%retorna x = [ q1 (t), q2 (t), q̇1 (t), q̇2 ] (t)
9
%vector de posición articular
T
10
% q = [q1, q2 ]T
11
12
q1=x(:,1);
q2=x(:,2);
13
%vector de velocidad articular
14
% q̇ = [q̇1, q̇2 ]T
15
16
qp1=x(:,3);
qp2=x(:,4);
17
%grafica posiciones articulares en función del tiempo
18
%conversión de radianes a grados
plot(t,180*q1/pi,t,180*q2/pi)
19
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.8
315
Robot de 3 gdl
6.8 Robot de 3 gdl
E
l modelo dinámico de un robot de 3 gdl en configuración antropomórfica es
una ecuación diferencial muy complicada, el proceso de simulación a través de
la función ode45(· · ·) puede consumir tiempo de cómputo de manera significativa
si se introducen funciones discontinuas como el fenómeno de fricción de Coulomb.
En este sentido, se recomienda al lector eliminar la fricción de Coulomb y la fricción
estática, conservando la fricción viscosa para una rápida simulación. Evidentemente,
la simulación estarı́a incompleta por falta de estos fenómenos. Sin embargo, en un
robot de transmisión directa las magnitudes de fricción son bajas.
La figura 6.11 muestra un robot industrial de la compañı́a FANUC en configuración
antropomórfica; los 3 gdl se refieren a las articulaciones de la base, hombro y codo,
sin tomar en cuenta la orientación del robot.
Figura 6.11 Robot manipulador FANUC.
La gran mayorı́a de los
tienen la configuración
sus movimientos y por
tipo de robots no sólo
robots que se encuentran operativos en el sector industrial
antropomórfica por ser la que mejor destreza presenta en
lo tanto la que mayor número de aplicaciones tiene. Este
se emplea en la industria, sino también es importante en
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
316
Capı́tulo 6: Dinámica
la automatización de quirófanos robotizados, asistencia personalizada a un sector
vulnerable de la población con capacidades diferenciadas, etcétera.
La utilidad del modelo dinámico resulta importante cuando se dispone de los valores
numéricos de todos los parámetros del robot; bajo este enfoque la tabla 6.5 muestra
la terminologı́a, significado y valores de un robot prototipo de 3 gdl con motores de
transmisión directa.
Tabla 6.5 Parámetros del robot antropomórfico de 3 gdl
Eslabón
Base
Hombro
Codo
Significado
Notación
Valor
Masa del eslabón 1
m1
26.9 kg
Longitud del eslabón 1
Inercia del eslabón 1
Inercia del eslabón 1
l1
Iz1
Iy1
0.45 m
1.266 Nm-seg2 /rad
0.089 Nm-seg2 /rad
Inercia del eslabón 1
Centro de masa del eslabón 1
Coeficiente de fricción viscosa
Ix1
lc1
b1
0.03 Nm-seg2 /rad
0.091 m
2.288 Nm-seg/rad
Coeficiente de fricción de Coulomb
Coeficiente de fricción estática
fc1
fe1
7.17 Nm
8.8 Nm
Masa del eslabón 2
Longitud del eslabón 2
Inercia del eslabón 1
m2
l2
Iz2
30 kg
0.45 m
0.084 Nm-seg2 /rad
Inercia del eslabón 1
Inercia del eslabón 1
Centro de masa del eslabón 2
Iy2
Ix2
lc2
0.003 Nm-seg2 /rad
0.05 Nm-seg2 /rad
0.038 m
Coeficiente de fricción viscosa
Coeficiente de fricción de Coulomb
Coeficiente de fricción estática
b2
fc2
fe2
0.2 Nm-seg/rad
1.9 Nm
2.1 Nm
Masa del eslabón 3
Longitud del eslabón 2
m3
l3
3.88
0.45 m
Inercia del eslabón 1
Inercia del eslabón 1
Inercia del eslabón 1
Iz3
Iy3
Ix3
0.056 Nm-seg2 /rad
0.0012 Nm-seg2 /rad
0.009 Nm-seg2 /rad
Centro de masa del eslabón 3
Coeficiente de fricción viscosa
Coeficiente de fricción de Coulomb
Coeficiente de fricción estática
lc3
b3
fc3
fe3
0.048
0.175 Nm-seg/rad
1.734
1.87
g
9.81 m/seg2
Aceleración debida a la gravedad
El modelo dinámico del robot manipulador en configuración antropomórfica se
detalla en la ecuación (6.16); de acuerdo con los datos de la tabla 6.5 se obtiene
un modelo dinámico para propósitos de simulación.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
1
τ3
⎢ ⎥
⎢ ⎥
⎢ ⎥
⎢ ⎥
⎢ ⎥
⎢τ ⎥
⎢ 2 ⎥=
⎢ ⎥
⎢ ⎥
⎢ ⎥
⎢ ⎥
⎣ ⎦
⎡τ ⎤
|
c31
m32
c12
{z
C(q ,q̇ )
c32
l1 m3 lc2 sen(q3 )q̇2
|
{z
}
c22
−l1 m3 lc2 sen(q3 )q̇3
|
{z
}
}
3
c33
q̈3
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
5
3
3
(6.16)
}
7
7
[ Iy3 − Iz3 ] cos (q2 + q3 ) sen(q2 + q3 )q̇1 7
7
72
−m3 lc2 sen(q2 + q3 )lc1 cos(q2 )q̇1
7 q̇1
7
2
76
−m3 lc2 sen(q2 + q3 ) cos (q2 + q3 )q̇1
6
|
{z
}7
76
76
c13
76
76
76
76
76
76
76
76
7 6 q̇2
76
76
76
76
−l1 m3 lc2 sen(q3 )(q̇2 + q̇3 )
76
76
|
{z
}
76
76
c23
76
76
76
74
7
7
7 q̇3
7
7
0
7
|{z}
5
m33
0
|{z}
2 q̈
1
6
76
76
76
m13
76
76
76
76
76
76
76
76
2
6
Ix3 + m3 lc3 + m3 l2 lc3 cos(q3 ) 7
7 6 q̈2
6
{z
}7
|
76
76
m23
76
76
76
76
76
76
2
Ix3 + m3 lc3
56
4
|
{z
}
[ Iy2 − Iz2 − m2 l2
c2 ] cos(q2 ) sen(q2 )q̇1 +
[ Iy3 − Iz3 ] cos (q2 + q3 ) sen(q2 + q3 )q̇1 −
m3 [ l2 cos(q2 ) + lc3 cos (q2 + q3 ) ] l2 sen(q2 )q̇1 −
m3 [ l2 cos(q2 ) + lc3 cos (q2 + q3 ) ] lc2 sen(q2 + q3 )q̇1
|
{z
}
{z
M (q )
2
Ix3 + m3 l2
c3 + m3 l2 lc3 cos(q3 )
{z
}
|
m22
2
2
Ix2 + Ix3 + m3 l2
2 + m2 lc3 + m3 lc3
+2m3 l2 lc3 cos(q3 )
|
{z
}
m12
0
|{z}
2
3 2
3
0
b1 q̇1 + fc1 signo(q̇1 ) + fe1 [1 − |signo(q̇1 )|]
+g 4 lc2 m2 sen(q2 ) + m3 l2 sen(q2 ) + m3 lc3 sen(q2 + q3 ) 5 + 4 b2 q̇2 + fc2 signo(q̇2 ) + fe2 [1 − |signo(q̇2 )|] 5
m3 lc3 sen(q2 + q3 )
b3 q̇3 + fc3 signo(q̇3 ) + fe3 [1 − |signo(q̇3 )|]
{z
} |
{z
}
|
g (q )
f f (q̇ ,f e )
|
[ Iy2 − Iz2 − m2 l2
c2 ] cos(q2 ) sen(q2 )q̇2
+ [ Iy3 − Iz3 ] cos (q2 + q3 ) sen(q2 + q3 )q̇2 −
6
6
6
m3 [ l2 cos(q2 ) + lc3 cos (q2 + q3 ) ] l2 sen(q2 )q̇2 −
6
6 m [ l cos(q ) + l cos (q + q ) ] l
3
2
2
c3
2
3
c3 sen(q2 + q3 )q̇2 +
6
6
6
[ Iy3 − Iz3 ] cos (q2 + q3 ) sen(q2 + q3 )q̇3 −
6
6
m3 lc3 sen(q2 + q3 )l2 sen(q2 )q̇3 −
6
6
m3 lc3 sen(q2 + q3 )lc3 sen(q2 + q3 )q̇3
6
6|
{z
}
6
6
c11
6
6
6
+6
6
[ Iz2 − Iy2 + m2 l2
c1 ] cos(q2 ) sen(q2 )q̇1
6
6
+ [ Iz3 − Iy3 ] cos (q2 + q3 ) sen(q2 + q3 )q̇1
6
6
+m3 [ l1 cos(q2 ) + lc2 cos (q2 + q3 ) ] l1 sen(q2 )q̇1
6
6
6 +m3 [ l1 cos(q2 ) + lc2 cos (q2 + q3 ) ] lc2 sen(q2 + q3 )q̇1
6
{z
}
6|
6
c21
6
6
6
6
6
[ Iz3 − Iy3 ] cos (q2 + q3 ) sen(q2 + q3 )q̇1
6
6
4 +m3 lc2 sen(q2 + q3 ) [ l1 cos(q2 ) + lc2 cos (q2 + q3 ) ] q̇1
|
{z
}
2
m31
Iy2 sen2 (q2 ) + Iy3 sen2 (q2 + q3 )
2
2
2
2
6 +Iz1 + Iz2 cos (q2 ) + Iz3 cos (q2 + q3 ) + m2 lc2 cos (q2 )
6
6
+m3 [ l2 cos(q2 ) + lc3 cos(q2 + q3 ) ]2
6|
{z
}
6
6
m11
6
6
6
6
6
6
0
6
|{z}
6
6
m21
6
6
6
6
6
6
6
0
4
|{z}
2
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
5
3
6.8
Robot de 3 gdl
317
Alfaomega
318
Capı́tulo 6: Dinámica
♣♣♣ Ejemplo 6.8
Emplear el modelo dinámico de un robot antropomórfico (6.16) de 3 gdl y los
valores numéricos de los parámetros contenidos en la tabla 6.5 para realizar un
programa en MATLAB que controle las articulaciones de la base, hombro y codo
en las posiciones deseadas [ qd1 , qd2 , qd3 ]T = [ 45, 45, 90 ]T grados, respectivamente.
Presentar la evolución en el tiempo de las posiciones articulares.
Solución
Una de las aplicaciones que tiene el modelo dinámico de robots manipuladores
es en control de posición; a través de la simulación es posible estudiar en detalle
la respuesta que presenta el robot con una determinada estructura de control,
sintonizar de manera adecuada las ganancias proporcional y derivativa, para obtener
un transitorio pequeño sin sobre tiro y oscilaciones y reducir significativamente el
error de posición en régimen estacionario.
El modelo dinámico del robot antropomórfico de 3 gdl junto con el algoritmo
de control proporcional derivativo (PD) está implementado con la estructura de
una ecuación diferencial ordinaria de primer orden ẋ = f (x) en la función
robot3gdl(t,x) descrita en el cuadro 6.13; el programa principal para realizar la
simulación se presenta en el cuadro 6.14.
La sintaxis de la función del modelo dinámico del robot antropomórfico de 3 gdl
está dada como:
ẋ=robot3gdl(t, x)
donde t es la evolución del tiempo, x es la variable de estado, contiene las posiciones
y velocidades articulares, ẋ es la derivada temporal de la variable de estado x,
contiene las velocidades y aceleraciones articulares del robot, es decir:
Alfaomega
x = [ q1 (t) q2 (t) q3 (t) q̇1 (t) q̇2 (t)
q̇3 (t) ]T
ẋ = [ q̇1 (t) q̇2 (t) q̇3 (t) q̈1 (t) q̈2 (t)
q̈3 (t) ]T
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.8
319
Robot de 3 gdl
Código Fuente 6.13
robot3gdl
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Función robot3gdl.m (robot3gdl simu.m)
robot3gdl
1 function xp = robot3gdl(t,x)
2
q1=x(1); q2=x(2); q3=x(3); q = [q1; q2; q3]; %vector de posición articular
3
qp1=x(4); qp2=x(5); qp3=x(6); qp = [qp1; qp2; qp3]; %vector de velocidad articular
4
Iz1=1.26; Iz2=0.084; Iz3=0.056; Iy1=0.089; Iy2=0.003; Iy3=0.0012; Ix1=0.03; Ix2=0.05;
Ix3=0.009; m1=26.902; l1=0.45; b1=2.288; fc1=7.17; fe1=8.8; m2=30; l2=0.45; lc2=0.038;
b2=0.2; fc2=1.9; fe2=2.1; m3=3.880; l3=0.45; lc3=0.048; b3=0.175; fc3=1.734; fe3=1.87;
5
m11=Iy2*sin(q2)*sin(q2)+Iy3*sin(q2+q3)*sin(q2+q3)+Iz1+Iz2*cos(q2)*cos(q2)
+Iz3*cos(q2+q3)*cos(q2+q3)+m2*lc2*lc2*cos(q2)*cos(q2)+
m3*(l2*cos(q2)+lc3*cos(q2+q3))*(l2*cos(q2)+lc3*cos(q2+q3));
6
m12=0; m13=0; m21=0; m22=Ix2+Ix3+m3*l2*l2+m2*lc2*lc2+m3*lc3*lc3+
2*m3*l2*lc3*cos(q3); m23=Ix3+m3*lc3*lc3+m3*l2*lc3*cos(q3);
m31=0; m32=Ix3+m3*lc3*lc3+m3*l2*lc3*cos(q3); m33=Ix3+m3*lc3*lc3;
M=[m11, m12, m13; m21, m22, m23; m31, m32, m33];
7
8
9
10
11
12
gamma112=(Iy2-Ix2-m2*lc2*lc2)*cos(q2)*sin(q2)+(Iy3-Iz3)*cos(q2+q3)*sin(q2+q3)
-m3*(l2*cos(q2)+lc3*cos(q2+q3))*(l2*sin(q2)+lc3*sin(q2+q3));
gamma113=(Iy3-Iz3)*cos(q2+q3)*sin(q2+q3)-m3*lc3*sin(q2+q3)*
(l2*cos(q2)+lc3*cos(q2+q3));
gamma121=(Iy2-Iz2-m2*lc2*lc2)*cos(q2)*sin(q2)+(Iy3-Iz3)*cos(q2+q3)*sin(q2+q3)m3*(l2*cos(q2)+lc3*cos(q2+q3))*(l2*sin(q2)+lc3*sin(q2+q3));
gamma131=(Iy3-Iz3)*cos(q2+q3)*sin(q2+q3)-m3*lc3*sin(q2+q3)*
(l2*cos(q2)+lc3*cos(q2+q3)); gamma211=(Ix2-Iy2+m2*lc2*lc2)*cos(q2)*sin(q2)+
(Iz3-Iy3)*cos(q2+q3)*sin(q2+q3)+m3*(l2*cos(q2)+lc3*cos(q2+q3))*
(l2*sin(q2)+lc3*sin(q2+q3)); gamma223=-l2*m3*lc3*sin(q3);
13
14
gamma232=-l2*m3*lc3*sin(q3); gamma233=-l2*m3*lc3*sin(q3) ;
gamma311=(Iz3-Iy3)*cos(q2+q3)*sin(q2+q3)+m3*lc3*sin(q2+q3)*(l2*cos(q2)+
lc3*cos(q2+q3)); gamma322=l2*m3*lc3*sin(q3);
15
16
17
18
c11=gamma112*qp2+gamma113*qp3; c12=gamma121*qp1; c13=gamma131*qp1;
c21=gamma211*qp1; c22=gamma223*qp3; c23=gamma232*qp2+gamma233*qp3;
c31=gamma311*qp1; c32=gamma322*qp2; c33=0; C=[c11, c12, c13; c21, c22, c23;
c31, c32, c33]; gq11=0; gq21=(lc2*m1++m2*l2)*sin(q1)+m2*lc3*sin(q1+q2);
19
20
21
gq31=m2*lc3*sin(q1+q2);g=9.81; gq=g*[gq11; gq21; gq31]; fr=[b1*qp1; b2*qp2; b3*qp3];
qd=[45*pi/180; 45*pi/180; 90*pi/180]; qt=[qd(1)-q1;qd(2)-q2; qd(3)-q3];
Kp=[5, 0,0;0, 5,0; 0,0,5]; Kv=[3, 0,0;0, 3,0;0,0,3]; tau=Kp*qt-Kv*qp+gq;
22
23
qpp = inv(M)*(tau-C*qp-gq-fr);%aceleración articular
xp = [qp1; qp2; qp3; qpp(1); qpp(2); qpp(3)];%vector de salida
24 end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
320
Capı́tulo 6: Dinámica
Código Fuente 6.14
robot3gdl simu
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa robot3gdl simu.m
%requiere la función robot3gdl.m
robot3gdl simu
1
clear; close all; clc;
2
format short g
3
5
%parámetros de simulación:
ti=0; h=0.0025; tf = 10; %tiempo de simulación 0 a 10 segundos
ts=ti:h:tf; %vector tiempo
6
%configuración de la función ode45
7
opciones=odeset(’RelTol’,1e-3,’InitialStep’, 2.5e-3, ’MaxStep’, 2.5e-3);
8
%solución numérica del sistema, con condición iniciales cero
[t,x]=ode45(’robot3gdl’,ts,[0; 0; 0; 0; 0; 0], opciones);
4
9
10
%gráficas de las 3 articulaciones; q1 =x(:,1), q2 =x(:,2), q3 =x(:,3)
11
plot(t,180*x(:,1)/pi,t,180*x(:,2)/pi, t,180*x(:,3)/pi)
La figura 6.12 presenta la respuesta del robot a una entrada τ de la
ley de control PD. Las posiciones de
las articulaciones de la base, hombro
y codo convergen a [ 45, 45, 90] grados, respectivamente. La sintonı́a de
las ganancias se hizo para que el
transitorio no tuviera sobre impulsos y error en estado estacionario
menor a 0.001 grados en las 3 articulaciones.
Figura 6.12 Respuesta del robot 3 gdl.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.9
321
Robot cartesiano
6.9 Robot cartesiano
E
l robot cartesiano de 3 gdl tiene los siguientes fenómenos: inercial, fricción
(viscosa, Coulomb y estática) y par gravitacional, debido a que la articulación
d1 tiene desplazamiento en el eje z0 , su energı́a potencial es variable. Para las
variables d2 y d3 tienen movimiento en el plano x0 −y0 , entonces la energı́a potencial
de esas variables es constante. Por lo tanto el par gravitacional para aquellas
componentes es cero. Por otro lado, el robot cartesiano no tiene variables rotacionales
qi , mientras que las fuerzas centrı́petas y de Coriolis son cero.
Figura 6.13 Robot cartesiano.
El modelo dinámico de un robot cartesiano de 3 gdl está dado por:
¨ τ
=
m1 + m2 + m3
0
0
m1 + m2
0
0
+
fc1
0
0
0
fc2
0
0
0
fc3
0
0
d1
d¨2
+g
m1 + m2 + m3
0
d¨3
m1
0
˙
signo ( d1 )
fe1 [ 1 − | signo ( d˙1 ) | ]
signo ( d˙2 ) + fe2 [ 1 − | signo ( d˙2 ) | ]
signo ( d˙3 )
fe3 [ 1 − | signo ( d˙3 ) | ]
+
b1
0
0
b2
0
0
0
0
b3
d˙1
d˙2
d˙3
(6.16)
donde m1 , m2 , m3 son las masas de los servomotores e incluyen las barras y piezas
metálicas de acoplamiento mecánico, g es la constante debido a la aceleración
gravitacional (g=9.81 m/seg2 ), b1 , b2, b2 , fc1 , fc2 , fc3 y fe1 , fe2, fe3 representan los
coeficientes de fricción viscosa, Coulomb y estática, respectivamente.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
322
Capı́tulo 6: Dinámica
Los fenómenos de fricción pueden ser de magnitud considerable si los servomotores
emplean reductores de velocidad por medio de sistemas de engranes, los cuales
introducen juego mecánico que repercute directamente en errores de posición.
Además, debido al efecto disipativo de la fricción (conversión de energı́a mecánica
en energı́a térmica), se degradan las piezas o componentes del robot, lo que produce
un pobre desempeño. Cuando la tecnologı́a de los servomotores del robot son
de transmisión directa (direct drive), entonces el fenómeno de fricción se reduce
considerablemente, de ahı́ que la mayorı́a de la bibliografı́a especializada de robótica
presenta el modelo dinámico del robot cartesiano sin el fenómeno de fricción; debido
a este hecho el modelo dinámico resultante del robot cartesiano es lineal con respecto
a las variables de estado d1 , d2 , d3. También debe recordarse, como se demostró en la
sección 5.6 que el modelo cinemático cartesiano es lineal. Por ambas caracterı́stica,
al robot cartesiano también se le denomina robot lineal.
A continuación se presenta el modelo dinámico en forma numérica de un prototipo
robot cartesiano; los valores numéricos de los parámetros se encuentran descritos en
la tabla 6.6.
Tabla 6.6 Parámetros del robot cartesiano
Articulación
τ1max
Masa
Fricción viscosa
Fricción de Coulomb
Fricción estática
=50 N, d1
m1 =0.7 kg
b1 =0.02 kg/seg
fc1 =0.01 N
fe1 =0.015 N
τ2max =4 N, d2
m2 =0.28 kg
b2 =0.08 kg/seg
fc2 =0.07 N
fe2 =0.076 N
τ3max
m3 =0.28 kg
b3 =0.02 kg/seg
fc3 =0.02 N
fe3 =0.022 N
=4 N, d3
donde τimax (con i = 1, 2, 3) representa las capacidades máximas de los servomotores
de las articulaciones (d1 , d2, d3 ), respectivamente.
La mesa del robot cartesiano tiene una longitud de 1m por cada lado. La posición
de casa [ d1 , d2 , d3 ]T = [ 0, 0, 0 ]T está ubicada de manera conveniente sobre el piso,
en el centro geométrico de la mesa. De esta forma, la variable articular d1 que
se desplaza sobre el eje z0 tiene coordenadas positivas y acotada en el intervalo
0 ≤ d1 ≤ 1, para las variables d2 , d3 que se mueven en el plano x0 − y0 pueden
tener coordenadas positivas y negativas; ambas variables se encuentran restringidas
al intervalo: −0.5 ≤ di ≤ 0.5, para i = 2, 3. También es posible ubicar otro lugar
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.9
323
Robot cartesiano
para la posición de casa, lo cual depende finalmente de la facilidad que permita
programar la aplicación que va a realizar el robot.
⎡
τ
1.26
⎢
= ⎣ 0
0
⎡
0.01
⎢
+⎣ 0
0
⎤⎡
⎤ ⎡
⎤⎡ ⎤ ⎡
⎤
d¨1
0.02
0
0
12.36
d˙1
⎥⎢ ⎥ ⎢
⎥⎢ ⎥ ⎢
⎥
0.98 0 ⎦ ⎣ d¨2 ⎦ + ⎣ 0
0.08
0 ⎦ ⎣ d˙2 ⎦ + ⎣ 0 ⎦
0
0.7
0
0
0.02
0
d¨3
d˙3
0
0
⎤⎡
⎤ ⎡
⎤
signo ( d˙1 )
0.015 [ 1 − | signo ( d˙1 ) | ]
⎥⎢
⎥ ⎢
⎥
0.07
0 ⎦ ⎣ signo ( d˙2 ) ⎦ + ⎣ 0.076 [ 1 − | signo ( d˙2 ) | ] ⎦
0
0.02
signo ( d˙3 )
0.022 [ 1 − | signo ( d˙3 ) | ]
(6.17)
0
0
En el caso del robot cartesiano debe notarse que en el modelo dinámico (6.17) la
entrada τ representa una fuerza cartesiana y no un par aplicado o torque.
Cuando recién se construye o se adquiere un prototipo nuevo es recomendable
aplicarle una señal de energı́a apropiada para moverlo en su espacio de trabajo por
un periodo de una semana (dı́a y noche). Lo anterior tiene la finalidad de “asentar”
los servomotores y bajar los niveles de fricción a sus estados normales.
Es conveniente aplicar una señal de entrada al robot como la que se presenta a
continuación:
⎡ ⎤
⎡
⎤
τ1
12.36 + 0.05 sen(t)
⎢ ⎥
⎢
⎥
(6.18)
⎣ τ2 ⎦ = ⎣ 0.13 [ 1 − e−0.5t ] sen(t) ⎦
τ3
0.06 sen(t)
donde t es la variable del tiempo; las amplitudes y parámetros son seleccionados de
manera conveniente para no saturar a los servoamplificadores del robot.
El modelo dinámico (6.17) es una ecuación diferencial de segundo orden; para poder
simular dicho modelo es necesario convertirlo al formato ẋ = f (x), es decir a una
ecuación diferencial ordinaria de primer orden y de esta forma estar en condiciones
de utilizar la función de MATLAB ode45(· · ·). Con esta finalidad, observe que
x = [ d1 , d2 , d3, ḋ1 , ḋ2, d˙3 ], entonces la ecuación (6.17) adquiere la forma (6.19):
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
324
Capı́tulo 6: Dinámica
d
dt
|
Una vez que el modelo dinámico ya se encuentra correc-
2d 3
1
6 7
6 d2 7
6 7
6 d3 7
6 7
6 d˙ 7 =
6 17
4 d˙2 5
d˙3
{z }
ẋ
tamente expresado como una ecuación diferencial ordinaria de primer orden, puede ser implementado en lenguaje
2
0
0.98
0
En el cuadro 6.15 se encuentra el código fuente del mo-
6
6
6
6
6
6
62
6 1.26
6
44 0
0
|
MATLAB a través de la función ode45(· · ·).
delo dinámico del robot cartesiano. Se ha tomado la en-
3
22
3
2
0 −1
τ1
0.02
4 4 τ2 5 − 4 0
0 5
0.7
0
τ3
trada de prueba (6.18) para estudiar su comportamiento
dinámico. El cuadro 6.16 contiene el programa principal
para realizar la simulación con el robot cartesiano. La figura 6.14 muestra el desplazamiento articular de las tres
variables d1 , d2, d3 . La oscilación que presenta cada arti-
0
0.08
0
culación es intencional con la finalidad de mover a cada
mayor parte de su espacio de trabajo. Es recomendable
este procedimiento antes de utilizar el robot, al menos
durante una semana dejarlo con la trayectoria de prueba
se puede realizar identificación paramétrica (ver sección
7.7) o realizar experimentos con el robot.
ḋ1
ḋ2
ḋ3
f (x)
ayuda a normalizar los niveles de fricción. Posteriormente
32 ˙ 3
3
2
2
d1
0.01
0
12.36
0 5 4 d˙2 5 − 4 0 5 − 4 0
0
0.02
0
d˙3
{z
servo en ambas direcciones y al mismo tiempo recorran la
0
0.07
0
3
7
7
7
7
7
7
32
3
2
337
signo ( ḋ1 )
0
0.015 [ 1 − | signo ( d˙1 ) | ]
7
7
0 5 4 signo ( ḋ2 ) 5 − 4 0.076 [ 1 − | signo ( d˙2 ) | ] 5 5 5
0.02
signo ( ḋ3 )
0.022 [ 1 − | signo ( d˙3 ) | ]
}
Alfaomega
(6.19)
Figura 6.14 Robot cartesiano.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.9
325
Robot cartesiano
Código Fuente 6.15
robot cartesiano3gdl
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa robot cartesiano3gdl.m
robot cartesiano3gdl
1
function xp = robot cartesiano3gdl(t,x)
2
d = [x(1); x(2); x(3)]; % Vector de posición articular
dp = [x(4); x(5); x(6)]; % vector de velocidad articular
3
4
%parámetros del robot cartesiano
m1=0.7; m2=0.28; m3=0.28; % masas de los servomotores y partes mecánicas
5
6
b1=0.02; b2=0.08; b3=.02; % coeficientes de fricción viscosa
fc1=0.01; fc2=0.07; fc3=.02; % coeficientes de la fricción de Coulomb
fe1=0.015; fe2=0.076; fe3=0.022; % coeficientes de la fricción estática
g=9.81; % constante de aceleración gravitacional
7
8
9
10
B=[b1, 0, 0;
0, b2,0;
0, 0, b3];
Fc=[fc1, 0, 0;
11
12
13
14
0, fc2,0;
0, 0, fc3];
15
16
% matriz de masas
M = [m1+m2+m3, 0, 0;
17
18
20
0 m1+m2, 0;
0 0 m3];
par grav = g*[m1+m2+m3; 0;0]; %vector de par de gravitacional
21
%fricción estática
22
fe=[ fe1*(1-abs(sign(dp(1)))); fe2*(1-abs(sign(dp(2))));
fe3*(1-abs(sign(dp(3))))];
fr= B*dp+Fc*sign(dp)+fe;
19
23
24
tau=[ g*(m1+m2+m3)+ 0.05*sin(t); (1-exp(-0.5*t))*0.13*sin(t);0.06*sin(t)];
dpp = inv(M)*(tau- par grav-fr);
xp = [dp(1); dp(2); dp(3); dpp(1); dpp(2); dpp(3)];
25
26
27
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
326
Capı́tulo 6: Dinámica
Código Fuente 6.16
simu robotcartesiano3gdl
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés
%Capı́tulo 4 Dinámica. Programa simu robotcartesiano3gdl.m
% este programa requiere del archivo: robot cartesiano3gdl.m
simu robotcartesiano3gdl
1
3
clc;
clear all;
close all;
4
format short
5
%parámetros de simulación:
ti=0; %tiempo inicial
h=0.0025; %incremento del tiempo
2
6
7
8
9
tf = 600; % tiempo de simulación (segundos)
ts=ti:h:tf; %vector de tiempo de simulación
11
%para un correcto desempeño de integración de la función ode45(· · ·) se requieren:
opciones=odeset(’RelTol’,1e-3,’InitialStep’,2.5e-3,’MaxStep’,2.5e-3);
12
% solución numérica del sistema ẋ = f (x):
13
14
%las condiciones iniciales del robot cartesiano han sido puestas en cero
T
T
%[ d1 (0), d2 (0), d3 (0), d˙1 (0), d˙2 (0),
d˙3 (0) ] = [ 0, 0, 0, 0, 0, 0]
15
%advertencia: debido al uso de funciones discontinuas en el modelo dinámico del
16
%robot cartesiano como la función signo(· · ·), el proceso de simulación puede
17
tardar
[t,x]=ode45(’robot cartesiano3gdl’,ts,[0; 0; 0; 0; 0; 0],opciones);
18
% t representa el tiempo, x representa la solución de la ecuación (6.19)
19
% Las componentes del vector x representan
20
% componentes de posiciones
21
%x(:, 1) = d1
22
% componentes de velocidades
%x(:, 4) = d˙1 x(:, 5) = d˙2 x(:, 6) = d˙3
10
23
24
25
x(:, 2) = d2
x(:, 3) = d3
%presenta gráfica de posiciones en función del tiempo
plot(t,x(:,1),t,x(:,2),t,x(:,3))
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
6.10
327
Resumen
6.10 Resumen
D
inámica es la parte de la fı́sica que explica el movimiento de un sistema
mecánico tomando en cuenta las fuerzas que lo producen. El modelo dinámico
está formado por ecuaciones diferenciales no lineales que reproducen ı́ntegramente
todos los fenómenos fı́sicos del robot.
En este capı́tulo se ha presentado la técnica para simular diversos sistemas dinámicos,
lo que facilita el estudio, análisis y aplicaciones del sistema o prototipo. Para un
adecuado entendimiento de la dinámica del sistema la mejor herramienta es la
simulación. El paso previo a una etapa experimental es la simulación, ya que conocer
a detalle todos los aspectos dinámicos del robot o del sistema mecatrónico facilita
su control, ası́ como llevar a cabo en forma práctica aplicaciones potenciales del
prototipo. El método de integración numérica es un factor fundamental para una
adecuada solución numérica del modelo dinámico, por lo tanto es recomendable
utilizar el método de Runge Kutta 4/5, el cual lo tiene implementado MATLAB a
través de la función ode45(· · ·).
Se han presentado diversos ejemplos para ilustrar la técnica de simulación
de sistemas dinámicos: sistemas lineales y no lineales simples, sistema masa
resorte amortiguador, centrı́fuga y péndulo, hasta sistemas dinámicos de robots
manipuladores más complejos como el robot antropomórfico de 2 y 3 gdl, y robot
cartesiano de 3 gdl. Dichos modelos se encuentran estructurados de acuerdo con
la forma: function ẋ=modelo dinamico(t, x) para fácil implementación y uso en
diversas aplicaciones de robótica y mecatrónica.
Es importante resaltar que la estructura matemática del modelo dinámico debe ser
de la forma tradicional de variables fase como una ecuación diferencial ordinaria de
primer orden:
ẋ = f (x)
si el modelo original del sistema es una ecuación diferencial de orden superior,
entonces mediante un adecuado cambio de variables de estados siempre es posible
transformarlo a la estructura requerida.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
328
Capı́tulo 6: Dinámica
A continuación se resume la sintaxis de los modelos dinámicos desarrollados para
MATLAB:
xp = centrifuga( t,x)
xp =pendulo(t,x)
xp =mra(t,x)
xp =robot2gdl(t,x)
xp=robot3gdl(t, x)
xp = robot cartesiano3gdl(t,x)
Para un adecuado funcionamiento de las librerı́as es recomendable utilizar en todos
los casos un código parecido al siguiente:
ti=0; h=0.0025; tf =5; ts=ti:h:tf;
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
Condiciones iniciales (dependiendo del robot):
ci=[0;0] (centrı́fuga); ci=[0;0] (péndulo); ci=[0;0;0;0] robot de 2 gdl;
ci=[0;0;0;0;0;0] robot de 3 gdl (antropomórfico y cartesiano).
[t,x]=ode45(’nombre funcion’,ts,ci,opciones);
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Capı́tulo
7
Identificación
paramétrica
θ̂(k)
=
P (k) =
θ̂(k − 1) +
P (k − 1) Ψ(k) [ y(k) − Ψ(k)T θ̂(k − 1) ]
1 + Ψ(k − 1)T P (k − 1)Ψ(k)
P (k − 1) −
P (k−1)Ψ(k)Ψ(k)T P (k−1)
1+Ψ(k−1)T P (k−1)Ψ(k)
7.1 Introducción
7.2 Método de mı́nimos cuadrados
7.3 Librerı́a de mı́nimos cuadrados
7.4 Ejemplos
7.5 Modelos de regresión del péndulo
7.6 Modelos de regresión del robot de 2 gdl
7.7 Robot cartesiano de 3 gdl
7.8 Resumen
Objetivos
Presentar la técnica de estimación de mı́nimos cuadrados y su
aplicación en identificación paramétrica de sistemas mecatrónicos y robots
manipuladores.
Objetivos particulares:
Esquemas de regresión escalar y multivariable.
Regresión lineal del modelo dinámico.
Regresión del modelo de energı́a.
Esquema de regresión del modelo de potencia.
7.1
Introducción
331
7.1 Introducción
E
l modelo dinámico de sistemas mecatrónicos y robots manipuladores contiene
en su estructura matemática parámetros tales como centros de gravedad,
masas, momentos de inercia y coeficientes de fricción. Estos parámetros generalmente
son desconocidos; este es el caso de la mayorı́a de los robots comerciales donde el
fabricante no proporciona sus valores nominales. Si bien existen herramientas de la
teorı́a de control como esquemas adaptables y controladores robustos que permiten
tolerar errores en los parámetros dinámicos, el conocimiento de éstos es crucial para
la mayorı́a de los esquemas basados en el modelo dinámico del robot manipulador.
Identificación paramétrica es una herramienta atractiva para determinar los
parámetros dinámicos de robots manipuladores, sobre todo cuando existe dificultad
para medirlos directamente. Sin embargo, la naturaleza no lineal del modelo
dinámico de robots manipuladores hace que la tarea de identificación paramétrica
no sea trivial.
El modelo dinámico de robots manipuladores posee propiedades que permiten
generar varios esquemas de regresión lineal como los siguientes: modelo dinámico
se le denomina ası́ debido a que emplea la estructura del modelo dinámico para
expresarlo como un regresor lineal vectorial. Sin embargo, este modelo requiere medir
la aceleración articular lo que representa una desventaja práctica. La estimación de
la velocidad puede realizarse mediante técnicas de filtrado, lo que da origen al modelo
de regresión dinámico filtrado. Por otro lado, existen esquemas de regresión escalares
como los modelos de energı́a, potencia y potencia filtrada; estos modelos permiten
identificar los mismos parámetros de los esquemas vectoriales dinámico y dinámico
filtrado.
Para poder utilizar el método de mı́nimos cuadrados se requiere que el modelo
matemático del sistema a identificar pueda ser expresado como un regresor lineal en
los parámetros desconocidos. La técnica de mı́nimos cuadrados recursivo permite
obtener el valor numérico de los parámetros del sistema sin la necesidad de
desarmar al sistema mecatrónico o robot manipulador. Se requieren de contar con
las mediciones u observaciones de las posiciones y velocidades articulares, ası́ como
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
332
Capı́tulo 7: Identificación paramétrica
la señal del par aplicado para que el sistema pueda moverse en su espacio de trabajo.
7.2 Método de mı́nimos cuadrados
D
e particular relevancia para los esquemas de identificación paramétrica y
de control adaptable es expresar el modelo dinámico no lineal del robot
manipulador como el producto de una matriz de regresión compuesta de funciones no
lineales (dependientes de la posición, velocidad y aceleración articular) y un vector
de parámetros constantes dependiente de masas, momentos de inercias, distancias a
centros de masa y coeficientes de fricción.
Los esquemas de identificación que se describirán en esta sección son sistemas de
identificación que pertenecen a la filosofı́a de identificación hı́brida, es decir el modelo
de regresión es formulado en tiempo continuo mientras que la identificación se realiza
a través de un estimador recursivo llamado mı́nimos cuadrados, el cual se utiliza
ampliamente en la literatura debido a su sencillez y a su propiedad de recursividad,
atributo que lo hace atractivo para su implementación.
Esta técnica es particularmente simple si el modelo tiene la propiedad de linealidad
en los parámetros del modelo. El método de mı́nimos cuadrados es un esquema
estándar que aproxima la solución de sistemas sobre determinados, por ejemplo
cuando hay más variables incógnitas que ecuaciones. Mı́nimos cuadrados minimiza
la suma de cuadrados de los errores; un error es la diferencia entre un valor observado
y el valor proporcionado por el modelo matemático (robot).
El algoritmo recursivo de mı́nimos cuadrados se describe a continuación. Considérese
el siguiente modelo de regresión:
7.2.1
7.2.1. Linealidad en los parámetros
Considere el modelo matemático que está expresado como un regresor lineal de la
siguiente forma:
y(k) = Ψ(k)T θ
Alfaomega
(7.1)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.2
333
Método de mı́nimos cuadrados
donde y(k) ∈ IRr es un vector de mediciones (entradas o salidas) del sistema,
Ψ(k) ∈ IRm×r es la matriz de regresión compuesta por observaciones de funciones
conocidas y el vector de parámetros desconocidos está representado por θ ∈ IRm . El
modelo (7.1) está indexado por la variable k, la cual denota el tiempo discreto; se
asume que el conjunto de ı́ndices τ (k), Ψ(k) forman un conjunto discreto.
El algoritmo de mı́nimos cuadrados para el caso vectorial tiene la siguiente forma:
θ̂(k) =
P (k) =
θ̂(k − 1) + P (k − 1) Ψ(k)[I + Ψ(k − 1)T P (k − 1)Ψ(k)]−1 e(k)
(7.2)
P (k − 1) − P (k − 1)Ψ(k)[I + Ψ(k)T P (k − 1)Ψ(k)]−1 Ψ(k)T P (k − 1)
(7.3)
e(k) = y(k) − Ψ(k)T θ̂(k − 1)
(7.4)
donde P (k) ∈ IRm×m es la matriz de covarianza, la cual es una matriz definida
positiva, e(k) ∈ IRr es el error de predicción, θ̂(k) es el vector de parámetros
estimados; θ es el vector de parámetros reales.
El algoritmo de mı́nimos cuadrados para el caso escalar tiene la siguiente forma:
θ̂(k)
=
P (k) =
θ̂(k − 1) +
P (k − 1) Ψ(k)e(k)
1 + Ψ(k − 1)T P (k − 1)Ψ(k)
P (k − 1) −
T
P (k−1)Ψ(k)Ψ(k) P (k−1)
1+Ψ(k−1)T P (k−1)Ψ(k)
e(k) = y(k) − Ψ(k)T θ̂(k − 1)
(7.5)
(7.6)
(7.7)
Propiedades: El algoritmo de mı́nimos cuadrados puede identificar los parámetros
de cualquier modelo matemático lineal, no lineal, dinámico, estático, continuo o
discreto (no depende del periodo de muestreo, inclusive puede ser aperiódico). La
estructura matemática del modelo debe cumplir con la condición de linealidad en los
parámetros, es decir que pueda ser expresado como un regresor lineal manteniendo la
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
334
Capı́tulo 7: Identificación paramétrica
estructura de una matriz de observaciones o mediciones y un vector de parámetros.
7.3 Librerı́a de mı́nimos cuadrados
L
a sintaxis de la función de mı́nimos cuadrados varı́a dependiendo de que el
modelo sea expresado en forma escalar o multivariable (vectorial) de la siguiente
forma:
7.3.1
7.3.1. Caso escalar
Para el caso de modelos matemáticos con estructura escalar
y(k) = Ψ(k)T θ̂(k − 1)
la sintaxis de la función de mı́nimos cuadrados tiene la siguiente forma:
function [r, θ̂] =mincuad(y,fi)
donde y(k) ∈ IR es un escalar definido como arreglo con n renglones con el registro
de las correspondientes n mediciones del sistema; indexado por el pivote k para
k = 1, 2, · · ·, n; fi ∈ IRn×m es la matriz de regresión compuesta por n renglones
de observaciones de funciones conocidas y m columnas (m indica el número de
parámetros). Esta función retorna el vector de parámetros estimados θ̂ ∈ IRm
y r es una matriz de dimensión n × m que contiene el registro temporal de las
componentes θ̂i del vector de parámetros estimados θ̂ que tuvieron durante el proceso
de identificación.
En el cuadro 7.1 se presenta el código fuente del algoritmo de mı́nimos cuadrados en
su versión escalar. En la lı́nea 2 se obtiene el número de observaciones o mediciones
(n= número de renglones) que contiene cada columna de la matriz de regresión fi
(m= número de columnas). La lı́nea 3 genera el vector de parámetros estimados θ̂,
con condición inicial cero θ̂(0) (lı́nea 4). En realidad, la condición inicial puede ser
puesta en cualquier valor. La lı́nea 5 contiene la formación del vector columna ψ con
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.3
Librerı́a de mı́nimos cuadrados
335
las observaciones o mediciones. La matriz de covarianza P ∈ IRm×m se genera en
la lı́nea 6; observe que la condición inicial P (0) es una matriz diagonal con valores
pii = 1020 , i = 1, 2 · · ·, m.
De las lı́neas 8 -14 se realiza el algoritmo recursivo de identificación paramétrica de
mı́nimos cuadrados de acuerdo a las ecuaciones (7.5)-(7.7). El error de predicción
e(k) se calcula en la lı́nea 12, el vector de parámetros θ̂ en la lı́nea 13, mientras que
la matriz de covarianza P en la lı́nea 14. La forma como varı́an las componentes θ̂i
del vector de parámetros estimados θ̂ se registra en la lı́nea 16. Esta información es
muy útil para analizar a través de una gráfica la convergencia paramétrica de cada
componente θ̂i en función del tiempo t.
Código Fuente 7.1
mincuad.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
mincuad.m
1
function [r, theta] =mincuad(y,fi)
2
3
[n,m]=size(fi); %n=número de renglones, m=número de columnas
theta=[1:m]’; %vector columna de parámetros
4
5
6
theta(1)=0; %Condición inicial del vector de parámetros
psi=[1:m]’; %vector columna de observaciones
P=eye(m,m)*10e20; %matriz de covarianza P
7
8
9
10
r=eye(n,m); %registro para los parámetros estimados
for k=1:n
% algoritmo recursivo de mı́nimos cuadrados
for i=1:m %se forma el regresor
psi(i,1)=fi(k,i);
11
12
13
end
e=y(k)-theta’*psi;%error de regresión
theta= theta+(P*psi*e)/(1+psi’*P*psi); %vector estimado
14
15
16
17
P=P-(P*psi*(psi’)*P)/(1+psi’*P*psi); %matriz de covariancia
for i=1:m
r(k,i)=theta(i,1);%registro por cada iteración de parámetros estimados
end
18
19
end
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
336
Capı́tulo 7: Identificación paramétrica
7.3.2
7.3.2. Caso multivariable
Cuando el sistema está expresado como multivariable, es decir tiene n entradas o
salidas y1 , y2 , · · · , yn bajo la siguiente estructura matemática:
⎡
⎤
y1 (k)
⎢ y2 (k) ⎥
⎢
⎥
⎢ .. ⎥ = Ψ(k)T θ̂(k − 1)
⎣ . ⎦
yn (k)
entonces la librerı́a del algoritmo de mı́nimos cuadrados recursivo correspondiente
se denomina mincuadm teniendo la sintaxis que a continuación se describe:
function θ̂ =mincuadm(y,fi,Nob,p,n)
donde y es un vector de dimensión n×Nob con las mediciones u observaciones de
las entradas (salidas) del sistema a identificar; n indica el número de variables
y1 , y2 , · · · , yn ; Nob representa el número total de observaciones. Cada variable yi tiene
un conjunto de Nob observaciones o renglones, para i = 1, · · ·n; fi es el regresor
de observaciones compuesto por p columnas (p= número de parámetros). Cada
columna del regresor fi tiene un número Nob de observaciones; cada observación
evidentemente está registrada en su respectivo renglón.
En la lı́nea 2 se genera el vector de parámetros estimados θ̂. La condición inicial de
este vector es cero. Sin embargo, puede ser inicializado con cualquier valor (lı́nea 3).
La matriz de covarianza P ∈ IRp×p se define en la lı́nea 21. Note que el valor inicial
de esta matriz P (0) corresponde a una matriz diagonal con valores 1020 (ver lı́nea
5). La matriz identidad con las dimensiones adecuadas se define en la lı́nea 6. El
vector de observaciones y ∈ IRn para entradas (salidas) del sistema se define en la
lı́nea 7.
El algoritmo de mı́nimos cuadrados recursivo multivariable de las ecuaciones (7.2)(7.4) se implementa de las lı́neas 8 a la 21. Observe que en la lı́nea 14 se forma el
vector y ∈ IRn , de manera recursiva a cada renglón se le asigna la correspondiente
medición u observación.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.3
Librerı́a de mı́nimos cuadrados
337
En la lı́nea 17 se calcula el vector de error de predicción e(k), en la lı́nea 18 el vector
de parámetros estimados θ̂ y en la lı́nea 19 la matriz de covarianza P .
La función mincuadm retorna el vector de parámetros estimados θ̂ ∈ IRp . En el cuadro
7.2 se presenta el código fuente de la función minicuad.m (caso multivariable).
Código Fuente 7.2
mincuadm.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
mincuadm.m
1
2
3
4
function theta =mincuadm(y,fi,Nob,p,n)
theta=[1:p]’; %vector columna de parámetros
theta(1)=0; %condición inicial del vector de parámetros
psi=zeros(p,n); %vector columna de observaciones
5
P=eye(p,p)*10e20; %matriz de covarianza P
I=eye(n,n); %matriz identidad
ys=zeros(n,1);
6
7
8
for k=1:Nob
for j=1:n
for i=1:p %se forma el regresor
psi(i,j)=fi(k+Nob*(j-1),i);
9
10
11
12
end
for i=1:n
ys(i,1)=y(k+Nob*(i-1));
end
13
14
15
16
18
end
e=ys-psi’*theta; %error de regresión
theta= theta+P*psi*(I+psi’*P*psi)∧ (-1)*e; %vector estimado
19
P=P-(P*psi*(I+psi’*P*psi)∧ (-1)*(psi’)*P); %Matriz de covarianza
17
20
21
end
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
338
Capı́tulo 7: Identificación paramétrica
7.4 Ejemplos
E
n esta sección se presentan ejemplos sencillos que ilustran la forma de utilizar
las librerı́as de mı́nimos cuadrados recursivo para el caso escalar mincuad y
multivariable mincuadm.
♣ Ejemplo 7.1
Identificar el parámetro a1 del siguiente modelo:
y = a1 t3
donde el valor teórico de a1 =8.034.
Solución
El sistema y = a1 t3 corresponde al caso escalar. Para propósitos de simulación la
variable t estará definida en el intervalo de 0 a 10 segundos, con incrementos de un
milisegundo.
En este caso el regresor está formado por
y(k) = Ψ(k)T θ
donde y = y(k), Ψ(k) = t3 , θ = a1 .
Por lo tanto, el error de predicción e(k) está dado por:
e(k) = t3 θ̂
Ψ(k)
En el cuadro 7.3 se muestra el código del programa cap7 ejemplo1.m; en la lı́nea
7 se forma la ecuación del sistema a identificar, el vector de mediciones o regresor
está definido en la lı́nea 8. El algoritmo de mı́nimos cuadrados se emplea en la lı́nea
10; el resultado se presenta en la lı́nea 11.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.4
339
Ejemplos
El resultado del programa 7.3 es:
theta=
8.034
Código Fuente 7.3
cap7 ejemplo1.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 ejemplo1.m
1
clc;
2
clear all;
close all;
format short g
3
4
5
6
7
8
9
t=[0:0.001:10]’; %vector columna de tiempo
a1=8.034; %parámetro del sistema
y=a1*t.*t.*t; %sistema a identificar
fi=[t.*t.*t ] ;
10
[m, p]=size(fi);
[˜ theta] =mincuad(y,fi);
11
theta %resultado de la identificación
♣ Ejemplo 7.2
Identificar los parámetros del siguiente sistema:
y = a1 t + a2 sen(t) + a3 cos(t) + a4 tanh(t)
donde
los
valores
de
los
parámetros
son:
[ a1 , a2 , a3, a4 ]T
=
T
[ 4.456, 7.456, −0.089, 12.37 ]
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
340
Capı́tulo 7: Identificación paramétrica
Solución
El error de predicción se encuentra dado por
e(k) = y(k) − [ t
sen(t)
cos(t)
tanh(t) ] θ̂(k − 1)
Ψ(k)
donde θ̂ = [ â1
â2
â3
â4 ]T .
Para propósitos de simulación, la variable tiempo t estará definida en un intervalo
de 0 a 10 segundos, con incrementos de un milisegundo. El cuadro 7.4 contiene el
programa cap7 ejemplo2.m; en la lı́nea 5 se define el sistema a identificar. El vector
de observaciones o regresor se encuentra construido en la lı́nea 6 y en la lı́nea 7 se
emplea la función de mı́nimos cuadrados para obtener el vector de parámetros θ̂ en
la lı́nea 8.
El resultado del programa cap7 ejemplo2.m es el siguiente:
theta=
[4.456
Código Fuente 7.4
7.456 −0.089
12.37]T
cap7 ejemplo2.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 ejemplo2.m
1
clc; clear all; close all; format short g
2
t=[0:0.001:10]’;%vector columna de tiempo
3
%parámetros del sistema
a1=4.456; a2=7.456; a3=-0.089; a4=12.37; %sistema a identificar
y=a1*t+a2*sin(t)+a3*cos(t)+a4*tanh(t);
4
5
6
7
fi=[t, sin(t), cos(t), tanh(t)];
[˜ theta] =mincuad(y,fi);
8
theta %resultado de la identificación
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.4
341
Ejemplos
♣ Ejemplo 7.3
Identificar los parámetros del siguiente sistema:
y(t) = a1 cosh (t) + a2 senh(t) + a3 cos(t)
donde los valores de los parámetros son:
⎡ ⎤
⎡
⎤
a1
0.001
⎢ ⎥
⎢
⎥
⎣ a2 ⎦ = ⎣ 456 ⎦
a3
−345
Solución
El error de regresión está formado de la siguiente forma:
⎡
e(k) = y(k) − [ cosh (k)
â1
⎤
⎢ ⎥
senh(k) cos(k) ] ⎣ â2 ⎦
â3
ψ (k)
θ̂ (k−1)
(7.8)
El cuadro 7.5 contiene el programa cap7 ejemplo3.m con el código fuente en
MATLAB para llevar a cabo el proceso de identificación paramétrica del sistema.
Se emplea un vector tiempo definido de 0 a 10 segundos con intervalos de un
milisegundo. El sistema a identificar se encuentra definido en la lı́nea 8; el regresor fi
se forma en la lı́nea 9. La función de mı́nimos cuadrados recursivo mincuad se emplea
en la lı́nea 10 para obtener el vector de parámetros estimados θ̂, cuyo resultado se
presenta en la lı́nea 11:
theta=
0.001
456
−345
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
342
Capı́tulo 7: Identificación paramétrica
Código Fuente 7.5
cap7 ejemplo3.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 ejemplo3.m
1
clc;
2
clear all;
close all;
format short g
t=[0:0.001:10]’;%vector columna de tiempo
3
4
5
6
7
8
9
%parámetros del sistema
a1=0.001; a2=456; a3=-345; %sistema a identificar
y=a1*cosh(t)+a2*sinh(t)+a3*cos(t);
fi=[cosh(t), sinh(t), cos(t)];
10
[˜ , theta] =mincuad(y,fi);
11
theta %resultado de la identificación
♣ Ejemplo 7.4
Identificar los parámetros del siguiente sistema dinámico lineal:
ẋ = −ax + bu
donde los valores de los parámetros son: [ a, b ]T = [ 6, 2 ]T
Solución
El error de predicción está definido por:
â
e(k) = ẋ − [ −x u ]
b̂
y(k)
ψ (k)
θ̂ (k−1)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.4
343
Ejemplos
El cuadro 7.7 contiene el código del programa cap7 ejemplo4.m. Debido a que el
sistema a identificar es dinámico, se empleará la función ode45() para llevar a cabo
el proceso de integración numérica. El programa cap7 se1.m tiene implementado al
sistema dinámico ẋ = −ax + bu, cuyo código se encuentra en el cuadro 7.6. Esta
declaración también se encuentra en el programa cap7 se1.m.
Es importante resaltar la utilidad de la variable global u que registra la entrada
del sistema dinámico u = sen(t) (ver lı́nea 4 ). La lı́nea 12 del programa
cap7 ejemplo4.m realiza la solución numérica del sistema ẋ = −ax + bu para un
intervalo de tiempo de 0 a 5 segundos, con incrementos de un milisegundo. En esta
fase se obtiene la variable de estado x, la cual se emplea en la lı́nea 13 para obtener
la variable velocidad ẋ. El regresor de observaciones fi se forma en la lı́nea 14. El
vector de parámetros estimados θ̂ se obtiene en la lı́nea 16; usando el algoritmo de
mı́nimos cuadrados implementado en la función mincuad y el resultado se presenta
en la lı́nea 17:
theta=
6
2
Código Fuente 7.6
cap7 se1.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 se1.m
1
2
3
function xp =se1(t,x)
global qpp u
u=sin(t); a=6; b=2;
4
xp=-a*x+b*u;
qpp=xp;
5
6
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
344
Capı́tulo 7: Identificación paramétrica
Código Fuente 7.7
cap7 ejemplo4.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 ejemplo4.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
clc;
clear all;
close all;
global u %variable global almacena la entrada del sistema
format short g
ti=0;
h=0.001;
tf = 5;
ts=ti:h:tf; %vector tiempo de simulación
opciones=odeset(’RelTol’,1e-3,’InitialStep’,2.5e-3,’MaxStep’,2.5e-3);
%solución numérica del sistema dinámico lineal
[t,x]=ode45(’cap7 se1’,ts,0,opciones);
xp=se1(t,x); %se obtiene la velocidad
fi=[-x, u]; %regresor
%algoritmo de mı́nimos cuadrados
[r,theta] =mincuad(xp,fi);
theta %resultado de la identificación
♣♣♣ Ejemplo 7.5
Identificar los parámetros del siguiente sistema multivariable:
y1
8.7 sen(t) + 0.001 cos(t)
=
y2
109.789 atan (t) − 0.23 ∗ tanh t
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.4
345
Ejemplos
Solución
En el cuadro 7.8 se muestra el programa cap7 ejemplo5.m; observe que en la lı́nea
3 se forma el vector columna, en la lı́nea 4 se obtiene el número de observaciones o
muestras Nob. En las lı́neas 5-6 se define el sistema a identificar; en la lı́nea 7 se forma
el vector de salida del sistema y = [y1 ; y2 ], el regresor o vector de observaciones se
forma en la lı́nea 8 y 9. La función mincuadm es utilizada en la lı́nea 10 para obtener el
vector de estimación paramétrica cuyo resultado es: θ̂ = [ 8.7, 0.001, 109.79, −0.23].
Código Fuente 7.8
cap7 ejemplo5.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 ejemplo5.m
1
2
3
4
5
6
7
8
9
clc; clear all; close all;
format short g
t=(0:0.001:10)’;
[Nob, ˜ ]=size(t);
y1=8.7*sin(t)+0.001*cos(t);
y2=109.789*atan(t)-0.23*tanh(t);
y=[y1; y2];
fi=[sin(t), cos(t), zeros(Nob,1), zeros(Nob,1);
10
zeros(Nob,1), zeros(Nob,1), atan(t), tanh(t)];
theta=mincuadm(y,fi,Nob,4,2);
11
theta
A continuación se presentan aplicaciones de identificación paramétrica de sistemas
mecatrónicos y robots manipuladores. Particularmente se explotan las propiedades
matemáticas del modelo dinámico de los robots manipuladores para expresarlo
como un regresor lineal teniendo casos escalares (modelo de energı́a y potencia)
y multivariable (modelo dinámico).
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
346
Capı́tulo 7: Identificación paramétrica
7.5 Modelos de regresión del péndulo
L
a metodologı́a de Euler-Lagrange permite obtener el modelo dinámico de robots
manipuladores con propiedades importantes para diseñar y analizar esquemas
de control e identificación paramétrica.
Dentro de las propiedades del modelo dinámico de robots manipuladores se encuentra
la de linealidad en los parámetros, es decir: a pesar de que la dinámica del robot es
no lineal con respecto a las variables de estado de la posición y velocidad, es posible
expresar dicha dinámica como un regresor lineal de una matriz de observaciones y un
vector columna de parámetros desconocidos. Además, las propiedades de linealidad
también se satisfacen en los modelos de energı́a y potencia que seleccionando de
manera conveniente el regresor de observaciones, resultan los mismos parámetros
que los modelos de energı́a y potencia.
Como caso particular de robots manipuladores de 1 gdl se encuentra el péndulo
que tiene las mismas ventajas de linealidad en los parámetros. En esta sección se
presenta la implementación y análisis comparativo de cinco esquemas de regresión
paramétrica: modelo dinámico, dinámico filtrado, energı́a, potencia y potencia
filtrada.
7.5.1
7.5.1. Modelo dinámico del péndulo
E
l modelo dinámico del péndulo robot se encuentra dado por la siguiente
ecuación:
2 ] q̈ + b q̇ + f signo ( q̇ ) + m gl sen(q )
τ1 = [ Ir1 + m1 lc1
1
1 1
c1
1
1 c1
1
(7.9)
donde Ir1 es el momento de inercia del rotor, m1 es la masa del péndulo, lc1
representa el centro de masa, b1 , fc1 son los coeficientes de fricción viscosa y de
Coulomb, respectivamente; las variables articulares son la aceleración q̈1 , velocidad
q̇1 y posición q1 ; la constante de la aceleración debido a la gravedad es g y τ1 es el
par aplicado al servomotor.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.5
Modelos de regresión del péndulo
347
♣ ♣ Ejemplo 7.6
Obtener la identificación paramétrica del modelo dinámico del péndulo-robot.
Tomar en cuenta los valores de los parámetros del péndulo que se encuentran
contenidos en la tabla 6.3.
Solución
El esquema de regresión del modelo dinámico del péndulo está dado por:
⎡ˆ
2 ⎤
Ir1 + m̂1 l̂c1
⎢
⎥
b̂1
⎢
⎥
e(k) = τ1 (k) − [ q̈1 (k) q̇1 (k) signo ( q̇1 (k) ) sen(q1 (k)) ] ⎢
⎥
⎣
⎦
fˆc1
y(k)
ψ (k)
m̂1 ĝlˆc1
θ̂ (k−1)
2 , b̂ , fˆ , y m̂ ĝ ˆ
2
donde Iˆr1 + m̂1 l̂c1
1
c1
1 lc1 son los parámetros estimados de Ir1 + m1 glc1 ,
b1 , fc1 , y m1 glc1, respectivamente.
El modelo dinámico del péndulo está contenido en el programa cap7 pendulo.m
(ver cuadro 7.10). Para los propósitos de identificación paramétrica es conveniente
registrar la señal del par aplicado τ1 al servomotor y la aceleración del péndulo q̈1 a
través de variables globales tal y como se define en la lı́nea 2. En la declaración de la
función del péndulo (lı́nea 1) se ha incluido la variable bandera para poder obtener la
aceleración articular q̈1 empleando las variables de estado q1 y q̇1 (ver lı́neas 4 y 5),
o realizar integración numérica usando el algoritmo de Runge-Kutta ode45(...),
que en este caso se emplean en las lı́neas 7 y 8.
Los parámetros del péndulo se encuentran declarados en la lı́nea 11 que corresponden
a la tabla 6.3. De acuerdo con esos valores numéricos, el vector de parámetros
θ = [ 0.18546 0.16 0.19 3.0831 ]T . La aceleración articular del péndulo se obtiene
en la lı́nea 20 y el vector de salida en la lı́neas 22 y 23.
El programa principal cap7 pendulosimu.m permite realizar la identificación
paramétrica del modelo dinámico y se presenta en el cuadro 7.9; en la lı́nea 2 se
declaran las variables globales tau1 qpp1 que también están definidas en el programa
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
348
Capı́tulo 7: Identificación paramétrica
del modelo dinámico del péndulo 7.10. El tiempo de simulación es de 0 a 5 segundos
con pasos de 0.001 milisegundo (lı́nea 3); las condiciones iniciales del péndulo son:
[ q(0)1 , q̇1 (0) ]T = [ 0, 0 ]T (lı́nea 4).
En la lı́nea 7 se realiza la integración numérica del modelo dinámico del péndulo.
En esta fase se obtienen las variables de estado q1 (t), q̇1 (t) contenidas en el vector
x=[ q1 (t), q̇1(t) ]T . En la lı́nea 8 se emplea la función cap7 pendulo(t,x,9); note que
el valor del tercer argumento tiene asignado el valor 9 para no realizar el proceso de
integración numérica, solamente obtener la aceleración articular del péndulo usando
la variable de estado x; la información de la aceleración articular se registra en la
variable global qpp1 y la energı́a aplicada al servomotor en la variable global tau1.
En las lı́neas 9 y 10 se realiza un cambio de notación con la finalidad presentar más
claro el vector de observaciones que se forma en la lı́nea 11 y el algoritmo de mı́nimos
cuadrados es llamado en la lı́nea 12).
Código Fuente 7.9
cap7 pendulosimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 pendulosimu.m
1
clc; clear all; close all; format short g
2
global tau1 qpp1 %variables globales
ti=0; h=0.001; tf = 5 ;
ci=[0; 0]; %condiciones iniciales
opciones=odeset(’RelTol’,1e-3,’InitialStep’, 1e-3,’MaxStep’,1e-3);
3
4
5
6
7
8
9
10
11
12
13
%solución numérica del modelo dinámico del péndulo
[t,x]=ode45(’cap7 pendulo’,t,ci,opciones);
xp=pendulo(t,x,9);
q1=x(:,1) ; %posición articular
qp1=x(:,2); %velocidad articular
fi=[qpp1, qp1, sign(qp1), sin(q1)]; %regresor ψ
[r,theta] =mincuad(tau1,fi); %mı́nimos cuadrados
theta
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.5
349
Modelos de regresión del péndulo
Código Fuente 7.10
cap7 pendulo.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 pendulo.m
1
function xp =cap7 pendulo(t,x, bandera)
2
global tau1 qpp1
if (bandera==9) %evalúa la aceleración qpp1 en función de q1 y qp1
q1=x(:,1) ;
qp1=x(:,2);
3
4
5
6
else %integración numérica
q1=x(1); %posición articular
qp1=x(2); %velocidad articular
7
8
9
end
10
11
%parámetros del péndulo
m1=3.88; lc1=0.081; ;
12
%coeficientes de fricción viscosa y de Coulomb
13
b1=0.16; fc1=0.19;
Ir1=0.16;
Ip=Ir1+m1*lc1*lc1;
g=9.81;
14
15
16
17
%par aplicado al servomotor
tau1=sin(t);
18
19
%aceleración articular del péndulo
qpp1=(tau1-b1*qp1-fc1*sign(qp1)-m1*g*lc1*sin(q1))/Ip;
20
21
%vector de salida
xp=[ qp1 ; %xp(1)=x(2) %velocidad articular
qpp1] ; %xp(2)=qpp %aceleración articular
22
23
24
end
Los resultados de la identificación paramétrica del modelo dinámico del péndulo se
presentan en la tabla 7.1.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
350
Capı́tulo 7: Identificación paramétrica
7.5.2
7.5.2. Modelo dinámico filtrado del péndulo
El modelo dinámico presupone que el sistema cuenta con los sensores necesarios para
medir la posición q1 , velocidad q̇1 y aceleración q̈1 . Sin embargo, generalmente los
robots industriales sólo cuentan con el encoder o sensor de posición. Esto representa
una desventaja para medir la aceleración. Por lo tanto, el problema consiste en
usar la información de la posición articular para generar las señales de velocidad y
aceleración.
λ
Para resolver este problema práctico se puede usar un conjunto de filtros Fu = s+λ
u
para obtener la señal filtrada de u (representada por Fu ) y la velocidad u̇ es
aproximada por:u̇ ≈ Ḟu , entonces el modelo dinámico filtrado del péndulo se obtiene
λ
a la ecuación (7.9) obteniendo:
por aplicar el operador filtro s+λ
λτ1
s+λ
Fτ
λq̈1
λq̇1
λ signo ( q̇1 )
λ sen(q1 )
+ b1
+ fc1
+ m1 glc1
s+λ
s+λ
λ+s
s+λ
λ
signo
(
q̇
)
λ sen(q1 )
λ
q̇
λq
1
1
1
2
= [ Ir1 + m1 lc1
+ b1 s
+ fc1
+ mglc1
] s
s+λ
s+λ
λ+s
s+λ
2 ] Ḟ
+
mgl
= [ Ir1 + m1 lc1
+
b
+
f
F
F
Ḟ
Fq̇1
1 q1
c1 signo( q )
c1 sen(q1 )
2 ]
= [ Ir1 + m1 lc1
1
d
donde s = dt
y λ es la frecuencia de corte del filtro, y las señales filtradas están
dadas en forma recursiva como:
Fτ1 (k) = e−λh Fτ1 (k − 1) + [ 1 − e−λh ] τ1 (k − 1)
Ḟτ1 (k) = −λFτ1 (k) + λτ1 (k)
Fq1 (k) = e−λh Fq1 (k − 1) + [ 1 − e−λh ] q1 (k − 1)
Ḟq1 (k) = −λFq1 (k) + λq1 (k)
Fq̇1 (k) = e−λh Fq̇1 (k − 1) + [ 1 − e−λh ] Fq1 (k − 1)
ḞḞq (k) = −λFḞq (k) + λḞq1 (k)
1
1
−λh
F sen(q1) (k) = e
F sen(q1 )(k − 1) + [ 1 − e−λh ] sen(q1 )(k − 1)
Ḟ sen(q1) (k) = −λF sen(q1 ) (k) + λ sen(q1 )(k)
F signo( q1 ) (k) = e−λh F signo( q1 ) (k − 1) + [ 1 − e−λh ] signo ( q1 ) (k − 1)
Ḟ signo( q1 ) (k) = −λF signo( q1 )(k) + λ signo ( q1 ) (k)
Fq1 representa la señal filtrada de la posición q1 ; la velocidad q̇1 es aproximada por
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.5
Modelos de regresión del péndulo
351
el filtro Ḟq1 y la aproximación de la aceleración es q̈1 ≈ ḞFq̇1 .
♣♣♣ Ejemplo 7.7
Obtener la identificación paramétrica del modelo dinámico filtrado del péndulorobot. Para propósitos de simulación del modelo dinámico tomar en cuenta los
valores de los parámetros del péndulo que se encuentran contenidos en la tabla
6.3.
Solución
El esquema de regresión del modelo dinámico filtrado del péndulo está dado por:
⎡ˆ
2 ⎤
Ir1 + m̂1 ˆlc1
⎢
⎥
b̂1
λτ1 (k)
λ signo( q̇1 (k) )
⎥
q̇1 (k)
λ sen(q1 (k)) ⎢
1 (k)
e(k) =
− [ s λs+λ
]
s λqs+λ
⎢
⎥
λ+s
s+λ
ˆ
+ λ ⎣
⎦
fc1
s (k)
ψ
y(k)
m̂1 ĝ l̂c1
θ̂ (k−1)
El programa cap7 pendulodinafiltsimu.m tiene el código MATLAB que permite
realizar identificación paramétrica del modelo dinámico filtrado del péndulo (ver
cuadro 7.11). El vector tiempo varı́a de 0 a 5 segundos con incrementos de 0.001.
En la lı́nea 8 se emplea la función ode45 para obtener la solución numérica q1 , q̇1
del péndulo. Con estas variables de estado en la lı́nea 9 se llama a la función
cap7 pendulo.m para registrar la señal del par aplicado τ1 = sen(t) la cual fue
declarada como variable global (lı́nea 3). De la lı́nea 11 a la 14 se generan los vectores
correspondientes para implementar los filtros. La frecuencia de corte λ ha sido puesta
de manera empı́rica en 25 Hertz. Los filtros se realizan en las lı́neas 16-24. El regresor
de observaciones se forma en la lı́nea 25 y se emplea como parámetro de entrada con
el registro del par aplicado filtrado en la función de mı́nimos cuadrados (lı́nea 26).
El vector de parámetros estimado θ̂ se encuentra indicado en la tabla 7.1. Nota:
el tiempo de ejecución del programa cap7 pendulodinafiltsimu.m puede demorar
varios segundos por utilizar la función discontinua signo.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
352
Capı́tulo 7: Identificación paramétrica
Código Fuente 7.11
cap7 pendulodinafiltsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 pendulodinafiltsimu.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
clc; clear all; close all;
format short g
global tau1 %variable global almacena la entrada del sistema
ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector tiempo
ci=[0; 0]; %condiciones iniciales
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
%solución numérica del modelo dinámico del péndulo
[t,x]=ode45(’cap7 pendulo’,t,ci,opciones) ;
xp=pendulo(t,x,9);
[m n]=size(t); q1=x(:,1); qp1=x(:,2);
Ftau1=zeros(m,1);
Fq1=zeros(m,1); sFq1=zeros(m,1);
Fqp1=zeros(m,1); sFqp1=zeros(m,1);
Fsign=zeros(m,1); Fsin=zeros(m,1);
lambda=25 ;
for k=2:m %filtros recursivos
Ftau1(k)=exp(-h*lambda)*Ftau1(k-1)+(1-exp(-h*lambda))*tau1(k-1);
18
Fq1(k)=exp(-h*lambda)*Fq1(k-1)+(1-exp(-h*lambda))*q1(k-1);
sFq1(k)=-lambda*Fq1(k)+lambda*q1(k);
Fqp1(k)=exp(-h*lambda)*Fqp1(k-1)+(1-exp(-h*lambda))*sFq1(k-1);
sFqp1(k)=-lambda*Fqp1(k)+lambda*sFq1(k);
19
20
21
22
Fsign(k)=exp(-h*lambda)*Fsign(k-1)+(1-exp(-h*lambda))*sign(sFq1(k-1));
Fsin(k)=exp(-h*lambda)*Fsin(k-1)+(1-exp(-h*lambda))*sin(q1(k-1));
23
24
end
25
26
fi=[sFqp1, sFq1, Fsign, Fsin] ;
[r,theta] =mincuad(Ftau1,fi);
27
theta
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.5
353
Modelos de regresión del péndulo
7.5.3
7.5.3. Modelo de energı́a del péndulo
Un enfoque particularmente atractivo para el diseño de esquemas de identificación
paramétrica de robots manipuladores se basa en el modelo de energı́a aplicada al
robot manipulador, el cual puede ser descrito como un modelo de regresión lineal en
términos de los parámetros dinámicos.
El modelo de energı́a del péndulo consiste de la suma de la energı́a cinética K(q1 , q̇1 ),
la energı́a potencial U (q1 ) más la energı́a disipativa de la siguiente manera:
t
q1 τ1 dt =
0
1
2 ] q̇ 2 + m gl [ 1 − cos(q ) ] + b
[ Ir1 + m1 lc1
1 c1
1
1
2
0
t
q̇12 dt
+ fc1
t
|q̇1 |dt.
0
♣ ♣ Ejemplo 7.8
Realizar el proceso de identificación paramétrica del modelo de energı́a del
péndulo-robot. Emplear los valores numéricos de los parámetros del péndulo
indicados en la tabla 6.3.
Solución
El modelo de regresión lineal de la energı́a para el péndulo se encuentra dado por:
⎡ˆ
2 ⎤
Ir1 + m̂1 l̂c1
t
⎢ m̂ ĝ ˆl
⎥
t
t
1 1 c1 ⎥
⎢
e(k) =
q1 τ1 dt − [ 12 q̇12 [ 1 − cos(q1 ) ] 0 q̇12 dt 0 |q̇1 |dt ] ⎢
⎥
⎣
⎦
b̂1
0
ψ (k)
y(k)
fˆc1
θ̂ (k−1)
En el cuadro 7.12 se muestra el programa cap7 penduloenergsimu.m; en la lı́nea 7 se
obtiene la solución numérica de la dinámica del péndulo. Por medio de las variables
de estado de posición y velocidad en la lı́nea 8 se emplea el modelo dinámico para
registrar la señal de par aplicado τ1 = sen(t). La integral de la energı́a, fricción
viscosa y de Coulomb se calcula de la lı́nea 15 a la 19. La técnica de integración
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
354
Capı́tulo 7: Identificación paramétrica
numérica que se utiliza es la del método de Euler. El regresor del modelo de energı́a
se forma en la lı́nea 20 y el vector de parámetros estimados θ̂ se obtiene en la lı́nea
21 por medio de la función mincuad; el valor de los parámetros identificados se
encuentran en la tabla 7.1.
Código Fuente 7.12
cap7 penduloenersimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 penduloenersimu.m
1
clc; clear all; close all; format short g
2
4
global tau1 %variable global almacena la entrada del sistema
ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector tiempo
ci=[0; 0]; %condición inicial
5
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
6
%solución numérica del modelo dinámico del péndulo
[t,x]=ode45(’cap7 pendulo’,t,ci,opciones) ;
xp=pendulo(t,x,9) ;
3
7
8
9
10
11
12
13
14
15
16
[m n]=size(t);
q1=x(:,1);
qp1=x(:,2);
Int1=zeros(m,1);
Int2=zeros(m,1);
Int3=zeros(m,1);
for k=2:m
Int1(k,1)=Int1(k-1,1)+h*qp1(k,1)*tau1(k,1);
17
Int2(k,1)=Int2(k-1,1)+h*qp1(k,1)*qp1(k,1);
Int3(k,1)=Int3(k-1,1)+h*abs(qp1(k,1)) ;
18
19
end
20
21
fi=[1/2*qp1.*qp1, Int2, Int3, (1-cos(q1))] ;
[r,theta] =mincuad(Int1,fi) ;
22
theta
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.5
355
Modelos de regresión del péndulo
7.5.4
7.5.4. Modelo de potencia del péndulo
El modelo de potencia del péndulo está dado por la siguiente ecuación:
2
τ1 q̇1 = [ Ir1 + m1 lc1
] q̇1 q̈ + b1 q̇12 + fc1 |q̇1 | + m1 glc1 sen(q1 )q̇1 .
(7.10)
El modelo de la potencia involucra la medición de la aceleración articular q̈1 .
♣ ♣ Ejemplo 7.10
Realizar el proceso de identificación paramétrica para el modelo de potencia del
péndulo. Utilice los parámetros del péndulo indicados en la tabla 6.3.
Solución
El modelo de potencia del péndulo tiene la propiedad de linealidad en los parámetros;
por lo que el regresor lineal adquiere la siguiente forma:
⎡ˆ
2 ⎤
Ir1 + m̂1 lˆc1
⎢
⎥
b̂1
⎢
⎥
e(k) = τ1 q̇1 − [ q̇1 q̈ q̇12 |q̇1 | sen(q1 )q̇1 ] ⎢
(7.11)
⎥
ˆ
⎣
⎦
fc1
y(k)
ψ (k)
m̂1 ĝ l̂c1
θ̂ (k−1)
El programa en MATLAB cap7 pendulopotsimu.m se encuentra descrito en el
cuadro 7.13. De manera análoga a los anteriores programas, el uso de las variables
globales es adecuado para registrar señales importantes en la formación del regresor.
En la lı́nea 3 se encuentra la definición de las variables tau1 y qpp1 para registrar la
información en el modelo dinámico del péndulo (cap7 pendulo.m); la lı́nea 8 resuelve
numéricamente la dinámica del péndulo y en la lı́nea 9 se registran las señales tau1
y qpp1 para formar el regresor de observaciones (lı́nea 12). La función mincuad es
empleada para obtener la estimación de los parámetros (lı́nea 13).
El resultado del vector de parámetros θ̂ se encuentra indicado en la tabla 7.1.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
356
Capı́tulo 7: Identificación paramétrica
Código Fuente 7.13
cap7 pendulopotsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 pendulopotsimu.m
1
2
3
clc; clear all; close all;
format short g
6
global tau1 qpp1 %variables globales para almacenar par aplicado y aceleración
ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector de tiempo
ci=[0; 0]; %condiciones iniciales
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
7
%solución numérica de la dinámica del péndulo
8
[t,x]=ode45(’cap7 pendulo’,t,ci,opciones);
xp=pendulo(t,x,9);
q1=x(:,1);
4
5
9
10
11
12
13
14
qp1=x(:,2);
fi=[qpp1.*qp1, qp1.*qp1, abs(qp1), sin(q1).*qp1];
[r,theta] =mincuad(tau1.*qp1,fi);
theta
7.5.5
Modelo de potencia filtrada
El modelo de la potencia filtrada del péndulo se obtiene aplicando el operador filtro
λ
s+λ al modelo de potencia (7.10) obteniendo la siguiente expresión:
λτ1 q̇1
s+λ
λq̇1 q̈1
λq̇12
λ|q˙1 |
λ sen(q1 )q̇1
+ b1
+ fc1
+ m1 glc1
s+λ
s+λ
s+λ
s+λ
2
2
1
2 ] s λq̇1 + b λq̇1 + f λ|q̇1 | + m gl λ sen(q1 )q̇1
[ Ir1 + m1 lc1
1
c1
1 c1
2
s+λ
s+λ
s+λ
s+λ
(7.12)
2
= [ Ir1 + m1 lc1
]
=
El modelo de potencia del péndulo tiene la desventaja de requerir la medición de
la aceleración q̈1 como en el caso del modelo dinámico. Sin embargo, la aceleración
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.5
357
Modelos de regresión del péndulo
puede ser obtenida por aproximación de técnicas de filtrado. La aceleración puede
λq̇ 2
q̇1q̈1
d
ser aproximada de la siguiente forma: λs+λ
= 12 s s+λ1 , s = dt
.
♣♣♣ Ejemplo 7.10
Obtener el valor numérico de los parámetros del péndulo empleando el modelo de
potencia filtrada. Utilice los parámetros del péndulo indicados en la tabla 6.3.
Solución
El modelo de regresión de la potencia filtrada para el péndulo es:
⎡ˆ
2 ⎤
Ir1 + m̂1 ˆlc1
⎢
⎥
2
b̂1
λτ1 q1
⎥
λq̇12
λ sen(q1 )q̇1
λ|q̇1| ⎢
1 λq̇1
e(k) =
− [ 2 s s+λ
⎥
s+λ
s+λ
s+λ ] ⎢
ˆ
s
+
λ
⎣
⎦
fc1
ψ (k)
ˆ
y(k)
m̂1 ĝlc1
θ̂ (k−1)
El proceso de identificación paramétrica del modelo dinámico filtrado del péndulo
se implementó en el programa cap7 pendulopotfilsimu.m (cuadro 7.14). A través
de la señal filtrada de la posición (lı́neas 13-21) se puede obtener la estimación de
la velocidad y aceleración. Por ejemplo, la señal filtrada de la posición se obtiene en
la lı́nea 15 y la aproximación de la velocidad articular se realiza en la lı́nea 16. La
señal filtrada de la velocidad articular se genera en la lı́nea 17, la cual se emplea para
aproximar a la aceleración en la lı́nea 18. Evidentemente la señal de la aceleración
es de baja calidad debido a que fue obtenida de la aproximación de la velocidad; lo
más adecuado es obtener la aceleración por aproximación de la señal de velocidad
que entrega el sensor del robot. No siempre es posible realizar eso, ya que los robots
sólo están equipados con el sensor del encoder para proporcionar información de
la posición. Sin embargo, este es un escenario real que corresponde al ambiente
industrial donde la contaminación de ruido es alto en las variables de estado. En
este contexto, la sintonı́a de la frecuencia de corte λ presenta un problema práctico
el cual se determina de manera empı́rica. El resultado del vector θ̂ se encuentra en
la tabla 7.1.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
358
Capı́tulo 7: Identificación paramétrica
Código Fuente 7.14
cap7 pendulopotfilsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 pendulopotfilsimu.m
1
2
3
4
clc; clear all; close all;
format short g
global tau1 qpp1 %variables global para almacenar par y aceleración
6
ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector tiempo
ci=[0; 0]; %condiciones iniciales
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
7
%solución numérica de la dinámica del péndulo
8
[t,x]=ode45(’cap7 pendulo’,t,ci,opciones);
xp=pendulo(t,x,9); [m n]=size(t);
q1=x(:,1); qp1=x(:,2);
Ftau1qp1=zeros(m,1); Fq1=zeros(m,1); sFq1=zeros(m,1); Fqp1qp1=zeros(m,1);
5
9
10
11
12
13
14
15
16
17
18
19
20
sFqp1=zeros(m,1); Fabs=zeros(m,1); Fsinqp1=zeros(m,1); lambda=25;
for k=2:m %filtros
Ftau1qp1(k)=exp(-h*lambda)*Ftau1qp1(k-1)+(1-exp(-h*lambda))*tau1(k1)*qp1(k-1);
Fq1(k)=exp(-h*lambda)*Fq1(k-1)+(1-exp(-h*lambda))*q1(k-1);
sFq1(k)=-lambda*Fq1(k)+lambda*q1(k) ;
Fqp1qp1(k)=exp(-h*lambda)*Fqp1qp1(k-1)+(1-exp(-h*lambda))*sFq1(k1)*sFq1(k-1);
sFqp1(k)=-lambda*Fqp1qp1(k)+lambda*sFq1(k)*sFq1(k);
Fabs(k)=exp(-h*lambda)*Fabs(k-1)+(1-exp(-h*lambda))*abs(sFq1(k-1));
Fsinqp1(k)=exp(-h*lambda)*Fsinqp1(k-1)+(1-exp(-h*lambda))*sin(q1(k1,1))*sFq1(k-1,1);
21
22
23
24
end
fi=[(1/2)*sFqp1, Fqp1qp1, Fabs, Fsinqp1];
[r,theta] =mincuad(Ftau1qp1,fi);
theta
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.5
359
Modelos de regresión del péndulo
7.5.6
7.5.6. Análisis comparativo de esquemas de regresión
La tabla 7.1 contiene el resumen de resultados de los cinco esquemas de regresión
evaluados para el péndulo. Para propósitos de comparación se presentan los valores
reales de los parámetros θi , con i = 1, · · · , 4.
Los modelos de regresión dinámico y de potencia generan una estimación exacta,
libre de error, en contraste el modelo de regresión de la energı́a tiene un 99.956 %
de exactitud en el parámetro del momento de inercia, tiene una deriva del 3.43 % en
referencia al valor del coeficiente de fricción viscosa, la exactitud de estimación en
el coeficiente de fricción de Coulomb es del 99.91 %, mientras que para el parámetro
del par gravitacional es del 100 %. En este procedimiento hay que tomar en cuenta
que el método de integración numérica seleccionado fue el de Euler y también influye
el espaciamiento que existe entre las muestras (h = 0.001). Los modelos de regresión
filtrado presentan pobre exactitud en la identificación paramétrica; errores grandes
alrededor del 40 %. En este punto es conveniente resaltar que la frecuencia de corte
de los filtros λ influye notablemente en la convergencia paramétrica, su valor se
λ
determina en forma empı́rica; además la función de transferencia del filtro λ+s
distorsiona la fase, lo que trae como consecuencia errores de aproximación en la
aceleración articular.
Tabla 7.1 Comparación de resultados de identificación paramétrica
Parámetro
Ir1 + m1 l2c1
Nm seg2
rad
b1
Nm seg
rad
fc1
Nm
m1 glc1
Nm
0.18546
0.16
0.19
3.0831
l2c1
Iˆr1 + m̂1 ˆ
b̂1
fˆc1
m̂1 ĝ ˆ
lc1
Modelo dinámico
0.18546
0.16
0.19
3.0831
Modelo dinámico filtrado
0.17682
0.25021
0.15068
3.0384
Modelo de energı́a
0.18538
0.16055
0.18983
3.0831
Modelo de potencia
0.18546
0.16
0.19
3.0831
Modelo de potencia filtrada
0.24657
0.26366
0.11265
3.1154
Valor real
Esquema de regresión
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
360
Capı́tulo 7: Identificación paramétrica
7.6 Modelos de regresión del robot de 2 gdl
E
l modelo dinámico de un robot antropomórfico planar de 2 gdl está determinado por la matriz de inercia, fuerzas centrı́petas y de Coriolis, par o torque
gravitacional y fenómeno de fricción. Una parte clave del procedimiento de identificación paramétrica consiste en seleccionar un adecuado conjunto de parámetros;
para el caso particular del robot de 2 gdl se pueden seleccionar 11 parámetros:
⎡
⎤
θ1 + 2θ2 cos(q2 ) θ3 + θ2 cos(q2 )
⎢
⎥
M (q) = ⎣
⎦ ,
θ3 + θ2 cos(q2 )
θ3
⎡
⎤
−2θ2 sen(q2 ) q̇2 −θ2 sen(q2 ) q̇2
⎢
⎥
C(q, q̇) = ⎣
⎦ ,
θ2 sen(q2 ) q̇1
0
⎤
θ4 sen(q1 ) + θ5 sen(q1 + q2 )
⎢
⎥
g(q) = ⎣
⎦ ,
θ5 sen(q1 + q2 )
θ6 q̇1 + θ8 sgn(q̇1 ) + θ10 [ 1 − | signo ( q̇1 ) | ]
f (q̇) =
θ7 q̇2 + θ9 sgn(q̇2 ) + θ11 [ 1 − | signo ( q̇2 ) | ]
⎡
donde
2
2
θ1 = m1 lc1
+ m2 l12 + m2 lc2
+ I1 + I2 ,
θ2 = l1 m2 lc2 ,
2
θ3 = m2 lc2
+ I2 ,
θ4 = g(lc1m1 + m2 l1 ),
θ5 = gm2 lc2 ,
θ6 = b1 ,
θ7 = b2 ,
θ8 = fc1 ,
θ9 = fc2 ,
θ10 = fe1 ,
θ11 = fe2 .
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.6
361
Modelos de regresión del robot de 2 gdl
7.6.1
7.6.1. Modelo de regresión dinámico del robot de 2 gdl
El modelo dinámico del robot antropomórfico de 2 gdl puede ser expresado de manera
conveniente como el producto de una matriz de regresión y un vector de parámetros.
Observe que los componentes del vector de parámetros θ = [θ1 · · · θ11 ]T dependen
de una combinación de los parámetros fı́sicos de los eslabones como masas, centros
de masas, momentos de inercia y coeficientes de fricción, los cuales se consideran invariantes en el tiempo. En este caso, el orden de la matriz de regresión P es 11 × 11.
⎡
τ1
τ2
=
ψ
11
ψ12
ψ13
ψ14
ψ15
ψ16
ψ17
ψ18
ψ19
ψ110
ψ21
ψ22
ψ23
ψ24
ψ25
ψ26
ψ27
ψ28
ψ29
ψ210
⎢
⎢
⎢
⎢
⎢
⎢
ψ111 ⎢
⎢
ψ211 ⎢
⎢
⎢
⎢
⎢
⎣
θ1
θ2
θ3
θ4
θ5
θ6
θ7
θ8
θ9
θ10
θ11
⎤
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥ (7.13)
⎥
⎥
⎥
⎥
⎥
⎦
donde los elementos del regresor ψ están dados como:
ψ11 = q̈1
ψ12 = 2 cos(q2 )q̈1 + cos(q2 )q̈2 − 2 sen(q2 )q̇2 q̇1 − sen(q2 )q̇22
ψ13 = q̈2
ψ14 =
sen(q1 )
ψ15 =
sen(q1 + q2 )
ψ16 = q̇1
ψ17 = 0
ψ18 =
signo ( q̇1 )
ψ19 = 0
ψ110 = 1 − | signo ( q̇1 ) |
ψ111 = 0
ψ21 = 0
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
362
Capı́tulo 7: Identificación paramétrica
ψ22 = cos(q2 )q̈1 + sen(q2 )q̇12
ψ23 = q̈1 + q̈2
ψ24 = 0
ψ25 =
sen(q1 + q2 )
ψ26 = 0
ψ27 = q̇2
ψ28 = 0
ψ29 =
signo ( q̇2 )
ψ210 = 0
ψ211 = 1 − | signo ( q̇2 ) |
♣♣♣ Ejemplo 7.12
Realizar el procedimiento de identificación paramétrica de un robot manipulador
de 2 gdl empleando el modelo de regresión dinámico. Emplear los valores
numéricos de los parámetros del robot de 2 gdl indicados en la tabla 6.4.
Solución
El modelo de regresión del modelo dinámico del robot antropomórfico de 2 gdl
está dado por la siguiente expresión:
2
e(k) =
»
ψ11
−
τ2 | ψ21
τ1
y(k)
ψ12
ψ22
ψ13
ψ23
ψ14
ψ24
ψ15
ψ25
ψ16 ψ17
ψ26 ψ27
{z
ψ(k)
ψ18
ψ28
ψ19
ψ29
ψ110
ψ210
θ̂1
3
6 θ̂2 7
6
7
6
7
6 θ̂3 7
6
7
6 θ̂4 7
6
7
6
7
– 6 θ̂5 7
7
ψ111 6
6 θ̂6 7
7
ψ211 6
6
7
} 6 θ̂7 7
6
7
6 θ̂8 7
6
7
6
7
6 θ̂9 7
6
7
4 θ̂10 5
θ̂11
| {z }
θ̂(k−1)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.6
Modelos de regresión del robot de 2 gdl
363
Note que el problema de identificación paramétrica para un robot de 2 gdl es
complejo, ahora el modelo de regresión es multivariable y no escalar como los
esquemas de regresión del péndulo, por lo que deberá usarse la función mincuadm.
Una fase importante del procedimiento consiste en elegir una adecuada trayectoria
de entrada al robot manipulador que permita obtener cierto grado de excitación en
la matriz de regresión debido a que la calidad de estimación del vector de parámetros
depende de los niveles de excitación del regresor; por ejemplo el algoritmo de mı́nimos
cuadrados recursivo usualmente requiere satisfacer ciertas condiciones de excitación
persistente. Sin embargo, la selección de la trayectoria no es una tarea trivial, debido
a que la matriz de regresión está compuesta por una combinación no lineal de
las variables dinámicas del robot tal como sen(q2 )q̇12 , cos(q2 )q̇1 . Para el diseño de
la trayectoria de excitación persistente se recomienda superposición de funciones
senoidales como los siguientes pares aplicados:
τ1 = [ 1 − e−0.8t ] 29.0 + 68 sen(16t + 0.1) + 9 sen(20t + 0.15)
(7.14)
τ2 = [ 1 − e−1.8t ] 1.2 + 8 sen(26t + 0.08) + 2 sen(12t + 0.34)
(7.15)
El cuadro 7.15 contiene implementado el modelo dinámico del robot de 2 gdl en
lenguaje MATLAB (programa cap7 iderobot2gdl.m); se han utilizado los valores
numéricos de los parámetros del robot mostrados en la tabla 6.4, ası́ como las
ecuaciones del par aplicado (7.14)-(7.15).
El programa principal cap7 iderobot2gdlsimu.m permite realizar el procedimiento
de identificación paramétrica del robot de 2 gdl, y está descrito en el cuadro 7.16.
El registro de las señales de pares aplicados τ1 , τ2 se realiza a través de variables
globales (lı́nea 2). La solución numérica del modelo dinámico del robot de 2 gdl se
encuentra en la lı́nea 7; empleando dicha solución numérica q1 (t), q2 (t), q̇1 (t), q̇2 (t)
en el modelo dinámico del robot se registran la aceleración q̈ = [ q̈1 , q̈2 ] y pares
aplicados τ1 , τ2 (ver lı́neas 11 a la 16).
Las componentes ψij , con i = 1, 2, · · ·, 11 y j = 1, 2 del regresor de observaciones
se forman entre las lı́neas 18 y 24. El regresor ψ queda formado en las lı́neas 25 y
26. La función de mı́nimos cuadrados recursivo para el caso multivariable mincuadm
se usa en la lı́nea 27 para obtener el vector de parámetros estimado θ ∈ˆIR11 . Los
resultados se encuentran en la tabla 7.2.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
364
Capı́tulo 7: Identificación paramétrica
Código Fuente 7.15
cap7 iderobot2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 iderobot2gdl.m
1
function xp = cap7 iderobot2gdl(t,x)
2
global tau1 tau2
q1=x(1); q2=x(2); q = [q1; q2]; %vector de posición articular
qp1=x(3); qp2=x(4); qp = [qp1; qp2]; % vector de velocidad articular
m1=23.902; l1=0.45; lc1=0.091; %parámetros del robot
3
4
5
6
I1=1.266; b1=2.288; fc1=7.17; fe1=8.8; m2=3.880; l2=0.45; lc2=0.048;
I2=0.093; b2=0.175; fc2=1.734; fe2=1.87; g=9.81;
theta1=m1*lc1*lc1+m2*l1*l1+m2*lc2*lc2+I1+I2;
theta2=l1*m2*lc2; theta3=m2*lc2*lc2+I2; theta4=g*(lc1*m1+m2*l1);
7
8
9
10
theta5=g*m2*lc2; theta6=b1; theta7=b2; theta8=fc1; theta9=fc2;
theta10=fe1; theta11=fe2;
11
12
%matriz de inercia
M=[theta1+2*theta2*cos(q2), theta3+theta2*cos(q2);
13
14
theta3+theta2*cos(q2), theta3];
15
%matriz de Coriolis y fuerzas centrı́petas
C=[ -2*theta2*sin(q2)*qp2, -theta2*sin(q2)*qp2;
theta2*sin(q2)*qp1, 0];
16
17
18
gq11=theta4*sin(q1)+theta5*sin(q1+q2); gq21=theta5*sin(q1+q2);
gq=[gq11; gq21]; %par gravitacional
19
20
%par de fricción viscosa, Coulomb y estática
fr=[theta6*qp1+theta8*sign(qp1)+theta10*(1-abs(sign(qp1)));
21
22
theta7*qp2+theta9*sign(qp2)+theta11*(1-abs(sign(qp2)))];
tau1=(1-exp(-0.8*t))*29.0+ 68*sin(16*t+0.1) + 9*sin(20*t+0.15);
tau2=(1-exp(-1.8*t))*1.2+ 8*sin(26*t+0.08)+2*sin(12*t+0.34);
tau=[tau1; tau2]; %señal de excitación persistente
23
24
25
qpp = M∧ (-1)*(tau-C*qp-gq-fr); %aceleración articular
xp = [qp1; qp2; qpp(1); qpp(2)]; %vector de salida
26
27
28
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.6
365
Modelos de regresión del robot de 2 gdl
Código Fuente 7.16
cap7 iderobot2gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 iderobot2gdlsimu.m
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
clc; clear all; close all; format short g
global tau1 tau2
ti=0; h=0.001; tf = 5; t=ti:h:tf; %tiempo de simulación
ci=[0; 0; 0; 0]; %condiciones iniciales
opciones=odeset(’RelTol’,1e-3,’InitialStep’, 1e-3, ’MaxStep’, 1e-3);
%solución numérica del robot antropomórfico de 2 gdl
[t,x]=ode45(’cap7 iderobot2gdl’,t,ci,opciones);
T
T
%vectores de posición q = [ q1 , q2 ] y velocidad q̇ = [ q̇1 , q̇2 ]
q1=x(:,1); q2=x(:,2); qp1=x(:,3); qp2=x(:,4);
[m n]=size(t); qpp1=zeros(m,1); qpp2=zeros(m,1); u1=zeros(m,1); u2=zeros(m,1);
for k=1:m
xp=cap7 iderobot2gdl(t(k),[x(k,1),x(k,2),x(k,3), x(k,4)]);
qpp1(k,1)=xp(3,1);
qpp2(k,1)=xp(4,1);
u1(k,1) =tau1; u2(k,1) =tau2;
end
tau=[u1; u2];
fi11=qpp1;
fi12=2*cos(q2).*qpp1+cos(q2).*qpp2-2*sin(q2).*qp2.*qp1-sin(q2).*qp2.*qp2;
fi13=qpp2; fi14=sin(q1); fi15=sin(q1+q2); fi16=qp1; fi17=zeros(m,1);
fi18=sign(qp1); fi19=zeros(m,1); fi110=(1-abs(sign(qp1))); fi111=zeros(m,1);
fi21=zeros(m,1); fi22=cos(q2).*qpp1+sin(q2).*qp1.*qp1; fi23=qpp1+qpp2;
fi24=zeros(m,1); fi25=sin(q1+q2); fi26=zeros(m,1); fi27=qp2;
fi28=zeros(m,1); fi29=sign(qp2); fi210=zeros(m,1); fi211=(1-abs(sign(qp2)));
fi=[fi11, fi12, fi13, fi14, fi15, fi16, fi17, fi18, fi19, fi110, fi111 ;
27
fi21, fi22, fi23, fi24, fi25, fi26, fi27, fi28, fi29, fi210, fi211];
theta=mincuadm(tau,fi,m,11,2);
28
theta
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
366
Capı́tulo 7: Identificación paramétrica
7.6.2
7.6.2. Modelo de energı́a del robot de 2 gdl
El modelo de energı́a de un robot de 2 gdl con condiciones iniciales cero está dado
por la siguiente ecuación:
t
[ τ1
τ2 ]
q̇1
q̇2
0
⎤
θ1 + 2θ2 cos(q2 ) θ3 + θ2 cos(q2 ) 1 q̇1
⎢
⎥ q̇1
dt =
⎣
⎦
2 q̇1
q̇1
θ3 + θ2 cos(q2 )
θ3
⎡ t 2 ⎤
θ6 0 q̇1 dt
θ4 [ 1 − cos(q1 ) ] + θ5 [ 1 − cos(q1 + q2 ) ]
⎥
⎢
+
+⎣
⎦
t 2
θ5 [ 1 − cos(q1 + q2 ) ]
θ7 0 q̇2 dt
t
⎡ t
⎤ ⎡
⎤
θ8 0 |q̇1 |dt
θ10 0 q̇1 [ 1 − | signo ( q̇1 | ) ]dt
⎢
⎥ ⎢
⎥
+⎣
⎦+⎣
⎦
t
t
θ9 0 |q̇2 |dt
θ11 0 q̇2 [ 1 − | signo ( q̇2 | ) ]dt
(7.16)
T
⎡
El modelo de energı́a del robot manipulador de 2 gdl no requiere de la medición de
la aceleración articular, y a demás se convierte en un modelo de regresión escalar.
♣♣♣ Ejemplo 7.12
Llevar a cabo la identificación paramétrica de un robot manipulador de 2 gdl
empleando el modelo de regresión de la energı́a. Emplear los valores numéricos de
los parámetros del robot de 2 gdl indicados en la tabla 6.4.
Solución
El error de predicción del modelo de regresión de la energı́a del robot antropomórfico
de 2 gdl se encuentra expresado de la siguiente manera:
Rt
e(k) = [
Alfaomega
0
τ1 q̇1 + τ2 q̇2 ] dt − [ ψ11
y(k)
ψ12
ψ13
ψ14
ψ15
ψ16
ψ (k)
ψ17
ψ18
ψ19
ψ110
ψ111 ] θ̂
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.6
Modelos de regresión del robot de 2 gdl
367
siendo las componentes ψij del vector de regresión:
1 2
q̈
2 1
= cos(q2 )q̇1 (q̇1 + q̇2 )
ψ11 =
ψ12
ψ13 = q̇2 [ 12 q̇2 + q̇1 ]
ψ14 = 1 − cos(q1 )
ψ15 = 1 − cos(q1 + q2 )
t
q̇12 dt
ψ16 =
0
t
ψ17 =
0
t
ψ18 =
q̇22 dt
|q̇1 |dt
0
t
ψ19 =
|q̇2 |dt
0
t
ψ110 =
q̇1 [ 1 − | signo ( q̇1 | ) ]dt
0
ψ111 =
t
q̇2 [ 1 − | signo ( q̇2 | ) ]dt
0
El programa cap7 energiarobot2gdlsimu.m que se encuentra en el cuadro 7.17
lleva a cabo la implementación de identificación paramétrica para el robot de 2 gdl.
De manera análoga al anterior ejemplo se emplea el modelo dinámico del robot de
2 gdl para obtener la solución numérica (lı́nea 10) y el registro de la señal del par
aplicado en la lı́nea 15.
El conjunto de integrales del regresor de observaciones se encuentra implementado
de la lı́nea 20 a la 28 a través de la técnica de integración numérica de Euler. Las
componentes individuales ψij del regresor se forman en las lı́neas 30-32, mientras que
el regresor completo está declarado en la lı́nea 33. La función de mı́nimos cuadrados
para la versión escalar mincuad se emplea en la lı́nea 34. El resultado del vector de
parámetros estimados θ̂ está contenido en la tabla 7.2.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
368
Capı́tulo 7: Identificación paramétrica
Código Fuente 7.17
cap7 energiarobot2gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 energiarobot2gdlsimu.m
1 clc; clear all; close all;
2
3
4
5
format short g
global tau1 tau2
ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector tiempo
ci=[0; 0; 0; 0]; %condiciones iniciales
6 opciones=odeset(’RelTol’,1e-3, ’InitialStep’,1e-3, ’MaxStep’,1e-3);
7 %solución numérica del robot de 2 gdl
8 disp(’Advertencia: la simulación puede durar varios segundos......’)
9 disp(’Espere por favor..............’)
10 [t,x]=ode45(’cap7 iderobot2gdl’,t,ci,opciones);
11 q1=x(:,1); q2=x(:,2);%vector de posición
12 qp1=x(:,3); qp2=x(:,4); %vector de velocidad
13 [m n]=size(t); Int1=zeros(m,1); Int2=zeros(m,1); Int3=zeros(m,1); Int4=zeros(m,1);
14 Int5=zeros(m,1); Int6=zeros(m,1); Int7=zeros(m,1); u1=zeros(m,1); u2=zeros(m,1);
15 for k=1:m
%registro de la se~
nal del par aplicado τ
16
17
18
xp=cap7 iderobot2gdl(t(k),[x(k,1),x(k,2),x(k,3), x(k,4)]);
u1(k,1) =tau1;
u2(k,1) =tau2;
19 end
20 for k=2:m
%integrales del regresor
21
Int1(k,1)=Int1(k-1,1)+h*(qp1(k,1)*u1(k,1)+qp2(k,1)*u2(k,1));
22
Int2(k,1)=Int2(k-1,1)+h*qp1(k,1)*qp1(k,1);
23
24
25
Int3(k,1)=Int3(k-1,1)+h*qp2(k,1)*qp2(k,1);
Int4(k,1)=Int4(k-1,1)+h*abs(qp1(k,1));
Int5(k,1)=Int5(k-1,1)+h*abs(qp2(k,1));
26
27
Int6(k,1)=Int6(k-1,1)+h*qp1(k,1)*(1-abs(sign(qp1(k,1))));
Int7(k,1)=Int7(k-1,1)+h*qp2(k,1)*(1-abs(sign(qp2(k,1))));
28 end
29
30
31
32
%regresor ψ
fi11=(1/2)*qp1.*qp1 ; fi12=cos(q2).*qp1.*(qp1+qp2); fi13=qp2.*((1/2)*qp2+qp1);
fi14=1-cos(q1); fi15=1-cos(q1+q2); fi16=Int2; fi17=Int3;
fi18=Int4; fi19=Int5; fi110=Int6; fi111=Int7;
33 fi=[fi11, fi12, fi13, fi14, fi15, fi16, fi17, fi18, fi19, fi110, fi111];
34 [r,theta] =mincuad(Int1,fi) ;
35 theta
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.6
Modelos de regresión del robot de 2 gdl
369
7.6.3
7.6.3. Modelo de potencia del robot de 2 gdl
El modelo de potencia del robot de 2 gdl representa la derivada temporal del modelo
de energı́a. La siguiente ecuación describe el modelo de potencia:
[ τ1
τ2 ]
q̇1
q̇2
⎤
θ3 + θ2 cos(q2 ) q̇1
⎢
⎥ q̈1
=
⎣
⎦
q̇1
q̈1
θ3 + θ2 cos(q2 )
θ3
⎡
⎤
T −2θ2 sen(q2 )q̇2 −θ2 sen(q2 )q̇2 1 q̇1
⎢
⎥ q̇1
+
⎣
⎦
2 q̇1
q̇1
−θ2 sen(q2 )q̇2
0
⎡
⎤
θ6 q̇12
θ4 sen(q1 )q̇1 + θ5 sen(q1 + q2 ) [ q̇1 + q̇2 ]
⎢
⎥
+
+⎣
⎦
θ5 sen(q1 + q2 ) [ q̇1 + q̇2 ]
2
θ7 q̇2
⎡
⎤ ⎡
⎤
θ8 |q̇1 |
θ10 q̇1 [ 1 − | signo ( q̇1 | ) ]
⎢
⎥ ⎢
⎥
+⎣
⎦+⎣
⎦
θ9 |q̇2 |
θ11 q̇2 [ 1 − | signo ( q̇2 | ) ]
(7.17)
T
⎡
θ1 + 2θ2 cos(q2 )
El modelo de potencia del robot manipulador de 2 gdl requiere la medición de la
aceleración articular, y pertenece a la clase de modelos de regresión escalar.
♣♣♣ Ejemplo 7.13
Obtener el valor numérico de los parámetros de un robot de 2 gdl empleando el
modelo de potencia. Utilice los parámetros del robot de 2 gdl indicados en la tabla
6.4.
Solución
Para llevar a cabo la identificación paramétrica del robot de 2 gdl usando el modelo
de potencia es necesario obtener el modelo de regresión. Con esta finalidad considere
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
370
Capı́tulo 7: Identificación paramétrica
el siguiente regresor:
⎡
e(k) = [ τ1
q̇1
τ2 ]
−[ ψ11
q̇2
ψ12
ψ13
ψ14
ψ15
ψ16
ψ17
y(k)
ψ18
ψ19
ψ110
⎢
⎢
⎢
⎢
⎢
⎢
⎢
ψ111 ] ⎢
⎢
⎢
⎢
⎢
⎢
⎣
θ1
θ2
θ3
θ4
θ5
θ6
θ7
θ8
θ9
θ10
θ11
donde los elementos del regresor ψ están dados como:
ψ11 = q̇1 q̈1
ψ12 = − sen(q2 )q̇2 q̇1 [ q̇1 + q̇2 ] + cos(q2 )q̈1 [ q̇1 + q̇2 ] + cos(q2 )q̇1 [ q̈1 + q̈2 ]
ψ13 = q̈2 [ 12 q̇2 + q̇1 ] + q̇2 [ 12 q̈2 + q̇1 ] + q̇2 [ 12 q̇2 + q̈1 ]
ψ14 =
sen(q1 )q̇1
ψ15 =
sen(q1 + q2 ) [ q̇1 + q̇2 ]
ψ16 = q̇12
ψ17 = q̇22
ψ18 = |q̇1 |
ψ19 = |q̇2 |
ψ110 = q̇1 [ 1 − | signo ( q̇1 ) | ]
ψ111 = q̇2 [ 1 − | signo ( q̇2 ) | ]
El programa cap7 potenciarobot2gdlsimu.m contiene el código para realizar la
identificación paramétrica de un robot de 2 gdl a través del modelo de potencia
(ver cuadro 7.18). En forma similar a los anteriores ejemplos, primero se realiza
la integración numérica sobre la dinámica del robot, con las variables de estado se
obtiene el registro de aceleración y señales con los pares aplicados a los servomotores
(lı́neas 18-24). Las componentes del vector de observaciones se indican en las lı́neas
25 a la 31. El regresor se forma en la lı́nea 32 y la función de mı́nimos cuadrados
escalar se emplea en la lı́nea 33. El vector de predicción θ̂ se encuentra indicado en
la tabla 7.2.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
⎤
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎦
7.6
371
Modelos de regresión del robot de 2 gdl
Código Fuente 7.18
cap7 potenciarobot2gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 potenciarobot2gdlsimu.m
1 clc; clear all;
2 close all;
3 format short g
4
5
6
7
global tau1 tau2
ti=0; h=0.001; tf = 5;
t=ti:h:tf; %vector tiempo
ci=[0; 0; 0; 0]; %condiciones iniciales
8 opciones=odeset(’RelTol’, 1e-3, ’InitialStep’,1e-3, ’MaxStep’,1e-3);
9 %solución numérica del robot de 2 gdl
10 disp(’Advertencia: la simulación puede durar varios segundos......’)
11
12
13
14
disp(’Espere por favor..............’)
[t,x]=ode45(’cap7 iderobot2gdl’,t,ci,opciones);
q1=x(:,1); q2=x(:,2);%vector de posición
qp1=x(:,3); qp2=x(:,4);%vector de velocidad
15 [m n]=size(t);
16 qpp1=zeros(m,1); qpp2=zeros(m,1);%vectores de aceleración
17 u1=zeros(m,1); u2=zeros(m,1); %vectores de pares aplicados
18 for k=1:m
%registro de la aceleración q̈ y par aplicado τ
19
xp=cap7 iderobot2gdl(t(k),[x(k,1),x(k,2),x(k,3), x(k,4)]);
qpp1(k,1)=xp(3,1);%información de aceleración q̈1 (t)
20
qpp2(k,1)=xp(4,1);%información de aceleración q̈2 (t)
21
22
23
u1(k,1) =tau1; %par aplicado τ1 (t)
u2(k,1) =tau2; %par aplicado τ2 (t)
24 end
25 y=qp1.*u1+qp2.*u2; %regresor y
26 %regresor ψ
27 fi11=qp1.*qpp1;
28
29
30
31
fi12=-sin(q2).*qp2.*qp1.*(qp1+qp2)+cos(q2).*qpp1.*(qp1+qp2)+cos(q2).*qp1.*(qpp1+qpp2);
fi13=qpp2.*((1/2)*qp2+qp1)+qp2.*((1/2)*qpp2+qp1)+qp2.*((1/2)*qp2+qpp1);
fi14=sin(q1).*qp1; fi15=sin(q1+q2).*(qp1+qp2); fi16=qp1.*qp1; fi17=qp2.*qp2;
fi18=abs(qp1); fi19=abs(qp2); fi110=qp1.*(1-abs(sign(qp1))); fi111=qp2.*(1-abs(sign(qp2)));
32 fi=[fi11, fi12, fi13, fi14, fi15, fi16, fi17, fi18, fi19, fi110, fi111];
33 [r,theta] =mincuad(y,fi);
34 theta
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
372
Capı́tulo 7: Identificación paramétrica
7.6.4
7.6.4. Análisis comparativo de resultados de regresión
La tabla 7.2 muestra los resultados de identificación paramétrica obtenidos a través
de los esquemas de regresión dinámico, energı́a y potencia para el robot manipulador
de 2 gdl en configuración antropomórfica.
De acuerdo a los resultados, el modelo dinámico es el que mejor estimación realiza,
inclusive identifica de manera exacta los parámetros de fricción estática. Estos
parámetros son particularmente difı́ciles de estimar debido a que la trayectoria
de excitación persistente produce movimiento en todo momento y por lo tanto el
fenómeno de fricción estática desaparece, es decir el término [ 1 − | signo ( q̇i ) | ] = 0
cuando el robot está en movimiento (q̇i > 0 o q̇i < 0), entonces esta componente no
mostrará variación temporal de tal forma que el algoritmo de mı́nimos cuadrados
tendrá divergencia en estos parámetros. Uno de los motivos por lo cual se obtiene
convergencia paramétrica en los parámetros de fricción estática es debido al fuerte
acoplamiento de la dinámica no lineal que se ve reflejado en el regresor multivariable.
En contraste con los métodos escalares este acoplamiento es más débil. De ahı́ que la
deriva en dichos parámetros es más pronunciada. El método de la potencia también
Tabla 7.2 Resultados de identificación paramétrica del robot de 2 gdl
Parámetro
Valor real
Dinámico
Energı́a
Potencia
θ̂1
2.351
2.351
2.358
2.353
θ̂2
0.0838
0.0838
0.0841
0.0843
θ̂3
0.1019
0.1019
0.1025
0.1017
θ̂4
38.466
38.466
38.461
38.412
θ̂5
1.827
1.827
1.8134
1.812
θ̂6
2.288
2.288
2.282
2.522
θ̂7
0.175
0.175
0.1616
0.140
θ̂8
7.17
7.17
7.1082
6.865
θ̂9
1.734
1.734
1.8289
1.761
θ̂10
8.8
8.8
10
10
θ̂11
1.87
1.87
11
11
proporciona buena exactitud en los resultados de identificación paramétrica, debido
que no se realiza ningún tipo de aproximación de la aceleración. No obstante, el
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.7
373
Robot cartesiano de 3 gdl
requerir medir la aceleración representa una desventaja práctica. Por otro lado,
el método de regresión de energı́a tiene pobre desempeño, realiza la identificación
con mayor margen de error. Note que los dos esquemas escalares divergen en los
parámetros de fricción estática
Otro aspecto importante que afecta la calidad en el proceso de identificación paramétrica es la forma de diseñar la señal de excitación persistente. Preferentemente
debe tener estructuras senoidales cuyas amplitudes no saturen a los servoamplificadores.
7.7 Robot cartesiano de 3 gdl
E
l modelo dinámico del robot manipulador en configuración cartesiana de 3 gdl
está formado por la matriz de masas, para gravitacional y fenómeno de fricción:
⎡ ⎤ ⎡
⎤⎡ ⎤ ⎡
⎤⎡ ⎤ ⎡
⎤⎡
⎤
0
τ1
θ1 0
d¨1
θ4 0 0
d˙1
θ7 0 0
signo ( d˙1 )
⎢ ⎥ ⎢
⎥⎢ ⎥ ⎢
⎥⎢ ⎥ ⎢
⎥⎢
⎥
0 ⎦ ⎣ d¨2 ⎦ + ⎣ 0 θ5 0 ⎦ ⎣ d˙2 ⎦ + ⎣ 0 θ8 0 ⎦ ⎣ signo ( d˙2 ) ⎦
⎣ τ2 ⎦= ⎣ 0 θ2
τ3
0
⎡
0
⎤
θ3
d¨3
0
0
θ6
d˙3
0
0
θ9
signo ( d˙3 )
θ10
⎢
⎥
+⎣ 0 ⎦
0
donde
θ1 = m1 + m2 + m3
θ2 = m1 + m2
θ3 = m3
θ4 = b1
θ5 = b2
θ6 = b3 ,
θ7 = fc1 ,
θ8 = fc2 ,
θ9 = fc3 ,
θ10 = g ( m1 + m2 + m3 )
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
374
Capı́tulo 7: Identificación paramétrica
7.7.1
7.7.1. Modelo de regresión dinámico del robot cartesiano
El modelo de regresión para el robot cartesiano de 3 gdl tiene la siguiente estructura:
⎡
⎤
θ̂1
⎢
⎥
⎢ θ̂2 ⎥
⎢
⎥
⎢ θ̂3 ⎥
⎢
⎥
⎢
⎥
⎡ ⎤
⎡
⎤ ⎢ θ̂4 ⎥
⎢
⎥
τ1
ψ11 ψ12 ψ13 ψ14 ψ15 ψ16 ψ17 ψ18 ψ19 ψ110 ⎢
⎥
θ̂
5
⎢ ⎥
⎥
⎢
⎥⎢
⎥
⎣ τ2 ⎦ = ⎣ ψ21 ψ22 ψ23 ψ24 ψ25 ψ26 ψ27 ψ28 ψ29 ψ210 ⎦ ⎢
⎢ θ̂6 ⎥
⎥
τ3
ψ31 ψ32 ψ33 ψ34 ψ35 ψ36 ψ37 ψ38 ψ39 ψ310 ⎢
⎥
⎢
⎢ θ̂7 ⎥
⎢
⎥
y(k)
ψ (k)
⎢ θ̂8 ⎥
⎢
⎥
⎢
⎥
⎣ θ̂9 ⎦
θ̂10
θ̂ (k−1)
donde las componentes del vector de regresión ψij , i = 1, 2, 3 y j = 1, 2, · · ·, 10 se
encuentran dados por:
ψ11 = d¨1
ψ21 = 0
ψ22 = d¨2
ψ12 = 0
ψ13 = 0
ψ14 = d˙1
ψ23 = 0
ψ31 = 0
ψ32 = 0
ψ33 = d¨3
ψ15 = 0
ψ24 = 0
ψ25 = d˙2
ψ16 = 0
ψ26 = 0
ψ35 = 0
ψ36 = d˙3
ψ27 = 0
ψ37 = 0
ψ18 = 0
ψ28 = signo ( d˙2 )
ψ38 = 0
ψ19 = 0
ψ29 = 0
ψ39 = signo ( d˙3 )
ψ110 = 1
ψ210 = 0
ψ310 = 0
ψ17
= signo ( d˙1 )
ψ34 = 0
En el modelo dinámico del robot cartesiano no se ha considera la fricción estática, que
particularmente es muy pequeña para servomotores con tecnologı́a de transmisión
directa. Note que dicho modelo dinámico no tiene el fenómeno de fuerzas centrı́petas
y de Coriolis, esto se debe a que en esta configuración sólo tiene articulaciones lineales
o prismáticas.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.7
Robot cartesiano de 3 gdl
375
♣♣♣ Ejemplo 7.14
Realizar identificación paramétrica de un robot en configuración cartesiana de
3 gdl empleando el modelo dinámico. Utilice los parámetros del robot de 3 gdl
indicados en la tabla 6.6.
Solución
El error de predicción del modelo dinámico del robot cartesiano de 3 gdl está dado
por:
⎡
⎤
θ̂1
⎢
⎥
⎢ θ̂2 ⎥
⎢
⎥
⎢ θ̂3 ⎥
⎢
⎥
⎢
⎥
⎡ ⎤ ⎡
⎤ ⎢ θ̂4 ⎥
⎥
τ1
ψ11 ψ12 ψ13 ψ14 ψ15 ψ16 ψ17 ψ18 ψ19 ψ110 ⎢
⎢
⎥
⎢ ⎥ ⎢
⎥ ⎢ θ̂5 ⎥
e(k) = ⎣ τ2 ⎦ − ⎣ ψ21 ψ22 ψ23 ψ24 ψ25 ψ26 ψ27 ψ28 ψ29 ψ210 ⎦ ⎢
⎥
⎢ θ̂6 ⎥
⎢
⎥
τ3
ψ31 ψ32 ψ33 ψ34 ψ35 ψ36 ψ37 ψ38 ψ39 ψ310 ⎢
⎢ θ̂7 ⎥
⎥
⎢
⎥
y(k)
ψ (k)
⎢ θ̂8 ⎥
⎢
⎥
⎢
⎥
θ̂
⎣ 9 ⎦
θ̂10
θ̂ (k−1)
El cuadro 7.19 contiene el código MATLAB donde se ha implementado el modelo
dinámico del robot cartesiano de 3 gdl (programa cap7 idecartesiano3gdl.m),
el cual contiene el efecto inercial, fenómeno de fricción viscosa y Coulomb, par
gravitacional, y la señal de prueba o par aplicado a los servomotores (excitación
persistente). Los valores de los parámetros del robot se han tomado de la tabla 6.6.
El programa cap7 idecartesiano3gdlsimu.m permite llevar a cabo el proceso de
identificación paramétrica (ver cuadro 7.20). En la lı́nea 2 se declaran las variables
globales para el registro de las señales del par aplicado. La integración numérica del
modelo dinámico del robot cartesiano de 3 gdl se realiza en la lı́nea 7. A través de
la solución numérica se obtiene la aceleración articular y pares aplicados (lı́nea 13).
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
376
Capı́tulo 7: Identificación paramétrica
Las componentes del vector de observaciones se realiza de la lı́nea 22 a la lı́nea 30;
el regresor completo se obtiene en las lı́neas 31-33. La función mı́nimos cuadrados
multivariable se emplea en la lı́nea 34 para obtener el vector de parámetros estimados
θ̂ cuyo resultado está indicado en la tabla 7.3.
Código Fuente 7.19
cap7 idecartesiano3gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 idecartesiano3gdl.m
1
function xp = cap7 idecartesiano3gdl(t,x)
2
global tau1 tau2 tau3
d = [x(1); x(2); x(3)]; %vector de posición articular
dp =[x(4); x(5); x(6)]; %vector de velocidad articular
3
4
5
m1=0.7; m2=0.28; m3=0.28;
b1=0.02; b2=0.08; b3=.02;
fc1=0.01; fc2=0.07; fc3=.02; g=9.81;
theta1=m1+m2+m3; theta2=m1+m2; theta3=m3;
6
7
8
9
theta4=b1; theta5=b2; theta6=b3; theta7=fc1;
theta8=fc2; theta9=fc3; theta10=g*(m1+m2+m3);
10
11
%modelo dinámico del robot
M = [theta1, 0, 0; 0 theta2, 0; 0 0 theta3]; %matriz de inercia
12
13
B=[ theta4, 0, 0; 0, theta5, 0; 0, 0, theta6]; %fricción viscosa
Fc=[theta7, 0, 0; 0, theta8, 0; 0, 0, theta9]; %fricción de Coulomb
par grav = [theta10; 0; 0]; %vector de pares de gravitacionales
fr= B*dp+Fc*sign(dp); %vector de fricción
14
15
16
17
tau1=12.36+ 0.05*sin(t);
tau2=(1-exp(-0.5*t))*0.13*sin(t);
tau3=0.06*sin(t);
tau=[tau1; tau2; tau3];
18
19
20
21
dpp = inv(M)*(tau- par grav-fr); %vector de aceleración articular
xp = [dp(1); dp(2); dp(3); dpp(1); dpp(2); dpp(3)]; %vector de salida
22
23
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.7
Robot cartesiano de 3 gdl
Código Fuente 7.20
377
cap7 idecartesiano3gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 idecartesiano3gdlsimu.m
1 clc; clear all; close all; format short g
2 global tau1 tau2 tau3
3 ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector tiempo
4 ci=[0; 0; 0; 0;0; 0]; %condiciones iniciales
5 opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
6 %solución numérica del robot cartesiano de 3 gdl
7 [t,x]=ode45(’cap7 idecartesiano3gdl’,t,ci,opciones);
8 d1=x(:,1); d2=x(:,2); d3=x(:,3); %posiciones articulares
9 dp1=x(:,4); dp2=x(:,5); dp3=x(:,6); %velocidades articulares
10
11
12
13
[m n]=size(t); % dimensión del vector tiempo
dpp1=zeros(m,1); dpp2=zeros(m,1); dpp3=zeros(m,1);%registro para d̈
u1=zeros(m,1); u2=zeros(m,1); u3=zeros(m,1); %registros para pares aplicados τ
for k=1:m
14
15
16
xp=cap7 idecartesiano3gdl(t(k),[x(k,1),x(k,2),x(k,3), x(k,4), x(k,5), x(k,6)]);
dpp1(k,1)=xp(4,1);
dpp2(k,1)=xp(5,1);
17
18
19
20
dpp3(k,1)=xp(6,1);
u1(k,1) =tau1;
u2(k,1) =tau2;
u3(k,1) =tau3;
21 end
22 tau=[u1; u2; u3]; %vector de pares aplicados
23
24
25
26
fi11=dpp1; fi12=zeros(m,1); fi13=zeros(m,1); fi14=dp1;
fi15=zeros(m,1); fi16=zeros(m,1); fi17=sign(dp1);
fi18=zeros(m,1); fi19=zeros(m,1); fi110=ones(m,1);
fi21=zeros(m,1); fi22=dpp2; fi23=zeros(m,1); fi24=zeros(m,1); fi25=dp2;
27 fi26=zeros(m,1); fi27=zeros(m,1); fi28=sign(dp2); fi29=zeros(m,1); fi210=zeros(m,1);
28 fi31=zeros(m,1); fi32=zeros(m,1); fi33=dpp3;
29 fi34=zeros(m,1); fi35=zeros(m,1); fi36=dp3;
30
31
32
33
fi37=zeros(m,1); fi38=zeros(m,1); fi39=sign(dp3); fi310=zeros(m,1) ;
fi=[fi11, fi12, fi13, fi14, fi15, fi16, fi17, fi18, fi19, fi110;
fi21, fi22, fi23, fi24, fi25, fi26, fi27, fi28, fi29, fi210;
fi31, fi32, fi33, fi34, fi35, fi36, fi37, fi38, fi39, fi310];
34 theta=mincuadm(tau,fi,m,13,3);
35 theta
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
378
Capı́tulo 7: Identificación paramétrica
7.7.2
7.7.2. Modelo de potencia del robot cartesiano de 3 gdl
El modelo dinámico de potencia del robot manipulador cartesiano de 3 gdl está dado
por:
⎡
⎤T ⎡
d˙1
θ1
⎢
⎥
⎢
[ τ1 d˙1 + τ2d˙2 + τ3 d˙3 ] = ⎣ d˙2 ⎦ ⎣ 0
0
d˙3
[ θ7
θ8
⎤ ⎡ ⎤T ⎡
d¨1
d˙1
θ4
⎥⎢ ¨ ⎥ ⎢ ˙ ⎥ ⎢
0 ⎦ ⎣ d2 ⎦ + ⎣ d2 ⎦ ⎣ 0
θ2
0 θ3
0
d¨3
d˙3
⎡ ˙ ⎤
|d1 |
⎢ ˙ ⎥
θ9 ] ⎣ |d2| ⎦ + θ10 d˙1
|d˙3|
0
0
⎤⎡
0
θ5
0
⎤
d˙1
⎥⎢ ⎥
0 ⎦ ⎣ d˙2 ⎦ +
θ6
d˙3
0
⎤⎡
el modelo de potencia del robot cartesiano de 3 gdl pertenece al tipo de regresores
escalares.
♣♣♣ Ejemplo 7.15
Realizar el procedimiento de identificación paramétrica de un robot cartesiano de
3 gdl empleando el modelo de potencia. Utilice los parámetros del robot de 3 gdl
indicados en la tabla 6.6.
Solución
El error de predicción del regresor lineal del modelo de potencia del robot cartesiano
de 3 gdl está dado por:
e(k) =
Alfaomega
[ τ1 d˙1 + τ2 d˙2 + τ3 d˙3 ] − [ ψ11
ψ12
ψ13
ψ14
ψ15
ψ16
ψ17
ψ18
ψ19
2 θ̂ 3
1
6 θ̂2 7
7
6
6 θ̂ 7
6 3 7
7
6
6 θ̂4 7
7
6
6 θ̂ 7
6 5 7
ψ110 ] 6
7
6 θ̂6 7
7
6
6 θ̂ 7
6 7 7
7
6
6 θ̂8 7
7
6
4 θ̂9 5
θ̂10
| {z }
θ̂(k−1)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.7
379
Robot cartesiano de 3 gdl
donde los componentes del regresor están compuestas por:
ψ11 = d˙1 d¨1
ψ12 = d˙2 d¨2
ψ13 = d˙3 d¨3
ψ14 = d˙2
1
ψ15
ψ16
= d˙22
= d˙23
ψ17 = |ḋ1 |
ψ18 = |ḋ2 |
ψ19 = |ḋ3 |
ψ110 = d˙1
El programa cap7 potenciacartesiano3gdlsimu.m muestra el código para realizar
la identificación paramétrica de un robot cartesiano de 3 gdl empleando su modelo
de potencia (ver cuadro 7.21). De la lı́nea 15 a 22 se forman las componentes del
regresor o vector de observaciones. De tal forma que dicho regresor está definido en
la lı́nea 23. La función de mı́nimos cuadrados versión escalar se emplea para obtener
el vector de parámetros estimados θ̂ (lı́nea 24). En la lı́nea 26 se grafica la variación
temporal que tienen las componentes del vectore θ̂ (ver figura 7.1).
Figura 7.1 Comportamiento de los componentes θ̂i .
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
380
Capı́tulo 7: Identificación paramétrica
Código Fuente 7.21
cap7 potenciacartesiano3gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap7 potenciacartesiano3gdlsimu.m
1
2
3
clc; clear all; close all; format short g
global tau1 tau2 tau3
ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector tiempo
4
ci=[0; 0; 0; 0;0; 0]’;
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
5
%solución numérica de la dinámica del robot cartesiano de 3 gdl
[t,x]=ode45(’cap7 idecartesiano3gdl’,t,ci,opciones);
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
d1=x(:,1); d2=x(:,2); d3=x(:,3); dp1=x(:,4); dp2=x(:,5); dp3=x(:,6);
[m n]=size(t); dpp1=zeros(m,1); dpp2=zeros(m,1); dpp3=zeros(m,1);
u1=zeros(m,1); u2=zeros(m,1); u3=zeros(m,1);
for k=1:m
xp=cap7 idecartesiano3gdl(t(k),[x(k,1),x(k,2),x(k,3), x(k,4), x(k,5), x(k,6)]);
dpp1(k,1)=xp(4,1); dpp2(k,1)=xp(5,1); dpp3(k,1)=xp(6,1);
u1(k,1) =tau1; u2(k,1) =tau2; u3(k,1) =tau3;
end
y=dp1.*u1+dp2.*u2+dp3.*u3 ;
fi11=dp1.*dpp1;
fi12=dp2.*dpp2;
fi13=dp3.*dpp3;
fi14=dp1.*dp1;
fi15=dp2.*dp2;
fi16=dp3.*dp3;
24
fi17=abs(dp1); fi18=abs(dp2); fi19=abs(dp3); fi110=dp1;
fi=[fi11, fi12, fi13, fi14, fi15, fi16, fi17, fi18, fi19, fi110];
[r,theta] =mincuad(y,fi);
25
theta %vector estimado θ̂
26
plot(t,r) %grafica la variación temporal de los componentes del vector θ̂
23
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
7.7
381
Robot cartesiano de 3 gdl
7.7.3
7.7.3. Análisis comparativo de identificación
Los resultados de identificación paramétrica del robot cartesiano de 3 gdl de los
modelos de regresión dinámico y potencia se encuentran contenidos en la tabla 7.3.
Para propósitos de comparación se proporcionan los valores reales de cada uno de
los componentes del vector θ.
El modelo de regresión dinámico tiene una identificación exacta de los diez
parámetros, este modelo de regresión es multivariable ya que toma como parte del
regresor las señales de pares τ1 , τ2 , τ3 , la matriz de regresión con las observaciones
de posición, velocidad y aceleración tiene dimensión: ψ ∈ IR3×10 .
Por otro lado, el modelo de regresión de la potencia resulta un esquema escalar, en
este caso las señales del par no forman parte del vector de mediciones de la entrada
del robot, más bien, forman parte de la potencia de entrada al robot en forma escalar
q̇1 τ1 + q̇2 τ2 + q̇3 τ3 ; se incorpora un vector de observaciones en lugar de la matriz de
mediciones. Dicho vector de observaciones tiene dimensión: ψ ∈ IR10×1 . El esquema
escalar es mucho más atractivo que la versión vectorial o multivariable debido a que
su implementación es mucho más fácil.
Tabla 7.3 Parámetros identificados del robot cartesiano de 3 gdl
Parámetro
Valor real
Dinámico
Potencia
θ̂1
1.26
1.26
1.26
θ̂2
0.98
0.98
0.98
θ̂3
0.28
0.28
0.28
θ̂4
0.02
0.02
0.02
θ̂5
0.08
0.08
0.08
θ̂6
0.02
0.02
0.02
θ̂7
0.01
0.01
0.01
θ̂8
0.07
0.07
0.07
θ̂9
0.02
0.02
0.02
θ̂10
12.361
12.361
12.361
Ambos esquemas de regresión dinámico (multivaribale) y potencia (escalar)
requieren la medición de la aceleración, lo que representa una desventaja cuando
el robot no dispone de los sensores adecuados para medir esa señal.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
382
Capı́tulo 7: Identificación paramétrica
7.8 Resumen
E
l método de mı́nimos cuadrados es una técnica de identificación paramétrica
que permite obtener el valor numérico de los parámetros del sistema empleando
mediciones experimentales de posiciones y velocidades articulares.
La naturaleza del modelo matemático a identificar puede ser diversa, por ejemplo:
dinámico (lineal y no-lineal), estático, continuo o discreto. Sin embargo, una
condición necesaria del método de mı́nimos cuadrados es que el modelo matemático
del sistema puede ser expresado como un regresor lineal de los parámetros a
identificar, es decir como el producto de una matriz de observaciones y un vector
columna de parámetros desconocidos; esta estructura genera un regresor vectorial
o multivariable. Ejemplos de esta categorı́a son los modelos dinámico y dinámico
filtrado de robots manipuladores.
Cuando el regresor lineal se puede expresar como el producto de un vector
transpuesto de observaciones y un vector columna de parámetros desconocidos,
entonces el regresor lineal se denomina escalar. Los modelos de regresión de la
energı́a, potencia y potencia filtrada son ejemplos del regresor lineal escalar.
Se han desarrollado dos librerı́as en código fuente MATLAB para resolver el
problema de identificación paramétrica:
[r, θ̂] =mincuad(y,fi)
θ̂ =mincuadm(y,fi,Nob,p,n)
Estas funciones permiten obtener la identificación paramétrica de sistemas
mecatrónicos y robots manipuladores reales. La calidad de estimación paramétrica
está en función del tipo de señal aplicada (excitación persistente), la exactitud de
aproximar las señales de velocidad y aceleración y en la medida de lo posible no
incluir en la matriz o vector de observaciones funciones discontinuas.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
383
Parte III Referencias selectas
Parte III Referencias selectas
D
entro de la extensa literatura sobre dinámica de sistemas mecánicos, se
recomiendan ampliamente los siguientes textos para que el lector pueda
profundizar en dinámica de sistemas mecatrónicos y robots manipuladores.
Dare A. Wells. “Lagrangian dynamics”. Schaum’s outlines 1967.
Leonard Meirovitch. “Methods of analytical dynamics”. McGrawHill. 1970.
A. P. French. “Mecánica newtoniana”. Editorial Reverté, S. A.
1978.
Wolfram
Stadler. “Analytical robotics and mechatronics”.
McGraw Hill International Editions. 1995.
Donald T. Greenwood. “Classical dynamics”. Dover Publications
Inc. 1997.
Jerry B. Marion. “Dinámica clásica de las partı́culas y sistemas”.
Editorial Reverté, S. A. 2000.
H. Goldstein. “Mecánica clásica”. Editorial Reverté, S. A. 2000.
G. C. Goodwin & K. S. Sin. “Adaptive filtering prediction and
control ”. Prentice-Hall, NY. 1984.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
384
Capı́tulo 7: Identificación paramétrica
M. Gautier & W. Khalil. “On the identification of the inertial
parameters of robot ”. Proceedings of the 27th Conference on
Decision and Control. Austin, Texas, pp. 2264–2269. 1988.
C. Canudas and A. Aubin. “Parameters identification of robot
manipulators via sequential hybrid estimation algorithms ”. Proc.
IFAC’90 Congress, Tallin, pp. 178–183, (1990).
M. Prüfer, C. Schmidt & F. Wahl. “Identification of robot
dynamics with differential and integral models: a comparison
”. Proceedings IEEE International Conference on Robotics and
Automation. San Diego, California, Vol 1, pp. 340–345. 1994.
F. Reyes F. & R. Kelly. “A direct drive robot for control research”.
Proc. IASTED International Conference, Applications of Control
and Robotics. Orlando, FL. pp. 181–184. 1996.
F. Reyes & R. Kelly. “Experimental evaluation of identification
schemes on a direct drive robot ”. Robotica. Cambridge University
Press. 15, pp. 563-571. 1997.
F. Reyes F. & R. Kelly. “On parameter identification of robot
manipulators ”. Proceedings of the 1997 IEEE International
Conference on Robotics and Automation. Albuquerque, New
Mexico. April. pp. 1910-1915. 1997.
F. Reyes, & E. Lopez. “A new hamiltonian-based identification
scheme for robot manipulators ”. Proceedings of the 5th WSEASIMMCCAS. Cancun, Mexico, May 11-14. pp. 126-131. 2005.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
385
Parte III Problemas propuestos
Parte III Problemas propuestos
E
n esta sección se presenta una serie de ejercicios con la finalidad de que el lector
mejore sus conocimientos sobre dinámica e identificación paramétrica.
Capı́tulo 6 Dinámica
6.1 Considere la siguiente función de transferencia
y
u
= c
wn2
s2 + 2ρwn + wn2
donde y ∈ IR es la salida del sistema, u ∈ IR es la entrada , ρ ∈ IR+ es el factor
de amortiguamiento, wn ∈ IR+ es la frecuencia natural de resonancia:
(a) Obtener el modelo dinámico.
(b) Realizar la conversión a variables de estado fase.
(c) Escribir un programa en MATLAB para simular el sistema con los
siguientes valores:
wn = 1, ρ = 0.1, c = 1.
wn = 1, ρ = 0.9, c = 1.
wn = 1, ρ = 1.5, c = 1.
6.2 Considere el sistema masa resorte amortiguador, en referencia a los programas
6.1 y 6.2 (modo oscilador), modifique el valor de la entrada de la fuerza a cero
Newtons, además considere condiciones iniciales diferentes a cero.
Realizar la simulación del sistema masa resorte amortiguador y analizar:
(a) La respuesta del sistema (posición y velocidad).
(b) Explicar el comportamiento del sistema.
Fundamente sus respuestas.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
386
Capı́tulo 7: Identificación paramétrica
6.3 Modificar los programas 6.9 y 6.10 para simular el péndulo robot usando la
siguiente entrada:
τ
= 5 sen(t) + 0.33 cos(t + 0.1random(’Normal’,t,t))
Obtener:
(a) Filtrado de la posición q1 (t).
(b) Estimación de la velocidad.
6.4 Implementar un control tipo proporcional derivativo
τ1
τ2
=
kp1
0
0
kp2
q̃1
q̃2
−
kv1
0
0
kv2
q̇1
q̇2
+ g(q)
para posicionar al robot antropomórfico de 2 gdl en las siguientes
configuraciones:
(a) [ qd1 , qd2 ]T = [ 45, 90 ]T grados.
(b) [ qd1 , qd2 ]T = [ 180, 0 ]T grados.
¿Qué método de sintonı́a en las ganancias proporcional derivativa puede
proponer?
6.5 Implementar un control tipo proporcional derivativo saturado dado por
⎡ ⎤
⎡
⎤⎡
⎤⎡
⎤ ⎡
⎤
τ1
kp1 0
tanh(q̃1 )
tanh(q̇1 )
0
0
kv1 0
⎢ ⎥
⎢
⎥⎢
⎥⎢
⎥ ⎢
⎥
⎣ τ2 ⎦ = ⎣ 0 kp2 0 ⎦ ⎣ tanh(q̃2 ) ⎦ − ⎣ 0 kv2 0 ⎦ ⎣ tanh(q̇2 ) ⎦ + g(q)
τ3
0
0
kp3
tanh(q̃3 )
0
0
kv3
tanh(q̇3 )
para controlar las posiciones articulares de la base, hombro y codo del robot
antropomórfico de 3 gdl en las siguientes configuraciones:
(a) [ qd1 , qd2 , qd3 ]T = [ 45, 90, 90]T grados.
(b) [ qd1 , qd2 , qd3 ]T = [ 45, 180, 0]T grados.
¿Qué método de sintonı́a en las ganancias proporcional derivativa puede
proponer, para el robot de 3 gdl?
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
387
Parte III Problemas propuestos
6.6 Realizar un programa en MATLAB para controlar al robot cartesiano de 3
gdl usando un control proporcional derivativo tipo saturado
⎡ ⎤
⎡
⎤⎡
⎤⎡
⎤ ⎡
⎤
0
0
τ1
kp1 0
atan (q̃1 )
atan (q̇1 )
kv1 0
⎢ ⎥
⎢
⎥⎢
⎥⎢
⎥ ⎢
⎥
⎣ τ2 ⎦ = ⎣ 0 kp2 0 ⎦ ⎣ atan (q̃2 ) ⎦ − ⎣ 0 kv2 0 ⎦ ⎣ atan (q̇2 ) ⎦ + g(q)
τ3
0
0 kp3
atan (q̃3 )
0
0 kv3
atan (q̇3 )
en las siguientes configuraciones:
(a) [ dd1 , dd2, dd3 ]T = [ 0.5, 0.3, .65]T m.
(b) [ dd1 , dd2, dd3 ]T = [ 0.8, 0.2, 0.34 ]T m.
¿Qué método de sintonı́a en las ganancias proporcional derivativa puede
proponer, para el robot cartesiano?
Capı́tulo 7 Identificación paramétrica
7.1 Sean los siguientes sistemas dinámicos escalares:
ẋ = −3x + 8 sen(x) + 8.98x3
ẏ = 6.66y + 5.61e−|y| + 1.23 senh(y)
ż = 2.345z 3 + 6.1234z 4 − 2.31z 5
Para cada uno de los sistemas propuestos implementar un esquema de
identificación paramétrica para obtener el valor de sus respectivos parámetros.
Tome un intervalo para y ∈ [−10, 10].
7.2 Sean los siguientes sistemas multivariables:
ẋ1
0
1
x1
0
=
+
sen(t)
−3 −4
2
ẋ2
x2
⎡ ⎤
⎡
⎤⎡ ⎤ ⎡ ⎤
ẋ1
0
1
1
x1
4
⎢ ⎥
⎢
⎥⎢ ⎥ ⎢ ⎥
⎣ ẋ2 ⎦ = ⎣ −1 −2 −2 ⎦ ⎣ x2 ⎦ + ⎣ 2 ⎦ sen(t)
1
4 −6
9
ẋ3
x3
⎡ ⎤
⎡
⎤⎡ ⎤ ⎡
⎤
ẋ1
0.01
3.1
4.1
0.9
x1
3.2 sen(t)
⎢ ẋ ⎥
⎢ 2.2
⎢ ⎥ ⎢
⎥
1.11 −8.1 7.09 ⎥
⎢ 2⎥
⎢
⎥ ⎢ x2 ⎥ ⎢ 2.1 sen(t) cos(t) ⎥
⎢ ⎥ = ⎢
⎥⎢ ⎥ + ⎢
⎥
⎣ ẋ3 ⎦
⎣ 2.22 4.56 8.23 6.7 ⎦ ⎣ x3 ⎦ ⎣
⎦
0.56t
ẋ4
−0.09 2.33
1.21
4.55
x4
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
sen3 (t)
Alfaomega
388
Capı́tulo 7: Identificación paramétrica
para un intervalo de t ∈ [0, 5].
7.3 Considere el
⎡ ⎤
y1
⎢ ⎥
⎢ y2 ⎥
⎢ ⎥
⎢ y3 ⎥ =
⎢ ⎥
⎢ ⎥
⎣ y4 ⎦
y5
siguiente modelo matemático:
⎡
⎤
0.33t3 + 0.24 sen(t) + cos(t) + 0.35t2 − 4.56 senh(t)
⎢
⎥
⎢ 0.33t1 + 0.48 sen3 (t) + 0.66 cos(t) + 0.70t2 + 0.33 cos(t) ⎥
⎢
⎥
⎢ 0.66t4 + 0.24 sen4 (t) + 0.99 cos(t) + 0.35t2 − 0.66 tan(t) ⎥
⎢
⎥
⎢
⎥
⎣ 0.99t5 + 0.72 sen5 (t) + 0.48 cos(t) + 0.24t2 + 0.33 atan (t) ⎦
0.33t3 + 0.24 sen(t) + cos(t) + 0.48t2 − 0.24 sen(t)
Seleccione un vector de parámetros θ̂ conveniente y diseñe un esquema de
regresión para llevar a cabo el proceso de identificación paramétrica para un
intervalo de t ∈ [0, 5].
7.4 Considere los esquemas de regresión modelo dinámico filtrado y potencia
filtrada del péndulo
(a) En el regresor del modelo dinámico filtrado sustituir la técnica de filtrado
q̇ (k)−q̇1 (k−1)
para obtener la aceleración q̈1 por el método de Euler: q̈1 ≈ 1
y
h
q1 (k)−q1 (k−1)
q̇1 ≈
. Llevar a cabo el proceso de identificación paramétrica
h
y comparar los resultados con el método de filtrado.
(b) En el regresor del modelo de potencia filtrada sustituir la técnica
de filtrado para obtener la aceleración q̈1 por el método de Euler:
q̈1 ≈ q̇1 (k)−hq̇1 (k−1) y q̇1 ≈ q1 (k)−qh1 (k−1) . Llevar a cabo el proceso de
identificación paramétrica y comparar los resultados con el método de
filtrado.
7.5 Considere un brazo robot antropomórfico de 2 gdl:
(a) Implementar el esquema de regresión lineal del modelo dinámico filtrado.
(b) Implementar el esquema de regresión lineal del modelo de la potencia
filtrada.
7.6 Considere un robot manipulador en configuración cartesiana de 3 gdl:
(a) Implementar el esquema de regresión lineal dinámico filtrado.
(b) Implementar el esquema de regresión lineal del modelo de energı́a.
(c) Implementar el esquema de regresión lineal del modelo de la potencia
filtrada.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Parte IV
Control
Control de robots manipuladores es un tema vigente en la actualidad y de interés
para la comunidad cientı́fica. El diseño de sistemas de control en aplicaciones
industriales representa no sólo un reto teórico, también resuelve sustancialmente
problemas prácticos para mejorar deficiencias de algoritmos de control tradicionales.
La Parte IV está dedicada a presentar aplicaciones de la metodologı́a de
moldeo de energı́a la cual hoy en dı́a representa una técnica moderna de diseño
de algoritmos de control para robots manipuladores.
La Parte IV se compone del Capı́tulo 8 Control
Capı́tulo 8 Control de posición contiene aplicaciones
de algoritmos de control diseñados directamente por la técnica de moldeo de
energı́a, y además presenta una explicación cualitativa de esquemas clásicos
como lo son el control proporcional derivativo (PD) y el control proporcional
integral derivativo (PID); también se incluye nuevas estrategias de control
como el control tangente hiperbólico y arcto tangente.
La Parte IV finaliza con:
Referencias selectas
Problemas propuestos
Capı́tulo
8
Control de
posición
τ
= ∇Ua (Kp, q̃) − f v (Kv , q̇) + g(q)
8.1 Introducción
8.2 Control proporcional derivativo (PD)
8.3 Control proporcional integral derivativo (PID)
8.4 Control punto a punto
8.5 Resumen
Objetivos
Presentar aplicaciones de la técnica de moldeo de energı́a de robots
manipuladores.
Objetivos particulares:
Control proporcional derivativo.
Control proporcional integral derivativo.
Control tangente hiperbólico.
Control arcotangente.
Control punto a punto.
8.1
393
Introducción
8.1 Introducción
C
ontrol de robots manipuladores es un tema de control automático vigente
y de gran interés para la comunidad cientı́fica de robótica debido a los retos
teóricos y prácticos que involucra el diseño de nuevas estrategias de control con alto
desempeño y exactitud en aplicaciones industriales tales como estibado de cajas,
ensamble, traslado, pintado de objetos, etc. El diseño de nuevos esquemas de control
implica mejorar sustancialmente el desempeño de algoritmos de control tradicionales.
El problema más simple de control de robots manipuladores se denomina control
de posición o regulación el cual se refiere a ubicar o posicionar al extremo final del
robot en un punto constante en el tiempo al que se le denomina posición deseada o
set point. El objetivo de control es posicionar al extremo final del robot en el punto
deseado y que permanezca ahı́ de manera indefinida.
El problema de control de posición o regulación consiste en mover el
extremo final del robot manipulador hacia una posición deseada constante q d ;
independientemente de su posición inicial q(0). Los puntos intermedios entre la
posición inicial y la referencia deseada no son controlados como tal, forman parte
de la etapa transitoria de la respuesta del robot incluido en la señal de error q̃(t)
definida como la diferencia entre la posición deseada y la posición actual del robot
q̃(t) = qd − q(t). El punto final q d es la posición clave donde se realiza el control.
El objetivo del problema de control de posición está determinado por encontrar
una ley de control τ que proporcione los pares aplicados a las articulaciones o
servomotores del robot, de tal forma que la posición actual del robot q(t) y la
velocidad articular de movimiento q̇(t) tiendan asintóticamente hacia la posición
deseada q d y velocidad cero, respectivamente, sin importar las condiciones iniciales.
Es decir,
lı́m
t→∞
q(t)
q̇(t)
=
qd
0
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
(8.1)
Alfaomega
394
Capı́tulo 8: Control de posición
El objetivo de control se cumple cuando:
lı́m
t→∞
q̇(t)
q̃(t)
=
0
0
Figura 8.1 Control de posición
Nótese que en la figura 8.1 el robot se encuentra en su punto de equilibrio, lo que
significa que el objetivo de control (8.1) se cumplió sin depender de las condiciones
iniciales, entonces la posición deseada se alcanza, por lo que la posición del extremo
final del robot permanece constante (q(t) = qd ) y por lo tanto la velocidad de
movimiento es cero (q̇ = 0).
Evidentemente, para propósitos industriales, una vez que el extremo final del robot
ha alcanzado el punto deseado, en el siguiente periodo de muestreo el punto
deseado cambiará su valor, entonces el robot se moverá hacia al siguiente punto;
el anterior punto deseado representa la condición inicial y el extremo final del robot
se estará posicionando en la siguiente coordenada; ası́ sucesivamente el robot sigue
una curva compuesta de puntos cercanos entre sı́. Esta forma de controlar a un robot
se denomina control punto a punto. Para realizar esta aplicación es necesario que
el esquema de control forme parte de la ecuación en lazo cerrado y que genere un
punto de equilibrio asintóticamente estable, ya que no dependerı́a de las condiciones
iniciales. Es importante aclarar que en control punto a punto no se controla la
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
Control proporcional-derivativo (PD)
395
velocidad de movimiento como en el caso de control de trayectoria, donde el error
de posición y error de velocidad son controlados simultáneamente. La gran mayorı́a
de las aplicaciones actuales de la industria son realizadas a través de control punto
a punto como en los casos de traslado y pintado de objetos, estibado y pintura de
carrocerı́as, etcétera.
El desempeño de un algoritmo de control se refiere a realizar de manera correcta y
exacta la tarea programada al robot, lo que lo habilita a llevar a cabo diversas
aplicaciones de control punto a punto. Por lo tanto, el espectro de aplicaciones
comerciales, domésticas, cientı́ficas e industriales se incrementa.
A continuación se describen los algoritmos tradicionales de control de robots
manipuladores como lo son el esquema proporcional derivativo (PD) y el
regulador proporcional integral derivativo (PID). Posteriormente se presentan nuevas
estrategias de control usando la técnica de moldeo de energı́a.
8.2 Control proporcional-derivativo (PD)
E
l algoritmo de control proporcional-derivativo (PD) es el esquema de
controlador más simple y más popular que se puede usar en robots
manipuladores. En 1981, Takegaki y Arimoto demostraron que la ecuación en
lazo cerrado del modelo dinámico del robot manipulador y el control proporcional
derivativo tiene un punto de equilibrio global y asintóticamente estable.
El control proporcional derivativo más compensación de gravedad (PD) está dado
por la siguiente ecuación:
τ
= Kpq̃ − Kv q̇ + g(q)
(8.2)
donde q̃ ∈ IRn es el vector de error de posición que se define como la diferencia entre
la posición deseada q d ∈ IRn y la posición actual del robot q ∈ IRn ; Kp ∈ IRn×n es
una matriz definida positiva, Kv ∈ IRn×n es la ganancia derivativa la cual es una
matriz definida positiva.
La ecuación en lazo cerrado en variables de estado que definen el problema de control
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
396
Capı́tulo 8: Control de posición
de posición es:
−q̇
d q̃
=
dt q̇
M (q)−1 [ Kpq̃ − Kv q̇ − C(q, q̇)q̇ ]
(8.3)
la cual es una ecuación diferencial autónoma.
El diagrama a bloques del control proporcional derivativo con compensación de
gravedad se muestra en la figura 8.2.
Figura 8.2 Diagrama a bloques del control PD.
La posición articular del robot q se retroalimenta para generar la señal de
error de posición q̃ = q d − q. La velocidad de movimiento q̇ se emplea para
inyección de amortiguamiento. Obsérvese que el signo menos de la acción de control
derivativa sirve para contrarrestar la energı́a al control proporcional. El término
de compensación de gravedad g(q) es una componente esencial para la unicidad del
punto de equilibrio. Sin embargo, esta condición no es suficiente, también se requiere
que las ganancias proporcional y derivativa sean matrices definidas positivas.
Desde el punto de vista práctico el término g(q) se requiere en la implementación
del control PD, y se debe conocer como parte de la dinámica parcial del robot si el
movimiento es en un plano vertical o en general en su espacio tridimensional. Para
el caso en que el movimiento sea en un plano horizontal, la energı́a potencial es
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
397
Control proporcional-derivativo (PD)
constante y el gradiente de la energı́a potencial o par gravitacional g(q) =
cero.
∂U(q )
∂q
es
8.2.1
8.2.1. Control PD de un péndulo
La forma inmediata de entender el funcionamiento cualitativo del control PD es a
través del péndulo.
El modelo dinámico de un péndulo está dado por:
2
] q̈1 + bq̇1 + m1 glc1 sen(q1 )
τ1 = [ Ir1 + m1 lc1
mientras que el control proporcional derivativo es:
τ1 = kp1 q̃1 − kv1 q̇1 + m1 glc1 sen(q1 )
donde el término kp1 q̃1 corresponde al regulador proporcional; siendo el error de
posición q̃1 definido como la diferencia entre la posición deseada qd1 y la posición
actual del péndulo q1 (t). El nombre del esquema proporcional se debe al producto
de la ganancia kp1 y el error de posición q̃1 .
Por otro lado, el término −kv1 q̇1 se denomina acción de control derivativo y no
debe ser confundido con un esquema de control; este término se incluye con la
finalidad de mejorar la respuesta del control proporcional a través de la inyección de
amortiguamiento que se logra restando al control proporcional el producto entre la
ganancia derivativa kv1 y la velocidad articular q̇1 . En términos prácticos el efecto
de amortiguamiento significa freno mecánico para dosificar la energı́a aplicada al
servomotor τ1 y de esta forma lograr que la respuesta transitoria del péndulo no
tenga sobre impulsos y entre de manera suave al régimen estacionario.
Por lo tanto, la ecuación en lazo cerrado está determinada de la siguiente forma:
−q̇1
d q̃1
=
1
dt q̇1
2 [ kp1 q̃1 − kv1 q̇1 − b1 q̇1 ]
[ Ir1 + m1 lc1
]
se ha eliminado la fricción de Coulomb y estática con la finalidad que los programas
de simulación no demoren dicho proceso.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
398
Capı́tulo 8: Control de posición
♣ Ejemplo 8.1
Controlar la posición del extremo final del péndulo en el siguiente punto deseado:
qd1 = 90 grados
Solución
La estructura matemática del algoritmo de control proporcional derivativo del
péndulo está dada por la siguiente expresión:
τ1 = kp1 q̃1 − kv1 + m1 glc1 sen(q1 )
donde kp1 es la ganancia proporcional; kv1 representa la ganancia derivativa, q̃1 es
el error de posición definido como la diferencia q̃1 = qd1 − q1 (t) entre la posición
deseada qd1 y la posición actual del robot q1 (t); τ1 es el par aplicado al servomotor
del péndulo.
El cuadro 8.1 contiene el modelo dinámico del péndulo cap8 pendulo.m; observe que
en la lı́nea 18 se utiliza el esquema de control proporcional derivativo [tau1, ~ ] =
cap8 pdpendulo(q1,qp1), el cual proporciona la energı́a τ1 necesaria para mover al
péndulo desde la posición inicial q(0) hacia la posición deseada qd1 = 90 grados.
El programa cap8 pdpendulo.m tiene el código fuente en MATLAB del control
proporcional derivativo, el cual se encuentra en el cuadro 8.2 y a través del programa
principal cap8 pdpendulosimu.m (ver cuadro 8.3) se puede llevar a cabo el proceso
de simulación.
En una primera fase de la simulación las ganancias del control (PD) se han
sintonizado con los siguientes valores: kp1 = 10 y kv1 =0.1; lo que significa que la
inyección de amortiguamiento del término derivativo es pobre, causa sobre impulsos
en la etapa transitoria y fluctuación abrupta de la respuesta, marcando oscilaciones
sucesivas y sostenidas en la etapa transitoria como se muestra en las gráficas del
error de posición y par aplicado de la figura 8.3. Note que en el espacio de trabajo
(cinemática directa) también la trayectoria del extremo final del péndulo tiene
oscilaciones; lo que se confirma por el diagrama fase (q̇1 vs q̃1 ) en que el atractor del
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
Control proporcional-derivativo (PD)
399
punto de equilibrio tiene un conjunto de espirales que van disminuyendo conforme
las señales q̇1 (t) y q̃( t) evoluciona el tiempo t.
Figura 8.3 Péndulo: control PD, kp1 = 10, kv1 = 0.1
La segunda fase de la simulación consiste en cambiar el valor de la ganancia
derivativa kv1 = 2 (manteniendo el valor de la ganancia proporcional), es decir
aumentar el efecto de amortiguamiento o freno mecánico para obtener una respuesta
más suave en régimen transitorio, y en estado estacionario libre de oscilaciones. La
figura muestra la respuesta del péndulo con la nueva sintonı́a de ganancia derivativa.
Figura 8.4 Péndulo: control PD, kp = 10, kv = 2
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
400
Capı́tulo 8: Control de posición
Código Fuente 8.1
cap8 pendulo.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 pendulo.m
1
function xp=cap8 pendulo(t,x)
2
%modelo dinámico del péndulo
3
%no se incluye el fenómeno de fricción de Coulomb, ni estática
4
%variables de estados (entradas) ——————————————– %
5
%posición articular
q1=x(1);
6
7
%velocidad articular
qp1=x(2);
8
9
%parámetros del péndulo ————————————————– %
m1=5; %masa
10
11
14
lc1=0.01; %centro de gravedad
g=9.81; %constante de aceleración gravitacional
b1=0.17; %coeficiente de fricción viscosa
Ir1=0.16; %momento de inercia del rotor
15
Ip=Ir1+m1*lc1*lc1; %momento de inercia del péndulo
16
%en este punto se inserta el algoritmo de control
17
%par aplicado (controlador) ———————————————-%
[tau1, ˜ ] = cap8 pdpendulo(q1,qp1) ;
12
13
18
19
%aceleración articular del péndulo ———————————————%
qpp1=(tau1-b1*qp1-m1*g*lc1*sin(q1))/Ip;
20
21
%vector de salida ——————————————————– %
xp=[qp1; %xp(1)=x(2) velocidad articular
22
23
24
qpp1]; %xp(2)=qpp aceleración articular
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
Control proporcional-derivativo (PD)
Código Fuente 8.2
401
cap8 pdpendulo.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
Esta función retorna:
error de posición q̃1
par aplicado τ1
cap8 pdpendulo.m
1
function [tau1, qt1] = cap8 pdpendulo(x,xp)
2
%variables de estados (entradas) ——————————————– %
3
%posición articular
4
q1=x;
5
6
%velocidad articular
qp1=xp;
7
%parámetros de la compensación de gravedad del péndulo
8
10
m1=5; %masa
lc1=0.01; %centro de gravedad
g=9.81; %constante de aceleración gravitacional
11
%ganancias del controlador ———————————————-%
12
kp1=10; %ganancia proporcional
kv1=2; %ganancia derivativa
9
13
14
15
%referencia (posición deseada en grados)
qd1=90;
16
%vector de pares de gravitacionales ————————————– %
17
par grav = m1*g*lc1*sin(q1);
18
19
%error de posición
qt1=pi*qd1/180-q1;
20
%control proporcional derivativo
21
tau1=kp1*qt1-kv1*qp1+par grav;
22
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
402
Capı́tulo 8: Control de posición
Código Fuente 8.3
cap8 pdpendulosimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 7 Identificación paramétrica.
cap8 pdpendulosimu.m
1
clc; clear all; close all;
2
format short g
3
%parámetros de simulación ————————————————%
ti=0; %tiempo inicial (segundos)
tf=5; %tiempo de final (segundos)
h=0.001; %incremento de tiempo (segundos)
4
5
6
7
8
9
ts=ti:h:tf; %vector de tiempo
ci=[0;0]; %condiciones iniciales
opciones=odeset(’RelTol’,1e-3,ÍnitialStep’,1e-3,’MaxStep’,1e-3);
10
%solución numérica del sistema ——————————————-%
11
[t,x]=ode45(’cap8 pendulo’,ts,ci,opciones);
q1=x(:,1);
qp1=x(:,2);
12
13
14
15
16
17
18
19
20
21
[n,m]=size(t);
tau1=zeros(n,1);
qt1=zeros(n,1);
xef=zeros(n,1);
yef=zeros(n,1);
for k=1:n
[tau1(k), qt1(k)] = cap8 pdpendulo(q1(k),qp1(k));
frq=Rz(-pi/2)*cinematica pendulo(0.45,q1(k),0.1);
22
xef(k)=frq(1);
yef(k)=frq(2);
23
24
end
25
subplot(2,2,1);
subplot(2,2,2);
subplot(2,2,3);
subplot(2,2,4);
26
27
28
Alfaomega
plot(t,qt1)
plot( t, tau1)
plot(xef,yef)
plot(qp1, qt1)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
403
Control proporcional-derivativo (PD)
8.2.2
8.2.2. Control PD de un brazo robot de 2 gdl
El control proporcional derivativo (PD) para un robot en configuración antropomórfica de 2 gdl está dado por la siguiente ecuación:
τ1
kp1 0
q̃1
q̇1
kv1 0
=
−
+g(q)
0 kp2
0 kv2
τ2
q̃2
q̇2
τ
Kp
Kv
q̃
q̇
donde Kp , Kv ∈ IR2×2 son la ganancia proporcional y derivativa, respectivamente; la
velocidad articular es representada por q̇ = [ q̇1 , q̇2 ]T ; el error de posición q̃ se define
como la diferencia entre la posición deseada q d y la posición actual del robot q; g(q)
es la compensación de gravedad; τ1 , τ2 son los pares aplicados a las articulaciones
del hombro y codo, respectivamente.
♣ ♣ Ejemplo 8.2
Controlar la posición del extremo final de un robot de 2 gdl en configuración
antropomórfica en el siguiente punto deseado: [ qd1 , qd2 ]T = [ 90, 45 ] grados.
Solución
El cuadro 8.8 contiene el modelo dinámico del brazo robot de 2 gdl (programa
cap8 robot2gdl.m); en referencia a este programa es muy importante aclarar que
la ecuación en lazo cerrado está formada por la dinámica no lineal del robot y el
esquema de control (ver lı́nea 18). Por lo tanto, en la lı́nea 22 es el lugar adecuado
para insertar el algoritmo de control, en este caso es el proporcional derivativo cuyo
código MATLAB se presenta en el programa cap8 PDrobot2gdl.m (ver cuadro 8.8).
Las ganancias proporcional Kp y derivativa Kv son sintonizadas de tal forma que
no produzcan sobre impulsos, ni oscilaciones en el régimen transitorio, ası́ como una
respuesta suave en estado estacionario.
El valor de la sintonı́a de las ganancias proporcional para las articulaciones del
hombro y codo, respectivamente son: kp1 =3 Nm/grados y kp2 =0.15 Nm/grado;
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
404
Capı́tulo 8: Control de posición
mientras que las ganancias derivativas has sido seleccionadas con un factor de
amortiguamiento del 20 % del valor de las ganancias proporcional: kv1 = 0.20kp1
Nm-seg/grados y kv2 = 0.20kp2 Nm-seg/grados.
La figura 8.5 muestra un perfil suave de los errores de posición, sin sobre impulsos, no
hay oscilaciones pronunciadas, teniendo una respuesta suave; ambos componentes
de error de posición tienden asintóticamente a cero como el tiempo evoluciona a
infinito (estabilidad asintótica).
Las señales de pares aplicados τ1 y τ2 se aplican directamente a las articulaciones del
hombro y codo, respectivamente; el perfil de estas señales muestran de igual forma
un comportamiento suave, sin oscilaciones que hace que el robot no vibre tal como
se aprecia en la trayectoria que describe el extremo final del robot en su espacio
de trabajo, la cual inicia desde la posición de casa ubicada en el eje y− hasta el
punto deseado. Observe también que en el diagrama fase del robot las velocidades
articulares como las señales de error de posición convergen asintóticamente al punto
de equilibrio. Este tipo de respuesta es consecuencia de una adecuada sintonı́a de las
ganancias, ası́ como del factor de amortiguamiento, que en este caso es del 20 %. La
sintonı́a de las ganancias es empı́rica, es decir a prueba y error; este proceso depende
en gran medida de la experiencia que tenga el usuario.
Figura 8.5 Robot de 2 gdl: control PD, kp = 10, kv = 0.1
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
405
Control proporcional-derivativo (PD)
Código Fuente 8.8
cap8 robot2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 robot2gdl.m
1
function xp = cap8 robot2gdl(t,x)
2
3
%vector de posición articular
q1=x(1); q2=x(2); q = [q1; q2];
4
%vector de velocidad articular
5
qp1=x(3); qp2=x(4); qp = [qp1; qp2];
m1=23.902; l1=0.45; lc1=0.091; I1=1.266; b1=2.288;
m2=3.880; l2=0.45; lc2=0.048; I2=0.093; b2=0.175; g=9.81;
6
7
8
theta1=m1*lc1*lc1+m2*l1*l1+m2*lc2*lc2+I1+I2;
theta2=l1*m2*lc2;
theta3=m2*lc2*lc2+I2;
theta4=g*(lc1*m1+m2*l1);
9
10
11
12
theta5=g*m2*lc2; theta6=b1; theta7=b2;
M=[theta1+2*theta2*cos(q2), theta3+theta2*cos(q2);
theta3+theta2*cos(q2), theta3];
C=[ -2*theta2*sin(q2)*qp2, -theta2*sin(q2)*qp2;
13
14
15
16
theta2*sin(q2)*qp1, 0];
gq11=theta4*sin(q1)+theta5*sin(q1+q2);
gq21=theta5*sin(q1+q2);
gq=[gq11; gq21];
17
18
19
20
22
fr=[theta6*qp1;
theta7*qp2];
[ ˜ , tau ]=cap8 PDrobot2gdl(q,qp); %en esta lı́nea se inserta el controlador
23
qpp = M∧ (-1)*(tau-C*qp-gq-fr);
24
%vector de salida
xp = [qp1; qp2; qpp(1); qpp(2)];
21
25
26
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
406
Capı́tulo 8: Control de posición
Código Fuente 8.8
cap8 PDrobot2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 PDrobot2gdl.m
1
2
3
function [qtilde tau] = cap8 PDrobot2gdl(x,xp)
q1=x(1); q2=x(2); q = [q1; q2]; %vector de posiciones
qp1=xp(1); qp2=xp(2); qp = [qp1; qp2]; %vector de velocidades
4
%parámetros del robot: par gravitacional
5
m1=23.902; lc1=0.091; l1=0.45;
m2=3.880; lc2=0.048; g=9.81;
theta4=g*(lc1*m1+m2*l1);
theta5=g*m2*lc2;
6
7
8
9
11
%par gravitacional
par grav = [theta4*sin(q1)+theta5*sin(q1+q2);
g*m2*lc2];
12
%ganancia proporcional
13
15
kp1=3; kp2=0.15;
Kp=[kp1, 0;
0, kp2]; %ganancia proporcional
16
%ganancia derivativa
17
kv1=0.20*kp1; kv2=0.20*kp2;
Kv=[kv1, 0;
0, kv2]; %ganancia derivativa
qd1=45; qd2=90;
10
14
18
19
20
21
qd=[qd1;
qd2]; %vector de referencias
qtilde=pi/180*qd-q;
qtgrados=(180/pi)*qtilde; %error de posición en grados
22
23
24
25
qpgrados=180*qp/pi; %velocidad en grados/segundo.
tau=Kp*qtgrados-Kv*qpgrados+par grav;
26
27
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
Control proporcional-derivativo (PD)
Código Fuente 8.6
407
cap8 robot2gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 robot2gdlsimu.m
1
clc; clear all; close all;
2
format short g
ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector tiempo
ci=[0; 0; 0; 0]; %condiciones iniciales
opciones=odeset(’RelTol’,1e-3,’InitialStep’, 1e-3,’MaxStep’,1e-3);
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%solución numérica del sistema dinámico lineal
[t,x]=ode45(’cap8 robot2gdl’,t,ci,opciones);
q1=x(:,1); q2=x(:,2);
qp1=x(:,3); qp2=x(:,4);
[n,m]=size(t);
tau1=zeros(n,1); tau2=zeros(n,1);
qtilde1=zeros(n,1); qtilde2=zeros(n,1);
xef=zeros(n,1); yef=zeros(n,1);
beta1=0.15; beta2=0.15; l1=0.45; l2=0.45;
for k=1:n
[qt tau] = cap8 PDrobot2gdl( [q1(k);q2(k)], [qp1(k); qp2(k)]);
17
tau1(k)=tau(1); tau2(k)=tau(2);
qtilde1(k)=qt(1); qtilde2(k)=qt(2);
[xef(k), yef(k),˜ ]=cinematica r2gdl( beta1, l1, q1(k), beta2, l2, q2(k));
p=Rz(-pi/2)*[xef(k), yef(k), beta1+beta2]’;
18
19
20
21
xef(k)=p(1);
yef(k)=p(2);
22
23
end
24
subplot(2,2,1); plot(t,qtilde1,t,qtilde2)
subplot(2,2,2); plot( t, tau1, t,tau2)
subplot(2,2,3); plot(xef,yef)
subplot(2,2,4); plot(qtilde1, qp1, qtilde2,qp2)
25
26
27
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
408
Capı́tulo 8: Control de posición
8.2.3
8.2.3. Control PD de un brazo robot de 3 gdl
El algoritmo de
está dado por:
⎡ ⎤
τ1
⎢ ⎥
⎣ τ2 ⎦ =
τ3
τ
control proporcional derivativo para un brazo robot de 3 gdl
⎡
kp1
⎢
⎣ 0
o
0
kp2
0
Kp
0
⎤⎡
q̃1
⎤
⎡
kv1
⎥⎢ ⎥ ⎢
0 ⎦ ⎣ q̃2 ⎦ − ⎣ 0
q̃3
kp3
0
q̃
0
kv2
0
Kv
0
⎤⎡
q̇1
⎤
⎥⎢ ⎥
0 ⎦ ⎣ q̇2 ⎦ +g(q)
q̇3
kv3
q̇
donde Kp , Kv ∈ IR3×3 son la ganancia proporcional y derivativa, respectivamente;
el error de posición q̃ ∈ IR3 se define como la diferencia entre la posición deseada
qd ∈ IR3 y la posición actual del robot q ∈ IR3 .
Por conveniencia se seleccionan las ganancias proporcional y derivativa como
matrices diagonales definidas positivas con la finalidad de desacoplar la estructura
de control; de esta forma la sintonı́a de la i-ésima ganancia sólo depende de la iésima articulación. Es decir, el par aplicado a la i-ésima articulación depende de:
τi = τ (kpi, q̃i, q̇i ).
♣ Ejemplo 8.3
Controlar la posición del extremo final de un robot de 3 gdl en configuración
antropomórfica en las siguientes coordenadas: [ qd1 , qd2 , qd3 ]T = [ 30, 45, 90 ] grados
Solución
El modelo dinámico del robot antropomórfico de 3 gdl se encuentra en el programa
cap8 robot3gdl.m como se describe en el cuadro 8.7. De particular interés
representa la lı́nea de código 23, debido a que en este lugar se inserta el algoritmo de
control que envı́a la señal de par aplicado para que el robot se mueva a la posición
indicada.
El esquema de control proporcional derivativo se encuentra implementado en el
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
409
Control proporcional-derivativo (PD)
programa cap8 PDrobot3gdl.m del cuadro 8.8. La sintonı́a de las ganancias han sido
pensadas en la capacidad de par aplicado que puedan suministrar las articulaciones
del robot; es decir, la idea es no saturar a los servoamplificadores de tal forma que
se encuentren trabajando en la parte lineal, lejos de los lı́mites de saturación.
Supóngase que se cuenta con un prototipo de un robot manipulador de 3 gdl,
cuyos servomotores corresponden a las siguientes caracterı́sticas: 50 Nm, 150 Nm
y 15 Nm para las articulaciones de la base, hombro y codo, respectivamente. El
τ max
criterio para sintonizar las ganancias es el siguiente: k ≤ 0.80 i
, donde τ max
pi
qdi
i
corresponde al par máximo de la i-ésima articulación. En la lı́nea 18 del programa
cap8 PDrobot3gdl.m se encuentra la sintonı́a final de la ganancia proporcional; el
factor de amortiguamiento de la ganancia derivativa se ha seleccionado en el 20 %
de la ganancia proporcional.
El código fuente que contiene la simulación del control proporcional derivativo del
robot manipulador en configuración antropomórfica se encuentra en el programa
cap8 robot3gdlsimu.m (cuadro 8.9). La figura 8.6 muestra el comportamiento de
los errores de posición para las tres articulaciones; presentan un perfil suave, sin
ruido mecánico, ni sobre impulsos, tampoco se observan oscilaciones en régimen
estacionario. Los pares aplicados evolucionan dentro de los lı́mites de saturación y
la trayectoria que describe el extremo final del robot en su espacio de trabajo es
suave, tal y como se muestra en el diagrama fase.
Figura 8.6 Control PD: robot cartesiano de 3 gdl.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
410
Capı́tulo 8: Control de posición
Código Fuente 8.7
cap8 robot3gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 robot3gdl.m
1
function xp = cap8 robot3gdl(t,x)
2
q1=x(1); q2=x(2); q3=x(3); q = [q1; q2; q3]; %vector de posición articular
3
4
5
qp1=x(4); qp2=x(5); qp3=x(6); qp = [qp1; qp2; qp3]; %vector de velocidad articular
Iz1=1.26; Iz2=0.084; Iz3=0.056; Iy1=0.089; Iy2=0.003; Iy3=0.0012; Ix1=0.03; Ix2=0.05;
Ix3=0.009; m1=26.902; l1=0.45; b1=2.288; m2=30; l2=0.45; lc2=0.038; b2=0.2; m3=3.880;
6
l3=0.45; lc3=0.048; b3=0.175; g=9.81;
m11=Iy2*sin(q2)*sin(q2)+ Iy3*sin(q2+q3)*sin(q2+q3)+ Iz1+Iz2*cos(q2)*cos(q2)+
Iz3*cos(q2+q3)*cos(q2+q3)+ m2*lc2*lc2*cos(q2)*cos(q2)+ m3*(l2*cos(q2)+
lc3*cos(q2+q3))*(l2*cos(q2)+lc3*cos(q2+q3));
m12=0; m13=0; m21=0;
m22=Ix2+ Ix3+m3*l2*l2+ m2*lc2*lc2+m3*lc3*lc3+ 2*m3*l2*lc3*cos(q3);
m23=Ix3+m3*lc3*lc3+m3*l2*lc3*cos(q3); m31=0;
7
8
9
10
11
12
m32=Ix3+m3*lc3*lc3+m3*l2*lc3*cos(q3); m33=Ix3+m3*lc3*lc3;
M=[m11, m12, m13; m21, m22, m23 ;m31, m32, m33]; %matriz de inercia
gamma112=(Iy2-Ix2-m2*lc2*lc2)*cos(q2)*sin(q2)+(Iy3-Iz3)*cos(q2+q3)*sin(q2+q3)m3*(l2*cos(q2)+lc3*cos(q2+q3))*(l2*sin(q2)+ lc3*sin(q2+q3));
gamma113=(Iy3-Iz3)*cos(q2+q3)*sin(q2+q3)- m3*lc3*sin(q2+q3)*(l2*cos(q2)+lc3*cos(q2+q3));
gamma121=(Iy2-Iz2-m2*lc2*lc2)*cos(q2)*sin(q2)+(Iy3-Iz3)*cos(q2+q3)*sin(q2+q3)m3*(l2*cos(q2)+lc3*cos(q2+q3))*(l2*sin(q2)+lc3*sin(q2+q3));
gamma131=(Iy3-Iz3)*cos(q2+q3)*sin(q2+q3) -m3*lc3*sin(q2+q3)*(l2*cos(q2)+ lc3*cos(q2+q3));
gamma211=(Ix2-Iy2+m2*lc2*lc2)*cos(q2)*sin(q2)+(Iz3-Iy3)*cos(q2+q3)*sin(q2+q3)+
m3*(l2*cos(q2)+lc3*cos(q2+q3))*(l2*sin(q2)+lc3*sin(q2+q3));
gamma223=-l2*m3*lc3*sin(q3); gamma232=-l2*m3*lc3*sin(q3);
gamma233=-l2*m3*lc3*sin(q3); gamma311=(Iz3-Iy3)*cos(q2+q3)*sin(q2+q3)+
m3*lc3*sin(q2+q3)*(l2*cos(q2)+lc3*cos(q2+q3));
gamma322=l2*m3*lc3*sin(q3); c11=gamma112*qp2+gamma113*qp3;
c12=gamma121*qp1; c13=gamma131*qp1; c21=gamma211*qp1; c22=gamma223*qp3;
c23=gamma232*qp2+gamma233*qp3; c31=gamma311*qp1; c32=gamma322*qp2; c33=0;
13
14
15
16
17
18
19
20
21
22
23
24
C=[c11, c12, c13; c21, c22, c23; c31, c32, c33];
gq11=0; gq21=(lc2*m1++m2*l2)*sin(q1)+ m2*lc3*sin(q1+q2);
gq31=m2*lc3*sin(q1+q2);
25
26
27
gq=g*[gq11; gq21; gq31];
fr=[b1*qp1; b2*qp2; b3*qp3];
[˜ , tau] = cap8 PDrobot3gdl(q,qp);
28
29
qpp = inv(M)*(tau-C*qp-gq-fr);
xp = [qp1; qp2; qp3; qpp(1); qpp(2); qpp(3)];%vector de salida
30
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
Control proporcional-derivativo (PD)
Código Fuente 8.8
411
cap8 PDrobot3gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 PDrobot3gdl.m
1
2
3
4
function [qtildeg tau] = cap8 PDrobot3gdl(x,xp)
q1=x(1); q2=x(2); q3=x(3);
q = [q1; q2; q3]; %posiciones
qp1=xp(1); qp2=xp(2); qp3=xp(3);
5
qp = [qp1; qp2; qp3]; %velocidades
6
%parámetros del robot: par gravitacional
m1=26.902; l1=0.45; m2=30; l2=0.45; lc2=0.038;
m3=3.880; l3=0.45; lc3=0.048; g=9.81;
7
8
9
gq11=0;
gq21=(lc2*m1++m2*l2)*sin(q1)+m2*lc3*sin(q1+q2);
gq31=m2*lc3*sin(q1+q2);
10
11
12
15
gq=g*[gq11; gq21; gq31]; %par gravitacional
qd=[30; 45; 90]; %referencias o posiciones deseadas
qtilde=qd*pi/180-q; %error de posición q̃
qtildeg=(180/pi)*qtilde; %error de posición q̃ en grados
16
qpgrados=180*qp/pi; %velocidad q̇ en grados/segundo.
17
%ganancia proporcional
Kp=[1, 0,0 ;
0, 2,0;
13
14
18
19
20
0,0,0.15];
21
23
%ganancia derivativa
Kv=[0.3, 0,0;
0, 0.6,0;
24
0,0,0.015];
22
25
% control proporcional derivativo PD
tau=Kp*qtildeg-Kv*qpgrados+gq;
26
27
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
412
Capı́tulo 8: Control de posición
Código Fuente 8.9
cap8 robot3gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 robot3gdlsimu.m
1
3
clc; clear all;
close all;
format short
4
%parámetros de simulación:
5
ti=0; h=0.0025; tf = 5; ts=ti:h:tf; %vector tiempo
opciones=odeset(’RelTol’,1e-3,’InitialStep’, 2.5e-3,’MaxStep’,2.5e-3);
ci=[0; 0; 0; 0;0;0];
[t,x]=ode45(’cap8 robot3gdl’,ts,ci,opciones);
2
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
q1=x(:,1); q2=x(:,2); q3=x(:,3); %posiciones articulares
qp1=x(:,4); qp2=x(:,5); qp3=x(:,6); %velocidades articulares
[n,m]=size(t);
tau1=zeros(n,1); tau2=zeros(n,1); tau3=zeros(n,1);
qtilde1=zeros(n,1); qtilde2=zeros(n,1); qtilde3=zeros(n,1);
xef=zeros(n,1); yef=zeros(n,1); zef=zeros(n,1);
beta1=0.15; beta2=0.15; beta3=0.15; l1=1; l2=0.45; l3=0.45;
for k=1:n
[qt tau] = cap8 PDrobot3gdl([q1(k);q2(k)q3(k)],[qp1(k);qp2(k); qp3(k)]);
tau1(k)=tau(1); tau2(k)=tau(2); tau3(k)=tau(3);
qtilde1(k)=qt(1); qtilde2(k)=qt(2); qtilde3(k)=qt(3);
[xef(k), yef(k),zef(k)]=cinematica r3gdl (beta1, l1, q1(k), beta2,
l2,q2(k),beta3,l3,q3(k));
end
subplot(2,2,1); plot(t,qtilde1,t,qtilde2, t,qtilde3)
24
subplot(2,2,2); plot( t, tau1, t,tau2, t,tau3)
subplot(2,2,3); plot3(xef,yef,zef)
25
subplot(2,2,4); plot(qtilde1, qp1, qtilde2,qp2, qtilde3,qp3)
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
413
Control proporcional-derivativo (PD)
8.2.4
8.2.4. Control PD de un robot cartesiano de 3 gdl
El algoritmo de control proporcional derivativo para el robot manipulador en
configuración cartesiana está dado por la siguiente estructura:
⎡ ⎤
⎤⎡ ˜ ⎤ ⎡
⎤⎡ ˙ ⎤
⎡
⎡
⎤
τ1
0
0
d1
d1
kv1 0
m1 + m2 + m3
kp1 0
⎢ ⎥
⎥⎢ ⎥ ⎢
⎥⎢ ⎥
⎢
⎢
⎥
0
⎣ τ2 ⎦ = ⎣ 0 kp2 0 ⎦ ⎣ d˜2 ⎦ − ⎣ 0 kv2 0 ⎦ ⎣ d˙2 ⎦ +g ⎣
⎦
˜
˙
τ3
d3
d3
o
0 kp3
0
0 kv3
0
τ
Kp
Kv
d̃
ḋ
donde Kp , Kv ∈ IR3×3 son la ganancia proporcional y derivativa, respectivamente;
el error de posición d̃ ∈ IR3 se define como la diferencia entre la posición deseada
dd ∈ IR3 y la posición actual del robot d ∈ IR3 .
♣ Ejemplo 8.4
Controlar la posición del extremo final de un robot de 3 gdl en configuración
cartesiana en la siguiente ubicación: [ dd1 , dd2, dd3 ]T = [ 0.5, 0.4, 0.2 ] m
Solución
El modelo dinámico del robot cartesiano se encuentra en el cuadro 8.10 que describe el programa
cap8 cartesiano3gdl.m; en la lı́nea
23 de este programa se inserta el algoritmo de control PD definido por
la función cap8 PDcartesiano3gdl.m
(ver cuadro 8.11). El programa principal para realizar la simulación del
control PD en el robot cartesiano de
3 gdl se encuentra en el cuadro 8.12
que describe el contenido del programa cap8 cartesiano3gdlsimu.m; los
resultados se encuentran en la figura
8.7.
Figura 8.7 Control PD.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
414
Capı́tulo 8: Control de posición
Código Fuente 8.10
cap8 cartesiano3gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 cartesiano3gdl.m
1
function xp = cap8 cartesiano3gdl(t,x)
2
%vector de posición articular
d = [x(1);
3
4
x(2);
x(3)];
5
6
%vector de velocidad articular
dp =[x(4);
7
8
x(5);
x(6)];
m1=0.7; m2=0.28; m3=0.28; g=9.81;
b1=0.02; b2=0.08; b3=.02;
9
10
11
12
14
B=[b1, 0, 0;
0, b2,0;
0, 0, b3];
15
%modelo dinámico del robot
16
M = [m1+m2+m3, 0, 0; % Matriz de inercia
0 m1+m2, 0;
0 0 m3];
par grav = g*[m1+m2+m3; % vector de pares de gravitacionales
13
17
18
19
20
0;
0];
fr= B*dp;
[˜ , tau] = cap8 PDcartesiano3gdl(d,dp);
21
22
23
24
dpp = inv(M)*(tau- par grav-fr); %vector de aceleración articular
xp = [dp(1); dp(2); dp(3); dpp(1); dpp(2); dpp(3)]; %vector de salida
25
26
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.2
Control proporcional-derivativo (PD)
Código Fuente 8.11
415
cap8 PDcartesiano3gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 PDcartesiano3gdl.m
1
2
3
4
function [dtilde tau] = cap8 PDcartesiano3gdl (d,dp)
d1=d(1);
d2=d(2);
d3=d(3);
5
7
dp1=dp(1);
dp2=dp(2);
dp3=dp(3);
8
%parámetros del robot: par gravitacional
9
m1=0.7; m2=0.28; m3=0.28; g=9.81;
par grav = g*[m1+m2+m3;
0;
0];
6
10
11
12
13
dd=[0.5;
0.4;
0.2];
dtilde=dd-[d1; d2;d3];
14
15
16
17
kp1=3; kp2=2.5;kp3=1.7;
kv1=3; kv2=2.5; kv3=1.4;
Kp=[kp1, 0,0;
0, kp2,0;
18
19
20
21
23
0,0,kp3];
Kv=[kv1, 0,0;
0, kv2,0;
24
0,0,kv3];
22
25
%Control proporcional derivativo
tau=Kp*dtilde-Kv*dp+par grav;
26
27
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
416
Capı́tulo 8: Control de posición
Código Fuente 8.12
cap8 cartesiano3gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 cartesiano3gdlsimu.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clc;
clear all;
close all;
format short
%parámetros de simulación:
ti=0; h=0.001; tf = 10; ts=ti:h:tf; %vector tiempo
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3, ’MaxStep’,1e-3);
ci=[0; 0; 0; 0; 0; 0];
[t,x]=ode45(’cap8 cartesiano3gdl’,ts,ci,opciones);
d1=x(:,1); d2=x(:,2); d3=x(:,3);
dp1=x(:,4); dp2=x(:,5); dp3=x(:,6);
[n,m]=size(t);
tau1=zeros(n,1); tau2=zeros(n,1); tau3=zeros(n,1);
dtilde1=zeros(n,1); dtilde2=zeros(n,1); dtilde3=zeros(n,1);
xef=zeros(n,1); yef=zeros(n,1); zef=zeros(n,1);
for k=1:n
[dt tau] = cap8 PDcartesiano3gdl([d1(k); d2(k); d3(k)],[dp1(k);dp2(k);
dp3(k)]);
tau1(k)=tau(1); tau2(k)=tau(2); tau3(k)=tau(3);
19
dtilde1(k)=dt(1); dtilde2(k)=dt(2); dtilde3(k)=dt(3);
[xef(k), yef(k),zef(k)]=cinematica cartesiano (d3(k), d2(k), d1(k));
20
21
end
22
subplot(2,2,1); plot(t,dtilde1,t,dtilde2, t,dtilde3)
subplot(2,2,2); plot( t, tau1, t,tau2, t,tau3)
subplot(2,2,3); plot3(xef,yef,zef)
subplot(2,2,4); plot(dtilde1, dp1, dtilde2,dp2, dtilde3,dp3)
23
24
25
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.3
417
Control PID
8.3 Control PID
E
l esquema de control proporcional integral derivativo (PID) tiene la siguiente
estructura:
τ
= Kp q̃ − Kv q̇ + Ki
t
q̃(μ)dμ + g(q)
(8.4)
0
donde Kp, Kv ∈ IRn×n son matrices definidas positivas y se les denomina ganancias
proporcional y derivativa, respectivamente. Ki ∈ IRn×n es una matriz definida
positiva denominada ganancia integral. Todas las ganancias Kp, Kv y Ki son
matrices definidas positivas y generalmente son diagonales.
La acción de control PID introduce una nueva variable de estado ε, la cual se
encuentra relacionada con la derivada temporal del error de posición ε̇ = q̃. Por
t
lo tanto, ε = 0 q̃dt + ε(0), con ε(0) ∈ IRn es un vector constante. La ecuación en
lazo cerrado en términos de las variables de estado [ ε, q̃, q̇ ]T adquiere la siguiente
forma:
⎤
⎡ ⎤
⎡
ε
q̃
d ⎢˙⎥
⎥
⎢
−q̇
⎦
⎣ q̃ ⎦ = ⎣
dt
−1
q̇
M (q) [ Kp q̃ − Kv q̇ + Kiε − C(q, q̇)q̇ − B q̇ ]
(8.5)
El algoritmo de control PID no representa una nueva estructura de control; es una
versión modificada del control PD más la acción de control integral. El algoritmo
de control PD tiene la desventaja que en régimen estacionario presenta un error
permanente de posición denominado offset; para disminuir este error se incorpora
en la estructura matemática del PD un término más que se denomina acción de
control integral. El proceso de integración es la suma del área bajo la curva del error
de posición, por lo tanto acumula energı́a la cual canalizada adecuadamente puede
disminuir la magnitud del error en régimen estacionario.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
418
Capı́tulo 8: Control de posición
8.3.1
8.3.1. Control PID de un robot de 2 gdl
La ecuación del esquema de control proporcional derivativo para un brazo robot de
2 gdl está dado por:
t
τ1
kp1 0
q̃1
ki1 0
0 q̃1 dt
t
=
+
+
0 kp2
0 ki2
τ2
q̃2
0 q̃2 dt
g(lc1m1 + m2 l1 ) sen(q1 ) + gm2 lc2 sen(q1 + q2 )
gm2 lc2 sen(q1 + q2 )
♣ ♣ Ejemplo 8.5
Controlar la posición del extremo final de un robot de 2 gdl en configuración
antropórfica en la siguiente ubicación: [ qd1 , qd2 ]T = [ 45, 90 ] m
Solución
El programa cap8 PIDrobot2gdl.m tiene implementado el modelo dinámico del
robot de 2 gdl (cuadro 8.13). La figura 8.8 muestra los resultados del algoritmo
de control PID sobre el brazo robot de 2 gdl.
Figura 8.8 Control PID de un robot de 2 gdl.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.3
419
Control PID
El esquema de control PID se encuentra en el programa cap8 PIDrobot2gdl.m que
se muestra en el cuadro 8.13. La regla de sintonı́a de la ganancia derivativa e integral
se ha fijado respectivamente en 20 % y 10 % de la ganancia proporcional. La integral
del error introduce una nueva variable de estado (varepsilon) cuya integración
numérica se realiza en el modelo dinámico del robot.
Código Fuente 8.13
cap8 PIDrobot2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 PIDrobot2gdl.m
1
2
function [qtilde tau] = cap8 PIDrobot2gdl(x, xp, varepsilon)
q = [x(1); x(2)]; %posiciones
3
qp = [xp(1); xp(2)]; %velocidades
kp1=2.666; kp2=0.133;
Kp=[kp1, 0; 0, kp2]; %ganancia proporcional
4
5
6
ki1=0.1*kp1;
ki2=0.1*kp2;
Ki=[ki1, 0; 0, ki2]; %ganancia integral
kv1=0.2*kp1;
7
8
9
10
kv2=0.2*kp2;
Kv=[kv1, 0; 0, kv2]; %ganancia derivativa
11
12
13
%referencias
qd1=45; qd2=90; qd=[qd1; qd2]; %vector de posiciones deseadas
14
%vector de pares de gravitacionales
15
17
par grav = [38.46*sin(q(1))+1.82*sin(q(1)+q(2));
1.82*sin(q(1)+q(2)) ];
qtilde=[pi*qd(1)/180-q(1); pi*qd(2)/180-q(2)]; %error de posición en grados
18
qtgrados=(180/pi)*[qtilde(1) ;qtilde(2)];
19
%velocidad en grados/segundo. qpgrados=180*qp/pi;
tau=Kp*qtgrados+Ki*varepsilon-Kv*qpgrados+par grav;
16
20
21
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
420
Capı́tulo 8: Control de posición
Código Fuente 8.14
cap8 robot2gdlPID.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 robot2gdlPID.m
1
function xp = cap8 robot2gdlPID(t,x)
2
%vector de posición articular
q1=x(1); q2=x(2); q = [q1; q2];
3
4
%vector de velocidad articular
qp1=x(3); qp2=x(4); qp = [qp1; qp2];
5
6
varepsilon = [x(5); x(6)]; %integral de qtilde
m1=23.902; l1=0.45; lc1=0.091; I1=1.266; b1=2.288;
m2=3.880; l2=0.45; lc2=0.048; I2=0.093; b2=0.175; g=9.81;
7
8
9
theta1=m1*lc1*lc1+m2*l1*l1+m2*lc2*lc2+I1+I2;
theta2=l1*m2*lc2;
theta3=m2*lc2*lc2+I2;
theta4=g*(lc1*m1+m2*l1);
10
11
12
13
theta5=g*m2*lc2; theta6=b1; theta7=b2;
M=[theta1+2*theta2*cos(q2), theta3+theta2*cos(q2);
theta3+theta2*cos(q2), theta3];
C=[ -2*theta2*sin(q2)*qp2, -theta2*sin(q2)*qp2;
14
15
16
17
20
theta2*sin(q2)*qp1, 0];
gq11=theta4*sin(q1)+theta5*sin(q1+q2);
gq21=theta5*sin(q1+q2);
gq=[gq11; gq21];
21
fr=[theta6*qp1; theta7*qp2];
22
%ley de control
[qtilde tau] = cap8 PIDrobot2gdl(q,qp,varepsilon);
varepsilonp=qtilde;
18
19
23
24
qpp = M∧ (-1)*(tau-C*qp-gq-fr);
xp = [qp1; qp2; qpp(1); qpp(2);varepsilonp(1); varepsilonp(2)];
25
26
27
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.3
421
Control PID
El programa cap8 robot2gdlPIDsimu.m que se presenta en el cuadro 8.15 permite
realizar la simulación del control PID con el robot de 2 gdl
Código Fuente 8.15
cap8 robot2gdlPIDsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 robot2gdlPIDsimu.m
1 clc;
2 clear all;
3 close all;
4 format short g
5
6
7
8
ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector tiempo
ci=[0; 0; 0; 0;0;0]; %condiciones iniciales
opciones=odeset(’RelTol’,1e-3,’InitialStep’, 1e-3, ’MaxStep’,1e-3);
[t,x]=ode45(’cap8 robot2gdlPID’,t,ci,opciones);
9 q1=x(:,1); q2=x(:,2);
10 qp1=x(:,3); qp2=x(:,4);
11 int1=x(:,3); int2=x(:,4);
12
13
14
15
[n,m]=size(t);
tau1=zeros(n,1); tau2=zeros(n,1);
qtilde1=zeros(n,1); qtilde2=zeros(n,1);
xef=zeros(n,1); yef=zeros(n,1);
16 beta1=0.15; beta2=0.15; l1=0.45; l2=0.45;
17 for k=1:n
18
[qt tau] = cap8 PIDrobot2gdl([q1(k); q2(k)], [qp1(k); qp2(k)],[int1(k); int2(k)]);
19
20
21
tau1(k)=tau(1); tau2(k)=tau(2);
qtilde1(k)=qt(1); qtilde2(k)=qt(2);
[xef(k), yef(k),˜ ]=cinematica r2gdl(beta1, l1, q1(k), beta2,l2,q2(k));
22
23
24
p=Rz(-pi/2)*[xef(k), yef(k), beta1+beta2]’;
xef(k)=p(1);
yef(k)=p(2);
25
26
27
28
end
subplot(3,3,1); plot(t,qtilde1,t,qtilde2)
subplot(3,3,2); plot( t, tau1, t,tau2)
subplot(3,3,3); plot( t,int1,t,int2)
29 subplot(3,3,4); plot(xef,yef)
30 subplot(3,3,5); plot(qtilde1, qp1, qtilde2,qp2)
31 subplot(3,3,6); plot(t, qp1, t,qp2)
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
422
Capı́tulo 8: Control de posición
8.4 Control punto a punto
U
na aplicación inmediata de control de posición es el que se denomina control
punto a punto, consiste en mover el extremo final del robot para cada una de
las posiciones desdeas q di , con i = 1, 2, · · ·, n. De esta forma es posible parametrizar
lı́neas, cı́rculos, elipses, figuras y superficies en función de un conjunto de puntos
qdi . Los algoritmos de control de posición de alto desempeño pueden ser empleados
en control punto a punto como son los casos de los esquemas tangente hiperbólico y
arcotangente.
8.4.1
8.4.1. Control tangente hiperbólico
La estructura matemática del control tangente hiperbólica es la siguiente:
τ
= Kp tanh(q̃) − Kv tanh(q̇) + g(q)
♣ ♣ Ejemplo 8.6
Posicionar el extremo final de un robot de 2 gdl en: [ qd1 , qd2 ]T = [ 45, 90 ] m.
Solución
El programa cap8 robot2gdlTANH.m
8.9.
que se presenta en el cuadro 8.16
tiene el modelo dinámico del robot
de 2 gdl; en la lı́nea 22 se conecta el archivo cap8 TANHrobot2gdl.m
(ver cuadro 8.17) para realizar el control tangente hiperbólico. El programa
cap8 TANHrobot2gdlsimu.m del cuadro 8.18 permite realizar la simulación
del control tangente hiperbólica cuyos
Figura 8.9 Control tanh().
resultados se muestran en la figura 8.8.
.9
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.4
423
Control punto a punto
Código Fuente 8.16
cap8 robot2gdlTANH.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 robot2gdlTANH.m
1
function xp = cap8 robot2gdlTANH(t,x)
2
3
%vector de posición articular
q1=x(1); q2=x(2); q = [q1; q2];
4
%vector de velocidad articular
5
qp1=x(3); qp2=x(4); qp = [qp1; qp2];
m1=23.902; l1=0.45; lc1=0.091; I1=1.266; b1=2.288;
m2=3.880; l2=0.45; lc2=0.048; I2=0.093; b2=0.175; g=9.81;
6
7
8
theta1=m1*lc1*lc1+m2*l1*l1+m2*lc2*lc2+I1+I2;
theta2=l1*m2*lc2;
theta3=m2*lc2*lc2+I2;
theta4=g*(lc1*m1+m2*l1); theta5=g*m2*lc2;
9
10
11
12
theta6=b1; theta7=b2;
M=[theta1+2*theta2*cos(q2), theta3+theta2*cos(q2);
theta3+theta2*cos(q2), theta3];
C=[ -2*theta2*sin(q2)*qp2, -theta2*sin(q2)*qp2;
13
14
15
16
theta2*sin(q2)*qp1, 0];
gq11=theta4*sin(q1)+theta5*sin(q1+q2);
gq21=theta5*sin(q1+q2);
gq=[gq11; gq21];
17
18
19
20
22
fr=[theta6*qp1;
theta7*qp2];
[˜ , tau]=cap8 TANHrobot2gdl(q,qp);
23
qpp = M∧ (-1)*(tau-C*qp-gq-fr);
24
%vector de salida
xp = [qp1; qp2; qpp(1); qpp(2)];
21
25
26
end
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
424
Capı́tulo 8: Control de posición
Código Fuente 8.17
cap8 TANHrobot2gdl.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 TANHrobot2gdl.m
1
function [qtilde tau] = cap8 TANHrobot2gdl(x,xp)
2
q1=x(1); q2=x(2); q = [q1; q2]; %posiciones
qp1=xp(1); qp2=xp(2); qp = [qp1; qp2]; %velocidades
3
4
%parámetros del robot: par gravitacional
m1=23.902; lc1=0.091; l1=0.45;
5
6
8
m2=3.880; lc2=0.048; g=9.81;
theta4=g*(lc1*m1+m2*l1);
theta5=g*m2*lc2;
9
%par gravitacional
7
10
par grav = [theta4*sin(q1)+theta5*sin(q1+q2);
g*m2*lc2];
11
12
13
%ganancia proporcional
kp1=10; kp2=2;
14
Kp=[kp1, 0; 0, kp2];
15
16
%ganancia derivativa
kv1=8; kv2=1; Kv=[kv1, 0; 0, kv2];
17
%referencias
18
qd1=45; qd2=90; qd=[qd1; qd2];
qtilde=pi/180*qd-q;
19
20
21
%error de posición en grados
qtgrados=(180/pi)*qtilde;
22
%velocidad en grados/segundo
23
qpgrados=180*qp/pi;
tau=Kp*tanh(qtgrados)-Kv*tanh(qpgrados)+par grav;
24
25
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.4
425
Control punto a punto
Código Fuente 8.18
cap8 TANHrobot2gdlsimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 TANHrobot2gdlsimu.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
clc;
clear all;
close all;
format short g
ti=0; h=0.001; tf = 5; t=ti:h:tf; %vector tiempo
ci=[0; 0; 0; 0]; %condciones iniciales
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
[t,x]=ode45(’cap8 robot2gdlTANH’,t,ci,opciones);
q1=x(:,1); q2=x(:,2);
qp1=x(:,3); qp2=x(:,4);
[n,m]=size(t);
tau1=zeros(n,1); tau2=zeros(n,1); qtilde1=zeros(n,1); qtilde2=zeros(n,1);
xef=zeros(n,1); yef=zeros(n,1);
beta1=0.15; beta2=0.15; l1=0.45; l2=0.45;
for k=1:n
15
[qt tau] = cap8 TANHrobot2gdl([q1(k);q2(k)],[qp1(k);qp2(k)]);
tau1(k)=tau(1); tau2(k)=tau(2);
qtilde1(k)=qt(1); qtilde2(k)=qt(2);
[xef(k), yef(k),˜ ]=cinematica r2gdl(beta1,l1,q1(k),beta2,l2,q2(k));
16
17
18
19
p=Rz(-pi/2)*[xef(k), yef(k), beta1+beta2]’;
xef(k)=p(1); yef(k)=p(2);
20
21
end
22
subplot(2,2,1); plot(t,qtilde1,t,qtilde2)
subplot(2,2,2); plot( t, tau1, t,tau2)
subplot(2,2,3); plot(xef,yef)
subplot(2,2,4); plot(qtilde1, qp1, qtilde2,qp2)
23
24
25
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
426
Capı́tulo 8: Control de posición
8.4.2
8.4.2. Control arcotangente
El control arcotangente está dado por la siguiente expresión:
τ
= Kp atan (q̃) − Kv atan (q̇) + g(q)
♣ ♣ Ejemplo 8.7
Generar una flor de 8 pétalos con un robot de 2 gdl usando el control arcotangente.
Solución
Dentro de las aplicaciones de control punto a punto se encuentra el trazo de figuras.
El programa cap8 robot2gdlatansimu.m (cuadro 8.19) realiza la simulación para
que un robot antropomórfico de 2 gdl trace una figura tipo flor con 8 pétalos usando
el control arcotangente como se muestra en la figura 8.10.
Figura 8.10 Control atan().
El control arcotangente es de alto desempeño y la sintonización de las ganancias
proporcional y derivativa deben satisfacer ser menor al par máximo que pueda
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.4
427
Control punto a punto
entregar el servoamplificador. Con esta sintonı́a de las ganancias es posible controlar
todos los puntos de la figura a trazar.
El programa cap8 robot2gdlflor8p.m que se encuentra en el cuadro 8.20 tiene el
código fuente del robot de 2 gdl; particularmente en la lı́nea 11 se inserta el algoritmo
de control arcotangente el cual se encuentra en el programa cap8 atanflor8p.m del
cuadro 8.21. Observe que el pase de parámetros del control arcotangente son: t, q, q̇;
el tiempo t es necesario para generar la figura en forma de flor con 8 pétalos.
Código Fuente 8.19
cap8 robot2gdlatansimu.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 robot2gdlatansimu.m
1
2
3
4
5
6
7
8
9
10
11
clc; clear all; close all;
format short g
ti=0; h=0.001; tf = 10; %vector tiempo
t=ti:h:tf; %tiempo de simulación
ci=[0; 0; 0; 0];
opciones=odeset(’RelTol’,1e-3,’InitialStep’,1e-3,’MaxStep’,1e-3);
[t,x]=ode45(’cap8 robot2gdlflor8p’,t,ci,opciones);
q1=x(:,1);
q2=x(:,2);
[n,m]=size(t);
14
xef=zeros(n,1);
yef=zeros(n,1);
beta1=0.15; beta2=0.15; l1=0.45; l2=0.45;
[xef, yef,˜ ]=cinematica r2gdl(beta1,l1,q1,beta2,l2,q2);
15
plot(xef,yef)
12
13
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
428
Capı́tulo 8: Control de posición
Código Fuente 8.20
cap8 robot2gdlflor8p.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 robot2gdlflor8p.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function xp = cap8 robot2gdlflor8p(t,x)
q = [x(1); x(2)]; %vector de posición articular
qp = [x(3); x(4)]; %vector de velocidad articular
M = [2.351+0.168*cos(q(2)) 0.102+0.084*cos(q(2)); %matriz de inercia
0.102+0.084*cos(q(2)) 0.102 ];
C = [-0.168*sin(q(2))*qp(2) -0.084*sin(q(2))*qp(2); %matriz de fuerzas centrı́petas y de Coriolis
0.084*sin(q(2))*qp(1) 0.0 ];
par grav = [38.46*sin(q(1))+1.82*sin(q(1)+q(2)); %vector de pares de gravitacionales
1.82*sin(q(1)+q(2)) ];
fr = [2.288*qp(1); 0.175*qp(2)];
[˜ , tau] = cap8 atanflor8p(t,q,qp) ; %ley de control arcotangente
qpp = inv(M)*(tau-C*qp- par grav-fr); %vector de aceleración articular
xp = [qp(1); qp(2);qpp(1); qpp(2) ]; %vector de salida
end
Código Fuente 8.21
cap8 atanflor8p.m
%MATLAB Aplicado a Robótica y Mecatrónica.
%Editorial Alfaomega,
Fernando Reyes Cortés.
%Capı́tulo 8 Control de posición.
cap8 atanflor8p.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function [qtilde tau] = cap8 atanflor8p(t,x,xp)
q = [x(1); x(2)]; %posiciones
qp = [xp(1); xp(2)]; %velocidades
kp1=100; kp2=15; kv1=kp1;kv2=kp2;
Kp=[kp1, 0; 0, kp2]; %ganancia proporcional
Kv=[kv1, 0; 0, kv2]; %ganancia derivativa
lambda1=180/pi; lambda2=180/pi; Lambda=[lambda1 0; 0 lambda2];
gamma1=1; gamma2=1; Gamma=[gamma1 0; 0 gamma2];
par grav = [38.46*sin(q(1))+1.82*sin(q(1)+q(2)); %vector de pares de gravitacionales
1.82*sin(q(1)+q(2)) ];
xc=0.3; yc=0.3; r=0.2; l1=0.45; l2=0.45; alfa=0.07; beta=4; x=xc+alfa+r*(cos(t))*(sin(beta*t));
y=-yc+alfa+r*(sin(t))*(sin(beta*t));
[qd1 qd2]=cinv r2gdl(l1,l2,x,y);
qd=[qd1; qd2];
qtilde=[qd(1)-q(1); qd(2)-q(2)]; %error de posición
%ley de control PD
tau=Kp*atan(Lambda*qtilde)-Kv*atan(Gamma*qp)+par grav;
end
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
8.5
429
Resumen
8.5 Resumen
C
ontrol de posición robots manipuladores permite realizar una amplia gama
de aplicaciones industriales, comerciales, cientı́ficas, etc. La aplicación más
popular del control de robot manipuladores es la que se denomina control punto
a punto. Prácticamente todas las aplicaciones industriales pueden ser realizadas a
través de esta técnica de control.
En el presente capı́tulo se presentó las bases para entender el funcionamiento
cualitativo de los algoritmos de control, partiendo desde los tradicionales como el
proporcional derivativo (PD) y control proporcional integral derivativo (PID), hasta
nuevos esquemas como las funciones tangente hiperbólica y arcotangente.
El modelo dinámico de robots manipuladores permite evaluar cualitativamente el
desempeño de nuevos esquemas de control como:
[qtilde tau] = pd(x, xp)
[qtilde tau] = pid(x, xp, varepsilon)
[qtilde tau] = atan(x, xp)
[qtilde tau] = tanh(x, xp)
El diseño de nuevas estrategias de control es posible gracias a la técnica de moldeo de
energı́a la cual genera una familia muy extensa de esquemas de control para robots
manipuladores.
En el Web del libro se encuentran los programas fuentes de las librerı́as de control
de posición.
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
430
Capı́tulo 8: Control de posición
Parte IV Referencias selectas
H
ay una extensa literatura para el área de control de robots manipuladores,
particularmente se recomienda los siguientes textos:
8 Control de posición
M. Vidyasagar.
“Nonlinear systems analysis”. Prentice-Hall,
Englewood Cliffs, NJ (1993).
R.M.
Murray,
Z.
Li
and
S.S.
Sastry.
“A mathematical introduction to robotic manipulation”.
CRC
Press (1994).
A. Isidori. “Nonlinear control systems”. Springer-Verlag, London,
UK (1995).
Karl
J.
Åström
and
Björn
“Computer controlled systems: theory and design”.
Wittenmark.
Third
Edi-
tion. Prentice Hall Inc. 1997.
Shankar Sastry. “Nonlinear systems: analysis stability and control”.
Springer 1999.
Hassan K. Khalil. “Nonlinear systems”. Third Edition. Prentice
Hall Inc. 2002.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
431
Parte IV Problemas propuestos
R. Kelly y V. Santibánez. “Control de movimiento de robots manipuladores”.
Printice-Hall, Pearson. 2003.
R.
Kelly,
V.
Santibánez
and
“Control of robot manipulators in joint space”.
A.
Lorı́a.
Springer-Verlag
London 2005.
Mark W.
Spong
and
Seth
Hutchinson,
M.
Vidyasagar.
“Robot modeling and control”. John Wiley and Sons, Inc. 2006.
Fernando Reyes
“Robótica: control de robots manipuladores”.
Alfaomega, 2011.
Parte IV Problemas propuestos
E
n esta sección se presenta una serie de ejercicios con la finalidad de mejorar
las habilidades en simulación de control de robots manipuladores.
Capı́tulo 8 Control de posición
8.1 Implementar el control PID para los siguientes robots:
(a) Péndulo qd1 = 90 grados.
(b) Robot antropomórfico de 3 gdl q d = [ 30, 45, 90] grados.
(c) Control cartesiano de 3 gdl dd = [ 0.3, 0.4, 0.5 ] m.
8.2 Considere la siguiente estructura de control:
τ
= Kp sen(q̃) − Kv sen(q̇) + g(q)
implementar esta estructura de control en los siguientes robots:
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
432
Capı́tulo 8: Control de posición
(a) Péndulo qd1 = 90 grados.
(b) Robot antropomórfico de 2 gdl q d = [ 45, 90 ]T grados.
(c) Robot antropomórfico de 3 gdl qd = [ 45, 90, 135]T grados.
(d) Control cartesiano de 3 gdl dd = [ 0.5, 0.8, 0.9]T m.
8.3 Considere la siguiente familia de algoritmos de control tipo PD:
τ
= Kp q̃2m−1 − Kv q̇2m−1 + g(q)
donde m ∈ N .
Implemente esta estructura de control en los casos para m = 1, 2, 3, 4, 5 en los
siguientes robots:
(b) Robot antropomórfico de 2 gdl qd = [ 90, 135 ]T grados.
(c) Control cartesiano de 3 gdl dd = [ 0.5, 0.8, 0.9]T m.
¿Qué reglas de sintonı́a puede proponer para obtener el valor de las ganancias
de tal forma que no sature a los servoamplificadores cuya capacidad son de
τ1max = 150 Nm, τ2max = 15 Nm para el robot de 2 gdl y τ1max = 50 Nm,
τ2max = 150, τ3max = 15 para el robot de 3 gdl.
8.4 Sea la siguiente familia de controladores
τ
= Kp
coshm−1 (q̃) senh(q̃)
− Kv atan (q̇) + g(q)
1 + cosh(q̃)
considere los casos de estudio para m = 1, 2, 3, 4, 5 en un robot cartesiano de
3 gdl para controlar la posición del extremo final del robot en las siguientes
coordenadas: [ 0.4, 0.3, 0.8] m.
(a) ¿Cómo varı́a la respuesta del robot (errores de posición) conforme se
incrementa el exponente m.
(b) ¿Describa el desempeño de este esquema de control en función de las
ganancias y el exponente m.
Alfaomega
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Índice analı́tico
A
clear, 17
cinemática, 140, 185
algoritmo
diferencial, 187
recursivo, 332
de control, 393
inversa, 186
columna de una matriz, 27
amortiguamiento, 129
columnas, 26, 35
antropomórfico, 408
concatenación, 35
archivos experimentales, 76
arreglos, 26, 41
constante de tiempo, 297
constantes útiles, 18
continue, 74
B
backward difference, 95
borrando, 35
control, 242
conveción DH, 192
arcotangente, 390
de posición, 393
brazo robot de 2 gdl, 403
de robots, 390, 393
PD, 396
break, 73
C
PD,
péndulo, 397
robot cartesiano, 413
case, 72
centrı́fuga, 301
robot de 2 gdl, 403
robot de 3 gdl, 408
434
Índice analı́tico
PID, 417
elseif, 60, 64
proporcional
390, 395
derivativo,
proporcional integral derivativo, 390
punto a punto, 395
end, 51, 52
error de posición, 395, 417
esquema escalar, 381
esquemas de regresión, 332, 359
tangente hiperbólico, 390
estimador de velocidad, 296
CRTL Q, 15
exit, 14
D
expansión de escalares, 37
Denavit-Hartenberg, 192
eye, 32
demos, 13
ezmesh, 47
F
derivada, 93
desempeño, 395
det, 85
feval, 50
determinante simbólico, 86
determinantes, 85
diferenciación numérica, 92
diff, 94, 97
filtro, 299
fopen, 76
format, 18
E
formato numérico, 18
ecuación diferencial ordinaria,
117, 288
Alfaomega
filtrado, 296, 299, 350
for, 58, 61, 64, 67, 73
dinámica, 284
else, 60
fclose, 76
forward difference, 95
fplot, 46
fprintf, 76
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
435
Índice analı́tico
frecuencia de corte, 357
gráficas, 43
H
frecuencia natural, 129
fricción de Coulomb, 306
fricción viscosa, 306
help, 13, 43
elfun, 49
elmat, 49
función, 51
specfun, 49
función
helpwin, 43
cı́rculo, 56
I
transferencia, 289
discontinua, 351
identificación, 331
genvarname, 16
ode, 120
identificadores, 15
ode23, 122
if, 58–60, 64
anidada, 53
inercia del rotor, 306
archivo, 51
inercia, 311
cuadratura, 113
inercia, robot 3 gdl
en lı́nea, 50
instrucciones condicionales, 59
quad, 108
integración numérica, 100
G
integral, 93
inversa de matriz, 87
ganancia
L
derivativa, 417
proporcional, 417
integral, 417
globales, 53
librerı́as de
cinemática, 274
Denavit-Hartenberg, 180
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
436
Índice analı́tico
Traslación y rotación, 182
potencia, 355, 359, 369, 378
matrices homogéneas, 174
regresión, 346
mı́nimos cuadrados, 334
regresión dinámico, 361
dinámico, 287, 331, 346, 359
linesolve, 89
dinámico filtrado, 350
load, 32, 76
moldeo de energı́a, 390, 393
Lobatto, 113
multivariable, 287, 336, 381
locales, 53
O
M
objetivo de control, 394
matrices de rotación, 148
ode, 120, 288
máximo, 69
ode113, 123
método de Euler, 95, 114
ode15s, 123
método de primer orden, 118
ode23, 122
método de Runge-Kutta, 118,
119
ode23s, 123
mı́nimo, 69
ode23tb, 124
mı́nimos cuadrados, 332, 334
ode45, 120
magic, 32
off-line, 83
Mathworks, 5, 80
ones, 32
matrices, 26, 38
matriz de covarianza, 333
ode23t, 123
operaciones básicas, 38, 40
operaciones con arreglos, 41
operadores
mesh, 47
[], 28
modelo
’, 24
energı́a, 353, 366
Alfaomega
(), 23
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
437
Índice analı́tico
,, 24
quadgk, 114
:, 21
quadl, 113
;, 23
quadv, 114
%, 25
MATLAB, 5, 7
quit, 14
˜ , 25
R
aritméticos, 12
arreglos, 41
rand, 32
lógicos, 58
randn, 32
P
regla
de Cramer, 91
péndulo, 305, 346, 353, 397
de Simpson, 108
parámetros, 331
trapezoidal, 102
PD, 390, 395
PID, 100, 390, 417
rotación, 164
regresor, 332
regulación, 393
pivote, 27
renglón de una matriz, 27
plot3, 43
renglones, 26, 35
potencia, 381
return, 73
potencia filtrada, 357
robótica, 393
problema de control, 393
robot
producto interno, 144
antropomórfico, 408
prompt, 11
cartesiano, 373
Q
cartesiano de 3 gdl, 413
de 3gdl, 321
quad, 113
de 2 gdl, 310, 360
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés
Alfaomega
438
Índice analı́tico
manipulador de 3 gdl, 315,
408
sistemas dinámicos no autónomos, 288
manipuladores, 287, 393
sistemas lineales, 289
ruido, 299
sistemas mecatrónicos, 331
Runge Kutta, 327
subplot, 48
Runge-Kutta, 118
S
suma de matrices, 68
switch, 58, 72
T
save, 76
script, 54
transformación
serie de Taylor, 118
set point, 393, 395
homogénea, 173
traslación, 171
signo, 65
V
Simpson, 113
simulación, 287
simulación de sistemas dinámicos, 124
Simulink, 7
variables, 15
vector de mediciones, 333
vector de parámetros, 333
ventana de comandos, 11
sintaxis, 15
W
sistema lineal escalar, 295
sistema masa resorte amortiguador, 291
while, 58, 71, 73
whos, 16
sistemas dinámicos, 117
sistemas dinámicos autónomos,
288
Alfaomega
Z
zeros, 32
Matlab Aplicado a Robótica y Mecatrónica • Fernando Reyes Cortés.
Descargar