domingo, 10 de febrero de 2008

Lego NXT, sigue líneas


__La practica se ha planteado no como un robot que constantemente pierda la línea y haga barridos para encontrarla. Esta solución plantea una serie de grabes problemas, como el caso que si al realizar el barrido encontrara otra linea colindante creeria que esa era la buena, además pensamos que la solucion de los barridos nos parecía poco eficiente.

__Nuestra táctica se centra en no perder la línea en ningún momento, por ello se llevarán acabo 2 calibraciones para compensar en todo momento el nivel máximo y mínimo de luz.
__Una vez conseguido el máximo y el mínimo de luz, el robot reconocera el color aproximado de la zona blanca y el aproximado de la zona negra, ya que en varios puntos puede contener diferentes intensidad de blanco y de negro (por deficiendias del terreno).

__La táctica planteada ...


Seguir Leyendo...



... contiene un caso base y un segundo caso, que es el que se utilizará tras haber superado las condiciones del caso base.
  • __El caso base es, la busqueda por primera vez de la línea negra, una vez encontrada ya no volvera a entrar en este caso.
  • __Para que el robot no pierda nunca la línea llevara un control triple. Dónde esta en todo momento respecto al centro de la linea (guardando el anterior valor calculado), cual fue la direccion de la última curva. El tercer caso de control entraría si por algun motivo perdiera la línea .


PROBLEMAS:

____a. Rotaciones:
  • __Inicialmente usamos para las rotaciones el "rotate", pero tenía un problema, si la rotación era grande hasta que no cumpliera los grados asignados no buscaria si estaba en la linea negra, y era muy probable que se pasara.
  • __Por el contrario si la rotación era muy pequeña tardaba demasiado en corregir.
  • __Después de hacer multiples pruebas y encontrar un punto medio, nos dimos cuenta que tampoco era efectivo, porque en muchos casos iva dando vandazos de un lado para otro y en otros casos se pasaba ligeramente la línea y giraba en redondo al lado contrario.
  • __Por ello preferimos usaran los forward y backward, que no solo era mucho más fácil a la hora de saber si estabamos en la línea. Sino que al no comprobar constantemente la rotación ( rotar-parar-rotar, lo cual probocaba que fuera dando saltitos), el uso del forward resultaba un movimiento fluido.
____b. Lectura del terreno:

  • __Uno de los problemas que teníamos es que el robot cuando encontraba una curva empezaba a dar bandazos, y pensabamos que era culpa de que el sensor de luz del robot era impreciso por el movimiento, por lo que probamos una solución reduciendo el número de veces que leía el terreno a la mitad, pero el problema no residia aquí, ya que muy al contrario de lo que pensabamos el sensor leia muy preciso y el problema lo solucionamos con lo que explicamos a continuación.
  • __Nuestro segundo gran problema vino al comprobar que el robot hacia un exceso de comprobaciones de cual era el valor del color. Esto venia dado porque el código no estaba depurado (sobraban lecturas,bucles y comprobaciones). Corregido esto, el robot no solo iva mas rapido y fluido, sino que además cometia menos fallos a la hora de seguir la linea.
____c. Hacia que lado sería el proximo giro.

  • __Hasta cierto punto, el código solo recogía que el robot siguiera la línea, almacenando cual era la posición anterior del robot respecto al centro, pero no guardaba cúal era el anterior giro, corrigiendo esto, el robot se perdía menos ya que automaticamente presuponia que la proxima vez que girara, seria la misma que para la ultima vez que giró.
____d. Perdida de la línea.

  • __El último problema a la hora de seguir la linea, era que en ciertos momentos el robot por situaciones puntuales perdía la línea, con lo cual hicimos una ultima comprobacion que corregia si recibia que la anterior posicion leida y la siguiente se encontraba completamente en zona blanca corrigiera al lado contrario. De esta forma solventabamos que no se diera la vuelta.

ANÁLISIS:




  • __Hemos realizado un testeo para la demostración del rango de valores aproximado que toma.
  • __Los valores son son del tipo: 1mm dato. Cada linea verde representa 1 mm separado de lo que reconoce como negro, en cuanto el haz rojo salga la linea azul clara empieza a contabilizar.








SOLUCIÓN Y EXPLICACIÓN:

  • __Realmente el robot pocas veces permanece en el centro y tampoco hay diferentes niveles de negro dentro de la linea, lo que ocurre es lo siguiente:




  • __El foco de luz rojo que proyecta no es milimetrico, de echo abarca exactamente 0,9 cm, por lo cual mientras que el haz de luz este dentro de la línea negra, marcará 0 ( ó el mínimo que hubiera calculado), cuando se separa un poco del centro recoge parte de la zona blanca del tablero y da un valor superior al testeado como valor central (el valor recodigo como negro).



  • __De esta forma, lo que el robot hace basicamente es: cuando se sale de la línea, lee un valor de la luz que recibe y la guarda, cuando gire para volver a la línea negra, lee otra vez y lo compara. Si es menor el nuevo dato, es que ha girado en la dirección correcta y guarda que dirección ha elegido, que no, gira a la otra dirección y guarda que esta nueva direccíon ha sido la buena.


Tags:

Admin

Eduardo Parada Pardo

Soy desarrollador e investigador en robótica, me gusta aprender nuevas tecnologías y todo lo relacionado con el mundo de la robótica. Si te gusta este blog, no dudes en preguntar cualquier duda.

2 comentarios:

Anónimo dijo...

Si señor, como te lo curras wapo !! Sigue asi ^^ , un besazo!!

Admin dijo...

Muchas gracias, se hace lo que se puede ^^

 

Productos y tecnologias usadas en este blog:

  • Copyright © LuneGate™ is a registered trademark.
    Designed by Templateism. Hosted on Blogger Platform.