Conceptos generales para el diseño de Robots
Esta es una pequeña guiá que le servia a las personas que estén empezando en el diseño de robots no es un tutorial de diseño, solamente una introducción a los puntos claves del proceso de diseño que a lo largo de mis estudios de maestría y doctorado he empleado, no está basado en estrictamente en algún otro patrón de diseño aunque si tomo inspiración y varias partes de otros procesos más estructurados, es importante remarcar que no está escrito en piedra y uno debe ser flexible con sus procesos para llegar al mejor resultado.
Voy a utilizar como ejemplo el robot Ein, este robot lo construí poco antes de la pandemia del 2020 a petición de mi asesor de tesis para que los alumnos del curso de visión por computadora pudieran probar una serie de implementaciones de los métodos en problemas del mundo real (hablando de en la implementación en un hardware y los retos que esto trae), este es uno de los robots en los que me ha gustado más trabajar debido a que aun con su aparente simplicidad de diseño da pie a muchas posibles implementaciones más allá de su propósito original, entre las que resaltan la enseñanza de ROS, la prueba de algoritmos de navegación y como una plataforma de pruebas para generar bancos de datos con sensores.
0. Prototipo para pruebas o producción en serie.
Antes de empezar con el proceso de diseño hay que considerar si es un prototipo de pruebas o un robot para producción, generalmente en la mayoría de las universidades no se profundiza en este punto lo que puede llevar a grandes problemas cuando se emprende un proyecto.
Hay que tomar en cuenta que un prototipo para pruebas sirve para desarrollar tecnologías o probar nuevos algoritmos, por lo cual no se plantea su producción en serie, esto significa que no hace falta seguir modelos estandarizados para su manufactura, también brinda una mayor flexibilidad en el proceso de construcción y su costo por unidad suele ser relativamente alto.
Generalmente los prototipos de prueba los podemos encontrar en laboratorios o centros de investigación, normalmente los robots que desarrolla un estudiante durante su tesis de posgrado caen en esta categoría.
Por otro lado tenemos los modelos para producción en serie, en este caso cuando un modelo va a ser producido en serie es importante que la tecnología que se va a implementar este probada y documentada ya que un error en el modelo original sera repetido en los cientos o miles de unidades que se construyan a partir de él. Los modelos para producción en serie deben considerar en su diseño la tecnología de manufactura que se utilizara, el costo de producción por unidad, aspectos legales como los derechos de autor y patentes que se emplearan, la asequibilidad (affordance), el publico al que este dirigido, etc...
Dentro de los modelos para producción en serie se suelen crear también prototipos, los cuales asemejan al producto final, estos con el fin de validar el diseño y el método de manufactura elegido.
Generalmente cuando se diseña un nuevo robot se suele partir de un prototipo de pruebas para validar la propuesta, una vez verificados los aspectos generales y la factibilidad se suele pasar a la producción en serie con la creación del modelo que sera maquinado, hay que tomar en cuenta que en el mundo real raramente el proceso es tan lineal, generalmente se prueban varias propuestas y se desarrollan varios prototipos en distintas etapas, por eso es importante no perder la visión del proyecto a la vez que se permite una flexibilidad en el proceso de desarrollo, el lograr balancear estos dos aspectos es fundamental para poder concluir un proyecto en un tiempo optimo y con los resultados esperados por lo cual recomiendo periódicamente tomarse un tiempo para reflexionar sobre el curso del desarrollo y tratar de ver el panorama general.
1. Propósito y recursos.
El primer paso para poder construir un robot es definir cual es su propósito, existen dos enfoques para esta etapa, el primero es definir directamente que funciones queremos que realice el robot por ejemplo “un robot diferencial que siga trayectorias” o “un brazo robótico de 5 grados de libertad”, el segundo enfoque surge de un problema o necesidad como “un robot repartidor” o “un sistema que pueda ordenar los productos en un estante”, el segundo enfoque suele ser mucho más complejo ya que hay que desglosar y analizar el problema pero también suelen ser los más divertidos para trabajar.
Las herramientas del diseño industrial se vuelven muy útiles en esta etapa, hay que determinar cuales van a ser las cualidades que queremos en nuestro robot, posteriormente procederemos a revisar de estas cualidades podrían llegar a ser opuestas y rehacer el listado hasta obtener un conjunto que creamos conveniente.
Se realizan una serie de bocetos para poder visualizar cuales son las posibles propuestas que tengan las cualidades que estamos buscando en nuestro diseño, también conviene iterar sobre las que nos parezcan más prometedoras, en esta etapa conviene comenzar a considerar la asequibilidad y el “Woow” factor (así se le dice a las características del diseño que sirven para sorprender a los usuarios, por lo general estás características pueden parecer algo banales pero en mi experiencia suelen ser fundamentales para el éxito de un proyecto), siempre es buena idea guardar los bocetos y ponerles la fecha y nombre.
En esta etapa hay que revisar cuales son los recursos con los que contamos para la fabricación, incluyendo las maquinas, herramientas, presupuesto y tiempo, así como los procesos que se utilizaran.
Se construyen los prototipos de los diseños más prometedores, cuando se realiza un robot para el área académica solemos construir solamente un diseño, en el caso de la industria se suelen construir varios prototipos, uno por cada uno de los bocetos, con un prototipo es mucho más sencillo ver las posibles fallas, si se trata de un robot que se va a comercializar se utiliza el mejor de los prototipos como base para el modelo de producción, generalmente del prototipo de pruebas al modelo de producción sé realizar cambios significativos, se afinan los detalles del producto, esto para que el resultado final pueda ser manufacturado en serie y que sea de uso practico para el usuario.
2. Partes fundamentales de un robot.
Las secciones previas suelen ser batane generales para el diseño y se pueden aplicar en casi cualquier cosa, pero a partir de esta sección me enfocare más en las particularidades que conlleva un robot.
Antes de seguir adelante hay que definir que es un robot, realmente no existe una definición universalmente aceptada de lo que es un robot, a mí me gusta utilizar la que da IEEE “A robot is an autonomous machine capable of sensing its environment, carrying out computations to make decisions, and performing actions in the real world.“, partiendo de esta definición podemos empezar a delimitar las partes que requiere un robot.
La primera son los actuadores, estos son los que proporcionan al robot la capacidad de moverse y realizar las diferentes tareas que tenga asignadas, en este caso podemos hablar desde actuadores neumáticos, motores de corriente directa, servomecanismos por dar unos ejemplos.
Los sensores tienen la función de darle al robot una manera de poder percibir el mundo, estos pueden ser desde botones, sensores ultrasonicos, sensores láser, de temperatura o IMU, entre muchos otros, dependerá de la aplicación y el ambiente en el que este pensado su uso.
La estructura es otra de las partes fundamentales del robot, la cual debe proveer el soporte y le da su morfología al robot, también esta definida por el ambiente y función que despeñara el robot, hay ocasiones en la que su importancia es especialmente relevante, como en el caso de la robótica social.
La fuente de poder y etapa de potencia están conformadas por las baterías, la tarjeta de distribución y el amplificador de corriente. Las baterías suelen variar según las necesidades desde unas de reloj a las de plomo, la mayoría de las veces se utilizan baterías de litio polímero debido a su alta densidad energética, la tarjeta de distribución es la que se encarga de regular el voltaje de la batería para poder alimentar los distintos componentes del robot, esta suele ser un BEC y finalmente el amplificador de corriente es el encargado de amplificar la señal de control que controla los motores, comúnmente se utilizan puentes h para esta etapa pero se pueden utilizar drivers de alta corriente incluso arreglos con opto-acopladores.
Finalmente tenemos el cerebro de nuestro robot, generalmente es un microcontrolador aunque también suelen utilizarse plataformas de desarrollo como Arduino o Raspberry pi, incluso en algunos casos puede utilizar un arreglo de transistores u opams como es el caso del robot Tortoise creado por W. Grey Walter.
Robot Tortoise.
Depende de la complejidad del desarrollo un robot se puede reducir a un motor, un sensor de distancia y un arreglo de opams o llegar a tener varios sistemas de cómputo embebido con más de 20 actuadores y diferentes tarjetas de distribución.
3. Simulación y modelado.
Una parte muy importante del desarrollo de robots es la simulación y modelado, esta etapa consta de realizar un modelo matemático que represente la movilidad y características del robot con el fin de poder validar sus movimientos o trayectorias, probar si será capaz de cumplir sus funciones y servir como una plataforma para desarrollar el software, hay que tomar en cuenta que generalmente el desarrollo de un robot es algo costoso por lo que vale la pena realizar la simulación, esta etapa nos las podemos salta cuando se traten de robots muy sencillos para problemas conocidos, aunque siempre es bueno tener el modelo.
Cuando hablamos del desarrollo del modelo del robot podemos hablar desde el más sencillo que es la cinemática directa hasta el análisis de espacio de estados o en casos más exóticos teoría de tornillos.
Para poder llevar a cabo estas simulaciones se suele utilizar Matlab, Python con el paquete pybullet, o en casos más complejos se suele usar gasebo, existen otras alternativas como las que brinda juliarobotics.
4. Software.
Como se podrá notar se pueden realizar robots que no dependan del software, como es el tortoise o varios ejemplos en el campo del softrobotics , pero la gran mayoría de los robots dependen del software, los robots más sencillos suelen programarse en Ensamblador, en C o Python sin ningún paradigma especifico aunque muchos se enfocan a utilizar la programación funcional, para robots con más componentes o tareas más complejas se suele utilizar el modelo de descomposición funcional, lo cual facilita mucho el proceso aunque puede parecer algo engorroso al principio, este enfoque busca dividir a las tareas en subrutinas, a la vez estas en procesos, de manera que una tarea muy compleja sea vista como una serie de procesos más sencillos.
Para el uso de la descomposición funcional se suele utilizar ROS (Robotic Operating System) el cual es un framework que soporta C y Python con cierto soporte no oficial para Java y Julia, este framework se ha vuelto un estándar dentro de la academia y se cree pronto sera una norma en la industria.
Dentro del diseño del software hay que tomar en cuenta si se va a montar en un RTOS (Real Time Operating System), en una computer on a board o en un microcontrolador, también se debe de tener en cuenta el tipo de sensores y aplicación que se plantea realizar, muchas veces se suele utilizar un microcontrolador para controlar los procesos que requieren una respuesta más rápida mientras que una computer on a board para el procesamiento de los datos más complejos y la toma de decisiones.
5. Implementación y caso de estudio.
Ejemplificando el proceso de diseño y construcción hablare un poco sobre Ein, Ein es un pequeño robot que surgió de una conversación con mi asesor, en esa época estaba diseñando unos robots (calico) para un proyecto del IPN, hablando sobre ese proyecto y su clase de visión por computadora me pidió que desarrollara un robot para poder realizar practicas de visión por computada, el cual se hiciera utilizando en lo posible los materiales disponibles en el laboratorio.
Como se trataba de un robot para uso del laboratorio descarte por completo la producción en serie, aunque decidí hacerlo sencillo y fácil de reproducir, por si en el futuro hicieran falta hacerle reparaciones o duplicarlo por completo, para el método de manufactura decidí utilizar la impresora 3d del laboratorio por practicidad, tomando en cuenta que haría falta procesar video escogí una Raspberry Pi 4 como computadora, esto también fija los parámetros que debe cumplir la etapa de potencia especialmente para un robot de tamaño pequeño como es el caso, los motores son un par de Dynamixel Ax-12 los cuales son de excelente calidad y se encontraban en el laboratorio, finalmente un Arduino nano esto debido a mi experiencia previa con Raspberry con comunicación serial la cual es requerida para controlar los motores, esto debido a que el modulo que genera la comunicación serial en Raspberry pi para el GPIO suele tener problemas para comunicarse con los motores.
En ese momento me di cuenta que el hardware y los requerimientos para el proyecto son compatibles con un robot sencillo capaz de realizar navegación, lo cual abre la puerta para una plataforma de desarrollo bastante interesante muy parecido a un turtlebot por lo que decidí tomar este rumbo.
Con el propósito y los recursos bien definidos empece a realizar el diseño, elegí un robot diferencial ya que es fácil de modelar y construir, ademas para el caso brinda mucha flexibilidad, realice varios bocetos de como podría ir la forma general, al final elegí hacer 2 placas hexagonales conectadas por tornillos con un castor ball en cada extremo.
Con una forma general definida empece a seleccionar los componentes específicos que me hacían falta y considerar su distribución dentro del chasis, finalmente elegí utilizar una batería de lipo de 11.1v para alimentar el sistema de igual manera una fuente conmutada tipo buck con salida de 5 volts para alimentar los 3 amperes que requiere la Raspberry, una pequeña protoboard a cada lado de la placa inferior para poder conectar el Arduino nano y facilitar el cableado, así como varias ranuras para reducir el tiempo de impresión y poder atornillar futuros módulos.
Realice el diseño utilizando freecad para generar el archivo de impresión, finalmente el robot quedo terminado en cuestión de un par de semanas, más que otra cosa porque la impresora estaba ocupada esos días, lo que faltaba era el software.
Robot Ein.
Pensando que faltaba tiempo para el final de semestre (cuando los alumnos de la clase de visión lo utilizarían) decidí instalarle ROS para probar unas posibles aplicaciones, lo primero que hice fue un nodo que permitiera leer una trayectoria desde un archivo .txt, esto para probar que todo funcionara correctamente, también probé la cámara, unos compañeros del laboratorio hicieron unas pruebas instalándole tensor flow para reconocer objetos utilizando una red neuronal, por esas fechas empezó el confinamiento debido a la pandemia de COVID-19, por lo que el trabajo quedo suspendido hasta hace poco.
Ein ejecutando ROS.
Prueba del robot Ein
En marzo regresamos a actividades presenciales en el IPN, así que decidí retomar el desarrollo del robot, aunque ya es una plataforma bastante capaz aún hacen falta desarrollar el software para que los alumnos de la clase de visión puedan utilizarlo en sus prácticas, también cambie la etapa de potencia y la batería que se encontraban gastadas, finalmente le puse una cámara Pro de Raspberry, entre otros pequeños cambios.
Versión actual de Ein.
Ein fue utilizado para generar datos de sensor con el propósito de probar un filtro que está desarrollando un colega del posgrado, se le monto una IMU, en este momento la prioridad concerniente a Ein está
en escribir una guiá de usuario y manual de ensamblaje para que se
pueda replicar, la idea es subir este material de manera gratuita al
repositorio del proyecto con la idea de facilitar el trabajo a las
personas que requieran un robot con estas características y deseen
replicarlo. También he pensado en ponerle un LIDAR y empezar a probar algoritmos de navegación más interesantes.
Espero que este blog les pareciera interesante y que les sea de utilidad, el repositorio aún está en un estado muy temprano pero pueden descargar los modelos de las placas ahí, posteriormente se ira actualizando con los manuales y proyectos en los que se utilice.
Les dejo estos links relacionados al tema.
IEEE Robots https://robots.ieee.org/
Curso de diseño https://www.coursera.org/learn/design/home/welcome
Patrones de diseño https://refactoring.guru/es/design-patterns/catalog
Hablando de robótica, este año empezó muy bien, la verdad me gusta mucho trabajar en el diseño de robots y todo lo relacionado pero no siempre es posible, aun así este año me encuentro dando clases de robótica móvil, además de que en la escuela estamos organizando un club de robótica, pude retomar el trabajo con Ein y estoy trabajando en un robot para poder empezar un negocio con el (espero tenerles noticias pronto), entre muchas otras oportunidades y aunque siento que me estoy tardando me gustaría publicar un pequeño libro de introducción a la robótica donde poder profundizar más en estos temas e incluir otros como la navegación o el uso del cómputo suave además de ayudar a los nuevos en el área en cada paso del proceso de diseño y construcción.
Hablando de otros temas espero pronto hacer una entrada sobre la vida
diaria de mis gatitas y "Programación en Julia Pt3:ROS", así como otras
ideas que tengo por lo que espero estar más activo en este blog, ya tenia más
de un año que no publicaba, la verdad el trabajo y la escuela no me han
dejado tanto tiempo libre como quisiera pero me gusta bastante como van
avanzando las cosas.
Si les gusto el blog y quisieran apoyarme pueden invitarme un café dando click en el botón que se encuentra en la parte inferior izquierda.
Comentarios
Publicar un comentario