Diferencia entre revisiones de «Evitar obstaculos»
(No se muestran 11 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
− | Este programa intenta evitar | + | 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 obstáculo <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> | ||
+ | |||
+ | 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:acercarReactivo.png]]<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. Esta es una buena herramienta para depurar los programas. | ||
+ | |||
+ | [[Archivo: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.<br> | ||
− | |||
[[Archivo:principal.png|400px]] | [[Archivo:principal.png|400px]] | ||
+ | |||
+ | 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.<br> | ||
+ | |||
+ | [[Archivo:esquivar.png|500px]] | ||
+ | |||
+ | |||
+ | [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.
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.
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.
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.
Descargar este ejemplo para TortugarteButiá
El comportamiento en acción: