lunes, 15 de octubre de 2007

Pseudo-programando...

o lo que es lo mismo, planteando ideas de como programar todo este tinglao que estoy montando en el blog. Creo que empezaremos con un poco de programacion O.O... :)
He pensado que se podria representar el robot como un objeto que tiene, como atributos:
  • un array de EJES(que representen a A1, A2... hasta el que tenga)
  • un array de BRAZOS(donde guardar la longitud de cada brazo)
  • un objeto PTP (que contenga x, y, z, y alguna cosa mas)
  • un objeto TOOL (herramienta)
como metodos, inicialmente deberian estar:
  • mover_eje()
  • get_eje()
  • set_eje()
  • set_brazo()
  • get_brazo()
Esta clase ROBOT deberia ser ABSTRACTA, de manera que, cuando definamos nuestros robots, deban ser heredados de dicha clase para poder utilizarlo. Esto es para, en prevision de un futuro, poder utilizar distintos tipos de robot (pero que tengan como minimo estas posibilidades).
Sobre la clase TOOL, decir que nos permitiria "cambiar" la herramienta del robot en nuestro programa (asi podremos utilizar distintos tipos de herramientas).
Atributos posibles de la clase TOOL:
  • longitud (lo que mide la herramienta)
  • array de ejes
como metodos:
  • encender(), seria el metodo de ejecutar la herramienta (si es una pinza de agarre, pues cerrarla, si es una de soldadura, soldar...)
  • apagar(), lo contrario a encender() (que original, eh?)

domingo, 14 de octubre de 2007

que pasó con el eje A1???

Pues eso, que no nos tenemos que olvidar de dicho eje, mas que nada porque los calculos que hemos hecho para los ejes A2 y A3, estan basados en que el robot esta posicionado en el plano que forman OO y P1... Asi que vamos a calcular el giro que posiciona el robot en dicho plano. Lo primero, el esquema (esta vez en 3D!!!):
Tenemos que calcular el angulo Alfa. Si nos fijamos, primero hay que calcular la distancia D desde OO hasta el punto P1. Luego, utilizando D y la coordenada Z de P1 podemos calcular X'. El angulo Alfa corresponde al arcoseno que forman la coordenada y de P1 y la X' calculada:

sábado, 13 de octubre de 2007

Preparandonos para programar...

en este enlace podemos encontrar una serie de ejemplos en el que controlar, por el puerto serie el circuito que mueve los servos del robot. En esencia, se trata de enviar cada vez tres caracteres:
  • el primer caracter es el de sincronismo (para avisar al circuito que se empieza una nueva instruccion
  • el segundo indica el servo que queremos mover
  • el tercero indica a que posicion queremos moverlo.
Habrá que revisarlo más a fondo, pero por lo pronto estoy servido con esto... que todavia hay que mirar que lenguaje utilizaremos en la fonera para diseñar todo esto, asi como decidir que tipo de aplicacion será, estructura, etc...
Por otra parte, no hay que olvidar que, si bien es un proyecto especifico, deberia hacerse una aplicacion que permitiera utilizar cualquier robot/circuiteria desde el equipo emisor (en nuestro caso este ultimo es la fonera)

viernes, 12 de octubre de 2007

Añadiendo un tercer brazo...

Pues aunque parezca mentira (me pongo colorada... cuando me miras... :) ) resulta que no parece tan dificil poner un tercer brazo en el robot. La idea es que entre los dos triangulos aparece un rectangulo (de altura Hd) y de longitud la del tercer brazo (Z).
Por tanto, nuestro angulo Beta se va a dividir en dos: uno para el eje A3 y otro para el eje A4.
  • Para el eje A3: sumamos 90º al angulo B1 (calculado anteriormente)
  • para el eje A4: sumamos 90ª al angulo B0.
¿Asi? ¿tan facil? ¡pero si no hemos usado la longitud del tercer brazo!. bueno supongo que no sera tan facil... pero al menos es lo que parece viendo el siguiente esquema...

Vivan las matematicas!!!

y la geometria, y la trigonometria, y pitagoras... (si es que se puede aplicar a todo, incluso a la robotica!!!) :D

El caso es que ayer, recordando aquellos temas de matematicas, se me ocurrio como solucionar e tema de calcular los angulos que tienen que tener los ejes A2 y A3 para llegar al punto P1, y saqué unas formulas que me ayudaran a calcular dichos angulos. Lo primero vamos a mirar la siguiente figura:

  1. lo primero es saber la distancia que hay desde OO hasta P1. Aplicamos pitagoras con las coordenadas x e y del P1, de manera que Siendo D la distancia.

  2. Supongamos que tenemos dos brazos de robot que miden,uno X y otro Y. Se debe cumplir, para que los brazos del robot puedan llegar a la distancia D, que:

  3. Por otra parte, nos aparecen dos segmentos que suman D, a los que llamamos AB y BC; y comparten una altura, que denominamos Hd. Se tiene que cumplir:
  4. Al despejar Hd e igualar las ecuaciones, llegamos a:
  5. sabiendo que la suma de los segmentos AB y BC es D, podemos ver que:
  6. esto, susituyendo el valor de AB en la ecuacion del punto 3, nos permite llegar a una conclusion interesante, que es:Si despejamos el valor de BC, conseguimos calcular dicho segmento:
  7. Una vez calculado uno de los segmentos, el otro segmento es facil de calcular (es la resta D - BC). Ahora nos resta calcular los angulos. Calculamos el primer angulo:
  8. por ultimo,calculamos el segundo angulo:
Pues eso, con un poco de pan y queso, hemos calculado los angulos del eje A2 y el eje A3.
Para la proxima entrega, a ver como utilizamos un tercer brazo... ya vereis que no es tan dificil...:D

jueves, 11 de octubre de 2007

como usar GPIO como USB???

Siguiendo con la fonera, una de las ideas que me planteo mientras llega el robot, es ponerle un usb a la fonera. Parece que una de las cosas es utilizar MKNOD para crear un dispositivo que use un determinado hardware. En este listado, que deberia tener en mi linux pero que no encuentro, viene los datos del numero mayor y del numero menor. Creo que deberia utilizar algo de esto para crear un dispositivo USB propio, que utilizara los gpio... pero en dicho listado no aparece nada de GPIOs por ningun lado... sera un objetivo imposible????

Fonera preparada con puerto SERIE!

pues si, aunque esto ya lo tengo desde hace tiempo, quiero ponerlo para que no se me olvide...
La historia es que la fonera tiene dentro unos pines que permiten conectar un puerto serie. El problema es que dichos pines tienen salida de TTL, en lugar de tipo Serie. Asi que hay que ponerle un conversor delante.
Para ello, he seguido una serie de tutoriales de internet, para hacer un circuito serie. Por supuesto que hay que abrir la fonera y conectarle dicho circuito... pero vayamos por partes:
  1. Cambiar el firmware de la fonera. Yo recomiendo la version de dd-wrt v24, ya que tiene incluido los drivers de GPIO y el control de la particion JFFS. Asi podremos instalar programas desde fuera. Ademas, tendremos tambien el dispositivo /dev/ttys0 (para usarlo en nuestro futuro programa de control) :)
  2. El circuito. He visto dos, uno utilizando el C.I. MAX232, y otro utilizando el C.I. DS275. Este ultimo es mas sencillo de utilizar y mas pequeño (tiene 8 patillas), pero no lo he encontrado en ninguna tienda de Valladolid.

problema: como mover el TCP hasta el punto [x,y,z] ???

bueno, recordando que el TCP es el Tool Centre Point (punto centro de la herramienta), el primer problema que se presenta es como narices llevar el TCP desde un punto P1 a P2, ya que cada eje mueve los ejes inmediatamente superiores...

bueno, pues despues de estar buscando por google temas de cinematica directa y cinematica inversa, llego a unas primeras conclusiones:
  1. Hay una distancia maxima desde el origen de coordenadas (OO) hasta el punto maximo de alcance del robot. si dicho punto P1 supera esa distancia, el robot NO LLEGA; asi que calcular la distancia desde OO hasta P1 es importante para descartar si se puede o no llegar al punto que queremos.(de cajon, vamos). A nivel teorico, debemos usar pitagoras en el espacio.

  2. y que hay de la distancia MINIMA??? pues que para llegar al punto OO tendriamos que poner uno de los ejes girado 0º o 360º... esto no suele ser posible Mecanicamente, asi que no podemos llegar al punto OO... por tanto, a que punto MINIMO podemos llegar???


  3. el eje A1 nos sirve para situar el robot en el plano que forman los puntos OO y P1. Una vez puesto el robot en dicho plano, el problema de calcular las posiciones de los ejes para llegar al punto se transforman en un problema de plano, no de espacio (simplificamos un poco el estudio)

  4. Al mirar el tema de cinemtica inversa, he visto que se utiliza siempre el ejemplo de dos ejes, asi que pienso que el robot debe asimilarse a algo parecido... de hecho, los ejes A2 y A3 mueven el robot, y los ejes A4, A5 y A6 la herramienta. Si descartamos dicha herramienta, podriamos plantear el problema de manera que el robot tenga que llegar a un punto intermedio, que este a una distancia MENOR (concretamente, lo que mide la herramienta y los ejes A4, A5 y A6 en su maxima longitud)

  5. En base a lo anterior, un robot de 6 ejes utiliza uno para la base (A1), tres para la muñeca (A4, A5 y A6). por lo que nos quedan 2 ejes (A2 y A3) para situarnos con el robot en P1, por lo que el problema se va simplificando, ya que ahora solo tendremos que buscar los angulos que han de formar dichos ejes para llegar al punto (y que nos resuelve la Cinematica Inversa)


Del punto 4 no estoy muy seguro, ya que esa distancia MENOR podria ser, bien lo que mide la herramienta y los ejes, o bien un poco mas (asi el juego de los ejes A4, A5 y A6 podria ser mayor).
Por otra parte, tengo que buscar como resolver la parte de cinematica inversa con brazos de distinto tamaño (por ahora solo he encontrado el ejercicio de brazos iguales).

miércoles, 10 de octubre de 2007

robot y Fonera

Pues si, hace tiempo que queria tener un robot, asi que, despues de hacer un curso de Vision Artificial aplicada a la Robotica y de manejar uno, me he dicho: "ya es el momento".

Asi que he pedido un robot en www.superrobotica.com/ y estoy esperando el momento... que ilusion!!!

Mientras tanto, empiezo a plantearme problemas para intentar resolver el proyecto que tengo en mente:

controlar el robot por el puerto serie de la fonera!!!


asi que vamos a organizarnos un poco:
  • adquirir el robot

  • adquirir fonera

  • resolver los problemas que haya que resolver (que son muchos)


por supuesto, que esto se tiene que ir mejorando... asi que poco a poco iremos modificando este indice de proyecto :D

lunes, 8 de octubre de 2007

Prologo

"En ocasiones, algún miembro del Instituto de Estudios Arcanos adquiere el gusto por los placeres mundanos. Rara vez tiene problemas para encontrar empleo"

Con esta entradilla empiezo (de nuevo) esta andadura por internet. Y digo "de nuevo" porque siempre intento tener una pagina web, o un blog... pero al final nada de nada. Y es que no hay mas que seguir el refran: "en casa del herrero, cuchillo de palo"

Y no hay falta de razon: un informatico de toda la vida, con experiencia en temas de programacion... y sin blog!!! sin pagina web!!!

Asi que al final hay que entrar por el aro... y si no es con algo propio, por lo menos que cuente ideas propias, no? (digo yo)

En fin, que espero mantener en este blog una serie de proyectos e ideas que tengo en mente, e ir analizandolas, desarrollandolas y, si alguien se anima, pues a ver si entre todos llegamos a buen termino.
 
Informacion de proyecto para el control de un robot mediante puerto serie desde una fonera. Jakala. Licencia GPL. oct-2007