lunes, 9 de marzo de 2009

Rotar 360 grados sobre si mismo

Hoy voy a dar una solución a un problema que creo que todos los que jugamos con nuestro lego nos hemos encontrado alguna vez. Hacer una rotación completa en el sitio.

Es una situación bastante común
  • Un robot que analice el entorno para detectar algo. Como el ball hunter de nxtprograms, o mi fallido intento de hacer un mapa del entorno.
  • Un robot que vea algo que no le guste y de media vuelta. Como por ejemplo la demo del nxt.
Para hacer que el tribot gire sobre si mismo, lo que todos hemos hecho alguna vez ha sido poner que los motores giren 360º cada uno, pero en sentido contrario. Pero ... ¡¡¡ se queda corto, no gira más !!! ... ¿Nos suena esto verdad? algo no cuadra.


Un poco de geometría, nos dará no sólo la solución sino que nos ayudará a comprender el problema. Lo principal es recordar que el perímetro de una circunferencia es pi * diámetro ó pi * 2 * diámetro.


Pongamos de ejemplo la vuelta de una rueda de bicicleta (el reflectante empiece en el punto más bajo y vuelva a estarlo). La distancia que ha recorrido la bicicleta es pi*diámetro. También, la rueda de la bicicleta, ha girado 360 grados. Es decir, para girar 360º hace falta recorrer el perímetro completo.


Ahora mirad el siguiente dibujo. Es nuestro tribot visto desde arriba y dibujado por un pintor abstracto. Los rectángulos de los lados son las dos ruedas del tribot y la circunferencia sobre las que están, es lo que tienen que girar para hacer un giro completo. Para que el tribot gire completamente sobre sí mismo, cada rueda tiene que girar volviendo a su posición original.



Nuestro fallo, es que hacemos que cada rueda gire 360º, es decir, pi*diámetro, cuando en realidad lo que tienen que recorrer es pi*distancia entre las dos ruedas,que es el diámetro de la circuferencia grande.

Ahora unas fórmulas que nos harán la vida más fácil y también la correspondencia entre grados, radianes y coordenadas polares.

Las veces que tiene que girar la rueda para volver al origen, o para recorrer 360º pi*distancia entre ruedas / pi * diametro rueda = distancia entre ruedas / diametro rueda.

Si queremos que el giro no sea de 360º sino de un número de grados en concreto, pues una regla de tres. Dividimos entre 360º para sacar lo que recorre en un grado y multiplicamos por n, número de grados. (distancia entre ruedas * número de grados) / (diámetro ruedas * 360º)

Sobre radianes y grados. En este enlace de la wikipedia, os lo contarán mucho mejor que yo. Pero recordad que pi radianes son 180º.