¿Alguna idea para hacer que los LED IR sean identificables durante el seguimiento de posición?

Fondo

Johnny Lee demostró varias ideas interesantes (detalladas, por ejemplo, en este video y en esta página ) que aprovechan la cámara infrarroja de un Wii-Remote. La cámara IR tiene una resolución de 1024X768 y está diseñada para rastrear la posición de los 4 puntos iluminados por infrarrojos más brillantes en su vista, a 100 Hz. Cada uno de estos 4 "puntos" podría ser un marcador en movimiento en forma de, por ejemplo, un LED infrarrojo: la emisión del LED es detectada por la cámara, que a su vez emite a 100 Hz, los datos de posición de la "mancha" IR. observado. Lo que permite un sistema de seguimiento de posición de bricolaje rápido y económico.

Problema

En la configuración anterior, si cada LED IR no solo se enciende, sino que también se hace IDENTIFICABLE de alguna manera, daría lugar a muchas posibilidades interesantes. Por ejemplo, esto permitiría realizar un seguimiento continuo de la posición de cada marcador en el espacio de forma única (es decir, con conocimiento de qué blob es cuál). Además, tener cada marcador LED IR único también significa que la configuración podría extenderse a cualquier número de puntos (digamos 50 marcadores) en lugar de solo los 4 puntos más brillantes.

La pregunta es: suponiendo que comience conectando cada marcador LED IR a un microcontrolador, ¿cuál sería la forma más eficaz de ampliar la configuración anterior para que cada marcador LED IR se IDENTIFIQUE de forma única? Describo aproximadamente un enfoque a continuación: ¿hay algún enfoque más versátil o más simple que este, o quizás se le puedan hacer mejoras?

Primero, un método que NO es prometedor: dado que cada MarkerLED infrarrojo está conectado a un microcontrolador, podría hacer que cada MarkerLED parpadee en un patrón único. Pero la cámara IR solo tiene una frecuencia de actualización de 100 Hz, por lo que si hubiera 50 LED, sería difícil encajar en un patrón único para cada uno, sin que el seguimiento efectivo de la posición de la cámara de los puntos se vuelva realmente lento.

A continuación se muestra una idea aproximada que estoy considerando actualmente (rastrea e identifica 50 marcadores LED IR):

  • Comience por etiquetar un detector IR simple al lado de la cámara IR, cuyas salidas se leen/rastrean sincronizadas por un microcontrolador o computadora común.

  • Ahora, digamos que hay 50 marcadores. Para cada circuito MarkerLED/Microcontrolador, también agrega un segundo LED IR, llamado IdentifierLED, por lo que hay un par de LED IR para cada marcador, ambos controlados por el microcontrolador.

  • Para un marcador dado, para que se pueda rastrear su posición, el MarkerLED solo se enciende durante exactamente una ventana específica de 20 milisegundos de cada segundo (cada marcador tiene su propia ventana de 20 ms). Durante esa misma ventana particular de 20 milisegundos, el IdentifierLED correspondiente es pulsado de una manera específica por el microcontrolador a alta frecuencia (por ejemplo, 38 kHz), configurando un patrón/ID único para ese marcador específico.

  • Y lo mismo para los 49 Marcadores restantes consecutivamente, cada uno con su propia ventana diferente de 20 milisegundos y su propio patrón de identificación de alta frecuencia. Eso se ocupa del lado de las cosas de los marcadores.

  • Ahora, en el lado de la detección de las cosas: para cada ventana consecutiva de 20 milisegundos durante un segundo, la cámara IR detecta la posición de un marcador específico (de quién es la ventana de 20 milisegundos) a través del MarkerLed correspondiente. Al mismo tiempo, el IR-Detector identifica QUÉ marcador es, a partir del patrón detectado del IdentifierLED correspondiente.

  • Y este seguimiento de posición e identificación continúa durante las cincuenta ventanas de 20 milisegundos dentro de cada segundo.

  • Por lo tanto, se realiza un seguimiento de los 50 marcadores, con el microcontrolador del lado de seguimiento capaz de actualizar los datos de cada marcador una vez por segundo.

¿Intentas el seguimiento 2D o 3D? Si 2D: ¿Qué tipo de superficie?
Usando una de esas cámaras, es posible hacer un seguimiento 2D en el aire (o en cualquier superficie). Tenga en cuenta que los datos son, de hecho, prácticamente pseudo-3D, porque los datos de salida de la cámara también incluyen la intensidad de cada una de las 4 manchas más brillantes, y la profundidad/3er eje podría deducirse de la intensidad). Por supuesto, con solo agregar una segunda cámara y usar la trilateración, el seguimiento podría hacerse en 3D real.
Por cómo describió el problema, el hardware lo limita a rastrear solo 4 puntos. No estoy seguro de que sea modificable. Si su idea es tener acceso a los datos completos de una cámara IR, si puede compartir datos sobre su sensor, sería útil.
@yaniv: la cámara/sensor simplemente emite las coordenadas X e Y de los CUATRO puntos infrarrojos más brillantes que ve. No puedo cambiar la cámara/sensor; Por lo tanto, la pregunta es cómo puedo agregar a toda mi configuración para que sea posible identificar y rastrear múltiples LED, incluso si me cuesta algo de velocidad/tasa de actualización.

Respuestas (3)

En lugar de transmitir el código de identificación del marcador desde el marcador a un receptor central, tal vez sería más sencillo transmitir el código de identificación del marcador desde un transmisor central al marcador.

El transmisor central (quizás un transmisor IR de 38 kHz o algún transmisor inalámbrico) enviaría, en efecto, "Marcador número 22, enciéndalo durante los próximos 20 ms en mi marca: AHORA". (Idealmente, mientras ese marcador brilla durante esos 20 ms, el transmisor central envía la ID del siguiente marcador para encender).

Dado que ese transmisor central controla el tiempo, no tendrá que lidiar con marcadores que se desincronizan y transmiten accidentalmente al mismo tiempo.

Con suerte, puede colocar ese transmisor central lo suficientemente cerca del rastreador de posición, de modo que si algún marcador no puede ver los comandos enviados por el transmisor central, ese marcador no estaría en el campo visual del rastreador de posición de todos modos.

Eso también le brinda la flexibilidad de usar los datos que obtiene de su rastreador de posición para adaptar dinámicamente los marcadores que seleccione:

  • Si algunos marcadores parecen estar inmóviles o se mueven con extrema lentitud, tal vez solo necesite verificarlos una vez cada 3 segundos más o menos.
  • Tal vez pueda verificar las últimas posiciones de más de un marcador a la vez; algo así como "OK, marcador número 22 y 23, enciéndalo durante los próximos 20 ms en mi marca: AHORA".
  • Si algunos marcadores no son visibles desde este punto de vista, tal vez solo necesite verificar si alguno de ellos ha vuelto a ingresar al campo visual una vez cada 3 segundos más o menos.
  • Los intervalos de tiempo que libere con las técnicas anteriores podrían usarse para rastrear los marcadores restantes a una tasa de actualización algo más rápida que si simplemente recorriera cada marcador en un patrón fijo.
  • Si, por ejemplo, el marcador n.º 22 está tan cerca del marcador n.º 23 que el receptor del n.º 23 queda cegado cuando el marcador n.º 22 está activo, puede mezclar el orden en que enciende los marcadores para que aparezca el mensaje "n.º 23, por favor, enciéndalo". unos espacios antes del mensaje "#22, por favor, enciéndalo".
Estoy viendo muchas rutas interesantes con la idea de adaptación dinámica; aprecio el pensamiento que pones en esto! Probablemente actualizaré esta página con mi propia Respuesta basada en una rama de esto combinada con mi método original.

Olvidó algún tipo de latido del corazón de inicialización/transmisión, de lo contrario, el marcador no sabría cuándo encenderse. Dependiendo de qué tan buenos sean sus sensores y LED, es posible que pueda usar diferentes segmentos del espectro IR. De esta manera podría distinguir un LED con una longitud de onda de 300 µm de uno con 200 µm. Si tiene varias cámaras, puede usar diferentes ópticas/filtros (es factible). De lo contrario, invierta en una cámara con una velocidad de cuadro más alta y deje que cada marcador parpadee en un patrón único. El patrón no solo debe estar encendido/apagado, sino que también puede aprovechar la modulación de frecuencia.

(1) Transmisión inicial: planeé "sincronizar" los LED y luego proporcionar a cada marcador un desplazamiento con un múltiplo de 20 ms (todo en el código), para que se turnen de forma autónoma en virtud del tiempo, pero creo que su método es más robusto. El saludo del lado del sensor podría ser un patrón de 38 kHz. (2) ¿Cuál es la estrategia que sugiere con el uso de diferentes partes del espectro? (suponiendo que los LED se eligieron para emitir en longitudes de onda ligeramente diferentes) (3) Una cámara mejor, si por mejor quiere decir una velocidad de fotogramas aún más alta, tendría que ser MUCHO más rápida para permitir que los marcadores parpadeen en un patrón único, ¿no?
@boardbite si sincroniza, debe garantizar que los LED permanezcan sincronizados. Tu estrategia suena razonable hasta ahora. Por lo demás: actualicé mi publicación.
Hmm, con respecto a la modulación de frecuencia con solo un LED: estoy tratando de imaginar cómo podría ir. Para garantizar la detección de la posición de la mancha, como mínimo, el marcador debe estar CONTINUAMENTE encendido/visible para la cámara IR durante al menos 20 ms. Pero dado que el LED tiene que estar CONTINUAMENTE encendido durante ese tiempo, ¿cómo podría ocurrir un patrón modulado en frecuencia por el mismo LED durante este mismo tiempo?

Supongo que hay algún tipo de computadora poderosa que procesa cada cuadro de video y puede hacer cosas como medir (aproximadamente) el brillo de cada LED IR.

Simplemente modula el brillo de cada LED IR a una frecuencia diferente y deja que la computadora reconozca la frecuencia de cada uno.

Considere primero un caso simple: el LED1 variaría su brillo en una onda sinusoidal de 10 Hz, del 50 % al 100 % de brillo. La computadora ahora puede rastrear el brillo del LED, ejecutarlo a través de un filtro de paso bajo y usar el cruce por cero para medir su frecuencia. LED2 estaría variando a, digamos, 15 Hz, y la PC podría distinguirlos fácilmente.

Podría tomar hasta un segundo antes de que la PC obtuviera un buen bloqueo de frecuencia en ambos.

Está bien, pero esto no va a funcionar para 50 LED. Es difícil tener tantas frecuencias distinguibles que una cámara de 100 Hz pueda muestrear en un breve espacio de tiempo. ¡La solución es usar DTMF!

DTMF es un método usado en teléfonos antiguos para enviar datos usando tonos. Se definen 8 tonos, y el transmisor enviaría dos tonos diferentes al mismo tiempo, y el receptor buscaría el par de tonos en una cuadrícula para elegir uno de los 16 resultados.

DTMF

Ahora, podría usar fácilmente una cuadrícula de 7x7 para permitirle tener 49 LED IR diferentes. La computadora debería poder distinguir entre 14 frecuencias si puede ver los LED durante aproximadamente 1 segundo cada uno. Usaría frecuencias mucho más bajas que las DTMF, digamos, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32 Hz.

como alternativa, use solo 8 frecuencias y seleccione dos de las 8 para obtener 56 (8x7) combinaciones.

Esto es absolutamente fascinante, gracias. Ahora estoy investigando esta idea más a fondo para ver qué tan bien podría encajar en el esquema de identificación.
No creo que esto funcione donde la cámara solo informa los cuatro LED más brillantes.
No, imagino que no. Necesita un sistema diferente para que esto funcione.
@BenVoigt y Rocketmagnet: Bueno, los cuatro puntos más brillantes son una restricción integral de la cámara; Lo estoy tomando como un hecho en el problema. Pero el principal desafío al que me enfrento es la identificación, no la cantidad. Es decir, estaría bien trabajar con una tasa de actualización más pequeña para más LED (por ejemplo, 100 Hz distribuidos entre 50 LED con 4 puntos/segundo implica que los cincuenta podrían rastrearse a 8 Hz). Dicho esto, una de las razones por las que este esquema de brillo parece NO resolver la identificación es porque los LED IR también se moverán en el eje Z (cerca-lejos); su intensidad cambiará de manera descontrolada. ¿Alguna idea?
@BenVoigt y Rocketmagnet: Por cierto, tenga en cuenta que (como se indica en la Pregunta) estoy de acuerdo con agregar un segundo LED a cada marcador (por lo tanto, un par). Entonces, mientras que el LED principal de cada par solo actúa como un marcador de posición estable, el segundo LED se puede variar según sea necesario para cualquier esquema de identificación. (Por ejemplo, propuse pulsos de patrón de kHz en Ques.) Y del mismo modo, tenga en cuenta que, en el punto fijo de la cámara, estoy de acuerdo con tener un segundo esquema de detección de elección. El problema a resolver, incluso en ese caso, es cómo correlacionar las dos detecciones para cada marcador de forma que permita tanto la identificación como la posición.