domingo, 17 de febrero de 2008

Radar con el Lego NXT


  • __Se ha ampliado lo que nos pedia la práctica original, ya que la practica solo pedia sacar por pantalla el escaneo de los ultrasonidos usando un nuevo motor.

AMPLIACIONES DE LA PRACTICA ORIGINAL

__1)__ Para el desarrollo de estra practica hemos modificado el diseñor del robot para conseguir que la cabeza (ultrasonidos) tenga una libertad total.

__2) __Através de los datos recogidos por el ultrasonidos podemos viajar por el mundo sin chocar contra los objetos, a traves de un algoritmo que hemos creado de fuerzas reactivas y atractivas.

__3)__ En el algoritmo usado para mover la cabeza 180º se ha creado un sistema de correccion, ya que para conseguir que la cabeza fuera muy rapido a veces descuadraba de los 1801, asi que se creo un control para posicionarse despues de una barrida donde debiera.

__4)__ Nuestro robot a traves de los 2 algoritmos implementados conseguira viajar por el mundo eligiendo la ruta donde haya menos obstaculos y por donde pueda viajar sin problemas.

Seguir Leyendo...



DESARROLLO DE LA PRACTICA

__La practica se puede dividir en 2 partes:
  1. Algoritmo de radar.
  2. Fuerzas reactivas.

1.RADAR

Algoritmo de radar.
  • __Para que el radar girara de seguido y no grado a grado ( con el resultante efecto de ir dando tirones la cabeza), hemos utilizado la tacometria del motor.
  • __Para comprobar que el valor del tacometro tras 180º hicimos varias pruebas con un programa externo que creamos. Una vez comprobado que 180º eran 180 pulsos para el tacometro nos dimos cuenta que esto nos resolveria muchos problemas a la hora de almacenar en el array la distancia y los grados.
  • __En la parte del escaneo del radar hara 2 barridas de 180º, e ira introduciendo los valores de las distancias en la posicion del array que pertenezca al grado en el que ha recodigo el dato.
  • __A la vez que recoge los datos, los imprime por pantalla. Para poder conseguir que imprimiera desde la parte dentral inferior cogiamos el valor del tacometro (que correspondia al angulo que estabamos ) y lo pasamos a radianes que es con lo que trabaja la libreria MATH.
  • __Ya que nosotros teniamos las coordenadas polares y no las rectanguales con las que podriamos imprimir por pantalla, creamos un algoritmo para ello.
________________________ x = (int)(distancia*(Math.sin (aradi)));
________________________ y = (-1)*(int)(distancia*(Math.cos (aradi)));
________________________pantalla.drawLine(50, 64, x+50,y+64);

  • __El echo de que cuando pintamos por pantalla la linea se posicione en el (50,64) es porque el eje superior izquiero es el (0,0) como se muestra en la imagen ed acontinuación.
  • __La venta roja es el display que veremos desde robot.
  • __Nuestra intencion es sacar lineas desde el (50,64) hasta donde el sensor de ultrasonidos nos diga.
  • __Para conseguir que sacara la vision del robot como si fuera un sonar real, hicimos que cuando imprimiera, si la distancia era mayor a 50 pixeles solo pintara 50 de distancia (aunque dentro del array si guardara la distancia real). De esta forma el dibujo resultante por pantalla era como el de un avanico.

- PROBLEMAS EN EL RADAR -


  • __ Hubo serios problemas cuando hacia las barridas, ya que cuando barria del 0º a 180º y vicebersa, cuando llegaba al 180º no frenaba en seco,( lo que probocaba que se descuadrase nuestro centro (90º)).

- SOLUCIÓN -


  • __Para solventar esto, una vez que el algoritmo llegaba o pasaba de 180º se llamaba la funciona rotar para que cuadrara la cabeza para el siguiente barrido.


2. FUERZAS REACTIVAS

Fuerzas reactivas.
  • __Para decidir que dirección tomar hemos hecho un algoritmo que suma las fuerzas atractivas y repulsivas y con estas sacamos una fuerza resultante que es la dirección que tiene que tomar el robot .
  • __El array de datos es de 180 posiciones siendo cada posición los grados en que se encuentra la cabeza. En cada posición del array guardas el valor del sensor de ultrasonidos que es el radio por lo que cada celda del array es una coordenada polar.
  • __Para calcular las fuerza atractiva miramos cada posición del array si el valor recogido es mayor o igual que 30 pasamos la coordenada polar de esa posición del array a cartesianas y se la sumamos a la fuerza atractiva total en su coordenada x e y por lo que al final tendremos una fuerza atractiva total.
  • __Para calcular las fuerza repulsiva miramos cada posición del array si el valor recogido es menor de 30 pasamos la coordenada polar de esa posición del array a cartesianas y se la sumamos a la fuerza repulsiva total en su coordenada x e y por lo que al final tendremos una fuerza repulsiva total.
  • __Una vez obtenido la fuerza atractiva y repulsiva total en coordenadas cartesianas estas las sumamos y obtenemos la fuerza repulsiva que es la que nos da la dirección.
  • __Una vez obtenido la fuerza resultante tenemos que girar el robot para donde nos indique la fuerza, esto lo hacemos pasando las fuerza resultante de coordenadas cartesianas a polares y así obtenemos el ángulo y podemos calcular el giro que tiene que hacer el robot.
  • __Lo que se muestra a continuación es lo explicado anteriormente, visto graficamente. La primera resultante es A (proveniente de el calculo de la fuerza 1 y 2), la segunda es B (calculandola de la anterior A y 3), y por último la fuerza resultante por donde viajara es C ( de sumarle B y 4).


  • __Una vez hecho todos estos cálculos y posicionado el robot lo siguiente que hace es andar hacia adelante hasta que encuentre un objeto. Pero aquí nos surgía un problema y es que al tener el sensor de ultrasonidos tan adelante alguna veces no detectaba las latas de los lados y estas daban en las ruedas.
  • __Para solucionar esto, hemos hecho que mientras va para adelante la cabeza vaya girando de 15 en 15 grados para un lado y otro parando en el medio también, con esto conseguiríamos que detectara las latas de los lados.
  • __En esta parte hemos tenido mucho problemas con los datos recogidos por el sensor ya que muchas veces no detectaba las latas y era debido a que justamente al ser la lata redondeada en su parte superior desviaba las ondas de lso ultrasonidos.
  • __Cuando encuentra un objeto se para el robot y vuelve a hacer el escaneo y recoger datos para calcular que dirección tomar según los datos recogidos.




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.

3 comentarios:

Anónimo dijo...

Un buen video documental.

Admin dijo...

Gracias en la noticia siguiente salen el codigo usado por todas las prácticas.

Anónimo dijo...

ainsss ke aplikado es este xiko ^_^

 

Productos y tecnologias usadas en este blog:

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