viernes, 21 de noviembre de 2008

Separador de Bolas

Hola,

Este blog seguramente no tiene ningún seguidor, pero aún así pediré perdón por llevar tanto tiempo sin escribir. Después de vacaciones, mudanzas y un sin fin de historias raras ... al fin he vuelto a cacharrear.

Quiero presentar en esta entrada varios temas que yo considero muy interesantes. mi tiempo de inactividad en el blog no ha sido un tiempo de inactividad con mindstorms.

Lo primero de todo ... http://www.mindstorms.rwth-aachen.de/ como podreis ver es una toolbox de matlab para programar el nxt. Hay muchas formas diferentes de programarlo, pero os voy a explicar las razones que me han llevado a elegir esta.

  • no es necesario cambiar el firmware del bloque, lo cual para los temerosos de los briqueos (jugador de psp y wii) como yo, es un riesgo eliminado.
  • control mediante bluetooth o usb. con esto podemos hacer que nuestro robot se vaya de paseo por el pasillo mientras lo controlamos a distancia. y el usb, pues para gente que todavía no tiene bluetooth, como soy yo
  • es matlab. así que tengo toda la potencia y versatibilidad de un lenguaje de programación de alto nivel (para mi es más fácil hacer un bucle for que un dibujito con el nxg) con la potencia de matlab. puedo tomar 200 mediciones del sensor de luz y luego hacer una media con una simple llamada a la función mean, o representar gráficamente un barrido circular del sensor de ultrasonidos para ver un mapa de la habitación a la altura del lego.
  • se aprenden bastantes cosas de como funciona el bloque por dentro, los mensajes que se mandan de control, funcionamiento intero del motor ...

como desventajas

  • no se pueden "bajar" programas al lego por bluetooth ni por el usb, los comandos se ejecutan desde la consola de matlab teniendo el bloque encendido. siempre se depende de un matlab corriendo.
  • el matlab necesrio es la versión 7.4, que es bastante pesada

dicho todo esto, os animo a que lo probeis, la verdad es que a mi me ha sorprendido bastante y ha pasado a ser mi forma estándar de programar con el bloque. 

Ahora pasemos a harina. en este video podeis ver la vida que he creado.






si no os habeis arrancado los ojos debido a la pésima calidad del mismo os doy mi más sincera enhorabuena. mi webcam no da para más, estoy pensándome mucho el comprar una cámara digital para inmortalizar estos momentos lego y también, claro está, del resto de mi vida. ( Se aceptan donativos :D)

como podeis ver es un separador de piezas, en este caso bolas del sobrevive de mb, que tenía rondando por casa así que antes de donarlo a algún primo pequeño, pues a jugar con las bolas.



para reconocer las bolas he utilizado el sensor de luz. he realizado 500 mediciones de la intensidad, y luego calculado la media. (bucle y mean, fácil en matlab). para cada color se tenían unos valores más o menos diferenciados, así que eso he usado para separarles. la medición dependía de la intenesidad de luz de la habitación así que con la lámpara pues he intentado que fuera constante. como podeis ver en el juego hay bolas de cuatro colores, pero el sensor de luz no me daba valores muy separados para cada uno de ellos, así que me era imposible separarlos. con el negro y el azul, obtenía medias muy distantes, así que esa es la razón de que les haya usado.

una vez que se reconocía la bola, había que mover la pala hasta el recipiente.

para esto la verdad es que me he buscado bien las castañas, he construido una base, que soporta el motor y con la doble rueda he conseguido hacer una plataforma móvil. si veis los dibujos estará mejor explicado.

para la pala me he inspirado en algunos modelos de brick sorteres que he visto por internet.

el principal problema que he encontrado aquí es la inercia que se gastan los motores. me explico, tu le dices que se mueva 90 grados y cuando el motor lleva 90 grados movido, deja de suministrar energía pero el motor sigue girando por que conserva su momento angular

esto tiene una solución y es la de regular la velocidad de moviemiento del motor. si el motor se pasa, el mismo se recupera marcha atrás. una vez concluido el moviemiento, el motor no se queda en el modo COAST (libertad de movimiento) sino que se queda en modo BRAKE. se le está suministrando energía para que no se mueva y es imposible de mover a dedo. hay que añadir que este modo requiere mucha energía. 

a este pequeño inconveniente hay que añadir que he leido que usando la regulación de velocidad y pequeños movimientos del motor, se acaba perdiendo precisión del mismo. sigo investigando esto, porque no me ha quedado muy claro.

podeis ver como cuando vuelve a la posición inicial no queda en el mismo lugar. así que también hay que jugar un poco de por donde poner los recipientes.

creo que eso es todo. espero haberme explicado bien. y que me hayas entendido.

Aquí podeis descargar el modelo usando el LDD, lo he divido en tres ficheros para que se vea mejor. de momento no hay nada incluido de instrucciones, vistas y demás, que aunque veaís que no se puede incluir desde la propia aplicación, el formato si lo soporta.


y el código fuente en matlab. es una guarrada de código ... os aviso, así que por esta vez ... haced con él lo que os dé la gana, más adelante lo publicaré bajo alguna licencia.


el proyecto que tengo ahora en mente es un robot que sea capaz de explorar su entorno y moverse lo más alejado de su punto de origen. para ello usaré las capacidades bluetooth, así que ahora mismo estoy mirando modelos de dispositivos bluetooth, habrá una entrada sobre ellos y características recomendables, no os preocupeis. es un tema un poco más peligudo de lo que parece.

un saludo y no hagais nada de lo que os podais arrepentir

No hay comentarios: