Universidad Autónoma Metropolitana Unidad lztapalapa
Brazo mecánico controlado por motores de paso acoplados a un sistema con microprocesador
Reporte final presentado a la División de Ciencias Básicas e Ingeniería, como parte del Proyecto de Ingeniería Electrónica II
Departamento de Ingeniería Eléctrica
Carrera: Ingeniería E l e c t r ó d ,.:,;;J.. , ..""
Asesor: <P \r
Donaciano Jiménéz V z
:/
Por Rodolfo Hernández Valdez 91 320399 Miguel Angel Mendoza Delgado 92220209
Abril de 2000
lndice
Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Propósito. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Justificación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Capítulo 1 ¿Qué es un robot? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1 . 1 El término robof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Generaciones de robots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Clasificación de los robots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Partes de un robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Capítulo 2 Características generales de los robots . . . . . . . . . . . . . . . . . . . 11
2.1 Grados de libertad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1 . 1 Punto de vista de la teoría de mecanismos y máquinas . . . . . . . . 12
2.1.2 Punto de vista de la Robótica . . . . . . . . . . . . . . . . . . . . . 14
2.2 Volumen de trabajo: Capacidad de carga . . . . . . . . . . . . . . . . . . . 14
2.3 El concepto de gr@per(elemento terminal) . . . . . . . . . . . . . . . . . . . 14
2.3.1 Tipos de herramientas . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Precisión en la repetibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5 Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6 Lenguajes de programación . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6.1 Lenguajes de la primera generación . . . . . . . . . . . . . . . . . . 17
2.6.2 Lenguajes de la segunda generación . . . . . . . . . . . . . . . . . . 17
Capítulo 3 Cinemática y posicionamiento de robots . . . . . . . . . . . . . . . . . . . 18
3.1 Articulaciones robóticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2 La cinemática aplicada a la Robótica . . . . . . . . . . . . . . . . . . . . . . 19
3.3 Problema cinemático directo . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4 Problema cinernático inverso . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Capítulo 4 Motores eléctricos de paso a paso . . . . . . . . . . . . . . . . . . . . . . . 24
4.1 Elementos motrices de los robots . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2 Motores eléctricos de paso a paso . . . . . . . . . . . . . . . . . . . . . . . 25
4.3 Sistemas de control para motores PAP . . . . . . . . . . . . . . . . . . . . . 28
4.3.1 Sistemas de control en lazo abierto, basados en microprocesador . . . 28
Capítulo 5 Sistemas de control con microprocesador . . . . . . . . . . . . . . . . . . . 30
5.1 Estructura y funciones del sistema de control . . . . . . . . . . . . . . . . . 30
5.2 Niveles de control por computadora . . . . . . . . . . . . . . . . . . . . . . . 31
Capítulo 6 Implementación del brazo mecánico . . . . . . . . . . . . . . . . . . . . . 32
6.1 Circuito interface entre la PC y los motores de paso . . . . . . . . . . . . . . 32
6.1 . 1 Diseño del circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6.1.2 Lista de material . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.2 Descripción de los motores . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.3 Programa de simulación y control del brazo mecánico . . . . . . . . . . . . . 36
6.3.1 Instrucciones de uso . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.3.2 Código fuente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Introducción La Robótica es un concepto de dominio público. La mayor parte de la gente tiene una idea de lo que es la
Robótica, sabe sus aplicaciones y 'el potencial que posee; sin embargo, no conocen el origen de la palabra
robot, ni tienen idea de la naturaleza de las aplicaciones útiles de la Robótica como ciencia.
La Robótica, como la conocemos hoy en día, tiene sus orígenes hace miles de años. Comenzaremos
aclarando que, antiguamente, los robots eran conocidos con el nombre de autómatas, y la Robótica no era
reconocida como ciencia, es más, la palabra robot surgió hasta mucho después del origen de los autómatas.
Desde el principio de los tiempos, el hombre ha deseado crear vida artificial. Se ha empeñado en dar
vida a seres artificiales que le acompañen en su morada, o que realicen sus tareas repetitivas, pesadas o
difíciles de realizar por un ser humano. Estos primeros autómatas utilizaban, principalmente, la fuerza bruta
para poder ejecutar sus movimientos. A las primeras máquinas herramientas que ayudaron al hombre a
facilitarle su trabajo no se les daba el nombre de autómata, sino más bien se les reconocía como artefactos o
simples máquinas.
Antiguamente, se creaban artefactos capaces de realizar tareas diarias y comunes para los hombres,
o bien para facilitarles las labores cotidianas; se daban cuenta de que había tareas repetitivas que se podían
igualar con un complejo sistema, y es así como se comienzan a crear máquinas capaces de repetir las
mismas labores que el hombre realizaba. Los ingenieros griegos aportaron grandes conocimientos acerca de
los autómatas, aunque su interés estaba enfocado más bien hacia el saber humano que hacia las
aplicaciones prácticas. Tiempo después, los autómatas fueron los protagonistas principales de una infinidad
de relatos de ciencia-ficción.
Los primeros robots creados en toda la historia de la humanidad no tenían más que un solo fin:
entretener a sus dueños. Sus inventores sólo se interesaban en conceder los deseos de recrear a quien les
pedía construir el robot. Sin embargo, estos inventores se comenzaron a dar cuenta de que los robots podían
imitar movimientos humanos o de alguna criatura viva. Estos movimientos pudieron ser mecanizados y, de
esta manera, se podían automatizar y mecanizar algunas de las labores más sencillas de aquellos tiempos. El
origen del desarrollo de la Robótica se basa en el empeño por automatizar la mayoría de las operaciones en
una fábrica; esto se remonta al siglo XVII, en la industria textil, donde se diseñaron telares que se controlaban
con tarjetas perforadas.
I
Objetivo Diseñar y construir un brazo mecánico controlado por un programa de computadora que manipule los motores
de paso correspondientes a cada grado de libertad del brazo.
Propósito Conocer las ventajas y desventajas del uso de la computadora personal y los motores de pasos en la
implementación de un brazo de robot.
Con el nacimiento de la Revolución Industrial, muchas fábricas tuvieron gran aceptación por la automatización
de procesos repetitivos en la linea de ensamblaje. La automatización consiste, principalmente, en diseñar
sistemas capaces de ejecutar tareas repetitivas hechas por los hombres y de controlar operaciones sin la
ayuda de un operador humano. El término automatización también se utiliza para describir a los sistemas
programables que pueden operar independientemente del control humano. La mayoría de las industrias han
sido automatizadas o utilizan tecnologia para automatizar algunas labores; en la industria de la telefonia, la
marcación, la transmisión y la facturación están completamente automatizadas.
La aparición de los robots es consecuencia directa del desafio que ha representado para el hombre
hacer cada vez más eficientes los procesos de producción. Asi, las aplicaciones de la Robótica en la
automatización de esos procesos se han convertido en parte imprescindible de fábricas de aparatos
electrónicos, automóviles, etc.
Hay estadísticas que indican claramente las ventajas de la utilización de un robot en lugar de mano
de obra humana en ciertas tareas (sin mencionar las implicaciones sociales de la Robótica, que no trataremos
en este Proyecto). Entre esas ventajas están la velocidad y la precisión con que operan los robots, incluyendo
el hecho de que "no se cansan" y "no protestan".
Además, existen aplicaciones donde la Robótica juega un papel fundamental, es decir, sin ésta sería
prácticamente imposible llevar a cabo tales aplicaciones, por ejemplo, el manejo de sustancias radioactivas
mediante brazos manipuladores.
2
1
¿Qué es un robot?
1 .I El término robot Desde la antigüedad se ha tenido la idea de crear autómatas que imitaran a los hombres o a los animales.
Pero no fue sino hasta este siglo cuando se desarrolló la tecnología para construir máquinas que sustituyeran
al hombre en tareas pesadas, peligrosas o monótonas. Tales máquinas reciben el nombre de robot. Este
término, de origen checo, aparece por vez primera en novelas de ciencia ficción, aunque es hasta el año 1961
cuando llega a la industria el primer robot util.
Mikell Groover, en su libro Automation, Production Systems and Computer lntegrated Manufacturing,
define al robot industrial como "...una máquina programable, de propósito general, que posee ciertas
características antropomórficas, es decir, con características basadas en la figura humana...". La figura 1 . 1
muestra la analogía existente entre las partes del brazo humano y el mecánico.
TEBRATO BRAZO -" - _""" ""
K
Figura 1.1. El brazo mecánico es un robof con características anfropomótficas.
3
Cabe destacar que la característica antropomórfica más común en nuestros días es la de un brazo
mecánico, el cual realiza diversas tareas industriales.
Pero el robot industrial, que se conoce y emplea en nuestros días, no surge como consecuencia de la
tendencia o afición de reproducir seres vivientes, sino de la necesidad. Con el objetivo de diseñar una
máquina flexible, adaptable al entorno y de fácil manejo, George Devol, pionero de la Robótica Industrial,
patentó, en 1956, un manipulador programable que fue el germen del robot industrial.
Para las normas ISO, un robot industrial es un manipulador automático reprogramable y multifuncional,
que posee ejes capaces de agarrar materiales, objetos, herramientas, mecanismos especializados, a través
de operaciones programadas para la ejecución de una variedad de tareas.
Un robot industrial es una máquina que puede efectuar un número diverso de trabajos,
automáticamente, mediante la programación previa; su estructura es en forma de brazo mecánico y tiene la
capacidad de adaptarse a diferentes aprehensores o herramientas. Un robot tiene la posibilidad de llevar a
cabo trabajos completamente diferentes e, incluso, tomar decisiones según la información procedente del
mundo exterior mediante el adecuado programa operativo de su sistema informático.
Los usos actuales de los robots son:
Militares
Industriales
Personales
Educativos
Existen en el mercado diversas empresas dedicadas a la fabricación de robots industriales, por 10 que existen
diferentes marcas y modelos. Estos últimos normalmente son asignados para identificarlos o de acuerdo a su
función.
La Robótica es una tecnología transdisciplinaria, ya que no solamente hace uso de los recursos que le
proporcionan varias ciencias afines, sino que la misma Robótica produce notables transformaciones en cada
una de estas ciencias: Electrónica, Computación, Automática, Matemáticas, Mecánica, ...
4
1.2 Generaciones de robots La primera generación se caracteriza por mecanismos de relojería que permiten mover cajas
musicales o juguetes de cuerda y lavarropas de ciclo fijo. Están limitados a un número pequeño de
movimientos.
La segunda generación, en vez de utilizar interruptores, usa una secuencia numérica de control de
movimientos almacenados. El 90 YO de los robots industriales en USA pertenecen a esta generación.
La tercera generación de robots utiliza las computadoras para su estrategia de control y tiene algún
conocimiento del ambiente local a través del uso de sensores.
La cuarta generación mejora las extensiones sensoriales, para comprender sus acciones y el
mundo que los rodea. Utilizan lógicas difusas y procesamiento dirigido por expectativas.
La quinta generación pretende que el control emerja de la adecuada organización y distribución de
módulos conductuales; esta nueva arquitectura es denominada arquitectura de subsumción.
1.3 Clasificación de los robots Hay diversas propuestas en la clasificación de los robots; Japón, país líder tanto en la construcción como en
la aplicación de robots en diversos campos, ofrece una clasificación muy amplia, que se presenta a
continuación:
Robots Manipuladores: Son sistemas mecánicos multifuncionales, con un sencillo sistema de control,
que permite gobernar el movimiento de sus elementos, de los siguientes modos:
0 Manual: cuando el operario controla directamente la tarea del manipulador.
0 De secuencia fija: cuando se repite, de forma invariable, la tarea del manipulador.
0 De secuencia variable: se pueden alterar algunas características de los ciclos de trabajo.
Robots de repetición o aprendizaje: Son manipuladores que se limitan a repetir una secuencia de
movimientos, previamente ejecutada por un operador humano, haciendo uso de un controlador manual o un
dispositivo auxiliar. En este tipo de robots, el operario en la fase de enseñanza, se vale de una pistola de
5
programación con diversos pulsadores o teclas, o bien, de joystics, o bien utiliza un maniquí o, a veces,
desplaza directamente la mano del robot.
Robots con control por computadora: Son manipuladores o sistemas mecánicos multifuncionales,
controlados por una computadora. En este tipo de robots, el programador no necesita mover realmente el
elemento de la máquina, cuando la prepara para realizar un trabajo. El control por computadora dispone de un
lenguaje especifico, compuesto por varias instrucciones adaptados al robot, con las que se puede
confeccionar un programa de aplicación utilizando sólo la terminal de la computadora y no el brazo.
Robots inteligentes: Son similares a los del grupo anterior, pero además son capaces de relacionarse
con el mundo que les rodea a través de sensores y tomar decisiones en tiempo real (autoprogramables). La
visión artificial, el sonido de la máquina y la inteligencia artificial, son las ciencias que más se están
estudiando para su aplicación en los robots inteligentes.
Micro-Robots: Con fines educacionales, de entrenamiento o investigación. Existen numerosos robots
de formación o micro-robots a un precio muy accesible y cuya estructura y funcionamiento son similares a los
de la aplicación industrial.
Tomando en cuenta ésta y otras propuestas, hemos hecho una clasificación más general: hay robots de
tres clases. Los robots de aprendizaje graban en su memoria electrónica los movimientos que han ejecutado
por vez primera para que, posteriormente, los reproduzcan fielmente, sin ninguna intervención ulterior del
hombre. Los robots programados están gobernados por una computadora, cuyas instrucciones siguen
constantemente. Por último, los robots autoadaptables disponen de detectores, captadores, cámaras de
televisión u otros medios que le permiten tener en cuenta los eventuales cambios del entorno para modificar
su programa.
1.4 Partes de un Robot Un manipulador robótico podría ser visto más que sólo como una serie de enlaces mecánicos. El brazo
mecánico sólo es un componente de todo un Sistema Robótico, mostrado en la figura 1.2, el cual consiste del
brazo, fuente de poder externa, elemento terminal (gripper), sensores exteros e internos, servo-control,
interface con la computadora y control por computadora. Aún el software programado podría ser considerado
como una parte integral de todo el sistema, dado que la manera en la cual el robot es programado y
controlado puede tener un impacto mayor en su desempeño y un subsecuente rango de aplicaciones.
6
Fuente de poder externa
residente terminal
Figura 1.2. Componentes de un Sistema Robótico.
El brazo humano puede ser representado en un robot, cuyas articulaciones le permiten hasta seis
grados de libertad y que, por consiguiente, puede orientarse en todas las direcciones; lleva en su extremo
libre dos pinzas o algún sistema de fijación para las herramientas que ha de usar; sus movimientos son
regulados por mecanismos (p. ej. motores PAP) acoplados a un microprocesador.
La idea común que se tiene de un robot industrial es la de un brazo mecánico articulado pero, como
se habia mencionado al inicio de este apartado, este elemento no es más que una parte de lo que se
considera técnicamente como un sistema de robot industrial.
Un sistema de robot industrial consta de las siguientes partes:
Manipulador o brazo mecánico.
Controlador.
Elementos mofrices o actuadores.
Elemento terminal, herramienta o aprehensor.
Sensores de información en los robots inteligentes.
7
Así, al robot industrial se le engloba dentro de la arquitectura de la celda flexible de manufactura, en la
que se combinan los diversos dispositivos que configuran un núcleo básico de producción.
Manipulador: Recibe el nombre de manipulador o brazo de robot, el conjunto de elementos mecánicos
que propician el movimiento del elemento terminal (aprehensor o herramienta). Dentro de la estructura interna
del manipulador se alojan, en muchas ocasiones, los elementos motrices, engranajes y transmisores que
soportan el movimiento de las cuatro partes que, generalmente, suelen conformar el brazo:
Base o pedestal de fijación
Cuerpo
Brazo
Antebrazo
Los cuatro elementos rígidos del brazo están relacionados entre si mediante articulaciones, como se muestra
en la figura 1.3, las cuales pueden ser giratorias, cuando el movimiento permitido es de rotación, o
prismáticas, en las que existe un movimiento de traslación entre los elementos que relacionan.
Figura 1.3. Componentes del brazo manipulador.
8
A semejanza con el brazo humano, a las uniones o articulaciones del manipulador se les denomina:
O Unión del cuerpo (base-cuerpo)
O Unión hombro (cuerpo-brazo)
O Unión codo (brazo-antebrazo)
O Unión muñeca (antebrazo-aprehensor)
El número de elementos del brazo, y de las articulaciones que los relacionan, determinan los grados de
libertad del manipulador que, en los robots industriales, suelen ser 6 y coinciden con los movimientos
independientes que posicionan las partes del brazo en el espacio.
Controlador: Recibe este nombre el dispositivo que se encarga de regular el movimiento de los elementos del manipulador y todo tipo de acciones, cálculos y procesado de información que se realiza.
La complejidad del control varía según los parámetros que se gobiernan, pudiendo existir las siguientes
categorías:
O Controlador de posición: interviene en el control de la posición del elemento terminal. Puede
actuar en modo punto a punto, o bien, en modo continuo, en cuyo caso recibe el nombre de
control continuo de trayectoria.
O Controlador dinámico: toma en cuenta las propiedades dinámicas del manipulador, motores y
elementos asociados.
O Control adaptativo: considera la variación de las características del manipulador al variar la
posición.
Elementos motrices o actuadores: Son los encargados de producir el movimiento de las articulaciones
directamente o a través de poleas o cables. Se clasifican en tres grupos:
O Neumáticos: emplean aire comprimido como fuente de energía y son muy indicados en el control
de movimientos rápidos, pero de precisión limitada.
0 Hidráulicos: son recomendables en los manipuladores que tienen una gran capacidad de carga,
junto con una precisa regulación de velocidad.
0 Eléctricos: son los más utilizados, por su fácil y preciso control, as¡ como por otras propiedades
ventajosas que reporta su funcionamiento.
Elemento Terminal (gripper): es un dispositivo que se une a la muñeca del brazo del robot con la
finalidad de activarlo para la realización de una tarea específica.
Por Io general, la problemática del elemento terminal radica en que ha de soportar una elevada
capacidad de carga y, al mismo tiempo, conviene que tenga peso y tamaño reducidos. Como consecuencia
de la amplia variedad de tareas a las que se destinan los robots, el elemento terminal adopta formas muy
diversas. En bastantes ocasiones es necesario diseñar el elemento terminal de acuerdo a la aplicación en la
que se emplea.
Los diversos tipos de elementos terminales podemos dividirlos en dos grandes categorías: pinzas y
herramientas,
Las pinzas han sido diseñadas para que el robot cargue y descargue objetos, transporte materiales y
ensamble piezas. Los tipos de pinzas más comunes pertenecen al tipo llamado pivotante. Los dedos de la
pinza giran en relación con los puntos fijos del pivote. De esta manera, la pinza se abre y se cierra. Otro tipo
de pinzas se denominan de movimiento h a / En este caso, los dedos se abren y se cierran ejecutando un
movimiento paralelo entre sí.
AI momento de diseñar una pinza deben tomarse en cuenta la forma y peso de la pieza de trabajo, así
como el tipo de movimiento que harán los dedos. Con estos lineamientos, se puede asegurar una buena
sujeción, de tal forma que la pinza no modifique o dañe la estructura de la pieza. Una regla general es que la
pinza debe sujetar a la pieza de trabajo de su centro de gravedad. Esto ocasiona que se anulen los
momentos que se pudieran generar por el peso de la pieza de trabajo. Para reducir los tiempos de ciclo en
operaciones de carga y descarga de piezas a máquinas-herramientas, se pueden diseñar efectores finales
con doble pinza. Existen otros tipos de pinzas como ventosas, pinzas magnéticas y pinzas adhesivas.
Dependiendo de la aplicación, se pueden sustituir las pinzas por herramientas.
Sensores de Información: Los robots de la Mima generación tienen capacidad para relacionarse con el
entorno y tomar decisiones en tiempo real, para adaptar sus planes de acción a las circunstancias exteriores.
La información que reciben les hace autoprogramables, o sea, alteran su actuación en función de la situación
externa, Io que supone disponer de un cierto grado de inteligencia artificial,
10
Características generales de los robots
2.1 Grados de libertad Son 10s paremetros que se precisan para determinar la posición y la orientación del elemento terminal del
manipulador. También se pueden definir los grados de libertad como los posibles movimientos básicos (giros
y desplazamientos) independientes.
Los grados de libertad del brazo de un manipulador están directamente relacionados con su anatomía o
configuración.
Un mayor número de grados de libertad conlleva al aumento de la flexibilidad en el posicionamiento del
elemento terminal. Aunque la mayoría de las aplicaciones industriales requieren de 6 grados de libertad, como
las de soldadura, mecanizado y paletización, otras más complejas exigen un número mayor, tal es el caso de
las labores de montaje. Tareas más sencillas y con movimientos más limitados, como las de pintura, suelen
exigir 4 ó 5 grados de libertad.
La mano humana cuenta con unos 22 grados de libertad y, al mismo tiempo, la vista y el tacto ligados al
cerebro, le permiten una habilidad increíble en un sinnúmero de operaciones. Entonces, es necesario limitar el
número de grados de libertad al mínimo indispensable. Esto se hace mediante el siguiente análisis:
La posición de un cuerpo rigido en el espacio (figura 2.1) queda determinada si conocemos la posición
de tres de sus puntos. Estos, a su vez, quedan determinados por nueve coordenadas,
Figura 2.1. Posición de un cuerpo rígido en el espacio.
dado que el cuerpo es rígido, se cumple que las distancias entre los puntos son constantes, por Io que se
obtienen las siguientes relaciones:
Estas tres relaciones permiten eliminar tres incógnitas. Entonces, tenemos 6 coordenadas libres, lo que
nos indica que se puede construir un mecanismo con seis grados de libertad, para colocar un objeto en
cualquier punto del espacio a su alcance y con cualquier orientación. (De hecho, en los robots industriales,
tres grados de libertad se emplean para definir la posición en el espacio y los otros tres para orientar la mano
de sujeción o herramienta).
2.1 .I Punto de vista de la teoría de mecanismos y máquinas
Dada una configuración cinemática cualquiera, el criterio de Grijbler permite establecer el número de grados
de libertad correspondiente.
Sea un sistema formado por N elementos indeformables. En el espacio de tres dimensiones, cada uno
de estos elementos dispone de seis grados de libertad, de los que tres corresponden a las tres coordenadas
{XO, yo, ZO) del centro de coordenadas asociado a éI, y los otros tres definen la posición angular de los ejes (x, y, z) respecto a la referencia global. Si los elementos no estuvieran conectados mediante pares cinemáticos,
sería preciso conocer 6N parámetros para definir las posiciones de todos ellos. Además, uno de los elementos (el soporte) es fijo y, por lo tanto, el número de grados de libertad se reduce a 6(N-1).
Por otra parte, los elementos del manipulador se encuentran unidos entre sí mediante pares cinemáticos
R o P, que permiten, únicamente, un desplazamiento. El par que conecta la mano de sujeción con el resto del
brazo (par esférico E) permite tres giros. En los robots con una configuración tradicional, cada elemento tiene
dos pares cinemáticos, excepto el soporte y la mano de sujeción, que sólo tienen uno.
El número de pares cinemáticos R o P es N-2, si existe un Único par esferico E. El número de grados
de libertad del mecanismo se puede, entonces, calcular como:
G 6 {N-?) -5 (N-2) -3 N -t ?
La forma habitual de trabajo de los robots manipuladores se puede asimilar a una generación de
trayectorias en su forma restringida, entendiendo por tal la que trata de colocar un punto de mecanismo en
una posicibn determinada. Si se impone, como única condición, que el centro de la mano de sujeción del
robot ocupe una posición dada (x, y, z), y el brazo manipulador sea de seis grados de libertad, quedarán tres
parámetros sin definir.
Para ilustrar mejor Io que se ha comentado aquí, supóngase un brazo manipulador que actúa en el plano
y sea de un tipo derivado de una cadena abierta formada por N elementos unidos mediante N - 1 pares R.
Si se fija uno de los elementos, por ejemplo el 1 , se obtendrá un sistema cuyo número de grados de
libertad es:
G = 3 (N-?) -2 (N-1) = N-1,
ya que cada elemento en el plano posee tres grados de libertad y cada par R restringe dos.
I3
2.1.2 Punto de vista de la Robótica
El punto de vista desde el que se contempla el problema de cálculo de los grados de libertad, en las obras
que tratan exclusivamente sobre Robótica, es un tanto menos formal que el descrito en el apartado anterior,
aunque, por supuesto, perfectamente válido. La diferencia fundamental estriba en el número de elementos a
tener en cuenta y en la forma de construir la muñeca de la mano de sujeción. En efecto, el rótulo se
materializa mediante tres pares de rotación y la mano mediante tres elementos diferentes, con Io que el
número de elementos pasa a ser dos o más que los N considerados en el apartado anterior. Por otra parte, en
la Robótica se acostumbra a no considerar al fijo como un elemento. Llamando E al número de elementos así
contados, se verifica:
€ = N + 1
El número de grados de libertad se puede calcular teniendo en cuenta que los elementos se unen
mediante pares de rotación:
G = 6€-5€= €
Los elementos de un robot con seis grados de libertad son: la base, el brazo, el antebrazo y los tres que
componen la mano.
2.2 Volumen de trabajo: Capacidad de carga El peso (en kilogramos) que puede transportar una garra del manipulador recibe el nombre de capacidad de
carga. A veces, este dato Io proporcionan los fabricantes, incluyendo el peso de la propia carga. La capacidad
de carga es una de las características que más se tienen en cuenta en la selección del robot, según la tarea a
que se destine. En soldadura y mecanizado es común precisar capacidades de carga superiores a los 50 Kg.
2.3 El concepto de gripper (elemento terminal) Existe una gran variedad de elementos terminales requeridos para efectuar las diferentes funciones de
trabajo. Esta variedad de elementos pueden ser divididos en dos categorías principales:
Grippers
Tools
Los grippers son elementos terminales utilizados para sujetar y sostener objetos. Los objetos son
generalmente piezas de trabajo que tienen que ser movidas por el robot. Estas aplicaciones de manejo de
I4
piezas incluyen carga y descarga, tomar las piezas de una banda transportadora y colocar partes en un pallet.
Además de las piezas de trabajo, otros objetos manejados por el gripper del robot incluyen cajas, botes,
materia prima y herramientas.
Los grippers pueden ser clasificados como grippers sencillos o grippers dobles, aunque esta
clasificación se aplica mejor a los grippers mecánicos. El gripper sencillo se distingue por el hecho de que
solamente es colocado un dispositivo de sujeción en el elemento terminal del robot. Un gripper doble tiene
dos dispositivos de sujeción colocados en el elemento terminal y es utilizado para manejar dos objetos por
separado. Ambos dispositivos pueden actuar independientemente. El doble gripper es utilizado para las
funciones de carga y descarga. El término gripper múltiple es utilizado cuando son colocados dos o más
dispositivos de sujeción en el elemento terminal del robot.
2.3.1 Tipos de herramientas
En muchas aplicaciones, el robot requiere manipular una herramienta en vez de sólo piezas de trabajo
(partes). En la mayoría de las aplicaciones de robots, en las cuales una herramienta es manipulada, la
herramienta es colocada directamente al robot. En estos casos, la herramienta es el elemento terminal.
Algunos ejemplos de herramientas utilizadas en las aplicaciones de robot como elementos terminales son:
Spot-Welding tools (Herramientas de soldadura punto), Arc-Welding torch (Soplete de soldadura en arco),
Spray-painting nozzle (Pintura en Spray), Drilling (taladrado), Routing, Wire brushing (pintura), Grinding,
Liquid cement applications for assembly (Aplicaciones de cemento líquido), heating torches, Waterjet cuffing
tool (Herramienta de corte a presión).
En cada caso, el robot debe controlar la actuación de la herramienta. Por ejemplo, el robot debe
coordinar la ejecución de la soldadura punto como parte de su ciclo de trabajo. Esto es controlado de la
misma manera en que el gripper se abre y cierra.
2.4 Precisión en la repetibilidad Esta magnitud establece el grado de exactitud en la repetición de los movimientos de un manipulador al
realizar una tarea programada.
Dependiendo del trabajo que se deba realizar, la precisión en la repetibilidad de los movimientos es
mayor o menor. Así, por ejemplo, en labores de ensamblaje de piezas, dicha característica ha de ser menor
que k 0.1 mm. En soldadura, pintura y manipulación de piezas, la precisión en la repetibilidad está
comprendida entre 1 y 3 mm y en las operaciones de mecanizado, la precisión ha de ser menor de 1 mm.
2.5 Velocidad En muchas ocasiones, una velocidad de trabajo elevada aumenta extraordinariamente el rendimiento del
robot, por lo que esta magnitud se valora considerablemente en la elección del mismo.
En las tareas de soldadura y manipulación de piezas es muy aconsejable que la velocidad de trabajo
sea alta. En pintura, mecanizado y ensamblaje, la velocidad debe ser media e incluso baja.
2.6 Lenguajes de programación La programación de robots es la utilizada en las aplicaciones industriales y consta de dos técnicas
fundamentales:
0 programación gestual
0 programación textual
La programación gestual consiste en guiar el brazo del robot directamente a Io largo de la trayectoria que
debe seguir. Los puntos del camino se graban en la memoria y luego se repiten. Este tipo de programación
exige el empleo del manipulador en la fase de enseñanza, es decir, trabaja on line.
En la programación textual, las acciones que ha de realizar el brazo se especifican mediante las
instrucciones de un lenguaje; las trayectorias del manipulador se calculan matemáticamente con gran
precisión y se evita el posicionamiento a ojo, muy corriente en la programación gestual.
El primer lenguaje textual de un robot fue WAVE, desarrollado en 1973 como un lenguaje experimental,
para la investigación de la inteligencia artificial en el laboratorio de Stanford. Esta investigación demostraba la
factibilidad de la coordinación mano-ojo del robot. El desarrollo de un siguiente lenguaje fue en 1974, en
Stanford. Este lenguaje fue llamado AL y podía ser utilizado en el control de múltiples brazos de robot en la
realización de las tareas que requerían la coordinación de brazos. Muchos de los conceptos de WAVE y AL
se utilizaron en el desarrollo del primer lenguaje textual comercial para programar un robot: VAL (Victor's
Assembly Language) fue presentado por Unimation, Inc. para sus series de robots PUMA. Este lenguaje fue
mejorado como VAL /I y presentado en 1984.
El trabajo en el desarrollo de lenguajes para robots también fue realizado por la IBM. Dos de los
lenguajes de la IBM son AUTOPASS y AML (A manufacturing Languages) utilizados para el ensamble y
tareas similares.
16
Otros lenguajes textuales para robots que deben ser mencionados son RAIL, presentado en 1981 por
Atdomafix for robotic assembly and arc welding así como la máquina de visión MCL (Manufacturing Control
Language) desarrollado por la fuerza aérea como un lenguaje mejorado de APT (Automatic Programmed
Tooling) y HELP utilizado por la Compañía General Electric.
2.6.1 Lenguajes de la primera generación
Utilizan una combinación de comandos y procedimientos para desarrollar programas de robots. Fueron
desarrollados largamente para implementar el control del movimiento por medio de la programación con
lenguaje textual. Una característica típica de estos lenguajes incluye la capacidad de definir el movimiento del
manipulador, interpolación lineal y comandos elementales de sensor que involucran señales de on/off. El
lenguaje VAL es un ejemplo de un lenguaje de programación de un robot de primera generación. Las
limitaciones comunes de este tipo de lenguajes comprenden la incapacidad de especificar cálculos complejos
de aritmética para ser utilizados durante la ejecución del programa, la incapacidad de hacer uso de sensores
complejos y sensores de datos, y una limitada capacidad para comunicarse con otras computadoras.
2.6.2 Lenguajes de la segunda generación
Los lenguajes de la segunda generación superan muchas de las limitaciones de los lenguajes de la primera
generación y añaden otras capacidades incorporando características que hacen que el robot parezca más
inteligente. Las características y capacidades de los lenguajes de la segunda generación pueden ser listados
como sigue:
0 Control del movimiento.
0 Capacidades avanzadas de sensor: tiene la capacidad de manejar algo más que señales
binarias onloff y la capacidad de controlar dispositivos por medio de sensores de datos.
0 lnteligencia limitada: es la capacidad de utilizar información recibida del ambiente de trabajo para
modificar el comportamiento del sistema de una manera programable.
Comunicaciones y procesamiento de datos: cuentan con la capacidad de interactuar con otras
computadoras y con bases de datos computarizadas con el propósito de mantener registros,
generar reportes y controlar actividades en la celda de manufactura.
17
Cinemática y posicionamiento de robots
3.1 Articulaciones robóticas Un robot industrial es un manipulador que puede realizar diversas tareas dentro de un espacio de trabajo
determinado. Está compuesto de elementos conectados mediante articulaciones en una cadena cinemática
abierta. Normalmente, las articulaciones son giratorias (rotación) o prisrndficas (traslación). Una articulación
giratoria es como una bisagra y permite relativa rotación entre dos elementos. Una articulación prismática
permite relativo movimiento lineal entre dos elementos. El símbolo R representa las articulaciones giratorias y
P las articulaciones prismáticas, como se muestra en la figura 3.1.
I
Articulación I
Figura 3.1. Representación simbólica de alficulaciones de robots.
18
Cada articulación representa la interconexión entre dos elementos contiguos I y I ;+l. Denotamos el eje
de rotación de una articulación giratoria o el eje a Io largo del cual una articulación prismática se desliza, por Zi
si la articulación es la interconexión de los elementos i e i +l. Las variables de articulación, denotadas por 6 ,
para una articulación giratoria y como d; para una articulación prismática, representan desplazamiento relativo
entre elementos adyacentes.
3.2 La cinemática aplicada a la Robótica La cinemática del brazo del robot trata con el estudio analítico de la geometría del movimiento de un brazo de
robot con respecto a un sistema de coordenadas de referencia fijo, sin considerar las fuerzas o momentos que
originan el movimiento. Así, la cinemática se interesa por la descripción analítica del desplazamiento espacial
del robot como una función del tiempo, en particular de las relaciones entre la posición de las variables de
articulación y la posición y orientación del efector final del brazo del robot.
Hay dos problemas fundamentales en la cinemática del robot. El primer problema se suele conocer
como el problema cinemático directo, mientras que el segundo problema es el problema cinemático inverso.
Como las variables independientes en un robot son las variables de articulación, y una tarea se suele dar en
términos del sistema de coordenadas de referencia, se utiliza de manera más frecuente el problema
cinernático inverso. Denavit y Hartenberg [I9551 propusieron un enfoque sistemático y generalizado de utilizar
álgebra matricial para describir y representar la geometría espacial de los elementos del brazo del robot con
respecto a un sistema de referencia fijo. Este método utiliza una matriz de transformación homogénea 4 x 4
para describir la relación espacial entre dos elementos mecánicos rígidos adyacentes y reduce el problema
cinernático directo a encontrar una matriz de transformación homogénea 4 x 4 que relaciona el
desplazamiento espacial del sistema de coordenadas de la mano al sistema de coordenadas de referencia.
Estas matrices de transformación homogéneas son también útiles en derivar las ecuaciones dinámicas de
movimiento del brazo del robot. En general, el problema cinernático inverso se puede resolver mediante los
métodos algebraico, iterativo o geométrico.
3.3 Problema cinernático directo Suponer que se desea mover el manipulador desde su posición original A hasta una posición B, entre cuyos
puntos el robot sigue el contorno de la superficie S a C, a una velocidad constante, mientras mantiene una
fuerza prescrita F normal a la superficie.
19
El primer problema encontrado es describir la posición de la herramienta y los sitios A y B (y, muy
probablemente, la superficie entera S) con respecto a un sistema de coordenadas común.
A veces, el manipulador puede ser capaz de captar su posición de alguna manera, utilizando
sensores internos (decodificadores de posición), localizados en las articulaciones 1 y 2, los cuales pueden
medir directamente los ángulos de las articulaciones (31 y (32. Entonces necesitaríamos, por lo tanto, expresar
las posiciones A y B en términos de esos ángulos de las articulaciones. Esto conduce al problema cinernático
directo, el cual determina la posición y la orientación del elemento terminal o herramienta, en términos de los
ángulos de las articulaciones. Es común establecer un sistema fijo de coordenadas, denominado marco de la
base, al cual todos los objetos, incluyendo el manipulador, toman como referencia. En este caso,
establecemos el marco de la base coordenado o, x, y,, en la base del robot, como se muestra en la figura 3.2.
Figura 3.2. Marcos coordenados para un robot lineal de dos elementos.
Las coordenadas (x, y) de la herramienta son expresadas en este marco coordenado como
x = al cos %I + a2 cos (8, + g2)
y = al sen el + a2 sen (0, + e2)
2 0
Además, la orientación del marco de la herramienta, relativa al marco de la base, está dada por los
cosenos de dirección de los ejes xz y y2 , relativos a los ejes xo y yo, esto es,
los cuales podemos combinar en una matriz de orientación,
donde io, j o son los vectores unitarios orthonormales estándares en el marco de la base y iz, j 2 son los
vectores unitarios orthonormales estándares en el marco de la herramienta.
Estas ecuaciones son llamadas las ecuaciones cinemáticas directas. Para un robot de seis grados de
libertad, estas ecuaciones son bastante complejas y no pueden escribirse tan fácilmente como el manipulador
de dos elementos.
3.4 Problema cinemático inverso
Ahora, dados los ángulos de las articulaciones 01 y 8 2 , podemos determinar las coordenadas x y y. Con el
objeto de dirigir al robot para moverse hacia la posición B, necesitamos Io inverso; esto es, necesitamos las
variables de las articulaciones en términos de las coordenadas x y y de B. Este es el problema cinemático
inverso. En otras palabras, dados x y y e n las ecuaciones cinemáticas directas, deseamos resolverlas para los
ángulos de las articulaciones. Dado que las ecuaciones cinemáticas directas no son lineales, una solución
puede no ser fácil de encontrar, no hay una solución única en general. Podemos ver, por ejemplo, en el caso
de un mecanismo plano de dos elementos, que no puede haber solución si las coordenadas dadas (x, y)
están fuera del alcance del manipulador. Si estas coordenadas están en el alcance del manipulador, puede
haber dos soluciones, como se muestra en la figura 3.3. Las denominadas configuraciones elbow up y elbow
down, pueden ser exactamente una solución si el manipulador debe extenderse completamente para alcanzar
el punto. En algunos casos puede haber un numero infinito de soluciones (cuando el mecanismo consta de
más elementos).
2 1
t
Figura 3.3. Soluciones múltiples de la cinemáfica inversa.
Considerar el diagrama de la figura 3.4. Usando la ley de los cosenos, podemos verificar que el
ángulo 63 está dado por
t
X
Figura 3.4. Obfención de los ángulos de las articulaciones de un brazo plano de dos elernenfos.
Ahora, podemos determinar 192 como
6 = cos -l (0)
No obstante, una mejor manera de encontrar 63 es darse cuenta que, si cos (82) está dado por (I), entonces
sen (82) está dado por
2 2
y, por lo tanto, & puede determinarse por
La ventaja de esta última aproximación es que las soluciones elbow up y elbow down pueden recuperarse
encontrando los signos positivo y negativo en (2), respectivamente.
El problema cinernático inverso puede solucionarse (en la mayoría de los manipuladores
correspondientes a robots industriales comercializados actualmente) sin que sea necesario recurrir a
procedimientos iterativos de resolución de sistemas de ecuaciones no lineales. Tales procedimientos
requieren un número de operaciones tan grande, que harían imposible el control eficaz del robot (para pasar
de una posición a otra sería preciso esperar un tiempo excesivamente largo).
Por el contrario, en el caso de robots con más de seis grados de libertad, en los que hay que recurrir a
criterios de optimización para obtener la posición de los elementos, resulta imprescindible utilizar
procedimientos iterativos.
Motores eléctricos de paso a paso
4.1 Elementos motrices de los robots Existen tres tipos de dispositivos que producen el movimiento de las articulaciones del manipulador:
hidráulicos, neumáticos y eléctricos.
Los dispositivos neumáticos hacen uso de aire comprimido y los hidráulicos de un fluido a presión. Se
aconseja el empleo de elementos hidráulicos en los manipuladores que deban poseer gran capacidad de
carga, con un aceptable control de la velocidad. Los dispositivos neumáticos ofrecen mayor velocidad, aunque
con una regulación imprecisa de ésta.
En cambio, los motores eléctricos se caracterizan por la facilidad de realizar un control preciso de su
movimiento. Han adquirido mayor aplicación en la Robótica debido a la facilidad de encontrar energía
eléctrica en cualquier parte, unido a su funcionamiento limpio y seguro, y su fácil adaptación a los circuitos
electrónicos basados en microprocesadores.
Dentro de los diversos tipos de motores eléctricos, los más adecuados para el movimiento de las
articulaciones de los manipuladores son los de corriente continua y los de paso a paso (PAP).
Los de corriente continua producen un par casi proporcional al voltaje de entrada, por Io que tienen una
regulación precisa. Requieren captadores que informen al sistema de control sobre la posición del eje en cada
instante, realizando un trabajo en bucle cerrado.
Los motores PAP giran su eje un ángulo fijo, aplicando a sus bobinas un conjunto adecuado de
impulsos eléctricos. No requieren detectores de la posición de su eje, ya que el simple conteo de los impulsos
aplicados determina el ángulo girado. Trabajan en bucle abierto; pero, al no recorrer su eje todas las
posiciones posibles, limitan el área de trabajo.
24
4.2 Motores eléctricos de paso a paso Un motor es un aparato que convierte energía eléctrica en energía mecánica en base al hecho de que una
corriente eléctrica, que circula por una espira dentro de un campo magnético, experimenta una torca.
El principio de funcionamiento de los motores PAP se basa en las fuerzas de atracción y repulsión
ejercidas entre polos magnéticos.
Figura 4.1. Posicionamiento de/ rotor ante /as fuerzas magnéticas ejercidas por /os dos estafores.
Las bobinas del estator A se alimentan de tal manera que se comportan como un polo Norte, mientras
que las del estator B hacen de éste un polo Sur. Con esta situación, el rotor giratorio, que consiste en un imán
permanente, se mueve hasta alcanzar la posición de equilibrio.
Si el estator tuviese cuatro polos, al cambiar su polaridad, mediante un control externo, el rotor giraría
con incrementos angulares de 90". Para obtener incrementos angulares más pequeños, se incrementa el
número de polos del estator. La interacción entre los polos del estator y los del rotor hace que, al aplicarse
dos ondas cuadradas, defasadas un cuarto de periodo entre si, a las dos bobinas de los electroimanes, el
rotor gire un cuarto de paso polar por cada cambio de polaridad en la tensión aplicada a las bobinas. Así, para
un motor con doce pares de polos por bobina del estator, se producirán 48 pasos de revolución, o sea, 7.5"
por paso.
2 5
Figura 4.2. Motor de pasos elemental.
Existen dos modos de funcionamiento para los motores de paso a paso, a saber:
Paso completo (Full-step mode).
Medio paso (Half-step mode).
El motor realiza el paso en cuanto la secuencia adecuada se transfiere a las bobinas. Después de cuatro
pasos, se conectan nuevamente las dos primeras bobinas, repitiéndose la secuencia. Se llama ángulo de
paso al ángulo que gira el eje del motor, cada vez que se cambia la polaridad de las bobinas, siendo una
función del número de dientes del rotor y de la secuencia aplicada.
La velocidad del motor es proporcional a la frecuencia con la que se envían los impulsos de excitación a
los devanados.
Por su construcción, los motores de pasos se dividen en cuatro tipos:
De imán permanente (PM).
De reluctancia variable de una pila (VR).
De reluctancia variable de multipilas (VRSM).
Hibridos (HSM).
2 6
Los motores de pasos híbridos son la combinación de la estructura de los motores de pasos de
reluctancia variable y los de imán permanente. Pueden tener dos secciones (de estator y rotor) o más, con un
eje de imán permanente entre las dos secciones. Cada sección incluye un rotor dentado y un estator con sus
polos dentados y sus devanados, respectivamente. El número de dientes del rotor y del estator son diferentes.
Los dientes del estator están perfectamente alineados en las dos secciones y los dientes del rotor están
alineados con un defasamiento de 1/2 grado.
Figura 4.3. Empleo de transistores para el arranque de un motor de pasos
$~~~~~ emcum
Figura 4.4. Las 4 bobinas se conectan a un circuito amplificador.
2 7
En la figura 4.3 se muestra la representación esquemática para el encendido de un motor de pasos.
Se hace uso de transistores para iniciar la secuencia. Los transistores amplifican de la señal de entrada que,
generalmente, proviene de un microprocesador, que envía una corriente muy baja. Así, los transistores
amplifican esta corriente hasta cien veces (lo suficiente para energizar las bobinas e iniciar el funcionamiento
del motor). La conexión de los cables de un motor de pasos se muestra en la figura 4.4.
4.3 Sistemas de control para motores PAP Una buena regulación del movimiento de un motor PAP exige un sistema de control apropiado. De manera
general, el sistema de control recibe las consignas de velocidad y sentido de giro y genera la secuencia de
impulsos eléctricos adecuada para su aplicación a las bobinas del motor, como se muestra en la figura 4.5.
VELOCIDAD b SISTEMA DE
SENTIDO DE GIRO CONTROL b
Figura 4.5. Esquema general de la actuación del sistema de control
4.3.1 Sistemas de control en lazo abierto, basados en microprocesador
El esquema por bloques de un sistema de control con microprocesador, funcionando en lazo abierto se
muestra en la figura 4.6.
SISTEMA CON CIRCUITO
MICROPROCESADOR DE > ADAPTACI~N
I I
Figura 4.6. Sistema de control en lazo abierto
2 8
Aquí, las señales de control generadas por el sistema deben tener en cuenta las restricciones que
impone el motor, la carga y el circuito de adaptación.
En los sistemas en lazo abierto no existe realimentación en la posición real del eje del motor, entonces
debe responder con precisión a los cambios de excitación que se aplican a sus bobinas. Si dichos cambios
son muy rápidos y el movimiento del eje no puede seguirlos, se originan errores de posicionamiento. También
deben tenerse en consideración las variaciones de la carga conectada al motor.
Sin embargo, el uso de un sistema basado en un microprocesador implica las siguientes ventajas:
1. Programa de control fácilmente variable, al estar basado en software.
2. Posibilidad de controlar otras funciones auxiliares
3. Posibilidad de dedicar parte de la memoria a guardar datos y programas de utilidad.
El sistema de control dotado de microprocesador puede encargarse de la generación de la secuencia de
estados, así como de las señales de tiempo y de carácter auxiliar. También puede entregar la información
digital sobre la posición y los comandos de arranque y parada, dejando la elaboración de las señales de
control de fase a un controlador posterior.
Si el sistema con microprocesador se encarga de todo el control, pueden usarse configuraciones
complejas que optimicen el funcionamiento del motor. Por ejemplo, se podria definir con exactitud la duración
de cada paso y ajustar con precisión la velocidad a una curva memorizada.
Cuando el sistema con microprocesador opera conjuntamente con un controlador auxiliar, los programas
son menos ambiciosos. Para motores PAP que alcanzan los 2000 pasosls y el paso tiene una duración de 50
microsegundos, un control exclusivo por software queda limitado entre unas 25 y 50 instrucciones, por cada
paso del motor, restringiendo el gobierno del sistema a las funciones más sencillas (duración del paso,
número y secuencia de pasos).
2 9
Sistemas de control con microprocesador
5.1 Estructura y funciones del sistema de control En la actualidad, la mayoría de los robots disponen, como sistema de control, de un mini, un conjunto
multimicroprocesador o un microcomputador, dependiendo del alcance y amplitud de sus funciones. Desde su
aparición, el microprocesador ha formado parte del controlador principal de la configuración propia de un
robot.
La construcción dinámica de algoritmos y la simulación de su validez empleando modelos, está siendo
desarrollada, experimentalmente, en algunos centros de investigación. Asimismo, está en fase de estudio la
construcción de sistemas de control, capaces de generar de forma continua y en tiempo real, los algoritmos
de gobierno, que adaptan la máquina a los cambios del mundo exterior.
Las funciones más importantes que debe llevar acabo el sistema de control son las siguientes:
1. Control y adaptación con los elementos motrices.
2. Control y adaptación con los sensores exteriores y procesamiento de la información que facilitan.
3. Elaboración y cálculo de las secuencias de movimientos.
4. Establecimiento de los métodos de control adaptativo, si los hubiese.
5. Coordinación con los demás dispositivos y máquinas, que conforman la célula de fabricación flexible,
en la que el robot es parte integrante y principal.
Un aspecto muy relevante del moderno sistema de control, corresponde al tipo de realimentación que usa
para la concepción del modelo dinámico. Dicha realimentación puede ser de origen interno, si el robot utiliza
información exclusiva de parámetros propios, y de origen externo, si tiene en cuenta el estado del entorno del
trabajo.
30
Las ecuaciones dinámicas se calculan en función de la velocidad, posición, aceleración, pares, etc.,
mediante un modelo matemático apropiado. Posteriormente, se hallan los pares que han de aplicarse a los
actuadores, que controlan los movimientos del robot
5.2 Niveles de control por computadora Los robots pueden clasificarse de acuerdo al tipo de control por parte del sistema microprocesador:
7 . Robots punto a punto sin servocontrol.
2. Robots punto a punto con servocontrol.
3. Robots con control continuo, para seguimiento de trayectorias.
4. Robots con capacidad de generación de trayectorias.
En el primer apartado, se encuentran los robots a los que se les muestra los puntos del camino que deben
seguir, almacenando dicha información en la memoria del sistema del sistema. La fase de aprendizaje se
puede realizar por medio de un teclado, un joystick, un brazo maestro o, directamente, trasladando el punto
final del manipulador.
Si no existe un mecanismo servocontrol, la situación de cada elemento del brazo se hace posible, ya sea
utilizando topes mecánicos o empleando motores de paso a paso, cuya posición se conoce de acuerdo con la
secuencia de impulsos aplicados.
El sistema de control para robots de punto a punto sin servocontrol suele emplear un Único
microprocesador. Los periféricos principales que soporta la CPU son dos:
Entrada de información. El teclado de control manual, junto con la puerta de información desde un
microcomputador, son los elementos encargados de recibir información desde el exterior.
Salida de información. Estos periféricos están formados por los adaptadores de los pulsos de control
que se aplican a las bobinas de los motores paso a paso, por la caja de control manual y por la
información que se traslada a la computadora principal.
La sección de entradalsalida, que conecta al microcomputador con el mundo exterior, consta de cuatro partes
importantes: gobierno de motores, teclado del mando manual de aprendizaje, comunicación serie y líneas
disponibles para el usuario.
31
n
Implementación del brazo mecánico
6.1 Circuito interface entre la PC y los motores de paso
El diseño del hardware (interface entre la PC y los motores de paso) forma parte de un sistema de control en
lazo abierto, es decir, no existe retroalimentación en la posición real del eje del motor; en consecuencia, las
señales de control generadas por el sistema con microprocesador, a través del puerto paralelo, deben tener
en cuenta las restricciones que impone el motor, la carga y el hardware controlador.
6.1.1 Diseño del circuito
El control del brazo mecánico requiere una PC, cuyo puerto paralelo transfiere los valores generados por un
programa residente en esta máquina escrito en lenguaje Turbo C.
Luego de identificar el bus de datos en el puerto paralelo, las 8 líneas digitales (DO-D7) se
configuran de la forma siguiente:
DO-D3: Son cuatro bits de información o dato por donde se envía la secuencia de pulsos para que
gire el motor seleccionado.
D4-D6: Son tres bits de dirección que seleccionan el motor, al que se envía la información.
El circuito interface (figura 6.1) consta de 8 circuitos integrados TTL y 6 circuitos amplificadores que
decodifican el dato y activan el motor seleccionado.
Los 7 bits pasan al decodificador (se conectan D4-D6 a los tres pines de selección del C.I. 74138) y
a los latches (se conectan DO-D3 a los pines de entrada de los C.I. 74375). El latch activado por el
decodificador suministra las cuatro señales QA-QD a los 6 circuitos amplificadores (ULN 2003) que
proporcionan la corriente necesaria a las bobinas de los motores.
32
I
Figura 6.1. Circuito eleclr6nko para controlar los mdores de paso a traves del puerto paralelo de una PC.
3 3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
b + 4 . 5 v
Figura 6.2. Conexión de/ UN2003 a /as bobinas de/ motor.
6.1.2 Lista de material
I
1 1 SN74LS138N (Multiplexor para seleccionar 1 de 8 salidas)
1 SN74LS04N (Seis inversores)
6 SN74LS375NS (Cuatro latches de tres estados) I
1 I Conector DB25 Macho
14 Base para circuito integrado
2 Placa de circuito impreso tipo protoboard
Varios Cable plano y alambre para interconexiones
34
6.2 Descripción de los motores En la figura 6.3 se muestra la conexión de las líneas QA-QD a los cables de los motores utilizados.
QD
Qc QE QA
+ 4.5 v
I I
O O
Qc QE
L I
QA : azul QE : azul-blanco Qc : rojo QD : rojo-blanco Alimentación (+ 4.5 V) : negro y blanco
figura 6.3. Conexión de los motores del brazo mecánico,
La secuencia de estados lógicos que se aplican a las cuatro bobinas del motor PAP a controlar,
cuando su eje gira en el sentido de las manecillas del reloj, se presenta en la figura 6.4, mientras que en la
figura 6.5 se muestra el ciclo de estados lógicos para que el eje del motor gire en sentido contrario a las
agujas del reloj.
I I Fases del motor de pasos I
1 2 1 O 1 O O
3
1 O O O 4
O 1 O O
figura 6.4. Tabla de excitacidn CW de las fases del motor de pasos.
35
Fases del motor de pasos
figura 6.5 Tabla de excitación CC W de las fases del motor de pasos.
Se van a controlar motores de pasos con los siguientes datos:
npo: Híbrido.
Número de fases: 4 fases.
Ahgulo de fase: 2'1 paso.
Número de dientes delrotor. 45 dientes.
Número de dientes delestator. 36 dientes.
Movhiento del diente delrotor 8 grados.
Mowmiento deldiente delestator 1 0 grados.
Razón de pasos: 180 pasos I revolución.
El movimiento del diente se define como la separación angular entre dos puntos correspondientes
de los dientes adyacentes.
6.3 Programa de simulación y control del brazo mecánico Este programa, escrito en lenguaje Turbo C, tiene como finalidad controlar los motores de paso del brazo
mecánico, enviando palabras de control a través del puerto paralelo (bus de datos). Además, mientras el
brazo ejecuta sus movimientos, se presenta en el monitor de la computadora una simulación gráfica de tales
movimientos.
36
6.3.1 Instrucciones de uso
Posicionarse en el directorio donde se encuentra el archivo ejecutable y teclear Io siguiente:
A:\ >BRAZO29
Se debe ejecutar el programa en DOS, debido a que, al hacer pruebas, detectamos un conflicto
entre Windows y el programa del robot por el control del puerto paralelo, que se refleja en los retardos
adicionales (bastante significativos) que se observaron en el envío de los datos por el puerto LPTl .
Una vez hecho esto, aparecerá el menú de opciones del programa, donde el usuario debe teclear el
número correspondiente a la opción elegida, o la tecla Esc para salir a DOS.
(1) Introducir ángulos
(2) Introducir coordenadas
(3) Realizar tarea específica
(Esc) Salir
(1) Introducir ángulos: En esta opción, el usuario debe especificar cuántos grados girará cada
segmento del brazo.
Primer ángulo (correspondiente a la rotación de la base) -90 a 270 grados
Segundo ángulo (correspondiente al movimiento del -28 a 208 grados
hombro)
Tercer ángulo (correspondiente al movimiento del codo) -180 a 180 grados
Cuarto ángulo (correspondiente al movimiento de la -180 a 180 grados
muñeca)
Quinto ángulo (correspondiente al de giro de l a muñeca) -180 a 180 grados
Aprensar (1) o Soltar (O) Elegir entre cero y uno
(2) Introducir coordenadas: Eligiendo esta opción, el usuario debe señalar las coordenadas (4 J zj hacia donde el punto del brazo se debe dirigir.
37
Coordenada en X
Coordenada en Y
Coordenada en Z
Ángulo mano (correspondiente al movimiento de la -180 a 180 grados
muñeca)
Ángulo pinza (correspondiente al de giro de la muñeca) -180 a 180 grados
Aprensar (1) o Soltar (O) Elegir entre cero y uno
Los límites de las coordenadas dependen del ángulo con que la muñeca se acercará al objeto (Ángulo
mano).
(3) Tarea específica: Seleccionando esta opción, el brazo automáticamente realizará la tarea con
que ha sido programado previamente. ÉSta consiste en una acción repetida del llamado por coordenadas; se
le ingresan coordenadas de los diferentes puntos hacia donde el brazo se debe dirigir con la acción
correspondiente (Aprensar o Soltar).
6.3.2 Código fuente
En las páginas siguientes se muestra el programa completo, codificado en lenguaje Turbo C, correspondiente
al control y simulación del brazo mecánico.
//PROGRAMA DE SIMULACION GRAFICA Y CONTROL, A TRAVES DEL PUERTO PARALELO, DE UN BRAZO DE
//ROBOT CON 6 GRADOS DE LIBERTAD.
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <math.h>
#include <string.h>
#define ESC 0x1 b /* Define tecla de escape */
int xO,yO,zO,xl,yl,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8,x9,y9,z9; int ancholx,ancholy,ancho2x,ancho2y,Mancholx,Mancholy,Mancho2x,Mancho2y;
38
int Eyl,Ey2,Ey3,Ey4,Ey5,Ey6,Ey7,Ey8,Ey9,Eancholx,EanchoIy,Eancho2x,Eancho2y;
double fil,fi2,fi3,P,R,limiteinc,limiteinc2,limiteinc3;
int L,D,B,d,e,f,g,h,i;
int MxO,MyO,Mx1,Myl,Mx2,My2,Mx3,My3,Mx4,My4,Mx5,My5,Mx6,My6,Mx7,My7,Mx8,My8,Mx9,My9;
int auxXO,auxYO,auxXl,auxYl,auxX2,auxY2,auxX3,auxY3,auxX4,auxY4,auxX5,auxY5,auxX6,auxY6,auxX7,auxY7, auxX8, auxY8,auxX9,auxYS;
int desplaza1 ,desplaza2,desplaza3,desplaza4,desplaza5,pinza;
double senR,cosR,senP,cosP,senfil ,cosfil ,ox,oy,oz,ax,ay,az;
float x3ext,y3ext;
int z3ext,angulomano,angulopinza;
int finalx,finaly,finalz,Efinaly,Mfinalx,Mfinaly;
int realfi3,realP,limiteAng,norosa;
int tope,incremento,compensa,aprobado,incrernentofi2,CualSeMueve,SoltarSiAprisionara;
int lirnrealfi3,limrealP,tolerasigno,tecla;
char buf[4];
void IniciaGrafico(void)
{ I* autodetección */
int gdriver = DETECT, gmode, errorcode;
I* inicializa gráficos y variables locales */
initgraph(&gdriver, &gmode, "");
/* lee resultado de inicialización */
errorcode graphresult();
if (errorcode != grOk) I* si ocurrió un error *I
I printf("Graphics error: %s\n", grapherrorrnsg(errorcode));
printf("Presiona cualquier tecla para salir:");
getch0;
exit(1); /* termina con un código de error *I
1 I
//Calcula la componente X de algun vector.
int CalculaX(int rnagnitud,double angulol ,double angulo2)
{ int x ;
39
x=(magnitud*cos((angulol*3.1416)/180)*cos((angu102*3.1416)/180));
return(x);
1
//Calcula la componente Y de algún vector.
int CalculaY(int magnitud,double angulo1,double angulo2)
I int y;
y=(magnitud*sin((angulol*3.1416)/180)*cos((angulo2*3.1416)/180));
return(y);
1
//Calcula la componente Z de algún vector.
int CalculaZ(int magnitud,double angulol)
I in t z;
z=(magnitud*sin((angulol*3.1416)/180));
return(z);
1
//Dibuja componentes gráficos que permanecen estáticos mientras el brazo se mueve.
void Estatico(int Mx0,int MyO)
I setcolor(5);
line(233,308,402,308); //horizontales.
line(217,323,418,323);
line(200,340,435,340);
line(180,360,455,360);
line(l55,384,480,384);
line(125,413,510,413);
line(260,302,140,430); //verticales.
line(280,302,200,430);
line(300,302,260,430); line(320,302,320,430);
line(340,302,380,430);
line(360,302,440,430);
40
line(380,302,500,430);
setcolor(l4);
ellipse(320,360,0,360,2*h,2*(h/7));
setcolor(9);
Iine(320,360,MxO,MyO);
setcolor(l4);
circle(MxO,My0,4);
1
//Dibuja cada linea que conforma la estructura del brazo, dependiendo de las coordenadas que se le dan de entrada.
void DibujaLineas(int Mancholx,int Mancholy,int Mancho2xjnt Mancho2yjnt Mx3,int My3,int Mx4,int My4,int Mx5,
int My5,int Mx6,int My6,int Mx7,int My7,int Mx8,int My8,int Mx9,int My9,int Mfinalxjnt Mfinalyjnt color)
{ int colorl ,color2,color3,color4,color5;
if (color==O)
{colorl =0;color2=0;color3=0;color4=0;color5=0;}
else
{colorl=lO;color2=ll;color3=12;color4=13;color5=14;}
setcolor(color1);
line(Mancholx,Mancholy,Mancho2x,Mancho2y); //Brazo.
line(Mancholx,Mancholy,Mx6,My6);
line(Mancho2x,Mancho2y,Mx7,My7);
setcolor(color2);
line(Mx6,My6,Mx7,My7); //Antebrazo.
line(Mx6,My6,Mx8,My8);
line(Mx7,My7,MxS,MyS);
setcolor(color3);
line(Mx8,My8,MxS,MyS);
line(Mx8,My8,Mx3,My3);
line(MxS,MyS,Mx3,My3);
setcolor(color4);
line(Mx3,My3,Mx4,My4);
setcolor(color5);
//Muñeca.
//pinza.
41
line(Mx3,My3,Mx5,My5);
putpixel(Mfinalx,Mfinaly,colorl); //Punto final que indica la posición
1 //donde la pinza puede atrapar un objeto.
//Calcula cada coordenada de los puntos donde el brazo tiene una articulación
void HazMatematicas(void)
I x1 =xO+CalculaX(D,fil ,fi2); //Hombro.
yl=yO+CalculaY(D,fil,fi2);
zl=zO+CalculaZ(D,fi2);
x2=x1 +CalculaX(B,fil,fi3); //Codo.
y2=yl +CalculaY(B,fil,fi3);
z2=zl+CalculaZ(B,fi3);
x3=~2+CalculaX(d,fil ,P); //Muñeca.
y3=y2+CalculaY(d,fil ,P);
z3=~2+CalculaZ(d,P);
finalx=x2+CalculaX((d+i),fil,P); //Punto final del brazo.
finaly=y2+CalculaY((d+i),fil,P);
finalz=z2+CalculaZ((d+i),P);
senR=sin((R*3.1416)/180);
cosR=cos((R*3.1416)/180);
senP=sin((P*3.1416)/180);
cosP=cos((P*3.1416)/180);
senfil=sin((fil*3.1416)/180);
cosfi1=cos((fi1*3.1416)1180);
ox=(-(senR*cosfil"senP)-(senfil*cosR)); /hectores "o" y "a" que sirven
oy=(-(senR*senfil*senP)+(cosfil*cosR)); //para identificar la posición y
oz=cosP*senR; //orientación de la pinza.
ax=cosfil *cosP;
ay=senfil*cosP;
az=senP;
x4=~3t((e*ox)+(rax)); //Puntos para ambos dedos de la pinza
y4=y3+((e*oy)+(ray));
42
ancholx=xO+CalculaX(h,fil t90,O); //Define dos vectores anchol y ancho2
anchol y=yO+CalculaY(h,fil t90,O); //para el ancho del segmento del brazo.
ancho2x=x0+CalculaX(h,fil-90,0);
ancho2y=y0+CalculaY(h,fil-90,0);
x6=x1 +x0+CalculaX(h+(yl/l2),fi1+90,0); //Define dos vectores x6,y6,z6 y
y6=yl +yO+CalculaY(h+(yl/l2),fil +90,0); //x7,y7,z7 para el ancho del segmento
z6=zl; //del brazo, parte superior.
x7=x1+x0+CalculaX(h+(yl/12),fil-90,0);
y7=yl+yO+CalculaY(h+(yl/l2),fil-90,0); z7=zl;
x8=x2+x0+CalculaX(h+(y2/12),fi1+90,0); //Define dos vectores x8,y8,z8 y
y8=y2+y0+CalculaY(h+(y2/12),fi1+90,0); //x9,y9,z9 para el ancho del segmento
z8=z2; //del antebrazo, parte superior.
x9=x2+x0+CalculaX(h+(y2/12),fil-90,0);
y9=y2+y0+CalculaY(h+(y2/12),fil-90,0);
z9=z2;
1
//Después de haber hecho las matemáticas necesarias, esta función calcula los valores que deben tener las variables
//para representar gráficamente en el monitor un brazo de robot simulando un movimiento en 3D con perspectiva.
void CalculaCoordenadas(void)
I HazMatematicas();
Eyl=yl/7; //Calcula valores que representan movimiento elíptico.
Ey2=y2/7;
Ey3=y3/7;
Ey4=y4/7;
Ey5=y5/7;
Ey6=y6/7;
Ey7=y7/7;
Ey8=y8/7;
43
Ey9=y9/7;
Efinaly=finaly/7;
Eancholy=ancholy/7;
Eancho2y=ancho2y/7;
MxO=320; //Calcula valores para representar cada punto en el monitor.
My0=360-~0;
Mxl=320+xI ;
Myl=360+Eyl -zI ;
Mx2=320+x2;
My2=360+Ey2-~2;
Mx3=320+x3;
My3=360+Ey3-~3;
Mfinalx=320+finalx;
Mfinaly=360+Efinaly-finalz;
Mx4=320+x4;
My4=360+€~4-~4;
Mx5=320+x5;
My5=360+Ey5-~5;
Mx6=320+x6;
My6=360+€~6-~6;
Mx7=320+x7;
My7=360+Ey7-~7;
Mx8=320+x8;
My8=360+Ey8-~8;
Mx9=320+x9;
My9=360+Ey9-~9;
Mancholx=320+ancholx; //"Dibuja líneas" primero en color negro
Mancholy=360+Eancholy-~O; //para borrar la posicion anterior del brazo.
Mancho2x=320+ancho2x; //Después, con los colores correspondientes
Mancho2y=360+Eancho2y-~O; //para la nueva posición.
DibujaLineas(auxXO,auxYO,auxXl ,auxY1 ,auxX2,auxY2,auxX3,auxY3,auxX4,auxY4,auxX5,auxY5,auxX6,auxY6,auxX7, auxY7,auxX8,auxY8,auxX9,auxY9,0);
Estatico(Mx0,MyO);
44
DibujaLineas(Mancholx,Mancholy,Mancho2x,Mancho2y,Mx3,My3,Mx4,My4,Mx5,My5,Mx6,My6,Mx7,My7,Mx8,My8,Mx9,
MyS,Mfinalx,Mfinaly,l);
auxXO=Mancholx;
auxYO=Mancholy;
auxXl =Mancho2x;
auxYI=Mancho2y;
auxX2=Mx3;
auxY2=My3;
auxX3=Mx4;
auxY3=My4;
auxX4=Mx5;
auxY4=My5;
auxX5=Mx6;
auxYS=MyG;
auxX6=Mx7;
auxY6=My7;
auxX7=Mx8;
auxY7=My8;
auxX8=Mx9;
auxY8=My9;
auxXg=Mfinalx;
auxY9=Mfinaly;
1
//Determina si el punto final del brazo del robot se encuentra adelante, es decir, si se encuentra en el cuadrante definido
//por el ángulo de giro fi l .
int ManoAdelante(v0id)
I int resultado;
if ((fil>=O)&&(fi1<90))
{if (finalx>O) {resultado=l;} else {resultado=O;}}
if ((fil>=90)&&(fil480))
{if (finaly>O) {resultado=l;} else {resultado=O;}} if ((fil~=l8O)&&(fil~270))
{if (finalxc0) {resultado=l;} else {resultado=O;}}
if ((fil>=-90)&&(fil <O)) {if (finalyC0) {resultado=l;} else {resultado=O;}}
45
if (fil==270)
{if (finalyc0) {resultado=l;} else {resultado=O;}}
return(resultad0);
1
//Esta función checa que los dedos de la pinza no choquen con alguno de los segmentos del brazo de robot
int NoAtraviesa(void)
I int DondeEsta;
int decide=l;
i f ((CualSeMueve==l)~~(CualSeMueve==4)) //Si movemos el Antebrazo u hombro.
{ DondeEsta=ManoAdelante();
fi3=fi3+incremento;
P=P+incremento;
HazMatematicas();
if ((finalzc=L)&&(((finalx==O)&&(finaly==O))~~(DondeEsta!=ManoAdelante()))) {decide=O;}
fi3=fi3-incremento;
P=P-incremento;
1 if (CualSeMueve==2) //Si movemos la muñeca.
I DondeEsta=ManoAdelante();
P=P+incrernento;
realP=realP+incremento;
HazMatematicas();
if ((finalzc=L)&&(((finalx==O)&&(finaly==O))~~(DondeEsta!=ManoAdelante()))) {decide=O;}
P=P-incremento;
realP=realP-incremento;
if ((realfi3~=limiteinc2-180)&&(((realPc((90-Iimiteinc2)-180))&&(incremento==1))~~((realP~((90-limiteinc2)-180))
&&(reaIP~-45)&&(incremento==-l))))
{decide=O;}
if ((realfi3~=l80-limiteinc2)&&(((realP~(180-(90-limiteinc2)))&&(incremento==-l))((((realP~(l80-(90-limiteinc2)))
&&(realP>45)&&(incremento==l))))
{decide=O;}
1 if (CualSeMueve==3) //Si queremos girar la pinza.
46
{ if (((realfi3~=limiteinc2-180)&&(fi2~90))~~((realfi3~=180-limiteinc2)&&(fi2~90)))
{decide=O;}
if ((realP~=180-limiteinc3)~~(realP~=limiteinc3-180))
{decide=O;}
I return(decide);
//Este procedimiento mueve el ángulo "fi3", es decir, la articulación que corresponde al movimiento del codo,
//dependiendo del valor "desplaza3" que el usuario ingreso o que fue calculado en la función "CalculaAngulos"
void MueveBrazo(void)
I int fi3inicial=realfi3;
CualSeMueve=l ;
if (fi3-desplaza3!=fi3)
{
if (desplaza3<0) {incremento=-I;}
else {incremento=l;}
while ((fi3!=tope)&&(limiteAng==O)&&(NoAtraviesa()))
I while ((~2~=n0r0~a)~~(z3~=norosa)~~(z4~=norosa)~~(z5~=norosa)~J(f inalz~=norosa))
I if (ManoAdelanteO) {incrementofi2=1;} else {incrementofi2=-1;}
fi2=fi2+incrementofi2;
fi3=fi3+incrementofi2;
P=P+incrementofi2;
tope=tope+incrementofi2;
compensa=compensa+incrementofi2;
CalculaCoordenadas();
delay(1 O);
1 fi3=fi3+incremento;
P=P+incremento;
realfi3=realfi3+incremento;
if ((realfi3>limrealfi3)~~(realfi3~-limrealfi3)) {P=P-incremento;;fi3=fi3-incremento;realfi3=realfi3-incremento;limiteAng=l;}
41
CalculaCoordenadas();
delay( 1 O);
1 1 limiteAng=O;
desplaza3=desplaza3-(realfi3-fi3inicial);
1 J
//Este procedimiento mueve el ángulo "P", es decir, la articulación que corresponde al movimiento de la muñeca,
//dependiendo del valor "desplaza4" que el usuario ingreso o que fue calculado en la función "CalculaAngulos".
void MueveMuneca(v0id)
I int Pinicial=realP;
CualSeMueve=2;
if (P-desplaza4!=P)
I if (desplaza4<0) {incremento=-I;}
else {incremento=l;}
while ((P!=tope)&&(limiteAng==O)&&(NoAtraviesa()))
I while ((~3~=norosa)~~(z4~=norosa)~~(z5~=norosa)~~(f inalz~=norosa))
{
if (ManoAdelanteO) {incrementofi2=1;} else {incrementofi2=-1;}
fi2=fi2+incrementofi2;
fi3=fi3+incrementofi2;
P=P+incrementofi2;
tope=tope+incrementofi2;
compensa=compensa+incrementofi2;
CalculaCoordenadas();
delay( 1 O);
1 P=P+incremento;
realP=realP+incremento;
if ((realP~limrealP)~I(realP~-limrealP)) {P=P-incremento;realP=realP-incremento;limiteAng=l;}
CalculaCoordenadas();
delay( 1 O);
48
//Este procedimiento mueve el ángulo " R , es decir, la articulación que corresponde a la rotación de la pinza,
//dependiendo del valor "desplaza5" que el usuario ingreso o que fue calculado en la función "CalculaAngulos"
void GiraPinza(void)
{ int Rinicial=R;
CualSeMueve=3;
if (R-desplaza5!=R)
{ if (desplaza5<0) {incremento=-I;}
else {incremento=l;}
while ((R!=tope)&&(limiteAng==O)&&(NoAtraviesa()))
i while ((z4~=norosa)~~(z5~=norosa)~~(finalz~=norosa))
{ if (ManoAdelanteO) {incrementofi2=1;} else {incrementofi2=-1;)
fi2=fi2+incrementofi2;
fi3=fi3+incrementofi2;
P=P+incrementofi2;
compensa=compensa+incrementofi2;
CalculaCoordenadas();
delay( 1 O);
1 R=R+incremento;
if ((Rzl80)II(R<-180)) {R=R-incremento;limiteAng=l;}
CalculaCoordenadas();
delay( 1 O);
I 1 limiteAng=O;
desplaza5=desplaza5-(R-Rinicial);
49
//Este procedimiento mueve el ángulo "fi2", es decir, la articulación que corresponde al movimiento del hombro,
//dependiendo del valor "desplaza2 que el usuario ingreso o que fue calculado en la función "CalculaAngulos".
void MueveHombro(void)
I CualSeMueve=4;
if (fi2-desplaza2!=fi2)
{ if (desplaza2<0) {incremento=-I;}
else {incremento=l ;}
if ( (z2~=O)~~(z3~=O)~~(z4~=O)~~(z5~=O)~~( f ina lz~=O))
{if (((tope>fi2)&&(ManoAdelante()))ll((tope<fi2)&&(!ManoAdelante()))) {aprobado=l;}}
while (((fi2!=tope)&&(limiteAng==O)&&(NoAtraviesa()))~~(aprobado==l))
I fi2=fi2+incremento;
fi3=fi3+incremento;
P=P+incremento;
if ((fi2-1 ~-limiteinc)(((fi2+1zlimiteinc+l80)) {fi2=fi2-incremento;fi3=fi3-incremento;P=P-incremento;limiteAng=l;)
CalculaCoordenadas();
if ( ( z l ~ = O ) ~ ~ ( z 2 ~ = O ) ~ ~ ( z 3 ~ = O ) ~ ~ ( z 4 ~ = O ) ~ ~ ( z 5 ~ = O ) ~ ~ ( f i n a l z ~ = O ) ) {aprobado=O;lirniteAng=l;}
delay( 1 O);
}
1 limiteAng=O;
1
//Este procedimiento mueve el ángulo "fil", es decir, la articulación que corresponde a la rotación de la base,
//dependiendo del valor "desplazal" que el usuario ingreso o que fue calculado en la función "CalculaAngulos".
void GiraBase(void)
I if (fil-desplazal!=fil)
{ if (desplazal<O) {incremento=-I ;}
else {incremento=l;}
while ((fil!=tope)&&(limiteAng==O))
{
50
fil=fil+incremento;
if ((fi1>270)11(fil<-90)) {fil=fil-incremento;limiteAng=l;}
CalculaCoordenadas();
delay( 1 O);
1 1
1
//Este procedimiento cambia la posición de la pinza, es decir, pasa de abierta a cerrada o viceversa, dependiendo del
//valor de "pinza" que el usuario ingreso.
void SueltaAprisiona(void)
{ if ((pinza==l)&&(SoltarSiAprisionara==O)&&(e!=l)) //Aprisionar.
I while (e>l)
I e=e-2;
f=f+ 1 ;
CalculaCoordenadas();
delay(30);
1 1
if ((((pinza==O)&&(SoltarSiAprisionara==O))~~((pinza==l)&&(SoltarSiAprisionara==l)))&&(e!=g)) //Soltar
I while (ecg)
I e=e+2;
f=f-I ;
CalculaCoordenadas();
delay(30);
1 1
1
//Este procedimiento llama a los 6 anteriores para cambiar la posición total del brazo de robot según se requiera
void CambiaAngulos(void)
{
51
int NoMovioR=O;
int NoMovioP=O;
int NoMoviofi3=0;
compensa=O;
aprobado=O;
limiteAng=O;
SoltarSiAprisionara=l;
SueltaAprisiona(); //Cambia el estado de la pinza.
SoltarSiAprisionara=O;
tope=R+desplaza5; //Primero Gira la pinza, mueve la muñeca y
Girapinza(); //mueve el antebrazo si se requieren mover.
if (tope!=R) {NoMovioR=l;}
tope=P+desplaza4;
MueveMunecaO;
if (tope!=P) {NoMovioP=l;}
tope=fi3+desplaza3;
MueveBrazoo;
if (tope!=fi3) {NoMoviofi3=1;}
if (NoMovioR) //En caso de no haber podido girar la pinza se
{ tope=R+desplazafj; //le da otra oportunidad.
Girapinza();
if (tope!=R) {NoMovioR=l;} else {NoMovioR=O;}
1 if (NoMovioP) //En caso de no haber podido mover la muñeca se
{ tope=P+desplaza4; //le da otra oportunidad.
MueveMunecaO;}
if (NoMovioR) //En caso de no haber podido girar la pinza se
{ tope=R+desplaza5; //le da una última oportunidad.
Girapinza();}
desplaza2=desplaza2-compensa; //Mueve el ángulo que corresponde al hombro.
tope=fi2+desplaza2;
MueveHombro();
if (NoMoviofi3) //En caso de no haber podido mover el antebrazo se
52
{ tope=fi3+desplaza3; //le da otra oportunidad.
MueveBrazo();}
tope=fil tdesplazal; //Mueve el ángulo que corresponde a la base.
GiraBaseO;
SueltaAprisiona(); //Cambia el estado de la pinza.
I
//Convierte un número entero en una cadena de caracteres para poder ser desplegado en pantalla en modo gráfico.
char *Convierte(double Numero-temporal)
I char *Num-cadena;
int dec,sig,num-dig;
double cant-temp;
div-t x;
cant-temp=Numero-temporal;
num-dig=O;
x.quot=l;
while (x.quot!=O) //Se verifica la cantidad de caracteres en el número
{ num-dig=num-digtl; //de linea para hacer la conversión.
x = div(cant-temp,lO);
cant-temp=x.quot;
1 Num-cadena ecvt(Numero-tempora1,num-dig,&dec,&sig); //Convierte un valor numérico
//a una cadena de caracteres.
return (Num-cadena);
I
//Despliega en pantalla los valores de los ángulos y de la coordenada en x,y,z del punto final del brazo de robot, una vez
//que se ha dejado de mover.
void CoordFinal()
{ double temp;
char *cad-salida='\O';
temp=finalx; //Despliega coordenada en X.
strset(cad-salida,'\O); if (finalx<O)
53
{strcat(cad_salida,"-");}
strcat(cad-salida,Convierte(temp));
outtextxy(O,O,"Coordenada en eje X:");
outtextxy(l60,0,cad~salida);
temp=finaly; //Despliega coordenada en Y.
strset(cad_salida,'\0');
if (finaly<O)
{strcat(cad-salida,"-");}
strcat(cad-salida,Convierte(temp)):
outtextxy(0,20,"Coordenada en eje Y:");
outtextxy(l60,20,cad-salida);
temp=finalz; //Despliega coordenada en Z.
strset(cad-salida,'\O');
if (finalz<O)
{strcat(cad_salida,"-");}
strcat(cad-salida,Convierte(temp));
outtextxy(0,40,"Coordenada en eje Z:"); outtextxy( 160,40,cad-salida);
temp=fil; //Despliega valor del ángulo de la base.
strset(cad-salida,'\O');
if (filC0)
{strcat(cad-salida,"-");}
strcat(cad-salida,Convierte(temp));
outtextxy(0,60,"Ángulo fil:");
outtextxy(l40,6O,cad_salida);
temp=fi2; //Despliega valor del ángulo del hombro
strset(cad-salida,'\O);
if (fi2<0)
{strcat(cad-salida,"-");}
strcat(cad-salida,Convierte(temp));
outtextxy(0,80,"Ángulo fi2:");
outtextxy(l40,80,cad-~alida);
temp=fi3; //Despliega valor del ángulo del codo.
strset(cad-salida,'\O');
if (fi3<0)
{strcat(cad-salida,"-");}
strcat(cad-salida,Convierte(temp));
54
outtextxy(0,100,"Ángulo fi3:");
outtextxy(140,100,cad~salida);
temp=P; //Despliega valor del ángulo de la muñeca.
strset(cad-salida,'\O');
if (P<O)
{strcat(cad-salida,"-");}
strcat(cad-salida,Convierte(temp));
outtextxy(450,0,"Ángu10 P :'I);
outtextxy(590,0,cad-salida);
temp=R; //Despliega valor del ángulo de rotación de la pinza.
strset(cad-salida,'\O');
if (R<O)
{strcat(cad-salida,"-");}
strcat(cad-salida,Convierte(temp));
outtextxy(450,20,"Ángulo R :");
outtextxy(590,20,cad-salida); temp=realP; //Despliega valor del ángulo real de la muñeca.
strset(cad-salida,'\O');
if (realPc0)
{strcat(cad-salida,"-");}
strcat(cad-salida,Convierte(temp));
outtextxy(450,40,"Ángu10 realp:");
outtextxy(590,40,cad-salida);
temp=realfi3; //Despliega valor del ángulo real del codo.
strset(cad-salida,'\O');
if (realfi3~0)
{strcat(cad-salida,"-");}
strcat(cad-salida,Convierte(temp));
outtextxy(450,60,"Ángulo realfi3:");
outtextxy(590,60,cad-salida);
1
//Borra un sector de la pantalla donde se ha escrito texto para poder volver a escribir en ese mismo lugar los nuevos
//valores.
void BorraSector(void)
I
55
setf1llstyle(SOLID-FILL,5);
bar(0,0,190,110);
bar(445,0,680,70);
1
//Genera una pausa hasta que el usuario oprima cualquier tecla para continuar.
void Pausa(void)
{
outtextxy(250,O,”Presiona una tecla”);
int c;
c = getch(); I* Lee un carácter del teclado *I
if( ESC == c ){ I* El usuario desea salir? *I
closegraph(); I* Cambia a modo texto */
exit( 1 ); I* Regresa a MSDOS *I
1 if( o == c ){ I* Si el usuario no presiono una tecla ASCII ? */
c getch(); /* Lee código de rastreo del teclado *I
I setfillstyle(S0LID-FILL,O);
bar(250,0,393,8);
1
//Este procedimiento calcula los nuevos cambios en los ángulos de las extremidades del brazo de robot, una vez que el
//usuario ingresó las nuevas coordenadas del punto final hacia donde el brazo debe desplazarse.
void CalculaAngulos(float x3ext,float y3extjnt z3extjnt angulomano,int angulopinza,int modopinza)
I double filaux,filaux2,Paux,anguloxyz,C,A,angB,potc,c,Arad;
float div;
int x2ext,y2ext,z2ext;
double fin1 ,fin2,fin3,fin4;
if (x3ext==0) //Si este valor es cero el cálculo de f i l se indetermina
{ if (y3exPO) {filaux=SO;} //por eso se le dan estos valores
else if (y3extcO) {filaux=270;} //por default.
I else //En caso contrario puede calcularse normalmente.
{ div=y3extlx3ext;
56
filaux=(atan(div)*l80)/3.1416;
1 if (y3ext==0) //Si este valor es cero el cálculo de fil toma el mismo valor
{ if (x3ext>0) {filaux=O;} //para diferentes valores de x3ext, por eso se
else if (x3extcO) {filaux=180;} //le dan estos valores.
1
//Para estos valores de x3ext y y3ext el valor de fil debe recalcularse.
if (((x3ext~0)&&(y3ext~0))~~((x3ext~O)&&(y3ext~O))) {filaux=filaux+l80;}
Paux=anguIomano;
//Aquí se toman valores absolutos de x3ext y y3ext para trabajar en 2D. if (x3extcO) {x3ext=(-l)*x3ext;}
if (y3extcO) {y3ext=(-l)*y3ext;}
if (x3ext==0) {fil aux2=90;}
else
{ div=y3extlx3ext;
fi1aux2=(atan(div)*l80)/3.1416;}
if (y3ext==0) {fil aux2=0;}
//Se calculan las coordenadas del vector del punto donde se articula la muñeca.
x2ext=x3ext-((d+i)*cos((tilaux2*3.1416)/180)*cos((Paux*3.1416)/180)); y2ext=y3ext-((d+i)*sin((filaux2*3.1416)/180)*cos((Paux*3.1416)/180));
z2ext=z3ext-((d+i)*sin((Paux*3.1416)/180))-L;
//Se calcula el ángulo que forma el vector de las coordenadas anteriores con el sistema de coordenadas base.
if ((~2ext==O)&&(y2ext==O)) {anguloxyz=O;}
else
{anguloxyz=(atan(z2extl(sqrt(pow(x2ext,2)tpow(y2ext,2))))*180)/3.1416;}
//Para estos valores de x2ext, y2ext y z3ext el valor de "anguloxyz" debe recalcularse
if ((z2ext~0)&&((x2ext~O)~~(y2ext~O))) {anguloxyz=180-anguloxyz;}
//Se calcula la magnitud del vector.
potc=pow(x2ext,2)+pow(y2ext,2)+pow(z2ext,2);
c=sqrt(potc);
57
//Se calcula el ángulo que forma el segmento del brazo con el vector anterior.
if (c==O) {Arad=l.5708;}
else
{Arad=acos((-(pow(B,2))+pow(D,2)+potc)/(2*D*c));}
A=(Arad*180)/3.1416;
//Se calcula el ángulo que forma el segmento del antebrazo con el vector.
angB=(asin((D*sin(Arad))/B)*l80)/3.1416;
//Se calcula el ángulo que forma el brazo con el antebrazo.
C=180-A-angB;
//Se calculan los desplazamientos que deben tener los ángulos de las articulaciones para alcanzar el nuevo punto final.
finl=filaux;
fin2=A+anguloxyz;
fin3=C-180;
fin4=Paux-((A+anguloxyz)+(C-l80));
desplazal=finl-fil;
desplaza2=fin2-fi2;
desplaza3=fin3-(fi3-fi2);
desplaza4=fin4-(P-fi3);
desplaza5=angulopinza-R;
pinza=modopinza;
1
//Función que verifica si el carácter leído de la variable se trata de un número, regresa un cero si es algún otro carácter.
int DIGITO(char simbolo2)
I char digitos[l I ] "1234567890";
in t ap2;
int result2;
result2=0;
for (ap2=0; ap2<=9; ap2++)
{ if (digitos[ap2]!=simbolo2)
{result2=0;}
else
{result2=1;
58
ap2=1 O;
1 1
return(result2);
1
//Función que valida la cadena que el usuario introdujo desde el teclado, regresa un uno si la cadena es una serie de
//números y un cero en caso contrario.
int EsNumero(char buf[4])
{ int resultl=O;
int apl;
for (apl =O; apl cstrlen(buf); apl++)
{ if ((apl==O)&&(buf[apl]=='-')&&(tolerasigno)) //Verifica si es un
{resultl = I ;} //numero negativo.
else if (!DIGITO(buf[apl]))
{resultl =O;
break;}
else
{resultl=l;}
1 return(result1);
1
//Este procedimiento despliega mensajes en pantalla para pedir al usuario que ingrese los nuevos valores de las
//coordenadas del punto final, y después llama al procedimiento "CalculaAngulos".
void PideCoordenadas(void)
I clrscr();
tolerasigno=l;
do{ strset(buf,'\O');
gotoxy(30,10);
printf("coordenada x :
gotoxy(45,10);
scanf("%s",buf);}
while (!EsNumero(buf));
59
x3ext=atoi(buf);
do{ strset(buf,'\O');
gotoxy(30,10);
printf("coordenada y :
gotoxy(45,1 O);
scanf("%s",buf);}
while (!EsNumero(buf));
y3ext=atoi(buf);
tolerasigno=O;
do{ strset(buf,'\O');
gotoxy(30,10);
printf("coordenada z :
gotoxy(45,10);
scanf("%s",buf);}
while (!EsNumero(buf));
z3ext=atoi(buf);
tolerasigno=l;
do{ strset(buf,'\O');
gotoxy(30,1 O);
printf("ángu1o mano :
gotoxy(45,lO);
scanf("%s",buf);}
while (!EsNumero(buf));
angulomano=atoi(buf);
do{ strset(buf,'\O');
gotoxy(30,1 O);
printf("ángu1o pinza :
gotoxy(45,10);
scanf("%s",buf);}
while (!EsNumero(buf));
angulopinza=atoi(buf);
do{ gotoxy(30,10);
") ;
") ;
60
printf("Aprensar(1) o soltar(0): ");
gotoxy(55,10);
tecla getche(); //El usuario debe elegir una de las dos opciones.
if( '1' == tecla )
I pinza=l;
1 if( 'O' == tecla )
{ pinza=O;
} }while ((tecla!='l')&&(tecla!='O')); CalculaAngulos(x3ext,y3ext,z3ext,angulomano,angulopinza,pinza);
1
//Este procedimiento despliega mensajes en pantalla para pedir al usuario que ingrese los desplazamientos que debe
//hacer el brazo para cada uno de los ángulos de las articulaciones.
void PideAngulos(void)
{ clrscr();
tolerasigno=l;
do{ strset(buf,'\O');
gotoxy(30,10);
printf("primer ángulo: "1 ; gotoxy(45,l O);
scanf("%s",buf);}
while (!EsNumero(buf));
desplaza1 =atoi(buf);
do{ strset(buf,'\O');
gotoxy(30,10);
printf("segund0 ángulo: "1 ; gotoxy(45,10);
scanf("%s",buf);}
while (!EsNumero(buf));
desplaza2=atoi(buf);
61
do{ strset(buf,'\O');
gotoxy(30,10);
printf("tercer ángulo:
gotoxy(45,l O);
scanf("%s",buf);}
while (!EsNumero(buf));
desplaza3=atoi(buf);
do{ strset(buf,'\O');
gotoxy(30,10);
printf("cuart0 ángulo:
gotoxy(45,10);
scanf("%s",buf);}
while (!EsNumero(buf));
desplaza4=atoi(buf);
do{ strset(buf,'\O');
gotoxy(30,10);
printf("quint0 ángulo:
gotoxy(45,10);
scanf("%s",buf);}
while (!EsNumero(buf));
desplaza5=atoi(buf);
do{ gotoxy(30,1 O);
printf("Aprensar(1) o soltar(0): ");
gotoxy(55,l O);
tecla getche(); //El usuario debe elegir una de las dos opciones, if( '1' == tecla )
{
pinza=l;
1 if( 'O' == tecla )
I pinza=O;
1
") ;
") ;
62
}while ((tecla!='l')&&(tecla!='O'));
I
//Este procedimiento es la primer opción del menú principal donde el usuario debe introducir cambios en las
//articulaciones del brazo de robot.
void MedianteAngulos(void)
{ PideAngulos(); //El usuario ingresa valores.
IniciaGrafico();
CalculaCoordenadas(); //Dibuja posición inicial del brazo.
Pausa();
CambiaAngulos(); //Hace simulación del movimiento del brazo.
Borrasector(); //Borra un sector donde se escribió texto.
CoordFinal(); //Despliega los valores de ángulos y coordenadas.
Pausa();
closegraph();
}
//Este procedimiento es la segunda opción del menú principal donde el usuario debe introducir nuevas coordenadas para
//el punto final del brazo de robot.
void MedianteCoordenadas(void)
{
PideCoordenadas(); //El usuario ingresa nuevos valores, y el ordenador
IniciaGrafico(); //calcula los desplazamientos.
CalculaCoordenadas(); //Dibuja posición inicial del brazo.
Pausa();
CambiaAngulos(); //Hace simulación del movimiento del brazo.
Borrasector(); //Borra un sector donde se escribió texto.
CoordFinal(); //Despliega los valores de ángulos y coordenadas.
Pausa();
closegraph();
}
//Este procedimiento es la tercer opción del menú principal donde el usuario eligió realizar una secuencia de movimientos
//del brazo de robot previamente programada.
void TareaEspecifica(void)
I
63
IniciaGrafico();
CalculaCoordenadas(); //Dibuja posición inicial del brazo
Pausa();
CalculaAngulos(100,50,150,0,90,1)~ //Calcula los desplazamientos.
CambiaAngulos(); //Hace simulación del movimiento del brazo.
Borrasector(); //Borra un sector donde se escribió texto.
CoordFinal(); //Despliega los valores de ángulos y coordenadas.
CalculaAngulos(-100,-100,0,-90,0,0); //Calcula los desplazamientos.
CambiaAngulos(); //Hace simulación del movimiento del brazo.
Borrasector(); //Borra un sector donde se escribió texto.
CoordFinal(); //Despliega los valores de ángulos y coordenadas,
CalculaAngulos(100,50,150,0,90,1); //Calcula los desplazamientos.
CambiaAngulos(); //Hace simulación del movimiento del brazo.
Borrasector(); //Borra un sector donde se escribió texto.
CoordFinal(); //Despliega los valores de ángulos y coordenadas,
CalculaAngulos(-l00,l OO,O,-90,0,0); //Calcula los desplazamientos.
CambiaAngulos(); //Hace simulación del movimiento del brazo.
Borrasector(); //Borra un sector donde se escribió texto.
CoordFinal(); //Despliega los valores de ángulos y coordenadas,
Pausa();
closegraph();
I
//Procedimiento principal.
int main(void)
{ float divtempl ,divtemp2;
fi l =O; //Valores iniciales de Angulos fi2=0; fi3=0;
P=O;
R=O;
realfi3=0:
64
realP=O;
L=50; //Valores constantes de Magnitudes de los segmentos.
D=lOO;
B=lOO;
d=30;
h=15; //Ancho de cada segmento.
i=30; //Magnitud de las tenazas.
g=i/(sqrt(2)); //magnitud de los vectores "a" y "o" de la pinza.
e=g;
f=g;
norosa=lO;
xO=O; //Coordenadas del segmento base.
yo=o; zO=L;
divtempl=L; //Calcula límites de movimiento para las articulaciones
divtemp2=D; //dependiendo de las magnitudes de
divtempl=divtempl/divtemp2; //los segmentos.
limiteinc=(asin(divtempl)*180)/3.1416;;
divtempl=d+i;
divtemp2=B;
divtempl =divtempl/divtemp2;
limiteinc2=(asin(divtempl)*180)/3.1416;;
divtempl =i;
divtemp2=d;
divtempl =divtempl/divtemp2;
limiteinc3=(asin(divtempl)*180)/3.1416;;
limrealfi3=180; //Límites para el movimiento del antebrazo y
limrealP=l80; //la muñeca.
do
I clrscr(); //Despliega menú principal
gotoxy(30,5); printf("1ntroducir Angulos (I)");
gotoxy(30,1 O);
printf("1ntroducir Coordenadas (2)"); gotoxy(30,15); printf("Rea1izar Tarea Especifica (3)");
65
gotoxy(30,20);
printf("Salir (Esc)");
tecla = getche(); //El usuario debe elegir una de las tres opciones
if( '1' == tecla ) / / o la tecla Esc para salir del programa.
{ MedianteAngulos();
if( '2' == tecla )
I MedianteCoordenadasO;
1 if( '3' == tecla )
I TareaEspecifica();
1 }while (tecla!=ESC);
return O;
}
66
Conclusiones El diseño y la construcción del brazo mecánico, en este Proyecto, nos permitió aplicar, a la Robótica, las
herramientas que ofrecen ciencias como la Computación, la Electrónica y la Mecánica, así como percatarnos
de las ventajas (y desventajas) de estas herramientas.
El programa de control y simulación del brazo de robot se elaboró en base a un análisis de la
cinemática de un manipulador de seis grados de libertad y, así, enviar las secuencias de fases adecuadas a
los motores de pasos, para ejecutar los movimientos del brazo.
La interface entre los motores de pasos y la PC se diseñó tomando en cuenta las palabras de
control, enviadas a través del puerto paralelo de la computadora y generadas por el programa residente en
ésta.
En el circuito que constituyó esta interface se empleó un decodificador para interpretar los bits de
dirección y activar el motor seleccionado. Se utilizaron circuitos amplificadores ULN 2003 (para abastecer la
corriente indispensable a las bobinas de los motores) que redujeron considerablemente el número de
elementos del circuito electrónico y , por ende, las dimensiones de éste, debido a que, en diseños propuestos
por diversos autores, se había contemplado el empleo de transistores Darlington, resistencias y diodos. Una
vez amplificada en corriente la secuencia de pulsos, se produjo el movimiento paso a paso del motor
seleccionado.
En consecuencia, los motores movieron las partes mecánicas del brazo, ejecutando ciertas
maniobras determinadas por el software manejado por el usuario.
El uso de un programa de computadora facilitó la tarea de darle versatilidad a la forma de controlar
los movimientos del brazo, ya que se pudieron implementar algoritmos basados en ángulos o coordenadas,
además de ofrecer un manejo fácil del sistema.
Sin embargo, el sistema de control del brazo no tiene una línea de retroalimentación que pudiese
informar al programa la posición real del eje del motor, originando errores de posicionamiento al ejecutarse
cambios bruscos en los movimientos ordenados por el usuario.
Esto sugiere que se pueden realizar mejoras significativas al sistema, por ejemplo: dando al
manipulador la capacidad de captar su posición, empleando sensores localizados en sus articulaciones, que
67
pudieran medir los ángulos entre éstas, y proporcionar esta información al programa de la computadora para
que haga las rectificaciones necesarias.
Además, en las pruebas finales, tuvo que efectuarse un ajuste en los que se refiere a la parte
mecánica: se añadió un contrapeso a la articulación correspondiente a la unión hombro (cuerpo-brazo), con el
objeto de que al motor de pasos se le facilitara la tarea de mover el elemento brazo. A pesar de esto, cuando
algún motor ejecutaba su respectiva secuencia de pasos, se observaban vibraciones en el brazo.
En general, podemos decir que el sistema completo (software, computadora personal, circuito
electrónico, motores de pasos y partes mecánicas) se comportó de acuerdo a las expectativas de este
Proyecto.
68
Bibliografía
1.
2.
3.
4.
5.
6.
7 .
8.
9.
ANGULO, J. M.; Robótica frhctica. Tecnología y Aplicaciones; Ed. Paraninfo; España; 1992.
ANGULO, J. M.; Curso de Robótica; Ed. Paraninfo; España; 1989.
AUDí, D.; Cómo y cuándo aplicar un robof industrial; Ed. Marcombo; España; 1988.
SPONG, M.; Robot dinamics and control; Ed. John Wiley; USA; 1989.
KOIVO, A,; Fundamentals for controlof robotic manipulators; Ed. John Wiley; USA; 1989.
GRAY, C. B.; Máquinas eléctricas y sistemas accionadores; Ed. Alfaomega; México; 1993.
HUMPHRIES, J . ; lndusfrial Electronics; Ed. Delmar Publishers; USA; 1993.
URBIETA, R.; Diseiio y construcción de un controlador digital para motor de paso; Polibits.
Revista de Computación; CINTEC-IPN; México; 1990.
RAMAKANT, G.; Analog and Digital Control; Ed. Prentice-Hall; USA; 1988.
10. MANO, M.; Lógica digitaly diseAo de computadoras; Ed. Prentice-Hall; México; 1990.
11. TEXAS INSTRUMENTS; The TTL Data Book; USA; 1992.
12. SCHILDT, H.; Turbo C/C++; Ed. McGraw-Hill; Mexico; 1995.
13. http://www.eupmt.es/cra/robotica.htm
14. http://www.angelfire.com/ri/cocrow/index.html 15. http://www.geocities.com/ResearchTriangle/Fac~lity/9407/Robotica/robot.html
16. http://www.alek.pucp.edu.pe/ApoyoaEn/MaquinasEl/mpaso.htm
68