Me gustaría saber si alguien ha tenido éxito al detectar un mamífero de cuerpo cálido (es decir, un ser humano) utilizando sensores estándar de bajo costo.
Idealmente, me gustaría usar un sensor de bajo costo o una combinación de sensores para detectar a una persona dentro de una habitación y localizarla. Me gustaría que el robot ingrese a una habitación, detecte si hay un humano (s) y luego se mueva al humano detectado. La precisión no necesita ser del 100%, ya que el costo es más un factor. Me gustaría que los requisitos computacionales de un sensor de este tipo sean tales que puedan ejecutarse en un Arduino, aunque, si es imposible, estaría dispuesto a utilizar algo con más potencia, como un Raspberry Pi o un BeagleBone Black. Tengo algunos pensamientos; sin embargo, ninguno de ellos es ideal:
- Sensor PIR : puede detectar movimiento dentro de un gran campo de visión (es decir, generalmente 120 grados o más). Podría ser lo más parecido a un detector "humano" que yo sepa; sin embargo, requiere movimiento y localización / triangulación donde está una persona sería muy difícil (¿imposible?) con un campo de visión tan grande.
- Ultrasonido : puede detectar objetos con buena precisión. Tiene un campo de visión mucho más estrecho; sin embargo, no puede diferenciar entre un objeto no vivo estático y un humano.
- Detectores IR - (sensores de rango es decir Sharp.) De nuevo pueden detectar objetos con gran precisión, campo de visión muy estrecho; sin embargo, nuevamente es incapaz de diferenciar objetos.
- Webcam + OpenCV : posiblemente use la detección de rostros para detectar humanos en una habitación. Esta puede ser la mejor opción; sin embargo, OpenCV es computacionalmente costoso y requeriría mucho más que un arduino para ejecutarse. Incluso en una Raspberry Pi, puede ser lenta.
- Kinect : utilizando las capacidades de detección de características de Kinect, sería relativamente fácil identificar a los humanos en un área; sin embargo, el Kinect es demasiado costoso y no lo consideraría una solución "barata".
¿Quizás alguien conoce un "detector de calor" económico ajustado al calor corporal y / o ha tenido éxito con alguna combinación de (# 1-4) anterior y le gustaría compartir sus resultados?
Respuestas:
Una combinación de un detector infrarrojo pasivo (PIR) y un buscador de rango de sonda (SRF) debería ser el truco.
Lo que funcionó bien para mí anteriormente (al no encontrar humanos pero muy similar) fue tener dos PIR en los lados izquierdo y derecho apuntados para que se superpongan un poco en el medio.
Luego puedes averiguar si el humano está a la izquierda, a la derecha o al frente (cuando ambos están encendidos). Básicamente, apila esto sobre el SRF, que le indicará el rango, etc. Está un poco sucio y tiene que hacer algunas suposiciones, pero funciona bien por su simplicidad.
El pseudocódigo para los 2 PIR podría ser algo tan simple como:
La idea es que gire mucho hacia un lado (60 grados) si ve algo en esa área. Si no están frente a usted después del turno, gire un poco menos hacia el lado que los está viendo. Sigue repitiendo y reduciendo la cantidad de vueltas hasta que estén frente a ti, luego hacia adelante. Recuerde que no gira tanto (restablezca el ángulo) una vez que están al frente porque no se moverá 'fuera del alcance' tan rápido.
Realmente me sorprendió lo bien que funciona realmente este algoritmo (lo usamos para juguetes de persecución automatizados y tuvimos que ralentizarlo / atontarlo porque golpeaba / atrapaba a un robot controlado por humanos con demasiada facilidad).
Ambos sensores están disponibles en Pololu (sin afiliación):
Detector de infrarrojos pasivos
Sonar Range Finder
fuente
Un tipo de sensor más reciente que se puede utilizar son las matrices de temperatura basadas en MEMS de Omron (rango D6T) o Excelitas (DigiPile). Estos, a diferencia de los elementos PIR, miden temperaturas absolutas y, por lo tanto, permiten distinguir entre las temperaturas de fondo y de primer plano y detectar el movimiento y la presencia estática de las fuentes de temperatura.
fuente
un sensor capacitivo podría funcionar, es realmente barato de fabricar, solo papel de aluminio y algunas resistencias, puede detectar carne, pero no estoy seguro de si no detecta nada más que carne, puede usar 3 para triangular
fuente
No puedo decir si esto es más fácil, pero posiblemente podría usar la biblioteca Eulerian Video Magnification para detectar el pulso de una persona.
En ese caso, estaría buscando una fluctuación en el video que coincidiera con el rango esperado de pulsos humanos. También necesitaría una imagen clara de una parte del cuerpo que exhibiera el pulso visible.
También ha habido algo de trabajo ( ejemplo 1 , ejemplo 2 ) explorando la detección de rostros basada en hardware. Las cámaras digitales de hace unos años tenían esta capacidad, que era esencialmente una red neuronal altamente optimizada diseñada para decir "si este cuadrado contiene una cara o no" ... luego simplemente itera sobre un conjunto de cuadrados predefinidos en la imagen capturada.
fuente
Intenté usar PIR pero tiene problemas de manejo y demoras. No es una opción eficiente para la detección humana para ser honesto. Puede usar la técnica de detección capacitiva, ya que es la forma más barata y fácil de detección humana (una opción inteligente) y también es menos compleja. Puede hacer un sensor para usted a un costo muy bajo y es bueno para proyectos pequeños. He usado uno en mi proyecto "Robot de detección humana". Puedes ver mi video en: Detección Humana Basada en Capacitación
fuente
Una solución sin metal que probablemente se volverá cada vez más popular en los próximos años sería descargar su tarea de procesamiento de datos pesados (por ejemplo, reconocer a un humano en una imagen) a un servicio en la nube. Eso supone que su dispositivo está conectado a Internet. Aquí hay un ejemplo con la Raspberry Pi y la API de Google Cloud Vision: https://www.dexterindustries.com/howto/use-google-cloud-vision-on-the-raspberry-pi/ . Tenga en cuenta que requiere una suscripción a Google Cloud después de un período de prueba, pero algunas otras API de visión en la nube (Amazon, Microsoft Azure, ...) pueden incluso ofrecer sus servicios de forma gratuita si envía menos de N solicitudes por mes a sus servidores .
Otra solución para el procesamiento de datos pesados en plataformas pequeñas sería descargar el trabajo a un dispositivo similar a una unidad de memoria en su robot con una unidad de procesador dedicada para ejecutar modelos de aprendizaje automático ya entrenados (por ejemplo, Movidius Neural Compute Stick con Raspberry PI: https : //medium.com/deep-learning-turkey/a-brief-guide-to-intel-movidius-neural-compute-stick-with-raspberry-pi-3-f60bf7683d40 ). Esto también funciona sin conexión. Todavía son un poco caros para proyectos de hobby, pero espero que su costo baje como todo.
fuente