Evitar obstáculos
En este blog, demostramos cómo ejecutar nuestro algoritmo de evitación de obstáculos utilizando raspberry pi y un rover Sphero RVR. El objetivo principal es explorar su entorno mientras detecta y evita obstáculos. Este algoritmo utiliza el algoritmo de detección de obstáculos para identificar obstáculos. Para obtener más detalles, puede consultar el Blog Anterior.
La configuración del rover Raspberry Pi + Sphero RVR se muestra a continuación. Se colocó una cámara móvil al frente para grabar el movimiento continuamente.
Muestremos un código python para obtener el resultado, los códigos fuente se pueden encontrar a continuación.
Código fuente de la API de GitHubNecesitará tener una clave de suscripción para usar esto, puede consultar el blog de introducción sobre cómo obtener su clave de suscripción gratuita.
Para ejecutar el rover, necesitamos ajustar 4 configuraciones.
- MinSafeDistanceFactor: Esto es para especificar la distancia mínima de seguridad entre el rover y el obstáculo en cualquier dirección. Este es un número de coma flotante de 0.1 a 1. Los valores representan la distancia como un factor de tamaño de fila del marco de la imagen, es decir, si el valor es 0,5, no debe haber obstáculos para la mitad de la imagen. Es importante tener en cuenta que el centro del rover en la imagen es la fila inferior y la columna media.
- MinPathWidthFactor: Esto es para especificar el ancho de ruta mínimo disponible entre los obstáculos para que el rover atraviese en el punto de distancia mínima segura. Este es un número de coma flotante de 0.1 a 1. Los valores representan la distancia como un factor de tamaño de columna del marco de la imagen, es decir, si el valor es 0,5, al menos la mitad de la imagen está libre de obstáculos en el punto de distancia mínima.
- MinObjectHeightFactor: Esto es para especificar la altura mínima del obstáculo que se considerará válido. Este es un número de coma flotante de 0.1 a 1. Los valores representan la distancia como un factor de tamaño de fila del marco de la imagen. Esto es para evitar falsos positivos debido a cualquier píxel espurio u obstáculos que se puedan atravesar.
- MinObjectWidthFactor: Esto es para especificar el ancho mínimo de obstáculo que se considerará válido. Este es un número de coma flotante de 0.1 a 1. Los valores representan la distancia como un factor del tamaño de la columna del marco de la imagen. Esto es para evitar falsos positivos debido a cualquier píxel espurio u obstáculos que se puedan atravesar.
La salida tiene tres parámetros:
- BestDirectionAngle: Especifica el ángulo que tiene la menor cantidad de obstáculos. Este valor puede oscilar entre -90 y +90. El ángulo de 0 grados corresponde a ningún cambio en la dirección, el ángulo negativo corresponde a la mejor dirección a la izquierda del marco y el ángulo positivo corresponde a la mejor dirección a la derecha del marco.
- MaxDistanceFactor: Especifica la distancia máxima medida al obstáculo en la mejor dirección. Este es un número de coma flotante de 0 a 1. Los valores representan la distancia como un factor de tamaño de fila del marco de la imagen.
- MaxPathWidthFactor: Especifica el ancho máximo de trazado disponible entre los obstáculos en la mejor dirección. Este es un número de coma flotante de 0 a 1. Los valores representan la distancia como un factor del tamaño de la columna del marco de la imagen.
Si se identifica correctamente una ruta transitable que concuerda con todo el umbral establecido, el 'StatusFlag' devolverá 1, de lo contrario devolverá 0.
Las imágenes de entrada y salida procesadas de muestra se muestran como referencia a continuación
Las imágenes muestran la imagen original y la imagen procesada muestra la mejor ruta. En la imagen procesada, un cono verde representa un trazado válido y un rojo representa un trazado que no cumple todas las condiciones.
Un video de muestra de esto se puede ver a continuación. La configuración de estos son
- MinSafeDistanceFactor = 0,5
- MinPathWidthFactor = 0,4
- MinObjectHeightFactor = 0,1
- MinObjectWidthFactor = 0,1
En esta implementación, hay algunas condiciones adicionales que se establecieron para evitar cualquier obstáculo. En caso de que la mejor dirección esté por encima de los 45 grados desde el centro, no es posible identificar todos los obstáculos de inmediato, ya que el campo de visión está restringido. En tales casos, el rover gira en la nueva dirección y espera una confirmación si el camino está libre de obstáculos. Si es así, continúa atravesando en la nueva dirección, de lo contrario, girará y esperará la confirmación.
En nuestro próximo blog, mostramos cómo funciona el algoritmo de evitación de obstáculos por la noche utilizando IR.