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: r<P




                 Donaciano Jiménéz V z

                               :/



                              Por
         Rodolfo Hernández
                       Valdez               91320399
         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 robot?
                  un              . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     3
     1. 1 El término robof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       3
     1.2
      Generaciones
                 de
                  robots              . . . . . . . . . . . . . . . . . . . . . . . . . . . .      5
     1.3Clasificación de los robots . . . . . . . . . . . . . . . . . . . . . . . . . . . .        5
     1.4 Partes de un robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        6
Capítulo Características
        2              generales        de los robots . . . . . . . . . . . . . . . . . . .       11
     2.1Grados de libertad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        11
            2.1 . 1 Punto de vista de la teoría de mecanismos y máquinas . . . . . . . .          12
            2.1.2PuntodevistadelaRobótica             . . . . . . . . . . . . . . . . . . . . .   14
      2.2Volumendetrabajo:Capacidaddecarga                 . . . . . . . . . . . . . . . . . . . 14
     2.3 El conceptodegr@per(elementoterminal)              . . . . . . . . . . . . . . . . . . . 14
            2.3.1 Tipos herramientas
                      de                      . . . . . . . . . . . . . . . . . . . . . . . . .   15
     2.4 Precisión la
                 enrepetibilidad          . . . . . . . . . . . . . . . . . . . . . . . . . .     15
     2.5 Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        16
     2.6
       Lenguajesprogramación
               de                           . . . . . . . . . . . . . . . . . . . . . . . . . .   16
            2.6.1Lenguajes la
                         de primerageneración               . . . . . . . . . . . . . . . . . .   17
            2.6.2Lenguajesdelasegundageneración               . . . . . . . . . . . . . . . . . . 17
Capítulo3Cinemática      y posicionamientoderobots        . . . . . . . . . . . . . . . . . . .   18
     3.1
       Articulaciones
                    robóticas       . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     18
     3.2 LacinemáticaaplicadaalaRobó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.1Elementosmotricesde            los robots . . . . . . . . . . . . . . . . . . . . . . . .     24
     4.2Motoreseléctricosdepasoapaso                 . . . . . . . . . . . . . . . . . . . . . . .    25
     4.3Sistemasdecontrolparamotores               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.1Estructura y funcionesdelsistemadecontrol                . . . . . . . . . . . . . . . . .    30
     5.2Niveles de controlporcomputadora . . . . . . . . . . . . . . . . . . . . . . .                31
Capítulo6Implementacióndelbrazomecánico                 . . . . . . . . . . . . . . . . . . . . .     32
     6.1 Circuito interface entre      la PC y los motores de paso . . . . . . . . . . . . . .        32
            6.1 . 1Diseñodelcircuito       . . . . . . . . . . . . . . . . . . . . . . . . . . .      32
            6.1.2 de
                Lista material           . . . . . . . . . . . . . . . . . . . . . . . . . . . .      34
     6.2Descripciónde      los motores      . . . . . . . . . . . . . . . . . . . . . . . . . . .     35
     6.3Programadesimulación            y controldelbrazomecá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 tienenidea de la naturaleza de las aplicaciones útiles de la Robótica como ciencia.


         La Robótica, como la conocemos en día, tiene sus orígenes hace miles de años. Comenzaremos
                                      hoy
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 muchodespués del origen de los autómatas.


         Desde el principiode los tiempos, el hombreha 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 artefactoso
simples máquinas.


         Antiguamente, se creaban artefactos capaces realizar tareas diarias comunes para los hombres,
                                                   de                      y
o bien para facilitarles las labores cotidianas; daban cuenta de que había tareas repetitivas quese podían
                                              se
igualar con un complejo sistema, y es asícomose        comienzan a crear máquinas capaces de repetir las
                                     Los
mismas labores que el hombre realizaba. 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. embargo, estos inventores comenzaron a dar cuenta de que los robots podían
                        Sin                       se
imitar movimientos humanos o de alguna criatura viva. Estos movimientos pudieron ser mecanizados y, de
                                             algunas de las laboresmás sencillas de aquellos tiempos.El
esta manera, se podían automatizar y mecanizar
origen del desarrollo de la Robótica basa en el empeño por automatizar la mayoría de las operaciones en
                                   se
una fábrica; estose remonta al sigloXVII, en la industria textil,donde se diseñaron telaresque se controlaban
con tarjetas perforadas.




                                                                                                            I
Objetivo
Diseñar yconstruir un brazo mecánicocontrolado por unprograma de computadora que manipule los motores
de paso correspondientes a cadagrado de libertad del brazo.




Propósito
Conocer las ventajas y desventajas del usodela        computadorapersonaly      los motores depasosen        la
implementación de un brazo de robot.




Con el nacimiento de la Revolución Industrial,muchas fábricastuvieron 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 cadavezmás       eficientes los procesosdeproducción.     Asi, lasaplicaciones dela     Robóticaen la
automatización deesos     procesos se han convertido en parte
                                                            imprescindible fábricas
                                                                         de                      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 enciertas 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 "noprotestan".


        Además, existen aplicaciones donde la Robótica juega papel fundamental, es decir, sin ésta sería
                                                           un
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 paraconstruir máquinas que sustituyeran
al hombre en tareas    pesadas, peligrosas o monótonas. Tales máquinasrecibenelnombrederobot.                      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 robotutil.


     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...". Lafigura 1 . 1
muestra la analogíaexistente entre las partes del brazo humano y el mecánico.



                                             TEBRATO
                                                            -"       -   _""   BRAZO      ""




                                      K




                           Figura 1.1. El brazo mecánico es un robofcon 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 cualrealiza 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óndereproducirseresvivientes,      sino de la necesidad. Con elobjetivo de diseñaruna
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 el germen del
                                                fue          robot industrial.


     Para las normas ISO, un robot industrial es un manipulador automático reprogramabley 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 tareas.
                                                          de


     Un robot
           industrial máquina puede
                   es
                   una      que efectuar                                un número de
                                                                               diverso
                                                                                     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 sistema informático.
                                                       su


Los usos actuales de los robots son:


           Militares
           Industriales
           Personales
           Educativos


Existen en el mercado diversas empresas dedicadasla fabricación de robots industriales, por que existen
                                               a                                         10
diferentes marcas y modelos. Estos últimos normalmente son asignados para identificarlos de acuerdo a su
                                                                                       o
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 primerageneraciónse        caracteriza por mecanismos derelojeríaquepermitenmover            cajas
musicales o juguetes de cuerday       lavarropas ciclo
                                               de          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.


        Lacuartageneración       mejoralas extensionessensoriales,paracomprender           sus   accionesy 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 nuevaarquitectura 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ónde     robots endiversos
                                  campos,        ofrece clasificación
                                                      una                  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   D secuencia variable:se pueden alterar algunas características de los ciclos de trabajo.
             e

     Robots de repetición o aprendizaje: Son manipuladoresque se limitan a repetiruna 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 manodel 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 con que
                                                                          robot, las                 se puede
                                                sólo
confeccionar un programa de aplicación utilizando la terminal de la computadora no el brazo.
                                                                              y


     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ónartificial, el sonido delamáquina     y lainteligenciaartificial,sonlascienciasquemásseestá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 similaresa los
de la aplicación industrial.


     Tomando en cuenta ésta otras propuestas, hemos hecho una clasificación más general: hay robots de
                          y
                                                                      los
tres clases. Los robots de aprendizaje graban en su memoria electrónica movimientos que han ejecutado
por vez primera para que, posteriormente, los reproduzcan fielmente, sin ninguna intervención ulterior del
hombre. Los robotsprogramadosestángobernadosporunacomputadora,cuyasinstruccionessiguen
constantemente.Por último, los robotsautoadaptablesdisponen          de detectores,captadores,cámarasde
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, mostradola figura 1.2, el cual consistedel
                                                                     en
brazo,fuente de poderexterna,elementoterminal(gripper),sensoresexteros              e internos,servo-control,
interface con la computadoray control por computadora.Aún el software programado podría considerado
                                                                                       ser
comounaparteintegraldetodoelsistema,dadoquelamanera                    en lacualelrobotesprogramado           y
controlado puede tener un impacto mayor su desempeño y un subsecuente rango de aplicaciones.
                                      en




                                                                                                              6
Fuente de poder
                                                                        externa




           terminal                      residente




                                   Figura 1.2. Componentesde 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 quese tiene de un robot industriales 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 l que se
                                                                                           o
considera técnicamente comoun sistema de robot industrial.


Un sistema de robot industrial consta las siguientes partes:
                                     de


        Manipulador o brazo mecánico.
        Controlador.
        Elementos mofrices o actuadores.
        Elemento terminal, herramientao 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 dispositivosque 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
                                                         o herramienta). Dentrode la estructura interna
que propician el movimiento del elemento terminal (aprehensor
del manipulador se alojan, en muchas ocasiones, los elementos motrices, engranajes y transmisores que
soportan el movimiento de las cuatro partes que, generalmente, suelen conformarel brazo:


        Base o pedestal de fijación
        Cuerpo
        Brazo
        Antebrazo


Los cuatro elementos rígidos del brazo están relacionados entre mediante articulaciones, como se muestra
                                                             si
en la figura 1.3, las cuales
                           puedenser          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 elbrazo humano, a las uniones o articulaciones del manipuladorse les denomina:


     O   Unión del cuerpo (base-cuerpo)
     O   Unión hombro (cuerpo-brazo)
     O   Unióncodo (brazo-antebrazo)
     O   Uniónmuñeca (antebrazo-aprehensor)


El número de elementos del brazo, y de las articulaciones que los relacionan, determinan los grados de
libertad del manipuladorque,en       los robotsindustriales,suelen    ser 6 y coincidencon los movimientos
independientes que posicionan las partes del brazo el espacio.
                                                 en


     Controlador: Recibeestenombreeldispositivo            que se encarga de regularelmovimientode            los
elementos del manipulador y todo tipo de acciones, cálculos y procesado de información que realiza.
                                                                                         se


     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:intervieneenelcontroldelaposicióndelelementoterminal.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: tomaencuenta       las propiedadesdinámicasdelmanipulador,motores          y
              elementos asociados.
         O    Controladaptativo:considera     la variacióndelascaracterísticas    del manipuladoralvariarla
              posición.


     Elementos motriceso 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ónde velocidad.
         0    Eléctricos: son los más utilizados, por su fácil y preciso control, as¡ como por otras propiedades
              ventajosas que reportasu funcionamiento.
Elemento Terminal (gripper): es undispositivo que seunealamuñ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 elementoterminalradicaen               queha    desoportarunaelevada
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 nomodifique o dañe la estructura de la pieza. Una regla general es que la
pinzadebe sujetarala       piezade trabajode       su centro de gravedad. Esto ocasionaque seanulen                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
condoble    pinza. Existenotrostiposdepinzas          como ventosas,pinzasmagnéticas           y pinzasadhesivas.
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 consu anatomía o
configuración.


     Un mayor número de grados de libertad conlleva al aumento de la flexibilidad en el posicionamiento del
                                                                              6 de
elemento terminal. Aunque la mayoría de las aplicaciones industriales requieren grados de libertad, como
las de soldadura, mecanizadoy paletización, otras más complejas exigen número mayor, tal es el caso de
                                                                     un
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.


                                  22
     La mano humana cuenta con unos grados de libertad y, al
                                                           mismo tiempo, la vistay el tacto ligados al
cerebro, le permiten una habilidad increíble en sinnúmero de operaciones. Entonces, es necesario limitar
                                             un                                                      el
                                     indispensable. Esto se hace mediante el siguiente análisis:
número de grados de libertad al mínimo


     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
nosindicaque    se puede construirun mecanismoconseisgrados                   delibertad, paracolocar unobjeto 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.IPunto 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íaprecisoconocer         6N parámetros para definir
                                                     las       posiciones de
                                                                           todos      ellos. Además, uno de      los
elementos (el soporte) esfijo y, por lo tanto, el número de grados de libertad se reduce a 6(N-1).


        Por otra parte, los elementos del manipuladorse 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, exceptoel 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 formahabitual de trabajode       los robotsmanipuladores se puedeasimilar         aunageneraciónde
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, queelcentrode               la mano de sujecióndel
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úaen 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 estribaen el número de elementos a
tener en cuenta y en la formadeconstruirlamuñecadela            mano de sujeción.Enefecto,elrótulo        se
materializa mediante tres pares de rotación y la mano mediante tres elementos diferentes, con      Io que el
número deelementos pasa a ser dos más que los N considerados en el apartado anterior. Por parte, en
                                o                                                      otra
la Robótica se acostumbra a considerar alfijo como un elemento.Llamando E al número de elementos
                           no                                                                  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 y
     Los elementos de un robot con seis grados de libertad son: la base, el brazo, el antebrazo 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 nombrede capacidad de
carga. A veces, este dato Io proporcionan los fabricantes, incluyendo el peso de la propia carga.La capacidad
de carga es unade las características que más se tienen en cuenta la selección del robot, según la tarea a
                                                                   en
que se destine. En soldadura y mecanizado es común precisar capacidadesde carga superiores a los 50 Kg.


2.3 El concepto de gripper (elemento terminal)
Existeunagranvariedad      de elementosterminalesrequeridosparaefectuarlasdiferentesfuncionesde
trabajo. Esta variedad de elementos pueden divididos en dos categorías principales:
                                         ser


            Grippers
            Tools


Los
  grippers elementos
         son       terminales
                            utilizados sujetar
                                     para    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 clasificados
                      ser                        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.Ambosdispositivospuedenactuarindependientemente.               El doblegripper es utilizadoparalas
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
Enmuchasaplicaciones,       el robotrequiere manipular unaherramientaenvezde             sólo piezas de trabajo
(partes). En lamayoríadelasaplicaciones          de robots,en las cuales una herramienta es manipulada,la
herramientaescolocadadirectamentealrobot.           En estoscasos, la herramientaeselelementoterminal.
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-paintingnozzle(PinturaenSpray),Drilling(taladrado),          Routing, Wire brushing(pintura), Grinding,
Liquid cement applications for assembly (Aplicaciones de cemento líquido), heating
                                                                              torches, Waterjet cuffing
tool (Herramienta de cortea presión).


      Encadacaso,     el robotdebecontrolarlaactuación        de laherramienta.Porejemplo,elrobotdebe
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. Ensoldadura,
                             pinturamanipulación
                                    y                        de piezas, la precisión en larepetibilidadestá
comprendida entre 1 y 3 mm y en las operaciones demecanizado, 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 considerablementeen 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 debeser media e incluso baja.


2.6 Lenguajes de programación
Laprogramación robots
              de                 es lautilizada    en las aplicaciones industriales y consta dos
                                                                                            de técnicas
fundamentales:


         0   programacióngestual
         0   programacióntextual


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
                                                                       on
exige el empleodel manipulador en la fase de enseñanza, es decir, trabaja line.


     En la programación textual, las acciones que ha de realizar el brazo se especifican mediante las
instruccionesdeun       lenguaje; lastrayectoriasdelmanipulador       se calculanmatemáticamentecongran
precisión y se evita el posicionamientoa ojo, muy corriente en la programación gestual.


     El primer lenguaje textual de un robotfue 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.


     Eltrabajoeneldesarrollodelenguajespararobotstambiénfuerealizado                   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
Utilizanunacombinacióndecomandos             y procedimientosparadesarrollarprogramasderobots.Fueron
desarrolladoslargamenteparaimplementarelcontroldelmovimientopormedio                  de la programacióncon
lenguaje textual. Una característica típica de estos lenguajes incluyela 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 esunejemplodeunlenguajedeprogramación                  de unrobotdeprimerageneració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, incapacidad de hacer uso de sensores
                                                                   la
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 listados
                                                                                              ser
como sigue:


         0   Control del movimiento.
         0   Capacidades
                       avanzadas
                               de            sensor: tiene capacidad
                                                          la              de manejar algo más señales
                                                                                            que
             binarias onloff y la capacidad de controlar dispositivos medio de sensores de datos.
                                                                    por
         0   lnteligencia limitada: es la capacidad de utilizar información recibida del ambiente de trabajo para
             modificar el comportamiento del sistema una manera programable.
                                                   de
             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 manufactura.
                                                               de




                                                                                                              17
Cinemática y posicionamiento de robots

3.1 Articulaciones robóticas
Un robotindustrial es un manipulador que puede realizar diversas tareasdentro 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 permiterelativarotaciónentre dos elementos. Una articulaciónprismá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 el eje a Io largo del cual una articulación prismática se desliza, Z
                                        o                                                                por i
si la articulación es la interconexión de elementos i e i +l.Las variables de articulación, denotadas por6 ,
                                        los
para una articulación giratoria como d; para una articulación prismática, representan desplazamiento relativo
                               y
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 la geometría del movimiento de brazo de
                                                               de                             un
robot con respecto a un sistema de coordenadas de referencia sin considerar las fuerzas momentos que
                                                         fijo,                        o
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 finaldel brazo del robot.


     Hay dos problemas fundamentales en         la cinemática del robot. El primer problema se suele conocer
como el problema cinemáticodirecto, mientras que el segundo problema es el problema cinemático inverso.
Como las variables independientes enun robot son las variables de articulación,y una tarea se suele dar en
términos del sistema de coordenadasdereferencia,            se utilizademaneramásfrecuenteelproblema
cinernático inverso. Denavit Hartenberg [I9551 propusieron un enfoque sistemáticoy generalizado de utilizar
                           y
á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 matriz transformación
                                una de                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 posición original A hasta una posición B, entre cuyos
                                              su
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 enteraS) con respecto a un sistema de coordenadas común.


        A veces, elmanipuladorpuede          ser capaz de captar su posición de algunamanera,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, porlo tanto, expresar
las posicionesA 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 terminalo 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 todos
       cual            los objetos,
                                  incluyendomanipulador,
                                           el          toman                      como referencia. En este
                                                                                                         caso,
establecemos el marcode labase coordenadoo, x, y,, en la base del robot,
                                                                      como se muestra en la figura3.2.




                         Figura 3.2. Marcos coordenados para un robot lineal de dos elementos.




Las coordenadas (x, y) de la herramienta son expresadasen este marco coordenado como


                                         x = al cos %I + a cos (8,+ g2)
                                                         2
                                         y = al sen el + a2 sen (0, + e2)




                                                                                                                 20
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 y , relativos a los ejes xo y yo, esto es,
                                       2




los cuales podemos combinar en una matriz orientación,
                                       de




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 sonllamadas las ecuaciones cinemáticas directas. Para un robot seis gradosde
                                                                                     de
libertad, estas ecuaciones son bastante complejas no pueden escribirse tan fácilmente como el manipulador
                                                   y
de dos elementos.



3.4 Problema cinemático inverso
Ahora, dados los ángulos de las articulaciones 0 y 8 2 , podemos determinar las coordenadas x y y. Con el
                                               1
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
                                x
inverso. En otras palabras, dados 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, hay una solución única en general.Podemos ver, por ejemplo, en el caso
                               no
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).




                                                                                                            21
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 1 2 como
                           9
                                                      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




                                                                                                                  22
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.


     E problema
     l        cinernático puede
                       inverso solucionarse
                                         (en                          la mayoría
                                                                              de         los manipuladores
correspondientes a robots
                        industriales
                                   comercializados
                                                 actualmente) que necesario
                                                            sin sea       recurrir                         a
procedimientos
             iterativos resolución
                      de                    de sistemas de ecuaciones lineales.
                                                                    no        Tales
                                                                                  procedimientos
requieren un número de operaciones tan grande, que harían imposible el control eficaz robot (para pasar
                                                                                    del
de una posicióna otra sería preciso esperarun 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
criteriosoptimización obtener
        de          para    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 producen movimiento
                                 que       el                          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 velocidad. Los dispositivos neumáticos ofrecen mayor velocidad, aunque
                                    la
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.HanadquiridomayoraplicaciónenlaRobótica                 debido alafacilidad   de encontrarenergí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.


     Dentrode los diversostiposdemotoreseléctricos,            los más adecuadosparaelmovimientodelas
articulaciones de los manipuladores son los de corriente    continuay los de paso a paso (PAP).

     Los de corriente continua producen un par casi proporcional al voltajede entrada, por Io que tienen una
regulación precisa. Requieren captadores que informen al sistema control sobre la posición del eje en cada
                                                              de
instante, realizando un trabajo en bucle cerrado.


     Los motores PAP giransuejeun             ángulo fijo,aplicandoa   sus bobinas unconjuntoadecuadode
impulsos eléctricos. No requieren detectores de la posición de su eje, ya que el simple conteode los impulsos
aplicadosdeterminael     ángulo girado.Trabajanenbucleabierto;pero,al             no recorrer su ejetodaslas
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 losmotores PAP sebasaen                      las fuerzas deatracción y repulsión
ejercidas entre polos magnéticos.




               Figura 4.1. Posicionamientode/ 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 obtenerincrementosangulares más pequeños, se incrementael
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.



                                                                                                                    25
Figura 4.2. Motor de pasos elemental.



Existen dos modosde 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
                                     y
función del número de dientes del rotorde la secuencia aplicada.


     La velocidad del motor es proporcional a la frecuencia con que se envían los impulsos de excitación a
                                                              la
los devanados.

Por su construcción, los motores de pasosse dividen en cuatro tipos:


             Deimánpermanente(PM).
             De reluctancia variable de una pila (VR).
             De reluctancia variable de multipilas(VRSM).
             Hibridos
                    (HSM).




                                                                                                              26
Los motores de pasos híbridos son la combinación              de la estructura de los motores de pasos de
reluctancia variabley los de imán permanente. Pueden tener dos secciones (de estator
                                                                                 y rotor) o más, con un
eje de imán permanente entrelas dos secciones. Cada sección incluye un rotor dentado un estator con sus
                                                                                   y
polos dentados y sus devanados, respectivamente.El número de dientes del rotor del estator son diferentes.
                                                                             y
Los dientes del estator están perfectamente alineados en las dos secciones                 y los dientes del rotor están
alineados con un defasamientode 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.




                                                                                                                       27
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 unacorrientemuybaja.                  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 D E
                SENTIDO     DE       GIRO     CONTROL
                                     b




                           Figura 4.5. Esquema generalde la actuación del sistemade control




4.3.1 Sistemas de control en lazo abierto, basados en microprocesador
El esquema porbloquesde           un sistemade control conmicroprocesador, funcionando en lazoabierto se
muestra en lafigura 4.6.




              SISTEMA
                CON                                   CIRCUITO
          MICROPROCESADOR DE              >
                                                     ADAPTACI~N




      I                       I




                                      Figura 4.6. Sistema de control en lazo abierto



                                                                                                                28
Aquí, lasseñalesde     control generadas porel sistemadeben tener encuenta lasrestriccionesque
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ónlas 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 controlarotrasfuncionesauxiliares
         3. Posibilidad de dedicar parte de la memoria a guardar datos y programas de utilidad.


El sistema decontroldotado de microprocesador puede encargarse           dela generación dela 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 dearranque y parada, dejandolaelaboración             de las señales de
control de fase a un controlador posterior.


     Si el sistemaconmicroprocesadorseencargade              todo control,
                                                                 el            puedenusarse      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.


                                               conjuntamente con un controlador auxiliar,los programas
     Cuando el sistema con microprocesador opera
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
pasodel motor,restringiendoelgobiernodel         sistemaa lasfuncionesmás           sencillas(duracióndel   paso,
número y secuencia de pasos).




                                                                                                              29
Sistemas de control con microprocesador

5.1 Estructura y funciones del sistema de control
En laactualidad,lamayoríade         los robotsdisponen, como sistema de control, de un mini, un conjunto
multimicroprocesador o un microcomputador, dependiendo del alcance amplitud de sus funciones. Desde su
                                                                    y
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 alos 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 procesamientode 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
                                                origen externo, si tiene en cuenta el estadodel entorno del
información exclusiva de parámetros propios, y de
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ónde 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.


                                                                                se hace posible, ya sea
     Si no existe un mecanismo servocontrol, la situación de cada elemento del brazo
utilizando topes mecánicoso empleando motores de paso paso, cuya posición se conoce de acuerdo con la
                                                    a
secuencia de impulsos aplicados.


     El
      sistema     de control robots
                           para             de punto a punto servocontrol emplear
                                                           sin          suele                        un Único
microprocesador. Los periféricos principales que soporta laCPU 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 trasladaa la computadora principal.


La sección de entradalsalida, que conecta al microcomputador con el exterior, consta de cuatro partes
                                                                mundo
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 PC y los motores de paso) forma parte de un sistema de controlen
                                      la
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
                                                        y
en cuenta las restricciones que impone el motor, la carga 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 C.
                                                   Turbo


         Luegodeidentificarelbusdedatosenelpuertoparalelo,las                    8 líneasdigitales    (DO-D7) se
configuran de laforma siguiente:


                                             o
         DO-D3: Son cuatro bits de información dato por dondese 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 y6 circuitos amplificadores que
decodifican el dato y activan el motor seleccionado.


         Los 7 bits pasan al decodificador (se conectan D4-D6 a tres pines de selección del C.I. 74138) y
                                                              los
a los latches(seconectan       DO-D3 a los pinesdeentradade          los C.I. 74375). El latchactivadoporel
decodificador
            suministra cuatro
                     las    señales                QA-QD   a los 6 circuitos
                                                                           amplificadores      (ULN 2003) que
proporcionan la corriente necesaria a bobinas de los motores.
                                    las




                                                                                                                  32
I




Figura 6.1. Circuito eleclr6nko para controlar los mdores de paso a traves del puerto paralelo de una PC.




                                                                                                            33
.......... ..... .. .   . ................ ..... ...




                                                        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 paraseleccionar          1 de salidas)
                                                                      8
        1           SN74LS04N (Seis inversores)
        6           SN74LS375NS (Cuatro latches de tres estados)
                I Conector DB25 Macho
                I
        1
    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-QDa los cables de los motores utilizados.



                                                                         I                   I


QD
Qc
QE
QA



                                                                             O       O
                                 + 4.5v                                      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 aplicanalas       cuatro bobinasdel motor PAP acontrolar,
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        eleje del motorgire en sentido contrario a las
agujas del reloj.



                I       I                    Fases del motor de pasos                            I


                1 2 1              O                1                O               O
                    3              O                O                1               O
                    4              O                O                O                1




                            figura 6.4. Tabla de excitacidn de las fases del motor pasos.
                                                          CW                        de




                                                                                                              35
Fases del motor d e p a s o s




                          figura 6.5 Tabla de excitación W de las fases del
                                                      CC                  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 dientesdelrotor. 45 dientes.
             Número de dientesdelestator. 36 dientes.
             Movhiento del diente delrotor 8 grados.
             Mowmiento deldiente delestator 10 grados.
             Razón depasos: 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
Esteprograma,escritoenlenguajeTurbo         C, tiene como finalidadcontrolar los motores de paso del brazo
mecánico,enviandopalabrasde       control a través del puerto paralelo(busdedatos).         Además, mientrasel
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 elprogramadelrobotporelcontroldelpuertoparalelo,quesereflejaen                    los retardos
adicionales (bastante significativos) que se observaron en el envío delos 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 aDOS.


                                    (1) Introducir ángulos
                                    (2) Introducir coordenadas
                                    (3) Realizar tarea específica
                                    (Esc) Salir


         (1) Introducirángulos:Enesta       opción,elusuariodebeespecificarcuántosgradosgirará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 movimiento
                           al                                    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   z
                                                                                                            j
hacia donde el punto del brazo se debe dirigir.




                                                                                                            37
Coordenada en X
Coordenada en Y
Coordenada en Z
Ángulo
     mano
        (correspondiente movimiento
                       al         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 delascoordenadasdependendelánguloconquelamuñecaseacercaráalobjeto(Á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
leingresancoordenadas        de los diferentespuntos     haciadondeelbrazosedebedirigirconlaacció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, UN BRAZO DE
                                                                        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           0x1b                    /* 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áficosy 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:%sn",
                                    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 componenteY 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,doubleangulol)
I
 int 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,intMyO)
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);
//Antebrazo.
 line(Mx6,My6,Mx7,My7);
line(Mx6,My6,Mx8,My8);
line(Mx7,My7,MxS,MyS);


setcolor(color3);
line(Mx8,My8,MxS,MyS);                     //Muñeca.
line(Mx8,My8,Mx3,My3);
line(MxS,MyS,Mx3,My3);


setcolor(color4);
line(Mx3,My3,Mx4,My4);                     //pinza.
setcolor(color5);



                                                                                                            41
line(Mx3,My3,Mx5,My5);
              putpixel(Mfinalx,Mfinaly,colorl); //Punto final que indica la posición
              1               objeto.atrapar la
                                    un puede //donde
                                          pinza

              //Calcula cada coordenada delos puntos donde el brazo tiene una articulación
              void HazMatematicas(void)
              I
                  x1
                   =xO+CalculaX(D,fil //Hombro.
                                   ,fi2);
                  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);   //Puntofinaldelbrazo.
                  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
pinza.   la       oz=cosP*senR;
                    de
                    //orientación
                  ax=cosfil *cosP;
                  ay=senfil*cosP;
                  az=senP;


                  x4=~3t((e*ox)+(rax)); //Puntosparaambosdedosde la pinza
                  y4=y3+((e*oy)+(ray));



                                                                                             42
t90,O); //Define dos vectores anchol y ancho2
                      ancholx=xO+CalculaX(h,fil
                                               t90,O); //para el ancho del segmento del brazo.
                      anchol y=yO+CalculaY(h,fil
                      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 vectoresx6,y6,z6y
                      y6=yl +yO+CalculaY(h+(yl/l2),fil   //x7,y7,z7 para el ancho del segmento
                                                   +90,0);
                      z6=zl; superior.   parte    brazo,       //del
                      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 vectoresx8,y8,z8y
                      y8=y2+y0+CalculaY(h+(y2/12),fi1+90,0); //x9,y9,z9 para ancho del segmento
                                                                           el
ntebrazo, //del       z8=z2;
                      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 hecholas matemáticas necesarias, esta función calculalos 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 representan
                                                   que         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;//Calculavalorespararepresentarcadapuntoenelmonitor.
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 primerocolor
                                       líneas" en 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; //paralanuevaposició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, se encuentra en el cuadrante definido
                                                                               si
//por el ángulode giro fil.
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

//Estafunció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;
if ((CualSeMueve==l)~~(CualSeMueve==4))movemos el Antebrazo u hombro.
                                    //Si
    {
        DondeEsta=ManoAdelante();
     fi3=fi3+incremento;
        P=P+incremento;
        HazMatematicas();
                                                                         {decide=O;}
        if ((finalzc=L)&&(((finalx==O)&&(finaly==O))~~(DondeEsta!=ManoAdelante())))
        fi3=fi3-incremento;
        P=P-incremento;
    1
    if (CualSeMueve==2) //Si movemoslamuñeca.
    I
        DondeEsta=ManoAdelante();
        P=P+incrernento;
        realP=realP+incremento;
        HazMatematicas();
                                                                           {decide=O;}
        if ((finalzc=L)&&(((finalx==O)&&(finaly==O))~~(DondeEsta!=ManoAdelante())))
        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 queremosgirarlapinza.




                                                                                                                            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 que fue calculado en la función "CalculaAngulos"
                                                         o
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(finalz~=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(1O);
         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( 1O);
    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 que fue calculado en la función "CalculaAngulos".
                                                         o
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)~~(finalz~=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(1O);
         1
        P=P+incremento;
        realP=realP+incremento;
        if ((realP~limrealP)~I(realP~-limrealP))
                                           {P=P-incremento;realP=realP-incremento;limiteAng=l;}
        CalculaCoordenadas();
        delay( 1O);



                                                                                                                  48
//Este procedimiento mueveel ángulo " R , es decir, la articulación que corresponde a rotación dela pinza,
                                                                                    la
//dependiendo del valor "desplaza5" que el usuario ingreso que fue calculado enla función "CalculaAngulos"
                                                         o
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( O);
                      1
         1
         R=R+incremento;
        if ((Rzl80)II(R<-180)){R=R-incremento;limiteAng=l;}
        CalculaCoordenadas();
     delay( O);
            1
     I
    1
    limiteAng=O;
desplaza5=desplaza5-(R-Rinicial);




                                                                                                             49
//Este procedimiento mueveel á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 enla 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)~~(finalz~=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{aprobado=O;lirniteAng=l;}
                                                                                           ~=O)~~(finalz~=O))
         delay(1O);
     }
    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 ingresoo que fue calculado enla 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(1O);
  1
 1
1

                                         la
//Este procedimiento cambia la posición de pinza, es decir, pasa de abierta a cerrada viceversa, dependiendo del
                                                                                    o
//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 alos 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 de
                      el la
                      estado
                           pinza.
SoltarSiAprisionara=O;
tope=R+desplaza5;
               //Primero la mueve
                       Gira
                          pinza, la
                                  muñeca                               y
Girapinza(); antebrazo
         //mueve
              el                              si requieren
                                                 se     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) caso
            //En                 denohaberpodidogirarlapinzase
 { tope=R+desplazafj;//ledaotraoportunidad.
  Girapinza();
  if (tope!=R) {NoMovioR=l;} else {NoMovioR=O;}
 1
if (NoMovioP)//En          caso de nohaberpodidomover       la muñecase
 { tope=P+desplaza4;     //ledaotraoportunidad.
     MueveMunecaO;}
if (NoMovioR) caso no
            //En de haberpodidogirar                      la pinzase
 { tope=R+desplaza5;      //le daunaúltimaoportunidad.
     Girapinza();}


desplaza2=desplaza2-compensa; //Mueve el ángulo que corresponde al hombro.
tope=fi2+desplaza2;
MueveHombro();


if (NoMoviofi3)//Encasodenohaberpodidomoverelantebrazose




                                                                             52
{ tope=fi3+desplaza3; //le da otra oportunidad.
        MueveBrazo();}


tope=fil tdesplazal;           //Mueveelánguloquecorrespondealabase.
GiraBaseO;
SueltaAprisiona();
                 //Cambia estado la
                        el     de 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; linea
                       //de 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 pantallalos 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; en
    //Despliega
        coordenada                                             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; en
    //Despliega
        coordenada                            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; en
    //Despliega
        coordenada                            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;                   //Despliegade
                                    valor
                                     ángulo
                                     base.
                                     del
                                       la
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; ángulo
    //Despliega
           valor
            del
             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; ángulo
    //Despliega
           valor
            codo.
            del
             del
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; valor
        //Despliegade
                 ángulo
                 muñeca.
                 del
                   la
    strset(cad-salida,'O');
    if (P<O)
    {strcat(cad-salida,"-");}
    strcat(cad-salida,Convierte(temp));
    outtextxy(450,0,"Ángu10P    :'I);

outtextxy(590,0,cad-salida);
    temp=R;
         //Despliega del de
                   valorángulorotaciónla
                                     de
                                      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 del real
                   valorángulo de
                                la
                                muñeca.
strset(cad-salida,'O');
if (realPc0)
{strcat(cad-salida,"-");}
strcat(cad-salida,Convierte(temp));
outtextxy(450,40,"Ángu10realp:");
outtextxy(590,40,cad-salida);
temp=realfi3;
          //Despliega del real
                   valor
                       ángulocodo.
                            del
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 dela pantalla donde se ha escrito texto para poder volver a escribir en ese mismo lugarnuevos
                                                                                                      los
//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 usuario oprima cualquier tecla para continuar.
                                el
     void Pausa(void)
     {
         outtextxy(250,O,”Presiona una tecla”);
         int c;
         c = getch();                        tecladocarácter I* Lee
                                                   del un                                     *I
    ESC
      if(          == c ){                          I* El usuario
                                                             desea
                                                              salir?               *I
             closegraph();       texto modo        a I* Cambia                           */
1            exit( );                                     a I* Regresa MSDOS                  *I
         1
         if( o == c ){            I* Si elusuarionopresionounatecla      ASCII ? */
             c getch();                      /* Lee rastreo
                                                 código del
                                                     de teclado                     *I
         I
         setfillstyle(S0LID-FILL,O);
         bar(250,0,393,8);
     1

     //Este procedimiento calculalos 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,floaty3extjnt 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 fil se indetermina
         { if(y3exPO){filaux=SO;}//poresoseledanestosvalores
             else if (y3extcO) {filaux=270;}     //pordefault.
         I
     else
      //En puede normalmente.
       caso
         contrariocalcularse
         { 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 se
                                                                 eso
     else if (x3extcO){filaux=180;}//ledanestosvalores.
 1

//Para estos valores de x3ext y y3ext el valor de fil debe recalcularse.
                                            {filaux=filaux+l80;}
if (((x3ext~0)&&(y3ext~0))~~((x3ext~O)&&(y3ext~O)))
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){filaux2=90;}
else
 { div=y3extlx3ext;
     fi1aux2=(atan(div)*l80)/3.1416;}
if (y3ext==0){fil
                aux2=0;}


//Secalculan 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 segmento del brazo con el vector anterior.
                               el
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 el antebrazo.
                                        con
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 ceroes algún otro carácter.
                                                                                              si
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=1O;
                 1
     1
return(result2);
1

//Función que valida la cadena que el usuario introdujo desde el teclado, regresa un uno la cadena es una serie de
                                                                                       si
//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 nuevos valores de las
                                                                                   los
//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,1O);
   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,1O);
  printf("ángu1omano :      ") ;
  gotoxy(45,lO);
  scanf("%s",buf);}
while (!EsNumero(buf));
  angulomano=atoi(buf);
do{
 strset(buf,'O');
  gotoxy(30,1O);
  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 desplazamientos que debe
                                                                                   los
//hacer el brazo para cada uno de ángulos de las articulaciones.
                                los
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,1O);
 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 procedimientoes la primer opción del menú principal donde el usuario debe introducir cambios en las
//articulaciones del brazode robot.
void MedianteAngulos(void)
{
    PideAngulos();       //Elusuario valores.
                                  ingresa
    IniciaGrafico();
    CalculaCoordenadas(); //Dibujaposicióninicialdelbrazo.
    Pausa();
    CambiaAngulos();        //Hace
                                 simulación movimiento brazo.
                                          del        del
    Borrasector();        //Borra sector
                                un donde           se escribió
                                                             texto.
    CoordFinal();
                //Despliega           los valoresángulos
                                                de           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 brazode robot.
void MedianteCoordenadas(void)
{
     PideCoordenadas();//Elusuario ingresa nuevos valores, y el ordenador
     IniciaGrafico();
             //calcula                   los desplazamientos.
     CalculaCoordenadas();//Dibuja posición inicial del brazo.
     Pausa();
     CambiaAngulos(); //Hacesimulacióndelmovimientodelbrazo.
     Borrasector();
                  //Borra sector
                        un donde                   se escribió
                                                             texto.
     CoordFinal();     //Despliegalos valores ángulos
                                            de             y coordenadas.
     Pausa();
     closegraph();
}



//Este procedimiento es la tercer opción del menú principal donde el usuario eligió realizar una secuencia de movimientos
//del brazode robot previamente programada.
void TareaEspecifica(void)
I

                                                                                                                       63
IniciaGrafico();
     CalculaCoordenadas();//Dibujaposicióninicialdelbrazo
     Pausa();


                                      //Calcula los desplazamientos.
     CalculaAngulos(100,50,150,0,90,1)~
     CambiaAngulos();
                    //Hace
                         simulación movimiento brazo.
                                  del        del
     Borrasector();
                  //Borra           un donde escribió
                                     sector se      texto.
     CoordFinal();
                //Despliega             los valoresángulos
                                                  de          y coordenadas.


     CalculaAngulos(-100,-100,0,-90,0,0);//Calcula los desplazamientos.
     CambiaAngulos();
                    //Hace
                         simulación movimiento brazo.
                                  del        del
     Borrasector();
                  //Borra
                        un             sector se
                                            donde escribió
                                                         texto.
     CoordFinal();
                //Despliega             los valoresángulos
                                                  de          y coordenadas,


     CalculaAngulos(100,50,150,0,90,1);//Calcula los desplazamientos.
     CambiaAngulos();
                   //Hace
                        simulación movimiento brazo.
                                 del        del
     Borrasector();
                  //Borra
                        un             sector
                                            donde se escribió
                                                            texto.
     CoordFinal();
                //Despliega             los valoresángulos
                                                  de          y coordenadas,


     CalculaAngulos(-l00,lOO,O,-90,0,0); //Calcula los desplazamientos.
     CambiaAngulos();
                    //Hace
                         simulación movimiento brazo.
                                  del        del
     Borrasector();
                  //Borra sector
                        un     donde                se
                                                     escribió
                                                            texto.
     CoordFinal();
                //Despliega             los valores ángulos
                                                  de          y coordenadas,


     Pausa();
     closegraph();
I

//Procedimiento principal.
int main(void)
{ float divtempl ,divtemp2;


    fil =O;      //ValoresinicialesdeAngulos
    fi2=0;
    fi3=0;
    P=O;
    R=O;
    realfi3=0:


                                                                               64
realP=O;
L=50;//ValoresconstantesdeMagnitudesde              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 segmento
                       del      base.
yo=o;
zO=L;
divtempl=L;         //Calculalímitesdemovimientoparalasarticulaciones
divtemp2=D;
        //dependiendo                     demagnitudes
                                             las             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 el
                      para movimiento antebrazo
                                     del       y
limrealP=l80;        muñeca. //la


do
I
clrscr();
  //Despliega
        principal
        menú
gotoxy(30,5);
printf("1ntroducir Angulos(I)");
gotoxy(30,1O);
printf("1ntroducir Coordenadas(2)");
gotoxy(30,15);
printf("Rea1izar Tarea Especifica(3)");


                                                                        65
gotoxy(30,20);
    printf("Salir (Esc)");


     tecla = getche();       //El usuariodebeelegirunadelastresopciones
     if( '1' == tecla )       / / ola tecla para del
                                          Esc salir 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óndelbrazomecánico,enesteProyecto,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óndelbrazode             robot seelaboróen   basea 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 interfaceentre los motoresde         pasosyla     PC se diseñó tomando encuentalaspalabrasde
control, enviadas a través del      puerto paralelo de la computadora y generadas por el programa residente en
ésta.


         En elcircuito 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 indispensablelas
                      a 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
vezamplificadaen      corrientela     secuencia de pulsos, se produjo movimiento
                                                                     el                 paso a paso delmotor
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 sistemade control delbrazo notiene unalíneade             retroalimentación quepudiese
informaral programa la posición realdelejedel        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, ejemplo:
                                                                                         por      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, enlaspruebasfinales,       tuvo queefectuarse    unajuste   en los que se refiere ala     parte
mecánica: se añadió un contrapeso a la articulación correspondiente a la unión hombro (cuerpo-brazo), conel
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, seobservaban vibraciones en el brazo.


         En general,
                   podemos que
                         decir             el sistema
                                                    completo
                                                           (software,
                                                                    computadora
                                                                              personal,                 circuito
electrónico, motores depasos    y partes mecánicas) se comportó deacuerdoalasexpectativasdeeste
Proyecto.




                                                                                                             68
Bibliografía

1. ANGULO, J. M.; Robótica frhctica. Tecnología y Aplicaciones; Ed. Paraninfo; España; 1992.
2. ANGULO, J. M.; Curso de Robótica; Ed. Paraninfo; España; 1989.
3.   AUDí, D.; Cómo y cuándo aplicar un robof industrial; Ed. Marcombo;España; 1988.
4.   SPONG, M.; Robot dinamics and control; Ed. John Wiley; USA; 1989.
5.   KOIVO, A,; Fundamentals for controlof robotic manipulators; Ed. John Wiley; USA; 1989.
6.   GRAY, C. B.;Máquinas eléctricas y sistemas accionadores; Ed. Alfaomega; México; 1993.
7 . HUMPHRIES, J.; lndusfrial Electronics; Ed. Delmar Publishers; USA; 1993.
8.   URBIETA, R.; Diseiio y construcción de un controlador digital para motor de paso; Polibits.
     Revista de Computación; CINTEC-IPN; México; 1990.
9.   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

Brazo mecanico

  • 1.
    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: r<P Donaciano Jiménéz V z :/ Por Rodolfo Hernández Valdez 91320399 Miguel Angel Mendoza Delgado 92220209 Abril de 2000
  • 2.
    lndice Introducción . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Propósito. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Justificación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Capítulo 1 ¿Qué es robot? un . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1. 1 El término robof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Generaciones de robots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3Clasificación de los robots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4 Partes de un robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Capítulo Características 2 generales de los robots . . . . . . . . . . . . . . . . . . . 11 2.1Grados de libertad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1 . 1 Punto de vista de la teoría de mecanismos y máquinas . . . . . . . . 12 2.1.2PuntodevistadelaRobótica . . . . . . . . . . . . . . . . . . . . . 14 2.2Volumendetrabajo:Capacidaddecarga . . . . . . . . . . . . . . . . . . . 14 2.3 El conceptodegr@per(elementoterminal) . . . . . . . . . . . . . . . . . . . 14 2.3.1 Tipos herramientas de . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.4 Precisión la enrepetibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5 Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.6 Lenguajesprogramación de . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.6.1Lenguajes la de primerageneración . . . . . . . . . . . . . . . . . . 17 2.6.2Lenguajesdelasegundageneración . . . . . . . . . . . . . . . . . . 17 Capítulo3Cinemática y posicionamientoderobots . . . . . . . . . . . . . . . . . . . 18 3.1 Articulaciones robóticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2 LacinemáticaaplicadaalaRobótica . . . . . . . . . . . . . . . . . . . . . . 19 3.3 Problema cinemático directo . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.4 Problema cinernático inverso . . . . . . . . . . . . . . . . . . . . . . . . . . 21
  • 3.
    Capítulo 4 Motoreseléctricos de paso a paso . . . . . . . . . . . . . . . . . . . . . . . 24 4.1Elementosmotricesde los robots . . . . . . . . . . . . . . . . . . . . . . . . 24 4.2Motoreseléctricosdepasoapaso . . . . . . . . . . . . . . . . . . . . . . . 25 4.3Sistemasdecontrolparamotores 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.1Estructura y funcionesdelsistemadecontrol . . . . . . . . . . . . . . . . . 30 5.2Niveles de controlporcomputadora . . . . . . . . . . . . . . . . . . . . . . . 31 Capítulo6Implementacióndelbrazomecánico . . . . . . . . . . . . . . . . . . . . . 32 6.1 Circuito interface entre la PC y los motores de paso . . . . . . . . . . . . . . 32 6.1 . 1Diseñodelcircuito . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.1.2 de Lista material . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 6.2Descripciónde los motores . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 6.3Programadesimulación y controldelbrazomecánico . . . . . . . . . . . . . 36 6.3.1 Instrucciones de uso . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.3.2 Código fuente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
  • 4.
    Introducción La Robótica esun 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 tienenidea de la naturaleza de las aplicaciones útiles de la Robótica como ciencia. La Robótica, como la conocemos en día, tiene sus orígenes hace miles de años. Comenzaremos hoy 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 muchodespués del origen de los autómatas. Desde el principiode los tiempos, el hombreha 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 artefactoso simples máquinas. Antiguamente, se creaban artefactos capaces realizar tareas diarias comunes para los hombres, de y o bien para facilitarles las labores cotidianas; daban cuenta de que había tareas repetitivas quese podían se igualar con un complejo sistema, y es asícomose comienzan a crear máquinas capaces de repetir las Los mismas labores que el hombre realizaba. 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. embargo, estos inventores comenzaron a dar cuenta de que los robots podían Sin se imitar movimientos humanos o de alguna criatura viva. Estos movimientos pudieron ser mecanizados y, de algunas de las laboresmás sencillas de aquellos tiempos.El esta manera, se podían automatizar y mecanizar origen del desarrollo de la Robótica basa en el empeño por automatizar la mayoría de las operaciones en se una fábrica; estose remonta al sigloXVII, en la industria textil,donde se diseñaron telaresque se controlaban con tarjetas perforadas. I
  • 5.
    Objetivo Diseñar yconstruir unbrazo mecánicocontrolado por unprograma de computadora que manipule los motores de paso correspondientes a cadagrado de libertad del brazo. Propósito Conocer las ventajas y desventajas del usodela computadorapersonaly los motores depasosen la implementación de un brazo de robot. Con el nacimiento de la Revolución Industrial,muchas fábricastuvieron 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 cadavezmás eficientes los procesosdeproducción. Asi, lasaplicaciones dela Robóticaen la automatización deesos procesos se han convertido en parte imprescindible fábricas de 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 enciertas 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 "noprotestan". Además, existen aplicaciones donde la Robótica juega papel fundamental, es decir, sin ésta sería un prácticamente imposible llevar a cabo tales aplicaciones, por ejemplo, el manejo de sustancias radioactivas mediante brazos manipuladores. 2
  • 6.
    1 ¿Qué es unrobot? 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 paraconstruir máquinas que sustituyeran al hombre en tareas pesadas, peligrosas o monótonas. Tales máquinasrecibenelnombrederobot. 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 robotutil. 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...". Lafigura 1 . 1 muestra la analogíaexistente entre las partes del brazo humano y el mecánico. TEBRATO -" - _"" BRAZO "" K Figura 1.1. El brazo mecánico es un robofcon características anfropomótficas. 3
  • 7.
    Cabe destacar quela característica antropomórfica más común en nuestros días es la de un brazo mecánico, el cualrealiza 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óndereproducirseresvivientes, sino de la necesidad. Con elobjetivo de diseñaruna 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 el germen del fue robot industrial. Para las normas ISO, un robot industrial es un manipulador automático reprogramabley 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 tareas. de Un robot industrial máquina puede es una que efectuar un número de diverso 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 sistema informático. su Los usos actuales de los robots son: Militares Industriales Personales Educativos Existen en el mercado diversas empresas dedicadasla fabricación de robots industriales, por que existen a 10 diferentes marcas y modelos. Estos últimos normalmente son asignados para identificarlos de acuerdo a su o 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
  • 8.
    1.2 Generaciones derobots La primerageneraciónse caracteriza por mecanismos derelojeríaquepermitenmover cajas musicales o juguetes de cuerday lavarropas ciclo de 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. Lacuartageneración mejoralas extensionessensoriales,paracomprender sus accionesy 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 nuevaarquitectura 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ónde robots endiversos campos, ofrece clasificación una 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 D secuencia variable:se pueden alterar algunas características de los ciclos de trabajo. e Robots de repetición o aprendizaje: Son manipuladoresque se limitan a repetiruna 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
  • 9.
    programación con diversospulsadores o teclas, o bien, de joystics, o bien utiliza un maniquí o, a veces, desplaza directamente la manodel 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 con que robot, las se puede sólo confeccionar un programa de aplicación utilizando la terminal de la computadora no el brazo. y 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ónartificial, el sonido delamáquina y lainteligenciaartificial,sonlascienciasquemásseestá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 similaresa los de la aplicación industrial. Tomando en cuenta ésta otras propuestas, hemos hecho una clasificación más general: hay robots de y los tres clases. Los robots de aprendizaje graban en su memoria electrónica movimientos que han ejecutado por vez primera para que, posteriormente, los reproduzcan fielmente, sin ninguna intervención ulterior del hombre. Los robotsprogramadosestángobernadosporunacomputadora,cuyasinstruccionessiguen constantemente.Por último, los robotsautoadaptablesdisponen de detectores,captadores,cámarasde 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, mostradola figura 1.2, el cual consistedel en brazo,fuente de poderexterna,elementoterminal(gripper),sensoresexteros e internos,servo-control, interface con la computadoray control por computadora.Aún el software programado podría considerado ser comounaparteintegraldetodoelsistema,dadoquelamanera en lacualelrobotesprogramado y controlado puede tener un impacto mayor su desempeño y un subsecuente rango de aplicaciones. en 6
  • 10.
    Fuente de poder externa terminal residente Figura 1.2. Componentesde 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 quese tiene de un robot industriales 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 l que se o considera técnicamente comoun sistema de robot industrial. Un sistema de robot industrial consta las siguientes partes: de Manipulador o brazo mecánico. Controlador. Elementos mofrices o actuadores. Elemento terminal, herramientao aprehensor. Sensores de información en los robots inteligentes. 7
  • 11.
    Así, al robotindustrial se le engloba dentro de la arquitectura de la celda flexible de manufactura, en la que se combinan los diversos dispositivosque 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 o herramienta). Dentrode la estructura interna que propician el movimiento del elemento terminal (aprehensor del manipulador se alojan, en muchas ocasiones, los elementos motrices, engranajes y transmisores que soportan el movimiento de las cuatro partes que, generalmente, suelen conformarel brazo: Base o pedestal de fijación Cuerpo Brazo Antebrazo Los cuatro elementos rígidos del brazo están relacionados entre mediante articulaciones, como se muestra si en la figura 1.3, las cuales puedenser 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
  • 12.
    A semejanza conelbrazo humano, a las uniones o articulaciones del manipuladorse les denomina: O Unión del cuerpo (base-cuerpo) O Unión hombro (cuerpo-brazo) O Unióncodo (brazo-antebrazo) O Uniónmuñeca (antebrazo-aprehensor) El número de elementos del brazo, y de las articulaciones que los relacionan, determinan los grados de libertad del manipuladorque,en los robotsindustriales,suelen ser 6 y coincidencon los movimientos independientes que posicionan las partes del brazo el espacio. en Controlador: Recibeestenombreeldispositivo que se encarga de regularelmovimientode los elementos del manipulador y todo tipo de acciones, cálculos y procesado de información que realiza. se 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:intervieneenelcontroldelaposicióndelelementoterminal.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: tomaencuenta las propiedadesdinámicasdelmanipulador,motores y elementos asociados. O Controladaptativo:considera la variacióndelascaracterísticas del manipuladoralvariarla posición. Elementos motriceso 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ónde velocidad. 0 Eléctricos: son los más utilizados, por su fácil y preciso control, as¡ como por otras propiedades ventajosas que reportasu funcionamiento.
  • 13.
    Elemento Terminal (gripper):es undispositivo que seunealamuñ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 elementoterminalradicaen queha desoportarunaelevada 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 nomodifique o dañe la estructura de la pieza. Una regla general es que la pinzadebe sujetarala piezade trabajode su centro de gravedad. Esto ocasionaque seanulen 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 condoble pinza. Existenotrostiposdepinzas como ventosas,pinzasmagnéticas y pinzasadhesivas. 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
  • 14.
    Características generales delos 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 consu anatomía o configuración. Un mayor número de grados de libertad conlleva al aumento de la flexibilidad en el posicionamiento del 6 de elemento terminal. Aunque la mayoría de las aplicaciones industriales requieren grados de libertad, como las de soldadura, mecanizadoy paletización, otras más complejas exigen número mayor, tal es el caso de un 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. 22 La mano humana cuenta con unos grados de libertad y, al mismo tiempo, la vistay el tacto ligados al cerebro, le permiten una habilidad increíble en sinnúmero de operaciones. Entonces, es necesario limitar un el indispensable. Esto se hace mediante el siguiente análisis: número de grados de libertad al mínimo 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,
  • 15.
    Figura 2.1. Posiciónde 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 nosindicaque se puede construirun mecanismoconseisgrados delibertad, paracolocar unobjeto 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.IPunto 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.
  • 16.
    Sea un sistemaformado 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íaprecisoconocer 6N parámetros para definir las posiciones de todos ellos. Además, uno de los elementos (el soporte) esfijo y, por lo tanto, el número de grados de libertad se reduce a 6(N-1). Por otra parte, los elementos del manipuladorse 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, exceptoel 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 formahabitual de trabajode los robotsmanipuladores se puedeasimilar aunageneraciónde 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, queelcentrode la mano de sujecióndel 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úaen 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
  • 17.
    2.1.2 Punto devista 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 estribaen el número de elementos a tener en cuenta y en la formadeconstruirlamuñecadela mano de sujeción.Enefecto,elrótulo se materializa mediante tres pares de rotación y la mano mediante tres elementos diferentes, con Io que el número deelementos pasa a ser dos más que los N considerados en el apartado anterior. Por parte, en o otra la Robótica se acostumbra a considerar alfijo como un elemento.Llamando E al número de elementos no 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 y Los elementos de un robot con seis grados de libertad son: la base, el brazo, el antebrazo 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 nombrede capacidad de carga. A veces, este dato Io proporcionan los fabricantes, incluyendo el peso de la propia carga.La capacidad de carga es unade las características que más se tienen en cuenta la selección del robot, según la tarea a en que se destine. En soldadura y mecanizado es común precisar capacidadesde carga superiores a los 50 Kg. 2.3 El concepto de gripper (elemento terminal) Existeunagranvariedad de elementosterminalesrequeridosparaefectuarlasdiferentesfuncionesde trabajo. Esta variedad de elementos pueden divididos en dos categorías principales: ser Grippers Tools Los grippers elementos son terminales utilizados sujetar para y sostener objetos. Los objetos son generalmente piezas de trabajo que tienen que ser movidas por el robot. Estas aplicaciones de manejo de I4
  • 18.
    piezas incluyen cargay 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 clasificados ser 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.Ambosdispositivospuedenactuarindependientemente. El doblegripper es utilizadoparalas 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 Enmuchasaplicaciones, el robotrequiere manipular unaherramientaenvezde sólo piezas de trabajo (partes). En lamayoríadelasaplicaciones de robots,en las cuales una herramienta es manipulada,la herramientaescolocadadirectamentealrobot. En estoscasos, la herramientaeselelementoterminal. 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-paintingnozzle(PinturaenSpray),Drilling(taladrado), Routing, Wire brushing(pintura), Grinding, Liquid cement applications for assembly (Aplicaciones de cemento líquido), heating torches, Waterjet cuffing tool (Herramienta de cortea presión). Encadacaso, el robotdebecontrolarlaactuación de laherramienta.Porejemplo,elrobotdebe 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. Ensoldadura, pinturamanipulación y de piezas, la precisión en larepetibilidadestá comprendida entre 1 y 3 mm y en las operaciones demecanizado, la precisión ha de ser menor de 1 mm.
  • 19.
    2.5 Velocidad En muchasocasiones, una velocidad de trabajo elevada aumenta extraordinariamente el rendimiento del robot, por lo que esta magnitud se valora considerablementeen 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 debeser media e incluso baja. 2.6 Lenguajes de programación Laprogramación robots de es lautilizada en las aplicaciones industriales y consta dos de técnicas fundamentales: 0 programacióngestual 0 programacióntextual 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 on exige el empleodel manipulador en la fase de enseñanza, es decir, trabaja line. En la programación textual, las acciones que ha de realizar el brazo se especifican mediante las instruccionesdeun lenguaje; lastrayectoriasdelmanipulador se calculanmatemáticamentecongran precisión y se evita el posicionamientoa ojo, muy corriente en la programación gestual. El primer lenguaje textual de un robotfue 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. Eltrabajoeneldesarrollodelenguajespararobotstambiénfuerealizado 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
  • 20.
    Otros lenguajes textualespara 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 Utilizanunacombinacióndecomandos y procedimientosparadesarrollarprogramasderobots.Fueron desarrolladoslargamenteparaimplementarelcontroldelmovimientopormedio de la programacióncon lenguaje textual. Una característica típica de estos lenguajes incluyela 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 esunejemplodeunlenguajedeprogramación de unrobotdeprimerageneració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, incapacidad de hacer uso de sensores la 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 listados ser como sigue: 0 Control del movimiento. 0 Capacidades avanzadas de sensor: tiene capacidad la de manejar algo más señales que binarias onloff y la capacidad de controlar dispositivos medio de sensores de datos. por 0 lnteligencia limitada: es la capacidad de utilizar información recibida del ambiente de trabajo para modificar el comportamiento del sistema una manera programable. de 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 manufactura. de 17
  • 21.
    Cinemática y posicionamientode robots 3.1 Articulaciones robóticas Un robotindustrial es un manipulador que puede realizar diversas tareasdentro 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 permiterelativarotaciónentre dos elementos. Una articulaciónprismá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
  • 22.
    Cada articulación representala interconexión entre dos elementos contiguos I y I ;+l. Denotamos el eje de rotación de una articulación giratoria el eje a Io largo del cual una articulación prismática se desliza, Z o por i si la articulación es la interconexión de elementos i e i +l.Las variables de articulación, denotadas por6 , los para una articulación giratoria como d; para una articulación prismática, representan desplazamiento relativo y 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 la geometría del movimiento de brazo de de un robot con respecto a un sistema de coordenadas de referencia sin considerar las fuerzas momentos que fijo, o 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 finaldel brazo del robot. Hay dos problemas fundamentales en la cinemática del robot. El primer problema se suele conocer como el problema cinemáticodirecto, mientras que el segundo problema es el problema cinemático inverso. Como las variables independientes enun robot son las variables de articulación,y una tarea se suele dar en términos del sistema de coordenadasdereferencia, se utilizademaneramásfrecuenteelproblema cinernático inverso. Denavit Hartenberg [I9551 propusieron un enfoque sistemáticoy generalizado de utilizar y á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 matriz transformación una de 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 posición original A hasta una posición B, entre cuyos su 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
  • 23.
    El primer problemaencontrado es describir la posición de la herramienta y los sitios A y B (y, muy probablemente, la superficie enteraS) con respecto a un sistema de coordenadas común. A veces, elmanipuladorpuede ser capaz de captar su posición de algunamanera,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, porlo tanto, expresar las posicionesA 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 terminalo 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 todos cual los objetos, incluyendomanipulador, el toman como referencia. En este caso, establecemos el marcode labase coordenadoo, x, y,, en la base del robot, como se muestra en la figura3.2. Figura 3.2. Marcos coordenados para un robot lineal de dos elementos. Las coordenadas (x, y) de la herramienta son expresadasen este marco coordenado como x = al cos %I + a cos (8,+ g2) 2 y = al sen el + a2 sen (0, + e2) 20
  • 24.
    Además, la orientacióndel marco de la herramienta, relativa al marco de la base, está dada por los cosenos de dirección de los ejes xz y y , relativos a los ejes xo y yo, esto es, 2 los cuales podemos combinar en una matriz orientación, de 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 sonllamadas las ecuaciones cinemáticas directas. Para un robot seis gradosde de libertad, estas ecuaciones son bastante complejas no pueden escribirse tan fácilmente como el manipulador y de dos elementos. 3.4 Problema cinemático inverso Ahora, dados los ángulos de las articulaciones 0 y 8 2 , podemos determinar las coordenadas x y y. Con el 1 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 x inverso. En otras palabras, dados 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, hay una solución única en general.Podemos ver, por ejemplo, en el caso no 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). 21
  • 25.
    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 1 2 como 9 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 22
  • 26.
    y, por lotanto, & 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. E problema l cinernático puede inverso solucionarse (en la mayoría de los manipuladores correspondientes a robots industriales comercializados actualmente) que necesario sin sea recurrir a procedimientos iterativos resolución de de sistemas de ecuaciones lineales. no Tales procedimientos requieren un número de operaciones tan grande, que harían imposible el control eficaz robot (para pasar del de una posicióna otra sería preciso esperarun 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 criteriosoptimización obtener de para la posición de los elementos, resulta imprescindible utilizar procedimientos iterativos.
  • 27.
    Motores eléctricos depaso a paso 4.1 Elementos motrices de los robots Existen tres tipos de dispositivos producen movimiento que el 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 velocidad. Los dispositivos neumáticos ofrecen mayor velocidad, aunque la 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.HanadquiridomayoraplicaciónenlaRobótica debido alafacilidad de encontrarenergí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. Dentrode los diversostiposdemotoreseléctricos, los más adecuadosparaelmovimientodelas articulaciones de los manipuladores son los de corriente continuay los de paso a paso (PAP). Los de corriente continua producen un par casi proporcional al voltajede entrada, por Io que tienen una regulación precisa. Requieren captadores que informen al sistema control sobre la posición del eje en cada de instante, realizando un trabajo en bucle cerrado. Los motores PAP giransuejeun ángulo fijo,aplicandoa sus bobinas unconjuntoadecuadode impulsos eléctricos. No requieren detectores de la posición de su eje, ya que el simple conteode los impulsos aplicadosdeterminael ángulo girado.Trabajanenbucleabierto;pero,al no recorrer su ejetodaslas posiciones posibles, limitan el área de trabajo. 24
  • 28.
    4.2 Motores eléctricosde 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 losmotores PAP sebasaen las fuerzas deatracción y repulsión ejercidas entre polos magnéticos. Figura 4.1. Posicionamientode/ 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 obtenerincrementosangulares más pequeños, se incrementael 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. 25
  • 29.
    Figura 4.2. Motorde pasos elemental. Existen dos modosde 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 y función del número de dientes del rotorde la secuencia aplicada. La velocidad del motor es proporcional a la frecuencia con que se envían los impulsos de excitación a la los devanados. Por su construcción, los motores de pasosse dividen en cuatro tipos: Deimánpermanente(PM). De reluctancia variable de una pila (VR). De reluctancia variable de multipilas(VRSM). Hibridos (HSM). 26
  • 30.
    Los motores depasos híbridos son la combinación de la estructura de los motores de pasos de reluctancia variabley los de imán permanente. Pueden tener dos secciones (de estator y rotor) o más, con un eje de imán permanente entrelas dos secciones. Cada sección incluye un rotor dentado un estator con sus y polos dentados y sus devanados, respectivamente.El número de dientes del rotor del estator son diferentes. y Los dientes del estator están perfectamente alineados en las dos secciones y los dientes del rotor están alineados con un defasamientode 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. 27
  • 31.
    En la figura4.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 unacorrientemuybaja. 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 D E SENTIDO DE GIRO CONTROL b Figura 4.5. Esquema generalde la actuación del sistemade control 4.3.1 Sistemas de control en lazo abierto, basados en microprocesador El esquema porbloquesde un sistemade control conmicroprocesador, funcionando en lazoabierto se muestra en lafigura 4.6. SISTEMA CON CIRCUITO MICROPROCESADOR DE > ADAPTACI~N I I Figura 4.6. Sistema de control en lazo abierto 28
  • 32.
    Aquí, lasseñalesde control generadas porel sistemadeben tener encuenta lasrestriccionesque 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ónlas 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 controlarotrasfuncionesauxiliares 3. Posibilidad de dedicar parte de la memoria a guardar datos y programas de utilidad. El sistema decontroldotado de microprocesador puede encargarse dela generación dela 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 dearranque y parada, dejandolaelaboración de las señales de control de fase a un controlador posterior. Si el sistemaconmicroprocesadorseencargade todo control, el puedenusarse 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. conjuntamente con un controlador auxiliar,los programas Cuando el sistema con microprocesador opera 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 pasodel motor,restringiendoelgobiernodel sistemaa lasfuncionesmás sencillas(duracióndel paso, número y secuencia de pasos). 29
  • 33.
    Sistemas de controlcon microprocesador 5.1 Estructura y funciones del sistema de control En laactualidad,lamayoríade los robotsdisponen, como sistema de control, de un mini, un conjunto multimicroprocesador o un microcomputador, dependiendo del alcance amplitud de sus funciones. Desde su y 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 alos 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 procesamientode 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 origen externo, si tiene en cuenta el estadodel entorno del información exclusiva de parámetros propios, y de trabajo. 30
  • 34.
    Las ecuaciones dinámicasse 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ónde 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. se hace posible, ya sea Si no existe un mecanismo servocontrol, la situación de cada elemento del brazo utilizando topes mecánicoso empleando motores de paso paso, cuya posición se conoce de acuerdo con la a secuencia de impulsos aplicados. El sistema de control robots para de punto a punto servocontrol emplear sin suele un Único microprocesador. Los periféricos principales que soporta laCPU 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 trasladaa la computadora principal. La sección de entradalsalida, que conecta al microcomputador con el exterior, consta de cuatro partes mundo importantes: gobierno de motores, teclado del mando manual de aprendizaje, comunicación serie y líneas disponibles para el usuario. 31
  • 35.
    n Implementación del brazomecánico 6.1 Circuito interface entre la PC y los motores de paso El diseño del hardware (interface entre PC y los motores de paso) forma parte de un sistema de controlen la 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 y en cuenta las restricciones que impone el motor, la carga 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 C. Turbo Luegodeidentificarelbusdedatosenelpuertoparalelo,las 8 líneasdigitales (DO-D7) se configuran de laforma siguiente: o DO-D3: Son cuatro bits de información dato por dondese 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 y6 circuitos amplificadores que decodifican el dato y activan el motor seleccionado. Los 7 bits pasan al decodificador (se conectan D4-D6 a tres pines de selección del C.I. 74138) y los a los latches(seconectan DO-D3 a los pinesdeentradade los C.I. 74375). El latchactivadoporel decodificador suministra cuatro las señales QA-QD a los 6 circuitos amplificadores (ULN 2003) que proporcionan la corriente necesaria a bobinas de los motores. las 32
  • 36.
    I Figura 6.1. Circuitoeleclr6nko para controlar los mdores de paso a traves del puerto paralelo de una PC. 33
  • 37.
    .......... ..... ... . ................ ..... ... 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 paraseleccionar 1 de salidas) 8 1 SN74LS04N (Seis inversores) 6 SN74LS375NS (Cuatro latches de tres estados) I Conector DB25 Macho I 1 14 Base para circuito integrado 2 Placa de circuito impreso tipo protoboard Varios Cable plano y alambre para interconexiones 34
  • 38.
    6.2 Descripción delos motores En la figura 6.3 se muestra la conexión de las líneas QA-QDa los cables de los motores utilizados. I I QD Qc QE QA O O + 4.5v 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 aplicanalas cuatro bobinasdel motor PAP acontrolar, 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 eleje del motorgire en sentido contrario a las agujas del reloj. I I Fases del motor de pasos I 1 2 1 O 1 O O 3 O O 1 O 4 O O O 1 figura 6.4. Tabla de excitacidn de las fases del motor pasos. CW de 35
  • 39.
    Fases del motord e p a s o s figura 6.5 Tabla de excitación W de las fases del CC 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 dientesdelrotor. 45 dientes. Número de dientesdelestator. 36 dientes. Movhiento del diente delrotor 8 grados. Mowmiento deldiente delestator 10 grados. Razón depasos: 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 Esteprograma,escritoenlenguajeTurbo C, tiene como finalidadcontrolar los motores de paso del brazo mecánico,enviandopalabrasde control a través del puerto paralelo(busdedatos). Además, mientrasel brazo ejecuta sus movimientos, se presenta en el monitor de la computadora una simulación gráfica de tales movimientos. 36
  • 40.
    6.3.1 Instrucciones deuso 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 elprogramadelrobotporelcontroldelpuertoparalelo,quesereflejaen los retardos adicionales (bastante significativos) que se observaron en el envío delos 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 aDOS. (1) Introducir ángulos (2) Introducir coordenadas (3) Realizar tarea específica (Esc) Salir (1) Introducirángulos:Enesta opción,elusuariodebeespecificarcuántosgradosgirará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 movimiento al 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 z j hacia donde el punto del brazo se debe dirigir. 37
  • 41.
    Coordenada en X Coordenadaen Y Coordenada en Z Ángulo mano (correspondiente movimiento al 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 delascoordenadasdependendelánguloconquelamuñecaseacercaráalobjeto(Á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 leingresancoordenadas de los diferentespuntos haciadondeelbrazosedebedirigirconlaacció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, UN BRAZO DE 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 0x1b /* 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
  • 42.
    int Eyl,Ey2,Ey3,Ey4,Ey5,Ey6,Ey7,Ey8,Ey9,Eancholx,EanchoIy,Eancho2x,Eancho2y; double fil,fi2,fi3,P,R,limiteinc,limiteinc2,limiteinc3; intL,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áficosy 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:%sn", 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
  • 43.
    x=(magnitud*cos((angulol*3.1416)/180)*cos((angu102*3.1416)/180)); return(x); 1 //Calcula la componenteYde 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,doubleangulol) I int 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,intMyO) 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
  • 44.
    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 lineaque 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); //Antebrazo. line(Mx6,My6,Mx7,My7); line(Mx6,My6,Mx8,My8); line(Mx7,My7,MxS,MyS); setcolor(color3); line(Mx8,My8,MxS,MyS); //Muñeca. line(Mx8,My8,Mx3,My3); line(MxS,MyS,Mx3,My3); setcolor(color4); line(Mx3,My3,Mx4,My4); //pinza. setcolor(color5); 41
  • 45.
    line(Mx3,My3,Mx5,My5); putpixel(Mfinalx,Mfinaly,colorl); //Punto final que indica la posición 1 objeto.atrapar la un puede //donde pinza //Calcula cada coordenada delos puntos donde el brazo tiene una articulación void HazMatematicas(void) I x1 =xO+CalculaX(D,fil //Hombro. ,fi2); 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); //Puntofinaldelbrazo. 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 pinza. la oz=cosP*senR; de //orientación ax=cosfil *cosP; ay=senfil*cosP; az=senP; x4=~3t((e*ox)+(rax)); //Puntosparaambosdedosde la pinza y4=y3+((e*oy)+(ray)); 42
  • 46.
    t90,O); //Define dosvectores anchol y ancho2 ancholx=xO+CalculaX(h,fil t90,O); //para el ancho del segmento del brazo. anchol y=yO+CalculaY(h,fil 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 vectoresx6,y6,z6y y6=yl +yO+CalculaY(h+(yl/l2),fil //x7,y7,z7 para el ancho del segmento +90,0); z6=zl; superior. parte brazo, //del 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 vectoresx8,y8,z8y y8=y2+y0+CalculaY(h+(y2/12),fi1+90,0); //x9,y9,z9 para ancho del segmento el ntebrazo, //del z8=z2; 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 hecholas matemáticas necesarias, esta función calculalos 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 representan que 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
  • 47.
    Ey9=y9/7; Efinaly=finaly/7; Eancholy=ancholy/7; Eancho2y=ancho2y/7; MxO=320;//Calculavalorespararepresentarcadapuntoenelmonitor. 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 primerocolor líneas" en 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; //paralanuevaposició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
  • 48.
    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, se encuentra en el cuadrante definido si //por el ángulode giro fil. 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
  • 49.
    if (fil==270) {if (finalyc0) {resultado=l;} else {resultado=O;}} return(resultad0); 1 //Estafunció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; if ((CualSeMueve==l)~~(CualSeMueve==4))movemos el Antebrazo u hombro. //Si { DondeEsta=ManoAdelante(); fi3=fi3+incremento; P=P+incremento; HazMatematicas(); {decide=O;} if ((finalzc=L)&&(((finalx==O)&&(finaly==O))~~(DondeEsta!=ManoAdelante()))) fi3=fi3-incremento; P=P-incremento; 1 if (CualSeMueve==2) //Si movemoslamuñeca. I DondeEsta=ManoAdelante(); P=P+incrernento; realP=realP+incremento; HazMatematicas(); {decide=O;} if ((finalzc=L)&&(((finalx==O)&&(finaly==O))~~(DondeEsta!=ManoAdelante()))) 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 queremosgirarlapinza. 46
  • 50.
    { 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 que fue calculado en la función "CalculaAngulos" o 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(finalz~=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(1O); 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
  • 51.
    CalculaCoordenadas(); delay( 1O); 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 que fue calculado en la función "CalculaAngulos". o 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)~~(finalz~=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(1O); 1 P=P+incremento; realP=realP+incremento; if ((realP~limrealP)~I(realP~-limrealP)) {P=P-incremento;realP=realP-incremento;limiteAng=l;} CalculaCoordenadas(); delay( 1O); 48
  • 52.
    //Este procedimiento mueveelángulo " R , es decir, la articulación que corresponde a rotación dela pinza, la //dependiendo del valor "desplaza5" que el usuario ingreso que fue calculado enla función "CalculaAngulos" o 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( O); 1 1 R=R+incremento; if ((Rzl80)II(R<-180)){R=R-incremento;limiteAng=l;} CalculaCoordenadas(); delay( O); 1 I 1 limiteAng=O; desplaza5=desplaza5-(R-Rinicial); 49
  • 53.
    //Este procedimiento mueveelá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 enla 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)~~(finalz~=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{aprobado=O;lirniteAng=l;} ~=O)~~(finalz~=O)) delay(1O); } 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 ingresoo que fue calculado enla 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
  • 54.
    fil=fil+incremento; if ((fi1>270)11(fil<-90)) {fil=fil-incremento;limiteAng=l;} CalculaCoordenadas(); delay(1O); 1 1 1 la //Este procedimiento cambia la posición de pinza, es decir, pasa de abierta a cerrada viceversa, dependiendo del o //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 alos 6 anteriores para cambiar la posición total del brazo de robot según se requiera void CambiaAngulos(void) { 51
  • 55.
    int NoMovioR=O; int NoMovioP=O; intNoMoviofi3=0; compensa=O; aprobado=O; limiteAng=O; SoltarSiAprisionara=l; SueltaAprisiona(); //Cambia de el la estado pinza. SoltarSiAprisionara=O; tope=R+desplaza5; //Primero la mueve Gira pinza, la muñeca y Girapinza(); antebrazo //mueve el si requieren se 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) caso //En denohaberpodidogirarlapinzase { tope=R+desplazafj;//ledaotraoportunidad. Girapinza(); if (tope!=R) {NoMovioR=l;} else {NoMovioR=O;} 1 if (NoMovioP)//En caso de nohaberpodidomover la muñecase { tope=P+desplaza4; //ledaotraoportunidad. MueveMunecaO;} if (NoMovioR) caso no //En de haberpodidogirar la pinzase { tope=R+desplaza5; //le daunaúltimaoportunidad. Girapinza();} desplaza2=desplaza2-compensa; //Mueve el ángulo que corresponde al hombro. tope=fi2+desplaza2; MueveHombro(); if (NoMoviofi3)//Encasodenohaberpodidomoverelantebrazose 52
  • 56.
    { tope=fi3+desplaza3; //leda otra oportunidad. MueveBrazo();} tope=fil tdesplazal; //Mueveelánguloquecorrespondealabase. GiraBaseO; SueltaAprisiona(); //Cambia estado la el de 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; linea //de 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 pantallalos 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; en //Despliega coordenada X. strset(cad-salida,'O); if (finalx<O) 53
  • 57.
    {strcat(cad_salida,"-");} strcat(cad-salida,Convierte(temp)); outtextxy(O,O,"Coordenada en ejeX:"); outtextxy(l60,0,cad~salida); temp=finaly; en //Despliega coordenada 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; en //Despliega coordenada 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; //Despliegade valor ángulo base. del la 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; ángulo //Despliega valor del 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; ángulo //Despliega valor codo. del del strset(cad-salida,'O'); if (fi3<0) {strcat(cad-salida,"-");} strcat(cad-salida,Convierte(temp)); 54
  • 58.
    outtextxy(0,100,"Ángulo fi3:"); outtextxy(140,100,cad~salida); temp=P; valor //Despliegade ángulo muñeca. del la strset(cad-salida,'O'); if (P<O) {strcat(cad-salida,"-");} strcat(cad-salida,Convierte(temp)); outtextxy(450,0,"Ángu10P :'I); outtextxy(590,0,cad-salida); temp=R; //Despliega del de valorángulorotaciónla de 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 del real valorángulo de la muñeca. strset(cad-salida,'O'); if (realPc0) {strcat(cad-salida,"-");} strcat(cad-salida,Convierte(temp)); outtextxy(450,40,"Ángu10realp:"); outtextxy(590,40,cad-salida); temp=realfi3; //Despliega del real valor ángulocodo. del 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 dela pantalla donde se ha escrito texto para poder volver a escribir en ese mismo lugarnuevos los //valores. void BorraSector(void) I 55
  • 59.
    setf1llstyle(SOLID-FILL,5); bar(0,0,190,110); bar(445,0,680,70); 1 //Genera una pausa hasta que usuario oprima cualquier tecla para continuar. el void Pausa(void) { outtextxy(250,O,”Presiona una tecla”); int c; c = getch(); tecladocarácter I* Lee del un *I ESC if( == c ){ I* El usuario desea salir? *I closegraph(); texto modo a I* Cambia */ 1 exit( ); a I* Regresa MSDOS *I 1 if( o == c ){ I* Si elusuarionopresionounatecla ASCII ? */ c getch(); /* Lee rastreo código del de teclado *I I setfillstyle(S0LID-FILL,O); bar(250,0,393,8); 1 //Este procedimiento calculalos 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,floaty3extjnt 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 fil se indetermina { if(y3exPO){filaux=SO;}//poresoseledanestosvalores else if (y3extcO) {filaux=270;} //pordefault. I else //En puede normalmente. caso contrariocalcularse { div=y3extlx3ext; 56
  • 60.
    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 se eso else if (x3extcO){filaux=180;}//ledanestosvalores. 1 //Para estos valores de x3ext y y3ext el valor de fil debe recalcularse. {filaux=filaux+l80;} if (((x3ext~0)&&(y3ext~0))~~((x3ext~O)&&(y3ext~O))) 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){filaux2=90;} else { div=y3extlx3ext; fi1aux2=(atan(div)*l80)/3.1416;} if (y3ext==0){fil aux2=0;} //Secalculan 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
  • 61.
    //Se calcula elángulo que forma segmento del brazo con el vector anterior. el 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 el antebrazo. con 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 ceroes algún otro carácter. si 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
  • 62.
    ap2=1O; 1 1 return(result2); 1 //Función que valida la cadena que el usuario introdujo desde el teclado, regresa un uno la cadena es una serie de si //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 nuevos valores de las los //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
  • 63.
    x3ext=atoi(buf); do{ strset(buf,'O'); gotoxy(30,10); printf("coordenada y : gotoxy(45,1O); 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,1O); printf("ángu1omano : ") ; gotoxy(45,lO); scanf("%s",buf);} while (!EsNumero(buf)); angulomano=atoi(buf); do{ strset(buf,'O'); gotoxy(30,1O); printf("ángu1o pinza: gotoxy(45,10); scanf("%s",buf);} while (!EsNumero(buf)); angulopinza=atoi(buf); do{ gotoxy(30,10); 60
  • 64.
    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 desplazamientos que debe los //hacer el brazo para cada uno de ángulos de las articulaciones. los 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
  • 65.
    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,1O); 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
  • 66.
    }while ((tecla!='l')&&(tecla!='O')); I //Este procedimientoesla primer opción del menú principal donde el usuario debe introducir cambios en las //articulaciones del brazode robot. void MedianteAngulos(void) { PideAngulos(); //Elusuario valores. ingresa IniciaGrafico(); CalculaCoordenadas(); //Dibujaposicióninicialdelbrazo. Pausa(); CambiaAngulos(); //Hace simulación movimiento brazo. del del Borrasector(); //Borra sector un donde se escribió texto. CoordFinal(); //Despliega los valoresángulos de 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 brazode robot. void MedianteCoordenadas(void) { PideCoordenadas();//Elusuario ingresa nuevos valores, y el ordenador IniciaGrafico(); //calcula los desplazamientos. CalculaCoordenadas();//Dibuja posición inicial del brazo. Pausa(); CambiaAngulos(); //Hacesimulacióndelmovimientodelbrazo. Borrasector(); //Borra sector un donde se escribió texto. CoordFinal(); //Despliegalos valores ángulos de y coordenadas. Pausa(); closegraph(); } //Este procedimiento es la tercer opción del menú principal donde el usuario eligió realizar una secuencia de movimientos //del brazode robot previamente programada. void TareaEspecifica(void) I 63
  • 67.
    IniciaGrafico(); CalculaCoordenadas();//Dibujaposicióninicialdelbrazo Pausa(); //Calcula los desplazamientos. CalculaAngulos(100,50,150,0,90,1)~ CambiaAngulos(); //Hace simulación movimiento brazo. del del Borrasector(); //Borra un donde escribió sector se texto. CoordFinal(); //Despliega los valoresángulos de y coordenadas. CalculaAngulos(-100,-100,0,-90,0,0);//Calcula los desplazamientos. CambiaAngulos(); //Hace simulación movimiento brazo. del del Borrasector(); //Borra un sector se donde escribió texto. CoordFinal(); //Despliega los valoresángulos de y coordenadas, CalculaAngulos(100,50,150,0,90,1);//Calcula los desplazamientos. CambiaAngulos(); //Hace simulación movimiento brazo. del del Borrasector(); //Borra un sector donde se escribió texto. CoordFinal(); //Despliega los valoresángulos de y coordenadas, CalculaAngulos(-l00,lOO,O,-90,0,0); //Calcula los desplazamientos. CambiaAngulos(); //Hace simulación movimiento brazo. del del Borrasector(); //Borra sector un donde se escribió texto. CoordFinal(); //Despliega los valores ángulos de y coordenadas, Pausa(); closegraph(); I //Procedimiento principal. int main(void) { float divtempl ,divtemp2; fil =O; //ValoresinicialesdeAngulos fi2=0; fi3=0; P=O; R=O; realfi3=0: 64
  • 68.
    realP=O; L=50;//ValoresconstantesdeMagnitudesde 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 segmento del base. yo=o; zO=L; divtempl=L; //Calculalímitesdemovimientoparalasarticulaciones divtemp2=D; //dependiendo demagnitudes las 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 el para movimiento antebrazo del y limrealP=l80; muñeca. //la do I clrscr(); //Despliega principal menú gotoxy(30,5); printf("1ntroducir Angulos(I)"); gotoxy(30,1O); printf("1ntroducir Coordenadas(2)"); gotoxy(30,15); printf("Rea1izar Tarea Especifica(3)"); 65
  • 69.
    gotoxy(30,20); printf("Salir (Esc)"); tecla = getche(); //El usuariodebeelegirunadelastresopciones if( '1' == tecla ) / / ola tecla para del Esc salir programa. { MedianteAngulos(); if( '2' == tecla ) I MedianteCoordenadasO; 1 if( '3' == tecla ) I TareaEspecifica(); 1 }while (tecla!=ESC); return O; } 66
  • 70.
    Conclusiones El diseño yla construccióndelbrazomecánico,enesteProyecto,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óndelbrazode robot seelaboróen basea 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 interfaceentre los motoresde pasosyla PC se diseñó tomando encuentalaspalabrasde control, enviadas a través del puerto paralelo de la computadora y generadas por el programa residente en ésta. En elcircuito 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 indispensablelas a 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 vezamplificadaen corrientela secuencia de pulsos, se produjo movimiento el paso a paso delmotor 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 sistemade control delbrazo notiene unalíneade retroalimentación quepudiese informaral programa la posición realdelejedel 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, ejemplo: por dando al manipulador la capacidad de captar su posición, empleando sensores localizados en sus articulaciones, que 67
  • 71.
    pudieran medir losángulos entre éstas, y proporcionar esta información al programa de la computadora para que haga las rectificaciones necesarias. Además, enlaspruebasfinales, tuvo queefectuarse unajuste en los que se refiere ala parte mecánica: se añadió un contrapeso a la articulación correspondiente a la unión hombro (cuerpo-brazo), conel 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, seobservaban vibraciones en el brazo. En general, podemos que decir el sistema completo (software, computadora personal, circuito electrónico, motores depasos y partes mecánicas) se comportó deacuerdoalasexpectativasdeeste Proyecto. 68
  • 72.
    Bibliografía 1. ANGULO, J.M.; Robótica frhctica. Tecnología y Aplicaciones; Ed. Paraninfo; España; 1992. 2. ANGULO, J. M.; Curso de Robótica; Ed. Paraninfo; España; 1989. 3. AUDí, D.; Cómo y cuándo aplicar un robof industrial; Ed. Marcombo;España; 1988. 4. SPONG, M.; Robot dinamics and control; Ed. John Wiley; USA; 1989. 5. KOIVO, A,; Fundamentals for controlof robotic manipulators; Ed. John Wiley; USA; 1989. 6. GRAY, C. B.;Máquinas eléctricas y sistemas accionadores; Ed. Alfaomega; México; 1993. 7 . HUMPHRIES, J.; lndusfrial Electronics; Ed. Delmar Publishers; USA; 1993. 8. URBIETA, R.; Diseiio y construcción de un controlador digital para motor de paso; Polibits. Revista de Computación; CINTEC-IPN; México; 1990. 9. 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