Diferencia entre revisiones de «Evitar obstaculos»

De Proyecto Butiá
Saltar a: navegación, buscar
 
(No se muestran 7 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
Este programa intenta evitar obstaculos disminuyendo la velocidad al aproximarse a un obstaculo como medida de seguridad. En este ejemplo se utiliza solamente un sensor de distancia.<br>
+
Este programa intenta evitar obstáculos disminuyendo la velocidad al aproximarse a un obstáculo como medida de seguridad. En este ejemplo se utiliza solamente un sensor de distancia.<br>
 
Lo principal es descomponer el problema en subproblemas más sencillos. De ésta manera podemos identificar dos subproblemas:<br>
 
Lo principal es descomponer el problema en subproblemas más sencillos. De ésta manera podemos identificar dos subproblemas:<br>
- disminuir la velocidad al aproximarse al mismo <br>
+
* Disminuir la velocidad al aproximarse al obstáculo <br>
- eludir al obstaculo <br>
+
* Eludir al obstáculo <br>
  
El robot va a estar todo el tiempo haciendo estas subtareas, por lo tanto nuestro programa va a necesitar un bloque por-siempre.<br>
+
El robot va a estar todo el tiempo haciendo estas subtareas, por lo tanto nuestro programa va a necesitar un bloque "por-siempre".<br>
  
Para hacer que el robot se vaya disminuyendo su velocidad a medida que se acerca a un objeto utilizamos un enfoque llamado reactivo, donde se mapea directamente lo sensado a los actuadores. En este caso vamos a cambiar la velocidad de los motores de manera proporcional con la distancia al objeto.<br>
+
Para hacer que el robot vaya disminuyendo su velocidad a medida que se acerca a un objeto utilizamos un enfoque llamado ''reactivo'', donde se mapea directamente lo sensado a los actuadores. En este caso vamos a cambiar la velocidad de los motores de manera proporcional con la distancia al objeto.<br>
  
[[Archivo:acercar_reactivo.png]]<br>
+
[[Archivo:acercarReactivo.png]]<br>
Notar que restamos 150 al valor sensado de distancia, debido a que los sensores de distancia no miden a menos de XXX cms, por lo tanto nunca va a llegar a cero su resultado. Al restar 150 logramos que el robot pueda setear velocidades cercanas al 0.<br>
+
Notar que restamos 150 al valor sensado de distancia, debido a que los sensores de distancia no miden a menos de 10 cms, por lo tanto nunca va a llegar a cero su resultado. Al restar 150 logramos que el robot pueda setear velocidades cercanas al 0.<br> Notar que estos cálculos son para un sensor de distancia Sharp 2Y0A21 F09, puede ser necesario ajustar estas constantes en otro módelo de Sharp.<br>
  
Otro aspecto importante es que podemos imprimir valores en pantalla utilizando el bloque imprimir, en este caso se puede utilizar el bloque de suma como una forma de concatenar o "unir" textos.
+
Otro aspecto importante es que podemos imprimir valores en pantalla utilizando el bloque imprimir, en este caso se puede utilizar el bloque de suma como una forma de concatenar o "unir" textos. Esta es una buena herramienta para depurar los programas.
  
 
[[Archivo:depurando.png]]
 
[[Archivo:depurando.png]]
Línea 24: Línea 24:
  
  
[http://www.fing.edu.uy/inco/proyectos/butia/files/ejemplos/evitaObsDistanciaDinamica.ta Descargar este ejemplo para TortugarteButiá]
+
[http://www.fing.edu.uy/inco/proyectos/butia/files/ejemplos/evitaObsDistanciaDinamica.ta Descargar este ejemplo para TortugarteButiá]<br>
 +
 
 +
El comportamiento en acción:<br>
 +
<youtube>eeBuBuc8QjE</youtube>

Revisión actual del 19:45 4 sep 2011

Este programa intenta evitar obstáculos disminuyendo la velocidad al aproximarse a un obstáculo como medida de seguridad. En este ejemplo se utiliza solamente un sensor de distancia.
Lo principal es descomponer el problema en subproblemas más sencillos. De ésta manera podemos identificar dos subproblemas:

  • Disminuir la velocidad al aproximarse al obstáculo
  • Eludir al obstáculo

El robot va a estar todo el tiempo haciendo estas subtareas, por lo tanto nuestro programa va a necesitar un bloque "por-siempre".

Para hacer que el robot vaya disminuyendo su velocidad a medida que se acerca a un objeto utilizamos un enfoque llamado reactivo, donde se mapea directamente lo sensado a los actuadores. En este caso vamos a cambiar la velocidad de los motores de manera proporcional con la distancia al objeto.

AcercarReactivo.png
Notar que restamos 150 al valor sensado de distancia, debido a que los sensores de distancia no miden a menos de 10 cms, por lo tanto nunca va a llegar a cero su resultado. Al restar 150 logramos que el robot pueda setear velocidades cercanas al 0.
Notar que estos cálculos son para un sensor de distancia Sharp 2Y0A21 F09, puede ser necesario ajustar estas constantes en otro módelo de Sharp.

Otro aspecto importante es que podemos imprimir valores en pantalla utilizando el bloque imprimir, en este caso se puede utilizar el bloque de suma como una forma de concatenar o "unir" textos. Esta es una buena herramienta para depurar los programas.

Depurando.png

Podemos ver el programa completo en la siguiente imagen, en ella puede apreciarse que el robot avanza regulando su velocidad según la distancia a los obstáculos y cuando el objeto está muy cerca (distancia 400) ejecuta la rutina de evadir obstáculos.

Principal.png

La rutina de evadir obstaculos simplemente retrocede el robot una distancia aleatoria entre 0 y 40 cms y luego de setear nuevamente las velocidades dependiento de lo que este cerca, gira de forma aleatoria entre 0 y 100 grados.

Esquivar.png


Descargar este ejemplo para TortugarteButiá

El comportamiento en acción: