El término «Coche inteligente» puede tener miles de significados diferentes dependiendo a quién le preguntemos., así que empecemos con una definición modesta de algunos componentes que podemos añadir :
- Información básica sobre el coche, como la marcha engranada, eficiencia de combustible, horas de conducción ,etc.
- Ayudas a la conducción de tipo ADAS , siendo los mas comunes la puesta en marcha del coche delantero, acceso involuntario a línea de separación de carril o aviso de colisión por vehículo delantero que circula muy próximo
- Cámara trasera inteligente que avise si un objeto está demasiado cercano
- etc
Del primer punto lo hemos comentado en diferentes post , explicando que para automóviles de unos 10 años, es decir que cuentan con interfaz ODB2, es relativamente simple añadir un HUD con toda esta información con un HUD conectado por ODB2
Resumidamente los sistemas ADAS de ayuda a la conducción mas usuales son las siguientes:
- FCWS del ingles Forward Colission Warning Sytem (advertencia de colisión delantera) ayuda al conductor a mantenerse a una distancia segura del vehículo delantero y alerta a los conductores de una colisión inminente con advertencias visuales y audibles.Este sistema permite al dispositivo detectar cuando no se mantiene una distancia segura entre su vehículo y el vehículo delante de usted. El dispositivo determinará la velocidad de su vehículo calculando una distancia estimada de siguiente segura basada en su velocidad.Normalmente para que esta función pueda estar habilitada se debe estar viajando a más de 48KM/H ( a una velocidad de menos de 32 KM/H, se suele desactivar la función). Precisamente por esta limitacion el FCWS no puede detectar los vehículos que están alejados más de 40m o más cerca de 5m.
- LDWS del inglés Lane Departure Warning System ( SISTEMA DE ADVERTENCIA DE SALIDA DE CARRIL) monitorea las marcas del carril y avisa al conductor con advertencias visuales y audibles cuando ocurre una salida involuntaria del carril sin la notificación de la señal de giro.Es un mecanismo diseñado para advertir al conductor cuando el vehículo empieza a moverse fuera de su carril (salvo que una señal de la vuelta en esa dirección) en las autopistas y carreteras de la zona. Este sistema está diseñado para minimizar los accidentes por abordar las principales causas de colisiones: error del conductor , distracción y somnolencia.
- HMW( VIGILANCIA Y ADVERTENCIA DEL AVANCE DE PISTA)- Mide la distancia al vehículo que está por delante (“headway”) en segundos. Ayuda al conductor a mantener una distancia segura de conducción. Alerta al conductor al entrar en una zona predefinida de “avance peligroso”
.
- FVSA (ALARMA DE INICIO DEL VEHÍCULO DELANTERO ) Notifica al conductor si el vehículo delantero comienza a avanzar en el estado parado completo y el coche del conductor no se mueve en 2 segundos.
Casi todas estas ayudas ADAS están implementadas en numerosas cámaras disponibles en el mercado como vismo en este post destacando por voz propia el modelo Dash de Garmin
Respecto al ultimo punto de cámaras traseras , hay muchos kits para añadir una cámara trasera a nuestro vehículos usando una conexión analógica de video compuesto , lo cual se traduce en que la mayoría de ellas requieren hacer modificaciones al coche ,por ejemplo para ubicar la cámara en el porta-matriculas , o fijar la pantalla especifica de modo que no siempre en sencilla su instalación .Además las cámaras traseras comentadas requieren una fuente de alimentación externa alimentándose con los cables de las luces de atrás de su coche para que automáticamente se enciendan cuando el coche está en marcha lo cual tampoco le gusta a muchas personas .
Dado que el mercado no ofrece por el momento soluciones mas avanzadas una idea es usar la Raspberry Pi pues es la plataforma perfecta porque básicamente es un mini ordenador con un montón de entradas y salidas.
Al conectar una cámara a la Pi, se puede utilizar prácticamente cualquier webcam USB genérica, o por supuesto mejor puede usar una Cámara Pi conectada al conector DSI pues estas ofrecen una mayor calidad , versatilidad y no requiere una fuente de alimentación separada (pero asegúrese de tener un montón de cable para ir a la parte posterior del coche)
Solución con Raspberry Pi
Gracias a una Raspberry Pi por medio del procesamiento de imágenes en efecto podemos hacer más inteligente nuestro vehículo y añadir nuevas funcionalidades
Para esta idea podemos usar los siguientes componentes:
-
- Raspberry Pi 3 Model B(unos 38€ en Amazon) o también Raspberry Pi Zero que cuesta algo mas barata(unos 25€ con caja en Amazon)
- Raspberry Pi 3 Model B(unos 38€ en Amazon) o también Raspberry Pi Zero que cuesta algo mas barata(unos 25€ con caja en Amazon)
- Raspberry Pi Touch Display(opcionalmente)
- Raspberry Pi Camera Module (se puede compar por unos 15€ en Amazon)
- Flex Cable for Raspberry Pi Camera or Display – 2 meters (puede comprrlo aqui en Amazon por unos 7,29€ )
- Adafruit CSI or DSI Cable Extender Thingy for Raspberry Pi (opcionalmente)
Conexión del módulo de cámara
El modulo de cámara de Pi tiene un mayor rendimiento que una cámara USB por lo que lo ideal es usar una cámara del tipo compatibles con Raspberry Pi (se puede comprar por unos 15€ en Amazon)
No es problema la distancia pues con un cable plano de 200 cm suele ser suficiente para llevar la cámara hasta la posición de conducción (puede comprarlo aqui en Amazon por unos 7,29€ )
Se puede pues llevar el cable plano al l frente del coche y luego conectado a una pantalla de táctil de 7″ de modo que la Pi y la pantalla táctil pueden ser alimentados por el adaptador USB en el coche.
Estos son los pasos para instalar la cámara especifica para su uso , con la Raspberry Pi
-
- Localice el puerto de la cámara y conecte la cámara:
- Poner en marcha la Raspberry Pi
- Abra la Herramienta de configuración de frambuesa Pi desde el menú principal:
- Asegúrese de que está activado el software de la cámara:
- Si no está activado, habilítelo y reinicie su Pi para comenzar. Asimismo si va utilizar una pantalla táctil también necesitara activar I2C y SPI
- Localice el puerto de la cámara y conecte la cámara:
Es decir resumidamente; con la Raspberry Pi apagada, debe conectar el módulo de la cámara al puerto de la cámara de la Raspberry Pi,ahora encienda el Pi y asegúrese de que se activa el software.
Conexión de un pantalla táctil(opcional)
Existen pantallas TFT para Raspberry Pi con resolución de 320×240 (16-bits) que además son táctiles con una pantalla resistiva. Se entregan montadas y suelen ser compatible con los modelos Raspberry Pi Model A+, B+ y Pi 2 disponiendo además de de un conector de 40 pines para los GPIO.
La pantalla y el digitalizador utilizan los pines I2C (SDA y SCL), SPI (SCK, MOSI, MISO, CE0) y los pines GPIO #24 y #25. Todos los demás pines GPIO no se utilizan así que podrá conectar más cosas como sensores, LEDs etc. Algunos modelos disponen deposiciones para pulsadores miniatura (no incluidos) por si quiere hacer algún otro tipo de interfaz de usuario.
Puede utilizarla utilizar la librería PyGame u otra librería SDL para dibujar directamente en el frame buffer y hacer interfaces propios.
Tenga en cuenta que para que funcione debe tener activado el I2C en tu Pi o se quedará en blanco. Si utiliza la imagen de Adafruit funcionará sin problema, sino puedes ver su tutorial para ver cómo hacerla funcionar.
La conexión de este tipo de pantallas suele ser por el propio conector de 25 pines y por hdmi con un adaptador
Respecto al sw, estos son los pasos que puede seguir;
!Ojo el conector plano de la pantalla pues es MUY frágil y debe manejarse con cuidado.!
Montaje final
Una vez montada la pantalla y la cámara , encender el coche, la Pi y la pantalla . Para ver la camara de la Pi, abra el terminal y ejecute simplemente el siguiente script:
raspivid -t 0
o
raspivid -t 0 --mode 7
Después de entrar esto , la imagen captada por la cámara debería aparecer en pantalla completa , pero !ojo ! no lo veremos si estamos conectado via VNC!, es decir ,solo si estamos conectados a la propia Raspberry Pi .
Lo bueno de a Raspberry Pi es que se puede mejorar esta forma básica , y tal vez incluso establecer un sistema de alerta si un objeto esta demasiado cerca , así que, ! vamos a trabajar en ese lado!
DETECCIÓN DE OBJETOS
Metodo con overlay
Ya que el primer método parece más fácil, vamos a intentar implementarlo de ese modo pues esencialmente, es sólo una imagen que sobresale sobrepuesta a un flujo de vídeo, así que vamos a ver si recreándolo es tan fácil como parece.
Lo primero que necesitaremos es una superposición de imagen transparente,así que debemos usar una imagen calibrada que Gigafide ha dejado en el repositorio de github:

La imagen de arriba es exactamente 640 x 480, justa la misma resolución que la cámara estará retransmitiendo .
Esto se hizo intencionalmente, pero no dude en cambiar las dimensiones de la imagen si está transmitiendo en una resolución diferente(no se precoupe , esta imagen se puede descargar en fprmato original desde https://github.com/gigafide/pi-smart-car/tree/master/backup_overlay) .
Lo siguiente es que crearemos un sencillo script en Python utilizando el editor de imágenes de python PIL y PiCamera3
Este es el código escrito por GigaFide traducido por un servido y que tambien puede descargar de su github :
#Importar las dependencias requeridas
import picamera
from PIL import Image
from time import sleep
#Iniciar un bucle con la cámara Pi
with picamera.PiCamera() as camera:
#Ajustar la resolución , fps, giramos 180º y arrancar previsualizacion
camera.resolution = (640, 480)
camera.framerate = 24
#opcional si la imagen esta girada
camera.rotation=180
camera.start_preview()
#El tamaño de la imagen DEBE coincidir con la resolución de la cámara (640 x 480) # De lo contrario el código no funcionará
img = Image.open(‘bg_overlay.png’)
# Añade la imagen como una cámara superpuesta.
img_overlay = camera.add_overlay(img.tobytes(), size=img.size)
#Haga la superposición semitransparente y cambie la
#defecto de capa de 0 (debajo de la capa de la cámara) a 3 (sobre la capa de la cámara)
img_overlay.alpha = 128
img_overlay.layer = 3
# Esperar a que el usuario termine el script.
while True:
sleep(1)
Este fichero lo debemos guardar ,por ejemplo nombrándolo como image_overlay.py
Observe que se ha comentado en el código del script anterior que si se ve la vista previa al revés, se puede rotar dinámicamente la imagen con el siguiente código: camera.rotation=180
Lo he probado y es sorprendente porque no se observa prácticamente ningún retraso.
Una cosa muy importante tener en cuenta, sin embargo, es que debe tomar especial cuidado en calibrar su cámara para asegurarse de que la base de la vista del vídeo esta tan cerca de su parachoques como usted puede conseguirlo.
Debe estar conectado para enviar un comentario.