Irgendwelche Ideen, um IR-LEDs während der Positionsverfolgung identifizierbar zu machen?

Hintergrund

Johnny Lee demonstrierte verschiedene interessante Ideen (detailliert zB in diesem Video sowie auf dieser Seite ), die die Infrarotkamera einer Wii-Fernbedienung nutzen. Die IR-Kamera hat eine Auflösung von 1024 x 768 und wurde entwickelt, um die 4 hellsten infrarotbeleuchteten Punkte in ihrer Sicht bei 100 Hz zu positionieren. Jeder dieser 4 "Punkte" könnte eine sich bewegende Markierung in Form von z. B. einer Infrarot-LED sein - die Emission der LED wird von der Kamera erfasst, die wiederum bei 100 Hz die Positionsdaten des IR-"Blobs" ausgibt. beobachtet. Dies ermöglicht ein schnelles und kostengünstiges Do-it-yourself-Positionsverfolgungssystem.

Problem

Wenn im obigen Aufbau jede IR-LED nicht nur eingeschaltet, sondern auch irgendwie eindeutig IDENTIFIZIERBAR gemacht wird, ergeben sich viele interessante Möglichkeiten. Beispielsweise würde dies eine kontinuierliche Positionsverfolgung jeder Markierung im Raum eindeutig (dh mit Kenntnis darüber, welcher Blob welcher ist) ermöglichen. Da jede IR-LED-Markierung einzigartig ist, bedeutet dies außerdem, dass das Setup auf eine beliebige Anzahl von Punkten (z. B. 50 Markierungen) anstatt nur auf die 4 hellsten Punkte erweitert werden kann.

Die Frage ist: Angenommen, Sie beginnen damit, jeden IR-LED-Marker mit einem Mikrocontroller zu verbinden, was wäre der effektivste Weg, um das obige Setup so zu erweitern, dass jeder IR-LED-Marker eindeutig IDENTIFIZIERT wird? Ich beschreibe unten grob einen Ansatz – gibt es einen vielseitigeren oder einfacheren Ansatz als diesen, oder können vielleicht Verbesserungen daran vorgenommen werden?

Zuerst eine Methode, die NICHT vielversprechend ist: Da jede Infrarot-MarkerLED mit einem Mikrocontroller verbunden ist, könnten Sie jede MarkerLED in einem einzigartigen Muster blinken lassen. Aber die IR-Kamera hat nur eine Bildwiederholfrequenz von 100 Hz. Wenn es also 50 LEDs gäbe, wäre es schwierig, für jede ein einzigartiges Muster einzufügen, ohne dass die effektive Positionsverfolgung der Punkte durch die Kamera wirklich langsam wird.

Unten ist eine grobe Idee, die ich gerade überlege (verfolgt und identifiziert 50 IR-LED-Marker):

  • Beginnen Sie mit der Markierung eines einfachen IR-Detektors neben der IR-Kamera, deren beide Ausgänge synchron von einem gemeinsamen Mikrocontroller oder Computer gelesen/verfolgt werden.

  • Nehmen wir an, es gibt 50 Marker. Für jede MarkerLED/Microcontroller-Schaltung fügen Sie auch eine zweite IR-LED hinzu, die als IdentifierLED bezeichnet wird, sodass für jeden Marker ein Paar IR-LEDs vorhanden ist, die beide vom Mikrocontroller gesteuert werden.

  • Für eine gegebene Markierung wird die Markierungs-LED nur für genau ein spezifisches 20-Millisekunden-Fenster jeder Sekunde eingeschaltet, damit ihre Position verfolgt werden kann (jede Markierung hat ihr eigenes 20-ms-Fenster). Während desselben speziellen 20-ms-Fensters wird die entsprechende Identifier-LED in einer bestimmten Weise durch den Mikrocontroller mit einer hohen Frequenz (z. B. 38 kHz) gepulst, wodurch ein eindeutiges Muster/eine eindeutige ID für diese spezielle Markierung eingerichtet wird.

  • Und das gleiche für die verbleibenden 49 Marker nacheinander, jeder mit seinem eigenen unterschiedlichen 20-Millisekunden-Fenster und seinem eigenen hochfrequenten Erkennungsmuster. Das kümmert sich um die Seite der Marker.

  • Nun zur Sensorseite: Für jedes aufeinanderfolgende 20-Millisekunden-Fenster während einer Sekunde erkennt die IR-Kamera die Position eines bestimmten Markers (dessen 20-Millisekunden-Fenster es ist) über die entsprechende MarkerLed. Gleichzeitig erkennt der IR-Detektor anhand des detektierten Musters der entsprechenden IdentifierLED, UM WELCHEN Marker es sich handelt.

  • Und diese Positions- und Identifikationsverfolgung wird für alle fünfzig der 20-Millisekunden-Fenster innerhalb jeder Sekunde fortgesetzt.

  • Somit werden alle 50 Markierungen verfolgt, wobei der verfolgungsseitige Mikrocontroller in der Lage ist, die Daten jeder Markierung einmal pro Sekunde zu aktualisieren.

Probieren Sie 2D- oder 3D-Tracking aus? Falls 2D: Was für eine Oberfläche?
Mit einer solchen Kamera ist es möglich, 2D-Tracking in der Luft (oder auf jeder Oberfläche) durchzuführen. Beachten Sie, dass die Daten tatsächlich ziemlich pseudo-3D sind, da die Kameraausgabedaten auch die Intensität jedes der 4 hellsten Blobs enthalten und die Tiefe/3. Achse aus der Intensität abgeleitet werden könnte). Natürlich könnte das Tracking durch einfaches Hinzufügen einer zweiten Kamera und Trilateration in echtes 3D umgewandelt werden.
So wie Sie das Problem beschrieben haben, beschränkt Sie die Hardware auf die Verfolgung von nur 4 Punkten. Ich bin mir nicht sicher, ob es veränderbar ist. Wenn Sie Zugriff auf die vollständigen Daten einer IR-Kamera haben möchten und Daten über Ihren Sensor freigeben können, wäre dies hilfreich.
@yaniv: Die Kamera / der Sensor gibt lediglich die X- und Y-Koordinaten der VIER hellsten Infrarotpunkte aus, die sie sieht. Ich kann die Kamera/den Sensor nicht ändern; Daher stellt sich die Frage, wie ich mein gesamtes Setup erweitern kann, um das Identifizieren und Verfolgen mehrerer LEDs zu ermöglichen, auch wenn es mich einen Teil der Geschwindigkeit / Aktualisierungsrate kostet.

Antworten (3)

Anstatt den Markierungs-ID-Code von der Markierung zu einem zentralen Empfänger zu übertragen, wäre es vielleicht einfacher, den Markierungs-ID-Code von einem zentralen Sender zu der Markierung zu übertragen.

Der zentrale Sender (vielleicht ein 38-kHz-IR-Sender oder ein drahtloser Sender) würde tatsächlich "Marker Nummer 22, bitte für die nächsten 20 ms auf meiner Markierung einschalten: JETZT" senden. (Idealerweise sendet der zentrale Sender, während diese Markierung für diese 20 ms leuchtet, die ID der nächsten einzuschaltenden Markierung).

Da dieser eine zentrale Sender das Timing steuert, müssen Sie sich nicht mit Markern auseinandersetzen, die nicht mehr synchron sind und versehentlich gleichzeitig senden.

Hoffentlich können Sie diesen zentralen Sender nahe genug am Positionstracker platzieren, sodass, wenn ein Marker die vom zentralen Sender gesendeten Befehle nicht sehen kann, dieser Marker sowieso nicht im Sichtfeld des Positionstrackers ist.

Das gibt Ihnen auch die Flexibilität, die Daten, die Sie von Ihrem Positionstracker zurückerhalten, zu verwenden, um dynamisch anzupassen, welche Markierungen Sie auswählen:

  • Wenn einige Markierungen bewegungslos oder extrem langsam zu sein scheinen, müssen Sie sie vielleicht nur einmal alle 3 Sekunden oder so überprüfen.
  • Vielleicht können Sie die letzten Positionen von mehr als einem Marker gleichzeitig überprüfen; so etwas wie "OK, Markierungsnummer 22 und 23, bitte schalten Sie für die nächsten 20 ms auf meine Markierung: JETZT".
  • Wenn einige Markierungen von diesem Aussichtspunkt aus nicht sichtbar sind, müssen Sie vielleicht nur etwa alle 3 Sekunden überprüfen, ob einige von ihnen wieder in das Gesichtsfeld eingetreten sind.
  • Die Zeitschlitze, die Sie mit den obigen Techniken freigeben, könnten verwendet werden, um die verbleibenden Markierungen mit einer etwas schnelleren Aktualisierungsrate zu verfolgen, als wenn Sie einfach jede Markierung in einem festen Muster durchlaufen würden.
  • Wenn z. B. Marker Nr. 22 so nahe an Marker Nr. 23 ist, dass der Empfänger von Nr. 23 geblendet wird, wenn Marker Nr. 22 aktiv ist, können Sie die Reihenfolge, in der Sie die Marker einschalten, mischen, sodass die Meldung „#23 bitte einschalten“ angezeigt wird ein paar Slots vor der Meldung "#22 bitte einschalten".
Ich sehe viele interessante Routen mit der Idee der dynamischen Anpassung; schätze den Gedanken, den du in diese Sache gesteckt hast! Ich werde diese Seite wahrscheinlich mit meiner eigenen Antwort aktualisieren, die auf einem Ableger davon in Kombination mit meiner ursprünglichen Methode basiert.

Sie haben eine Art Initialisierungs-/Broadcast-Herzschlag vergessen, sonst würde der Marker nicht wissen, wann er aufleuchten soll. Je nachdem, wie gut Ihre Sensoren und LEDs sind, können Sie möglicherweise verschiedene Abschnitte des IR-Spektrums verwenden. So konnte man eine LED mit 300 µm Wellenlänge von einer mit 200 µm unterscheiden. Wenn Sie mehrere Kameras haben, können Sie verschiedene Optiken / Filter verwenden (ist machbar). Andernfalls investieren Sie in eine Kamera mit einer höheren Bildrate und lassen Sie jeden Marker in einem einzigartigen Muster blinken. Das Muster muss nicht nur ein/aus sein, sondern kann auch die Frequenzmodulation nutzen.

(1) Init Broadcast: Ich hatte vor, die LEDs zu "synchronisieren" und dann jedem Marker einen Offset mit einem Vielfachen von 20 ms (alles im Code) zu geben, damit sie sich zeitlich autonom abwechseln, aber ich denke, Ihre Methode ist robuster. Die Begrüßung von der Sensorseite könnte ein 38-kHz-Muster sein. (2) Welche Strategie schlagen Sie vor, wenn Sie verschiedene Teile des Spektrums verwenden? (vorausgesetzt, LEDs wurden tatsächlich so gewählt, dass sie in leicht unterschiedlichen Wellenlängen emittieren) (3) Eine bessere Kamera - wenn Sie mit besser eine noch höhere Bildrate meinen - müsste VIEL schneller sein, damit die Markierungen in einem einzigartigen Muster blinken können. NEIN?
@boardbite Wenn Sie synchronisieren, müssen Sie sicherstellen, dass die LEDs synchron bleiben. Deine Strategie klingt soweit vernünftig. Für den Rest: Ich habe meinen Beitrag aktualisiert.
Hmm, bezüglich der Frequenzmodulation mit nur einer LED: Ich versuche mir vorzustellen, wie das gehen könnte. Für eine garantierte Positionserkennung des Blobs muss die Markierung mindestens 20 ms lang STETIG eingeschaltet/für die IR-Kamera sichtbar sein. Aber da die LED während dieser Zeit STÄNDIG eingeschaltet sein muss, wie könnte ein frequenzmoduliertes Muster durch dieselbe LED während dieser selben Zeit auftreten?

Ich nehme an, es gibt eine Art leistungsstarken Computer, der jedes Videobild verarbeitet und Dinge wie (ungefähr) die Helligkeit jeder IR-LED messen kann.

Modulieren Sie einfach die Helligkeit jeder IR-LED mit einer anderen Frequenz und lassen Sie den Computer die Frequenz jeder einzelnen erkennen.

Nehmen wir zuerst einen einfachen Fall: LED1 würde seine Helligkeit in einer 10-Hz-Sinuswelle von 50 % bis 100 % Helligkeit variieren. Der Computer kann nun die Helligkeit der LED verfolgen, sie durch einen Tiefpassfilter laufen lassen und Nulldurchgänge verwenden, um ihre Frequenz zu messen. LED2 würde beispielsweise bei 15 Hz variieren, und der PC könnte leicht zwischen ihnen unterscheiden.

Es konnte bis zu einer Sekunde dauern, bis der PC eine gute Frequenzsperre für beide hatte.

OK, aber das wird nicht für 50 LEDs funktionieren. Es ist schwer, so viele unterscheidbare Frequenzen zu haben, die von einer 100-Hz-Kamera in kurzer Zeit abgetastet werden können. Die Lösung ist die Verwendung von DTMF!

DTMF ist eine Methode, die auf altmodischen Telefonen verwendet wird, um Daten mit Tönen zu senden. 8 Töne sind definiert, und der Sender würde gleichzeitig zwei verschiedene Töne senden, und der Empfänger würde das Tonpaar in einem Raster nachschlagen, um eines von 16 Ergebnissen auszuwählen.

DTMF

Jetzt könnten Sie einfach ein 7x7-Raster verwenden, um 49 verschiedene IR-LEDs zu haben. Der Computer sollte 14 Frequenzen unterscheiden können, wenn er die LEDs jeweils etwa 1 Sekunde lang sehen kann. Sie würden viel niedrigere Frequenzen als die DTMF-Frequenzen verwenden, sagen wir 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32 Hz.

Verwenden Sie alternativ nur 8 Frequenzen und wählen Sie zwei der 8 aus, um 56 (8x7) Kombinationen zu erhalten.

Das ist absolut faszinierend, danke. Ich recherchiere diese Idee jetzt weiter, um zu sehen, wie gut sie in das Identifikationsschema passen könnte.
Ich glaube nicht, dass das funktioniert, wenn die Kamera nur die vier hellsten LEDs meldet.
Nein, ich vermute, das würde es nicht. Er braucht ein anderes System, damit das funktioniert.
@BenVoigt und Rocketmagnet: Nun, die vier hellsten Punkte sind eine integrale Einschränkung der Kamera; Ich nehme es als gegeben in das Problem. Aber die größte Herausforderung, der ich gegenüberstehe, ist die Identifizierung, nicht die Quantität. Das heißt, ich würde gut mit einer kleineren Aktualisierungsrate für mehr LEDs arbeiten (z. B. 100 Hz, verteilt auf 50 LEDs mit 4 Punkten / Sekunde, impliziert, dass alle fünfzig mit 8 Hz verfolgt werden könnten). Das heißt, ein Grund, warum dieses Helligkeitsschema die Identifizierung NICHT zu lösen scheint, ist, dass sich die IR-LEDs auch in der Z-Achse (nahe-fern) bewegen; ihre Intensität ändert sich unkontrolliert. Irgendwelche Gedanken?
@BenVoigt und Rocketmagnet: Beachten Sie übrigens, dass ich (wie in der Frage angegeben) damit einverstanden bin, jeder Markierung eine zweite LED hinzuzufügen (also ein Paar). Während also die Haupt-LED in jedem Paar nur als stabile Positionsmarkierung fungiert, kann die 2. LED nach Bedarf für jedes Identifikationsschema variiert werden. (Zum Beispiel habe ich in der Frage ein kHz-Pattern-Pulsing vorgeschlagen.) Beachten Sie außerdem, dass ich am Fixpunkt an der Kamera mit einem zweiten Erkennungsschema einverstanden bin. Das zu lösende Problem besteht selbst in diesem Fall darin, die beiden Erkennungen für jeden Marker so zu korrelieren, dass sowohl eine Identifizierung als auch eine Position möglich sind.