Manipulación de un Brazo Robótico por medio de una Tarjeta FPGA



Documentos relacionados
Sistemas Interactivos de Entretenimiento con Base en el FPGA Spartan3E-500 Incorporado en la Tarjeta Nexys2

Paint con FPGA: Sistema para la Evaluación de las Interfaces VGA y PS/2 de la Tarjeta de Desarrollo Nexys2

ADMINISTRACIÓN DE BASES DE DATOS DISTRIBUIDAS

COPPEL MANUAL TÉCNICO MCC DE SISTEMAS PROGRAMACIÓN DESCRIPCIÓN DEL PROCESO DE ARQUITECTURA DE SOFTWARE

TEMA 7: DIAGRAMAS EN UML

INSTITUTO DE ELECTRÓNICA Y COMPUTACIÓN

Capítulo En la sección anterior se explicó el diseño, construcción y programación del

MANUAL TÉCNICO DE IMPLEMENTACIÓN PROYECTO SOCIAL COMPUESCUELA. Elaborado por: Julián A. Hernández M.

Este programa mueve cada motor de forma independiente, y cuando termina una línea pasa a la siguiente.

Capítulo 1. Introducción

Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech

Uso de las tecnologias de la informacion en las PyMES de los municipios de Comalcalco y Cunduacán

CAPÍTULO I. Sistemas de Control Distribuido (SCD).

Por el rápido crecimiento de Internet la tecnología se ha tenido que adaptar para cubrir las

Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL

CAPITULO 3: SISTEMAS ADICIONALES PARA EL CENTRO DE LLAMADAS DE EMERGENCIA

SISTEMA DE APARTADO DE SALAS PARA EVENTOS

Manual de usuario. Tramitación de inspecciones periódicas de ascensores: La visión de los organismos de control autorizado (OCAs)

Gestión de Permisos. Documento de Construcción. Copyright 2014 Bizagi

HARDWARE DE SISTEMA AUTOMÁTICO DE RASTREO DE VEHÍCULOS MEDIANTE TECNOLOGÍAS GPRS Y GPS

5. Despliegue en la PC

Capítulo 2 Análisis del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

ECOPETROL S.A. Proceso para el control de cambios [[7 de Marzo de 2014]] Versión 1.0

EDICIÓN Y FORMATO (II)

INGENIERÍA AUTOMOTRIZ DISEÑO Y CONSTRUCCIÓN DE UN BANCO PARA COMPROBACIÓN Y DIAGNÓSTICO DE ECUS UTILIZADAS EN LA LÍNEA CHEVROLET EN ECUADOR

DCU Diagramas de casos de uso

Tema 16 ELECTRÓNICA DIGITAL LENGUAJES DE DESCRIPCIÓN DE LOS SISTEMAS DIGITALES (PARTE 1)

ESPAÑOL BLACK-VS. Guía de uso e instalación

1.2 Qué es un Sistemas de Información Geográfica?

podemos enfocar al funcionamiento del robot, es decir la parte de electrónica. Para que el

Laboratorio virtual para la programación de FPGAs

PROGRAMACION LADDER PLC BASICA. Descripción del lenguaje ladder

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

Colección de Tesis Digitales Universidad de las Américas Puebla. Morales Salcedo, Raúl

CAPÍTULO 4. DISEÑO CONCEPTUAL Y DE CONFIGURACIÓN. Figura 4.1.Caja Negra. Generar. Sistema de control. Acumular. Figura 4.2. Diagrama de funciones

Proyecto Prototipo Domótica

BASES DE DATOS TEMA 3 MODELO ENTIDAD - RELACIÓN

Informática I Notas del curso

Programación básica del PLC S

Instalación y configuración inicial del sistema SIU-Kolla Versión 3.0.0

GRADO EN INGENIERÍA ELECTRÓNICA Y AUTOMÁTICA INDUSTRIAL

Palabras Clave: Vídeo en FPGA, Procesamiento en Tiempo Real RESUMEN

RESERVACIONES ONLINE MANUAL DE REFERENCIA

Capítulo 5: Pruebas y evaluación del sistema. A continuación se muestran una serie de pruebas propuestas para evaluar varias

PROCEDIMIENTO OPERATIVO DESARROLLAR SISTEMAS INFORMÁTICOS PDO-COCTI-DTIN-04

I NTRODUCCIÓN 1. ORDENADOR E INFORMÁTICA

Breve Curso de VHDL. M. C. Felipe Santiago Espinosa. Profesor Investigador UTM

Tema 4. Gestión de entrada/salida

GUÍA PARA LA ELABORACIÓN DEL PROYECTO AÚLICO

HP Backup and Recovery Manager

JHAN EVER ANDRADE CASTRO

MANUAL DE AYUDA MÓDULO GOTELGEST.NET PREVENTA/AUTOVENTA

Laboratorio 4: Uso de una FPGA

CAPITULO II CARACTERISTICAS DE LOS INSTRUMENTOS DE MEDICION

MANUAL PARA LA UTILIZACIÓ N ADECUADA DE 2016 DISPÓSITIVÓS MÓ VILES. Sistema de Alerta Temprana para la Roya del Café

6. Controlador del Motor

OPT. Núcleo Básico. Núcleo de Formación. Optativa. Nombre de la universidad. Universidad Politécnica de Pachuca. Nombre del programa educativo

Desarrollo de Aplicaciones Web Por César Bustamante Gutiérrez. Módulo I: Conceptos Básicos Tema 1: Concepto iniciales.

Región de Murcia Consejería de Educación, Ciencia e Investigación. Manual Usuario FCT

Tema: Central telefónica (central office)

Xerox 700 Digital Color Press con Integrated Fiery Color Server. Impresión de datos variables

Para obtener una cuenta de padre

Gestión de Oportunidades

Residencial Las Arboledas, Complejo Los Amates, Block P #95, Colon, La Libertad. Tel.: (+503) Correo: Info@grupoprodigi.

11 Número de publicación: Int. Cl.: 72 Inventor/es: Kunigita, Hisayuki. 74 Agente: Elzaburu Márquez, Alberto

GESTIÓN ACADÉMICA GUÍA DIDÁCTICA HACIA LA EXCELENCIA COMPROMISO DE TODOS! Nombres y Apellidos del Estudiante:

Para poder acceder al sistema sólo deberá ingresar la siguiente liga desde el navegador de su preferencia:

PRÁCTICA C INTRODUCCIÓN AL PAQUETE COMPUTACIONAL ELECTRONICS WORKBENCH 4.0

Manual para Empresas Prácticas Curriculares

Guía de Gestión de Software Educativo

SOLECMEXICO Página 1 DISEÑO DE CIRCUITOS A PARTIR DE EXPRESIONES BOOLEANAS

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Manual de Procedimientos

Creado dentro de la línea de sistemas operativos producida por Microsoft Corporation.

GUÍAS. Módulo de Diseño de software SABER PRO

Figura 1.4. Elementos que integran a la Tecnología de Información.

Contabilidad de Costos

Ficha TIC: Gaby y su búsqueda por internet. Primaria: cuarto grado

Control Teaching de un Brazo Robot de Cinco Grados de Libertad

C A P Í T U L O C U A T R O : P R O P U E S T A E P C

PUERTOS DE COMUNICACIÓN EXTERNOS TIPO VELOCIDAD DESCRIPCION GRAFICO

PROPUESTAS COMERCIALES

MANUAL DE USUARIO SICVECA DESKTOP. Código: R-02-I-IF-312 Versión: de 19 SICVECA DESKTOP. Manual de Usuario Versión 1.0.

Universidad Autónoma de Baja California Facultad de Ingeniería Mexicali

NOTIFICACIÓN DE MOVIMIENTOS DE ESTUPEFACIENTES POR PARTE DE LOS LABORATORIOS FARMACÉUTICOS Y ALMACENES MAYORISTAS DE DISTRIBUCIÓN

Tema 8: Gestión de la Configuración

Banco de la República Bogotá D. C., Colombia

FORMACIÓN DE EQUIPOS DE E-LEARNING 2.0 MÓDULO DE DISEÑO Y PRODUCCIÓN DE MATERIALES UNIDAD 6 B

CONTROL DE ASISTENCIA DE PERSONAL

Capítulo 4. Prueba de Adaptabilidad

UNIVERSIDAD DEL NORTE CENTRO DE INFORMÁTICA REGLAMENTO DE SERVICIOS Y RECURSOS ...

Qué es una máquina virtual?

PROCEDIMIENTO DE ENLACE TCPIP

Servicio de groupware

Reproducción de una Imagen en un Monitor VGA Utilizando un FPGA

IAP ENTORNOS INFORMATIZADOS CON SISTEMAS DE BASES DE DATOS

Acceso a la aplicación de solicitud de subvenciones (Planes de Formación 2014)

TARJETA DE DESARROLLO CPLD

Sistemas de Calidad Empresarial

MARCO TEÓRICO Introducción

Transcripción:

Manipulación de un Brazo Robótico por medio de una Tarjeta FPGA Felipe Santiago Espinosa, Yukio Rosales Luengas, Alejandro Rivera García, Adrián Humberto Martínez Vásquez Instituto de Electrónica y Mecatrónica, Universidad Tecnológica de la Mixteca, Carretera a Acatlima Km. 2.5, Huajuapan de León, Oaxaca, 69000, México Tel. 953-53-202-14, fsantiag@mixteco.utm.mx, rolygem_0706@hotmail.com, riga552@gmail.com, avmah_1035@hotmail.com Resumen En el presente documento se describe el trabajo realizado durante la implementación de una interfaz usuario-máquina, para la manipulación de un brazo robótico de cuatro grados de libertad, incorporando la opción de grabar y reproducir una secuencia de movimientos. Se utilizó una tarjeta Nexys2, la cual es manufacturada por la empresa Digilent e incluye un FPGA Spartan-3E con 500 mil compuertas. La tarjeta sirve de controlador, estableciendo la comunicación entre un teclado de computadora, que es el dispositivo de entrada, y el brazo robótico, que es el dispositivo de salida. Para la creación del programa de configuración del FPGA, se hizo uso del lenguaje de descripción de hardware VHDL; con este lenguaje está hecho el driver para el teclado y con el mismo se crearon los módulos necesarios para la correcta manipulación del brazo, incluyendo la grabación y recuperación de secuencias. Palabras Clave: Brazo Robótico, FPGA, lenguaje VHDL, teclado. I. Introducción VHDL es un lenguaje de descripción de circuitos electrónicos digitales que utiliza distintos niveles de abstracción. En las siglas VHDL, la V se debe a VHSIC (Very High Speed Integrated Circuits) y HDL corresponde con Hardware Description Language. El lenguaje VHDL fue desarrollado para la descripción, modelado y simulación de sistemas digitales [1], aunque actualmente también es empleado para la síntesis e implementación asistida por computadora. El lenguaje es un estándar de la IEEE, con la norma ANSI/IEEE 1076-1993 [2]. Otros lenguajes para la descripción de hardware son Verilog y ABEL. Además de los HDLs, los métodos alternos para diseñar circuitos digitales son la captura de esquemas (con herramientas CAD) y los diagramas de bloques, pero éstos no son prácticos en sistemas complejos. El lenguaje VHDL fue empleado para la programación del FPGA Spartan-3E de Xilinx, el cual es un dispositivo con 500 mil compuertas [3] incluido en la tarjeta Nexys2, manufacturada y distribuida por la empresa Digilent [4], en la figura 1 se muestra la vista superior de esta tarjeta. Fig. 1. Vista superior de la tarjeta Nexys2. Los recursos incluidos en la tarjeta Nexys2 la hacen ideal durante el proceso de aprendizaje de FPGAs, ya que permiten crear sistemas completos en un solo dispositivo. La tarjeta contiene periféricos para su evaluación (8 LEDs, 4 displays de 7 segmentos, 4 botones y 8 interruptores deslizantes), puertos: PS/2, VGA y 2 al 28 de Octubre 2011, Tapachula, Chiapas, México. ISBN: 968-607-477-588-4 3

RS232 para aplicaciones y conectores para manejar hardware externo. En este trabajo, se desarrolló un sistema para manipular un brazo robótico comercial, comandándolo por medio de un teclado de computadora estándar, dado que la tarjeta Nexys2 incluye un puerto PS/2 [5]. El sistema resultante se compone de varios módulos, ya que se le incorporó la capacidad de guardar movimientos, con su correspondiente duración, para posteriormente reproducirlos en forma automática. Se utilizó el brazo desarrollado y distribuido por la empresa Steren, con número de parte K-682 [6], cuya imagen se muestra en la figura 2. Fig. 2. Brazo robótico a manipular. El brazo incluye 5 motores, 4 de movimiento y 1 para la abertura y cierre de unas pinzas. Sin embargo, únicamente se manipularon 4 motores, 3 de movimiento y el de las pinzas, esto porque con 3 motores es suficiente para alcanzar cualquier posición en un espacio finito [7]. El control alámbrico incluido con el brazo se basa en interruptores, por lo que se desarrolló una etapa de acondicionamiento para que pudiera ser manipulado desde la tarjeta Nexys2. II. Desarrollo El sistema que se diseñó tiene la capacidad de controlar libremente cada uno de los 4 motores que le proporcionan movimiento al brazo; para esto se utilizan ocho teclas diferentes desde un teclado PS/2, dos para cada motor; también se emplea una tecla más, para iniciar el grabado de una secuencia y para su finalización e inicio de la reproducción. III. Módulos del Sistema El sistema se desarrolló bajo un enfoque modular [8], proponiendo un diagrama a bloques con los módulos necesarios, para luego codificar a cada uno con VHDL. En la figura 3 se muestra la propuesta modular del sistema; la función de cada módulo se describe a continuación. 1. El Divisor genera un reloj con una frecuencia inferior a la de la tarjeta; esto es porque la frecuencia de la tarjeta es de 50 MHz, la cual resulta inadecuada para un sistema de esta naturaleza, dado que el teclado opera en frecuencias entre 20 y 30 KHz. 2. El módulo Teclado es el responsable de hacer la comunicación entre la tarjeta y el teclado de la computadora. Lee la trama enviada por éste y entrega un código de rastreo por cada tecla presionada. Es importante mencionar que el módulo mantiene el código de rastreo de la última tecla presionada, aunque ya no lo esté. Por ello, también genera una señalización de cuando hay un nuevo código de rastreo (CR_Listo). 3. El módulo deco_comp acepta el código de rastreo que le entrega el módulo del teclado e identifica si es una de las teclas asignadas para el movimiento del brazo, de ser así, lo que hace es transformar este código en uno que se encargará de mover el brazo. También detecta si se ha presionado la tecla que indica el inicio de la grabación de movimientos, para ello se destinó a la tecla G. 4. El módulo salida_a_motor acepta el código que le entrega el módulo deco_comp y genera las salidas que mueven a los motores del brazo. También acepta los códigos provenientes de la memoria, donde se almacenará la secuencia a ejecutar, la decisión de cual código ejecutar se toma con base en las entradas de control: act1 y act2. Siendo act2 de mayor jerarquía, pues indica 2 al 28 de Octubre 2011, Tapachula, Chiapas, México. ISBN: 968-607-477-588-4 3

V que se tiene que ejecutar la secuencia grabada, es decir, mientras act2 esté en alto, no importa que se presione otra tecla de activación de motores, puesto que será ignorada. Fig. 3. Diagrama a bloques del sistema para la manipulación de un brazo. 5. El módulo almacena se encarga de asegurar que el código que se guarda en la memoria es un código de movimiento, y no un código en blanco; es necesario este módulo por los tiempos perdidos en la máquina de estados. 6. El módulo control, como su nombre lo indica, es el responsable de comandar a los demás módulos del sistema. 7. El módulo cont1 cuenta el tiempo que se mantiene presionada una tecla de activación de motores. 2 al 28 de Octubre 2011, Tapachula, Chiapas, México. 8. El módulo fin_mov es empleado durante la reproducción de movimientos. Del módulo memoria obtiene una duración registrada y con base en un contador determina si ya se alcanzó el tiempo recibido, indicándolo con la activación de su salida. 9. En el módulo memoria se guardarán claves que identifican a los motores y los sentidos de movimiento, siempre que se haya activado la opción de grabar movimientos. También se guardará en la misma dirección, pero en un espacio diferente, el tiempo que duró la ISBN: 968-607-477-588-4 3 2

activación de esta tecla. Estos datos los obtiene de los módulos almacena y cont1. 10. El módulo deco es el manejador de los displays de 7 segmentos incluidos en la tarjeta. Básicamente se emplea para mostrar la dirección de acceso en la memoria, para que el usuario conozca el movimiento que se está grabando o reproduciendo. 11. El módulo direc es el contador responsable de la dirección de la memoria a la que se va a acceder. IV. Control del Sistema El control es el módulo principal del sistema, ya que es quien coordina la operación de los demás módulos. El control se basa en una máquina de estados y su operación principal la realiza mientras graba o recupera una secuencia de movimientos. En las figura 4 se muestra el comportamiento del control, en donde puede notarse un estado jerárquico, el cuál es expandido en la figura 5. Fig. 4. Máquina de Estados del Control. Fig. 5. Estados que conforman al Estado Jerárquico de la figura 4. 2 al 28 de Octubre 2011, Tapachula, Chiapas, México. ISBN: 968-607-477-588-4 3 3

La grabación de la secuencia inicia y termina con la tecla G, mientras el usuario no presione esa tecla, el control se mantendrá en el estado 1, en el cual se han acondicionado sus salidas para que las acciones en las teclas de los movimientos se vean reflejadas directamente en el brazo robótico (la activación de la tecla G se indica con la señal sig). En el estado 2 el sistema espera a que ya no esté presionada la tecla G. En los 4 estados que conforman al estado jerárquico, el control generará las señales para ir grabando la secuencia de movimientos. La grabación también concluye con la tecla G. En los últimos 3 estados, después del estado jerárquico, el sistema iniciará con la reproducción de movimientos, la cual se realiza en el orden inverso en que se fueron generando. V. Acondicionamiento para el Manejo del Robot Las salidas del módulo salida_a_motor están directamente conectadas a los pines de uno de los conectores de la tarjeta Nexys2, por lo tanto, es necesario desarrollar una etapa de acoplamiento. En la figura 6 se puede ver como el control alámbrico incluido básicamente cierra unos interruptores, con lo que suministrará voltaje a los motores. Los interruptores serán remplazados por puentes H, para que los motores sean manejados desde la tarjeta Nexys2. Fig. 6. Control alámbrico del Brazo Robótico. La etapa de acondicionamiento se implementó con base en Puentes H integrados, modelo L293, en la figura 7 puede verse su diseño [9], en donde se observa que se incluyeron puentes de diodos como protección [10]. Fig. 7. Etapa de acoplamiento para el manejo de los motores. VI. Resultados El sistema cumplió los requerimientos planteados y además, resultó muy robusto. Las grabaciones y reproducciones de secuencias funcionaron adecuadamente. En la figura 8 se exhibe al brazo conectado con la tarjeta Nexys2, por medio de la etapa de acoplamiento. Además de mostrar al teclado de computadora conectado en el puerto PS/2 de la misma tarjeta. Fig. 8. Sistema implementado. En la figura 9 se pueden ver detalles en las conexiones, mostrando a la tarjeta Nexys2 completa, para ilustrar como en los displays de 7 segmentos aparece la dirección de acceso. Se conectó un teclado marca Dell, aunque no hay restricciones, se podría conectar un teclado de cualquier marca. 2 al 28 de Octubre 2011, Tapachula, Chiapas, México. ISBN: 968-607-477-588-4 3

Recurso Usado Disponible Uso Slices 205 4, 656 4 % Bloques I/O 31 232 13 % Bloques RAM 0 20 0 % GCLKs 2 24 8 % Tabla 1. Resumen de los recursos. Fig. 9. Conexiones en la tarjeta Nexys2. En la figura 10 está el primer nivel del modelo de hardware, generado por la herramienta ISE de Xilinx al momento de realizar la implementación. Corresponde con la interfaz del sistema, las señales dato_ps y tec_clk no son salidas, realmente son señales bidireccionales. Fig. 10. Modelo de hardware resultante. En la tabla 1 se muestra un resumen con los recursos empleados, se observa una amplia disposición de recursos, para complementar la funcionalidad del sistema. VII. Conclusiones En este proyecto se usó un módulo ya elaborado con anterioridad, el controlador de un teclado de computadora [11]. En el diseño de sistemas basados en VHDL es común y conveniente reutilizar módulos, como en este caso. Para el correcto funcionamiento de todos los módulos fue preciso tomar en consideración la operación del módulo del teclado, ya que como se explicó con anterioridad, mantiene el código de rastreo aunque la tecla ya no esté presionada. Para ello, se realizó un cambio en la máquina de estados que afectó al módulo de memoria: cuando se reconoce un código de movimiento y éste se va a grabar, primero se incrementa la dirección de memoria y posteriormente se guarda el dato en esa localidad. De la misma manera, al momento de leer la memoria, primero se realiza la lectura y posteriormente se disminuye la dirección. Se hace la comparación con la dirección de inicio de la memoria, y de haber una coincidencia, se da por terminada la secuencia grabada, de lo contrario se repetirá el ciclo. Esto garantiza un correcto funcionamiento de la máquina de estados, que además está sincronizada con el módulo que lee el teclado. Para trabajos futuros se podría proponer el guardar varias secuencias de movimientos en la memoria y tener un menú para decidir cuál de las secuencias se ha de ejecutar. Por ejemplo, una secuencia puede mover un objeto de un lugar a otro, mientras que una secuencia diferente puede hacer que el brazo regrese a la posición inicial, para tomar nuevamente otro objeto. También sería interesante acondicionar un sistema de sensores para conocer la posición del brazo en tiempo real, y así poder acondicionar algún controlador automático tradicional, aunque a este respecto, primero sería necesario introducir en la tarjeta ciertos módulos de operaciones matemáticas para poder llevar a cabo esta tarea. 2 al 28 de Octubre 2011, Tapachula, Chiapas, México. ISBN: 968-607-477-588-4 3

VIII. Referencias [1] S. Brown, Z. Vranesic, Fundamentos de Lógica Digital con Diseño VHDL. 2ª Ed., 2006, Editorial McGraw-Hill. [2] F. Pardo, J. A. Boluda, VHDL, Lenguaje para síntesis y modelado de circuitos, Ed. Alfaomega, 2000 [3] Spartan-3E FPGA Family: Data Sheet, http://www.xilinx.com/support/documentati on/data_sheets/ds312.pdf, última visita: Junio de 2011. [4] Digilent Inc. - Digital Design Engineer s Source, http://www.digilentinc.com/, última visita: Junio de 2011. [5] Digilent Nexys2 Board Reference Manual, Doc: 502-107, Copyright Digilent, Inc., June 21, 2008. [6] Brazo Mecánico con Control Remoto Alámbrico, modelo K-682, Manual de Instrucciones V0608, http://www2.steren.com.mx/doctosmx//k- 682-instr.pdf, última visita: Junio de 2011. [7] R. Kelly, V. Santibáñez and A. Loría, Control of Robot Manipulators in Joint Space, Ed. Springer-Verlag, 2005. [8] R. Romero Troncoso, Sistemas Digitales con VHDL ; Legaria Ediciones. [9] P. Miles, T. Carroll, Build Your Own Combat Robot, Ed. McGraw- Hill/Osborne, 2002. [10] A. P. Malvino, Principios de Electronica. 6ª Ed., 1999, Editorial McGraw-Hill. [11] J. C. Tepozán Ríos, Diseño de controladores para la tarjeta de desarrollo XSA-100. Tesis de Ingeniería, Universidad Tecnológica de la Mixteca, Mayo de 2004. IX. Autores M. C. Felipe Santiago Espinosa es Maestro en Ciencias con especialidad en Electrónica por parte del INAOE, Licenciado en Electrónica por parte de la BUAP, desde 1998 labora como Profesor Investigador en la Universidad Tecnológica de la Mixteca, adscrito al instituto de Electrónica y Mecatrónica. Yukio Rosales Luengas es estudiante de Ingeniería Mecatrónica en la Universidad Tecnológica de la Mixteca. Alejandro Rivera García es estudiante de Ingeniería Mecatrónica en la Universidad Tecnológica de la Mixteca. Adrián Humberto Martínez Vásquez es estudiante de Ingeniería Mecatrónica en la Universidad Tecnológica de la Mixteca. 2 al 28 de Octubre 2011, Tapachula, Chiapas, México. ISBN: 968-607-477-588-4 3