viernes, 17 de abril de 2015

Cinemática Inversa - IK (I)

Atención, PELIGRO: en este post hay MATEMÁTICAS.Con mayúsculas. No demasiado avanzadas, pero matemáticas al fin y al cabo. Estás avisado. Y en la próxima entrada del blog, habrá más; muchas más.

La cinemática es la rama de la física que se encarga de estudiar la trayectoria en función del tiempo. Encontramos dos tipos de cinemática, la directa y la inversa. En cristiano, la cinemática directa (DK, Direct Kinematics) estudia las posiciones finales de sistema a partir de datos conocidos de ángulos y longitudes, mientras que la cinemática inversa (IK, Inverse Kinematics) hace lo contrario, a partir de un punto final conocido establece los ángulos de las barras del mecanismo que llevan a él.

En el caso de nuestro IKHEA, vamos a desarrollar un algoritmo de cinemática inversa que nos permitirá saber los ángulos de los servomotores a partir del punto al que queramos que se desplace el hexapodo. Este algoritmo lo definiremos matemáticamente, de forma que la placa de control arduino empleada en el proyecto pueda hacer los cálculos, pasárselos a la tarjeta de control de los servomotores, y de esta forma mover IKHEA de forma dinámica.

¿Y cómo lo vamos a hacer? Pues aquí entran en juego las matemáticas. Seguro que todos recordáis aquello de la trigonometría. Sí, sí... aquello de seno, coseno, tangente... yo me acuerdo de cuando decía "pero eso... ¿sirve para algo?". Pues al final resulta que sí, que sirve para hacer un robot de seis patas. Qué cosas, cuántas vueltas da la vida ;)

A partir de conocer el blog de Oscarliang he desarrollado mi IK propia, por lo que os recomiendo que os paséis por allí y echéis un ojo a excelente material que ha colgado. De hecho, en esta entrada omitiré la parte matemática pesada, que sí desarrollaré más adelante. Pero vamos a lo nuestro.Nuestro objetivo es, a partir de una posición de un punto conocida, obtener los valores de los ángulos.

En esta primera imagen, se observa la pata del robot vista en su plano XZ (viendo el robot desde detrás). En ella, observamos representados los ángulos, nombres y longitudes más relevantes, que nos permitirán calcular los valores de los ángulos en función siempre de la posición final del punto.


Cada una de las partes de las que se forma una pata reciben el nombre de COXA, FÉMUR y TIBIA, siendo sus longitudes conocidas. El ángulo alfa es el que forma la vertical con el fémur, y el ángulo beta el que forman fémur y tibia. Cada uno de estos ángulos se corresponderá al giro de uno de los servomotores que montaremos en IKHEA.

Por otra parte, en una vista del plano XY (viendo el robot desde arriba) cuando la pata se ha desplazado en la dirección Y se observa el ángulo gamma, correspondiente al giro del tercer servomotor de cada pata.




Por lo tanto, para cada una de las tres articulaciones de cada pata, obtendremos un ángulo que será función tan solo del punto final que queramos alcanzar. Si conseguimos establecer una relación matemática que nos permita su cálculo podremos mover las patas a cualquier posición sin más que indicar el punto que queremos alcanzar, y el propio sistema de control será el que le diga a cada servomotor cuánto debe moverse.

La formulación matemática que nos permitirá esto, a partir de la nomenclatura y disposición de las patas mostradas anteriormente, será la siguiente:


En el próximo post explicaré de dónde salen las formulas, y ahí sí que habrá un buen cartel de AVISO: MATEMÁTICAS!!!.

Un saludo, y nos leemos.

sábado, 11 de abril de 2015

Servos - Qué son y cómo usarlos



Los servos que vamos a emplear, como ya comenté en la entrada anterior, son los TowerPro SG90, unos servos de radiocontrol (modelismo) de los más básicos y baratos del mercado. Dado que es mi primer proyecto y estoy más interesado en aprender que en desarrollar algo verdaderamente potente, estos servos se adaptan a mis necesidades si bien resultan patéticamente cortos en casi todo.

Un servomotor de radiocontrol es, básicamente, un motor de giro limitado (normalmente entre 0º y 180º, si bien los hay de rotación continua) que podemos mover indicándole la posición en grados a la que queremos que se desplace. De esta manera, se obtiene un control muy preciso de la posición de dichos motores, lo cual resulta más que adecuado para una aplicación como la de IKHEA, en la que hay que posicionar de forma muy precisa cada una de las patas.

Valores de PWM de ejemplo de control de un servomotor
El método de control es mediante modulación por ancho de pulso, o PWM en inglés (Pulse Width Modulation). La idea es que, a través de un microcontrolador (en este caso la controladora de servos) mandemos una onda a través del canal de señal del servo y en función de la duración de esta onda, el motor se moverá a una posición angular determinada.

De forma general, el servo espera recibir una señal cada 20 milisegundos (ms), y en función del tiempo que la señal esté activa, se posicionará de una manera u otra. En el gráfico que acompaña podéis ver cómo, en función del tiempo que la señal eléctrica que mandemos al servo esté activa, éste se posicionará a un ángulo determinado. Así, para una señal alta de duración 1ms de cada 20ms, el servo irá a su posición de 0º; para una señal alta de 1,5ms irá a 90º, y para una señal de 2ms irá a 180º.

Estos valores son de ejemplo, de hecho para nuestros servos, los valores oscilarán de 0,5ms (500 microsegundos) para 0º hasta 2,5ms (2500 microsegundos) para los 180º. Por lo tanto, una vez sepamos los ángulos a los que hay que posicionar cada uno de los servos, tendremos que mandar a la controladora las órdenes necesarias para que emita la onda PWM que lleve el servo a su sitio.

Vale, entonces, después de esta literatura... ¿cómo hago eso? Bien, esa es la pregunta que esperaba. A ver, resumiendo parece claro que:
  • Si quiero que el motor gire hasta 0º: señal de 500 microsegundos
  • Si quiero que el motor gire hasta 90º: señal de 1500 microsegundos
  • Si quiero que el motor gire hasta 180º: señal de 2500 microsegundos
Pero... ¿y si quiero que gire a 100º?¿o a 63º? Vale, aquí entra en juego la interpolación lineal, que seguro que todos recordáis de cuando eramos jóvenes. Os voy a ahorrar la parte de explicación técnica, podéis encontrarla en el enlace que os he puesto o buscarla en vuestros libros de matemáticas; aquí voy al grano directamente.

Suponiendo por tanto  que el comportamiento del servo es lineal (que no sé yo...pero eso es otro tema), sabiendo que vamos de 500 microsegundos a 2500microsegundos con una resolución de 0º a 180º, podemos linealizarlo con la fórmula:


Así, sabemos que Y0=500microsegundos, X0=0º, X1=180º, Y1=2500microsegundos. Y tenemos que Yp es la duración en ms del pulso que debemos mandar y Xp el ángulo buscado. Por lo tanto, sin más que sustituir, nos queda la ecuación de la siguiente forma:

Así que sabiendo el ángulo que queremos conseguir en el servo y sustituyendo, tendremos el valor del pulso PWM en ms que debemos mandar. Retomando las preguntas de antes, tenemos:
  • Ángulo 100º ----- Xp=100º---- obtenemos Yp=1611,11microsegundos  
  •  Ángulo 63º ----- Xp=63º ---- obtenemos Yp=1200microsegundos

De esta forma, vemos cómo obtener los valores de PWM, que es lo que puede "leer" la placa de control de los servos, a partir de los ángulos que es lo que nosotros realmente queremos manejar a través de nuestro algoritmo de cinemática inversa.

Cinemática inversa. IK en inglés. Mola, ¿eh? Bueno, empezaremos a verlo en la siguiente entrada. Sin prisas, y a ver si consigo explicarlo en condiciones, que es un poco lioso...

Nos leeemos, un placer como siempre.


martes, 7 de abril de 2015

Lista de Materiales - BOM

En esta entrada, os haré un pequeño resumen de los componentes que pienso emplear para el montaje de IKHEA, y os doy el enlace de donde los he conseguido. En su mayoría y por cuestiones de economía, he recurrido a ebay/aliexpress/miniinthebox y similares, en general son muchísimo más baratas que las alternativas españolas y, realmente, se trata de los mismos productos que puedes comprar aquí.

Tengo que decir que, a fecha de escribir esta entrada, sólo me han llegado los servos y la LiPo, además de la estructura que la imprimí hace una semana, por lo que no puedo garantizaros que todo lo que os expongo llegue y realmente sea utilizado... cuento con que llegue, hasta ahora nunca me ha fallado un envío, pero ...


Si bien todos los componentes son importantes, por supuesto lo más relevante son los servos, que en mi caso han sido los micro9G de TowerPro. Baratísimos, algo menos de 2€ cada uno, muy rápidos en posicionase, y malísimos tanto en precisión como en resistencia de sus engranajes de plástico. Sin embargo, me interesa más aprender y disfrutar del proceso que emplear material "serio", así que de momento y sin haberlos podido probar a tope, creo que me apañan.
 
Servo 9G, pequeño pero funcional

La estructura del IKHEA, originariamente llamada 9G-Hexapod (de hardmouse) la he sacado de ThingInverse.com, una web orientada a  la impresión 3D "casera" con miles y miles de diseños para imprimir. El único problema es la manía de los usuarios de poner los archivos solo en su formato STL y no en el CAD original, con lo que resultan casi imposibles de modificar.

Piezas impresas, PLA color "Natural"

Bueno, sin dar más vueltas, aquí os paso la lista de material y sus precios a 7/4/2015 (Bill Of Materials). Probablemente podáis encontrar alguna cosa más barata rebuscando, si es así os agradecería que me enviáseis el enlace y precio, y actualizaré la lista:
En total, y echando las cuentas así a ojo, salen unos 90-95€, eso sin contar los gastos de envío de la LiPo (que compré con otras cosas de hobbyking), y esperando que las aduanas no se pasen y me peguen la clavada. A ver si hay suerte.

Pata montada, con los tres servos en posición
He montado los servos en una de las patas, mi primer ERROR ha sido usar tornillos de M3, como veis en la imagen son demasiado grandes para atornillar los brazos de los servos.

Los propios servos traen tres tornillos, dos de ellos para soportar el cuerpo del servo a la estructura que lo mantine fijo, y el tercero de ellos más corto para fijar el brazo que hace el giro al elemento que lo soporta. Lo que no traen es tornillería para fijar el brazo del servo al elemento que deben controlar, y debido a su reducido tamaño la tornillería que podemos encontrar en grandes superficies no da (en acero va de M3 en adelante, o al menos yo no he encontrado).

He pedido por ebay 200 tornillos de M2 con sus arandelas y tuercas, tirados de precio pero tardan como mes y medio en llegar, así que añadid a vuestra lista un buen montón de tornillos de M2 y os ahorraréis problemas!!

En la próxima entrada, y dado que parece que voy a tener que esperar largo y tendido a que vayan llegando los componentes, hablaremos de los servos en general, y cómo haremos para controlar los nuestros. 

Un saludo, nos leemos pronto! 



sábado, 20 de diciembre de 2014

El proyecto IKHEA - Orígenes.

Hola a tod@s, bienvenidos a este mi humilde blog. Vale, dirás, otro blog más en la red, ¿por qué debería pararme a leerlo? Tal vez eres un poco friki, y te gustan las cosas raras. O peor, adoras la programación y la electrónica. O, simplemente,  te gusta saber de todo un poco... O en realidad solo has ido a caer aquí, has visto la foto de encabezado y te has preguntado "pero qué demonios es esa cosa???"

Bueno, pues esa cosa es El proyecto IKHEA. Sí, lo sé, os suena ese nombre, pero no sabéis de qué exactamente... no, no es un prototipo sueco, es 100% español, de verdad. Y sí, hay que montárselo uno mismo. Y sí, aunque al principio parece imposible, todo va tomando sentido al final.

Todos fuimos jóvenes... una vez
Bienvenidos, por tanto, al proyecto IKHEA, que es el acrónimo de IK (inverse kinematics, Cinemática Inversa en cristiano), HExapodo, Arácnido. IK+HE+A. IKHEA. Bastante explicativo, si sabes lo que es la cinemática inversa, lo que es un hexapodo, y si leíste Spiderman de joven (o no tan joven). Y, si no, te lo explico en un momento, en lenguaje de persona normal.
  •  Cinemática inversa (IK, en inglés): parte de la física/matemática encargada de obtener los datos (parámetros) necesarios para posicionar una serie de motores (actuadores), en función del punto final que queremos alcanzar.
  • Hexapodo: robot andador, de seis patas, basado en la fisiología de los insectos de esta categoría.
  • Arácnido: bicho con muchas patas, pelos, ojos multifacetados... si te lo tengo que explicar, mal vamos. ¿Te suena Spiderman? Pues algo así, pero en seis patas...

Así que el proyecto IKHEA pretende diseñar y controlar un robot de seis patas, que avance de manera similar a como lo haría una araña, apoyándose en la plataforma Arduino. El proyecto contempla todos los pasos desde la más absoluta nada, hasta el momento en que IKEA empiece corretear por el pasillo de mi casa. Si crees que este proyecto queda fuera de tu alcance, entonces es que no me conoces... aunque, espera, en realidad no me conoces!

Vale, pues... mi nombre es Manuel, español, de Alicante, y aficionado a un buen montón de cosas de las que no tengo demasiada idea: algo de electrónica, algo de programación, algo de electricidad, algo de mecánica, algo de CNC, algo de impresión 3D... el perfil ideal para no saber de nada y defenderme en todo. O al menos poder pelear.

Así que me voy a animar, y voy a montar un bicho IKHEA de seis patas para que mis hijos puedan pasearlo por casa, sacarlo a la calle, y fardar de papá inventor. Y, por supuesto, para disfrutar aprendiendo sobre un buen montón de cosas. Y voy a compartirlo todo paso a paso contigo. Te reto a que encuentres otro blog que lo haga, en español.

Así que, si sigues interesado, seguiré escribiendo aquí regularmente, contándote los pasos que voy dando, los errores que cometo, las soluciones que encuentro, y en general cualquier cosa que vaya surgiendo relacionada con mi "bicho".

Mi próximo post tratará de las partes que voy a emplear para el montaje del IKHEA, y de dónde las voy a sacar. Inicialmente será un post resumen, que posteriormente iré desarrollando en otros post centrados en cada uno de las partes más importantes... pero eso será más adelante.

Un saludo para ti, te animo a que te tomes tu tiempo para comentar cualquier cosa o darme ánimos (que los voy a necesitar...), y espero verte por aquí pronto otra vez. Hasta la próxima!