Paso 5: Objeto evitar
Para conducir de manera autónoma, el vehículo debe ser capaz de controlar y evitar los obstáculos que encuentra como conduce. Manejar esto con un sensor de ultrasonidos "ping" y cierta lógica de la computadora.
El sensor es un sensor ultrasónico básico. Que combinado con la Arduino NewPing biblioteca, que es una gran mejora sobre la original biblioteca de Ping (entre otras cosas, sólo requiere un único pin compartido para ambos envían y reciban).
El sensor es bastante básico y tiene un muy estrecho campo de visión. Para este proyecto, sólo estoy utilizando un solo sensor con una posición fija (no un barrido "radar" tipo aplicación).
Había montado el sensor en el parachoques delantero del vehículo con algunas Surgu. Esta fue mi primera vez usando el producto y funciona muy bien. Había utilizado un paquete de solo 3,5 g, y eso fue suficiente para este propósito.
El sensor tiene una tendencia a devolver el impar ocasional o valor aleatorio... no estoy seguro por qué. En su excelente serie de artículos, Miguel Grinberg ofrece una solución sencilla: utilizar una media móvil. Adopté su clase MovingAverage para el proyecto con buenos resultados.
La rutina checkSonar() continuamente toma nuevas medidas, añadir cada nueva medida a la mudanza media; la media se utiliza para la lógica del programa.
Si se detecta un objeto, se aplica la siguiente lógica:
- Tranquilo
- Si el vehículo va recto (no gira), gire en la dirección más cercana a nuestro punto de referencia (técnicamente, más cercano al curso para nuestro punto de referencia).
- Si el vehículo ya gira, girar en sentido contrario para tratar de evitar el objeto.
- Si conseguimos dentro de una distancia definible (TOO_CLOSE) del objeto, detener, backup y vuelva a intentarlo.
Una vez que tenemos un camino claro adelante, reanuda la navegación normal.