Allá por 2015 dediqué un par de meses a la construcción de un robot hexápodo después de ver varios modelos en la web con precios totalmente fuera de alcance, cuya compra además me hubiera privado de la aventura que conlleva el proceso de diseño y construcción.

Para ser justos, estos modelos comerciales como el “Phoenix” de Lynxmotion o el “PhantomX” de Trossenrobotics son máquinas de gran calidad y robustez con estructura de aluminio y servomotores digitales de ultima generación, componentes que seguro que están a la altura de su precio.

A grandes rasgos un robot hexápodo es un robot que utiliza servomotores para articular sus patas y así poder moverse como lo haría un insecto. La complejidad del robot y también la naturalidad de sus movimientos aumentan cuantas mas articulaciones tengan sus patas, lo que se conoce como grados de libertad. Como mínimo suelen tener dos por pata y, así un hexápodo (6 patas) tendría un total de 12 grados de libertad. También existen cuadrúpedos (4 patas) y tendriamos 8 grados de libertad, algo relativamente sencillo de manejar con un arduino.

Sin embargo, entusiasmado con los modelos comerciales anteriormente señalados decidí optar por un hexápodo con 18 grados de libertad, es decir, 6 patas con 3 articulaciones cada una.

Diseño de trev502000 en thingiverse.com

Sin lugar a dudas la estructura tenía que poder fabricarse con tecnología de impresión 3D a ser posible sin grandes requerimientos, es decir piezas sencillas de imprimir. Esto obliga a inspeccionar thingiverse.com, ya que muchas veces he encontrado cosas que al final se han ajustado muy bien a mi idea original y este es uno de esos casos. Las patas propuestas por trev502000 en su “asmanylegsasyoucancontrolapod“, nombre que lo dice todo, son del estilo de las del PhantomX y cumplen con mis requerimientos y tan solo he modificado ligeramente el diseño original utilizando Blender, magnifico software de modelado y animación 3D que se ofrece gratuitamente en la web blender.org.

Pieza modificada para una mayor robustez

Después de incontables horas de impresión las patas fueron tomando forma pero el cuerpo me parecía que iba a dar mas de un problema en caso de imprimirlo debido a su tamaño y a la resistencia requerida. Compré una tabla de cocina, de nylon probablemente, y recorté de ella la base del robot, quedando el conjunto muy robusto

La cantidad de servos utilizados condiciona varias partes del diseño, por un lado se requieren 18 señales PWM de control independientes y con un arduino sin más se controlarían como mucho 15 utilizando un atmega2560 . Me he decantado por el uso de un producto de Lynxmotion, la controladora de servos SSC-32U , capaz de manejar 32 servos a partir de ordenes recibidas por un puerto serie. Es una placa basada en el MCU atmega328p y soluciona el problema de manejar esa cantidad de señales pero es un producto caro, todo hay que decirlo (50 Eur aprox.). Sería interesante por tanto diseñar algo parecido para futuros proyectos que requieran manejar tantas señales.

Controladora de servos de 32 canales SSC-32U

Hay que resaltar también que con esta placa y sin necesidad de ningún circuito externo seríamos capaces de controlar el movimiento de un hexápodo de 12 grados de libertad ya que lleva el programa para ello. Sin embargo, mi robot tiene 18 grados de libertad, por lo que, como explicaré más adelante, tendrá que ser controlado por un MCU, en este caso un Arduino Nano.

Además desde la web del fabricante podemos descargar una utilidad llamada ssc-32 servo sequencer que es muy útil para el calibrado de la posición central de los servos y a mi me ha resultado indispensable.

SSC-32 servo sequencer muy util para el calibrado de los servos

Por otro lado, tenía que escoger servos baratos si no quería que se disparase el coste y, claro, lo barato y además de fabricación china no da grandes resultados. He utilizado mayormente servos MG-995 con tren de engranajes metálicos y rodamientos de bolas. Aportan un par de 13 – 14 kg*cm, necesario para este proyecto debido al peso del conjunto y consumen en torno a 1A @ 6V. La electrónica y el motor que utilizan no son muy robustos y algunos de ellos fallaron enseguida, sobrecalentandose de manera que resultó fatal. Posteriormente utilicé los MG-946R que parecen un poco más robustos y el precio es parecido, en ebay sobre 5-6 Eur.

En mi caso los servos son el punto más débil del robot . He probado incluso a sustituir los transistores MOSFET en formato soic8 que estos llevan por unos de mayor capacidad de corriente con resultados parecidos. Los engranajes y el motor a veces se atascan, puede que por cambios de temperatura y las dilataciones que se producen. Esto provoca un consumo de corriente muy alto de forma constante y los mosfets acaban dañados, quedando el servo inutilizable. Todo ello debido a un mal diseño, componentes de baja calidad, etcétera. La solución evidente es sustituirlos por otros de más calidad pero esto dispararía el coste enormemente.

Cambiando de tema, hay que plantearse como alimentar 18 servos que consumen en torno a 1A cada uno, es decir, hay que proporcionar 18A con una tensión de 6V (los servos funcionan sin problemas a 5V pero a 6V ofrecen más par y aquí es una necesidad). Como la alimentación va a ser mediante baterías de Litio-polímero como mínimo de 2 celdas (7.4V) hay que usar un regulador de voltaje de al menos 20A y éste es un componente crítico que debe funcionar a pleno rendimiento. Una opción sería conectar varios reguladores lineales, 7806 por ejemplo, en paralelo. Esto, aunque sería funcional no sería para nada eficiente, ya que los reguladores lineales disipan la energía “que sobra” (dicho muy a lo bestia: lo que hay de 7.4V a 5V se pierde). La opción obvia pues es usar un regulador conmutado que, aunque presente una tensión con un ligero rizado, en este caso es irrelevante y la eficiencia de estos puede ser de un 90% o más. Después de mucho buscar encontré uno muy adecuado en hobbyking, luego problema solucionado y, a decir verdad, este componente cumple perfectamente con su función.

Regulador DC-DC conmutado ajustable 5-9V (20A).

Una vez completada la parte electromecánica es hora de pensar en como va a ser controlado el robot, esto teniendo en cuenta los 18 grados de libertad de éste. Existen productos comerciales para ello pero, gracias a la cultura open source y, en especial a su autor KurtE tenemos un excelente software (que puede implementarse en un Arduino Nano) conocido como “código Phoenix” en este repositorio de github.

El software debe resolver un problema de cinemática inversa. Con un sistema de referencia con origen en el comienzo de cada pata (donde ésta se une al cuerpo) la posición del extremo (pie) viene dada por sus coordenadas XYZ. Si queremos que vaya a esa posición tendremos que saber cuales son los ángulos que deben girar los servos, que matemáticamente es mas complejo de resolver que el problema directo (si muevo los servos unos ángulos concretos usando trigonometría obtengo fácilmente la posición del extremo…). El problema de cinemática inversa aplicado a un hexápodo de 18 grados de libertad, para quien quiera profundizar, está muy bien explicado en el siguiente enlace.