En el impulso por desarrollar sistemas robóticos que puedan sentir e interactuar con su entorno, se han realizado enormes inversiones en visión artificial. Hemos visto los frutos de estas inversiones en una amplia gama de aplicaciones, desde automóviles autónomos hasta la automatización de robots industriales. Si bien estos esfuerzos han tenido mucho éxito, los sensores ópticos no son la solución ideal para todos los casos de uso. Las tareas de manipulación de objetos, por ejemplo, suelen requerir información táctil para manipular con precisión y seguridad los objetos de interés. Puede imaginar un enfoque híbrido en el que los métodos de visión por computadora localicen el objeto y dirijan un robot a la posición correcta. A partir de ahí, los sensores táctiles dentro de una mano robótica brindan información sobre la fragilidad o robustez del objeto y ayudan a crear un plan para llevar a cabo las intenciones del robot.
En comparación con la visión por computadora, se ha dedicado mucha menos atención al desarrollo de sensores táctiles, lo que los hace generalmente menos sofisticados que sus contrapartes ópticas. Esto ha dificultado el desarrollo de robots que sean capaces de generar una comprensión de alta resolución de su entorno mediante la integración de datos de múltiples tipos de sensores.
En un esfuerzo por comenzar a abordar las deficiencias en la tecnología de detección táctil actual, un equipo de ingenieros de ETH Zürich ha desarrollado un dispositivo que llaman SmartHand .
SmartHand es un sistema integrado de hardware y software creado para recopilar y procesar información táctil de alta resolución de una matriz de sensores múltiples en forma de mano en tiempo real.
Arquitectura del sistema (📷: X. Wang et al.)
El dispositivo SmartHand utiliza una rejilla sensora táctil resistiva de bajo costo, basada en un compuesto de polímero conductor, que se pega a un guante. Se adjunta una unidad de medición inercial (IMU) en la parte posterior del guante para proporcionar información adicional sobre el movimiento. Los datos de los 1024 sensores táctiles (dispuestos en una cuadrícula de 32 por 32) y la IMU se introducen en una placa de descubrimiento STM32F769NI conectada a la muñeca a través de una serie de cables. Esta placa contiene un núcleo Arm Cortex-M7 que funciona a 216 MHz, con 2 MB de memoria flash y 532 kB de RAM.
Para demostrar SmartHand, los investigadores querían poder detectar qué tipo de objeto sostenía la mano. Para ello, se creó y entrenó una red neuronal convolucional, basada en la arquitectura ResNet-18, para reconocer la relación entre los datos de los sensores y un conjunto de dieciséis objetos cotidianos. Se creó un conjunto de datos usando el dispositivo físico para que sirviera como datos de entrenamiento para el modelo. Recopilando mediciones a 100 cuadros por segundo (13,7 veces más rápido que el trabajo anterior), se generó un conjunto de datos táctiles que consta de 340.000 cuadros.
La red de sensores (📷: X. Wang et al.)
Al validar la red neuronal, se encontró que el modelo requiere un orden de magnitud menos de memoria y 15,6 veces menos cálculos, en comparación con los dispositivos actuales. Esto se logró manteniendo la red neuronal lo más compacta posible, sin sacrificar la precisión de las predicciones. Hablando de predicciones, se encontró que la precisión de clasificación top 1 del modelo alcanzó el 98,86% en el reconocimiento de objetos. Al mantener el procesamiento en el límite, el tiempo de inferencia se mantuvo en unos muy razonables 100 milisegundos.
Se observó que, debido a las propiedades inherentes de los materiales que componen la rejilla del sensor táctil, habrá cierto nivel de degradación con el uso repetido. Los primeros indicios sugieren que la degradación puede estabilizarse, lo que permitiría recalibrar el diseño actual después de un período de rodaje inicial sin ningún otro cambio. Actualmente están evaluando si este es el caso, o si la degradación del sensor continúa más allá de la meseta aparente, lo que requeriría más cambios de diseño antes de que sea posible el uso del dispositivo en el mundo real.
El equipo prevé que las técnicas de SmartHand se utilicen en futuras aplicaciones robóticas y protésicas de manos. Con un poco más de esfuerzo, este trabajo puede acercarnos a un mundo en el que los robots no parecen tan robóticos.
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 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
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 -t0
o
raspivid -t0 --mode7
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
Cuando se trata de aplicaciones de cámaras de seguridad comerciales, generalmente hay al menos dos versiones .La primera utiliza una superposición de una imagen estática con gamas de color para que visualmente puede determinarse cuánto de cerca está un objeto. El segundo método utilizara una cámara junto con sw que puede detectar un objeto qué tan cerca esta al coche y luego avisa cuando algo está demasiado cerca
Veamos en este post en primer lugar le método de overlay, el cual por cierto es el mas usado en los implementaciones de cámaras traseras de coches actuales.
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’)
#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.
Este método de la prueba fue muy exitoso, pero también es muy básico asi que sería bueno tener un sistema que puede detectar hasta qué punto esta de cerca el objeto del coche y nos notifique si se pone demasiado cerca superpuesto a la señal de video así que dejamos para un segundo post si podemos detectar objetos mediante visión artificial gracias a la potencia de nuestra Raspberry Pi.
Debe estar conectado para enviar un comentario.