Hallo zusammen, Mich würde es mal reizen einen optischen Positionssensor (z.B. https://www.pixart.com/products-detail/4/PMW3389DM-T3QU ) selbst zu bauen. D.h. FPGA mit Kamera und Datenausgabe per UART an den PC. Hat hier sowas schonmal jemand gemacht und kann mir Tipps geben. Im besonderen würden mich Einschätzungen zur FPGA-Größe sowie einer geeigneten Kamera interessieren. Beste Grüße und vielen Dank!
So Sensoren in optischen Mäusen haben eine recht geringe Auflösung, siehe https://www.richis-lab.de/mouse.htm . Hier der https://www.richis-lab.de/images/mouse/d07.jpg hat 34x32 Pixel. Hier https://www.richis-lab.de/images/mouse/m08.jpg eine ältere Maus aus dem Jahr 2000 mit 18x18 Pixeln. Dann brauchst du irgendeine Art Optik und dann musst du Verschiebungen erkennen können. Also zwei Bilder machen und die vergleichen. Und da kommt eines der Probleme: Wenn die Zeit zwischen zwei Bildern zu groß ist, dann kann der Benutzer die Maus so weit bewegt haben, dass die beiden Bilder komplett unterschiedliche Dinge zeigen. Du kannst dann also keine Richtung mehr errechnen. Wie das konkret in Hardware gemacht wird weiß ich nicht, aber wenn man das Photo anguckt, dann hält sich das in Grenzen, ist aber auch nicht ganz wenig. Ich würde das zuerst in der Simulation nachstellen. Bilder Aufnehmen von etwas mit Struktur, z. B. einem Holzbrett im Abstand 10 cm mit Macro. Und zwar so, dass die Bilder eine Bewegung zeigen und jedes Bild auch Teile (den Großteil) des Vorgängerbildes enthält. Du kannst ein Video aufnehmen, langsam über den Tisch fahren, dann die Auflösung runterrechnen auf z. B. 32x32, dann die Einzelbilder rausholen. Die kannst du als Eingangsdaten in eine Testbench für die Simulation stecken und darin mit deiner HDL Beschreibung versuchen eine korrekte Bewegung zu erkennen. Dabei würde ich aber nicht gleich auf HDL und Testbenches gehen, sondern das zuerst in einer Hochsprache, z. B. Python lösen. Da kann man sehr einfach Bilder einlesen und verschiedene Dinge probieren. Wenn das dort funktioniert versuchst du es in HDL zu beschreiben. Und wenn du dann das HDL Modul hast, dann siehst du wie viel Logik/FFs/RAMs/... das braucht und kaufst dir einen passenden FPGA dazu. Das klingt nach einer sehr spannenden Aufgabe, aber es sieht auch nicht trivial aus. Das ist selbst mit guten HDL Kenntnissen und Vorwissen in Signalverarbeitung nicht in wenigen Stunden hingeschrieben sonder dauert eher Wochen.
Beitrag #6617506 wurde von einem Moderator gelöscht.
DIC-FPGA schrieb: > kann mir Tipps geben. Das generelle Stichwort ist "Autokorrelation". Und zwar in 2D. Ich würde das alles komplett offline entwickeln: erst mal mit einem Zeichenprogramm ein paar 32x32-pixelige Bilder mit schönem Kontrast (alles weiß und nur 1 Pixel schwarz) machen und auswerten. Wenn das läuft, den Algo so lange verbessern, bis auch mit einer Kamera gmachte grobe 32x32-Pixel Bilder ausgewertet werden können. Wenn das funktioniert, dann kommt die Hardware ins Spiel. > Im besonderen würden mich Einschätzungen zur FPGA-Größe Nimm das Größte, das du für ein Hobbybudget bekommen kannst. > sowie einer geeigneten Kamera interessieren. Die billigste reicht aus. Und die muss in der Datenmenge sowieso noch reduziert werden. -gb- schrieb: > Wie das konkret in Hardware gemacht wird weiß ich nicht, aber wenn man > das Photo anguckt, dann hält sich das in Grenzen, ist aber auch nicht > ganz wenig. Und genau das ist der Witz dabei: "aufwändig, komplizert und langsam" bekommt man das schnell hin. Es sollte aber "billig, einfach und schnell genug" sein. Und da wirds dann spannend. Dort ist die meiste Arbeit vergraben, denn da wird das Geld verdient. > sonder dauert eher Wochen. Diese Schätzung strahlt aber vor Optimismus. Ich bin mir sicher, dass in den aktuellen Mäusen viele, viele Ingenieursmannjahre stecken. Nur, weil etwas billig an jeder Ecke zu haben ist, bedeutet es nicht, dass es auch automatisch einfach ist. BTW: zum Sammeln von Erfahrungen könnte man das Ganze ja einfach mal eindimensional als Geschwindigkeitsmesser machen, indem man nur 1 Pixelzeile nimmt und aus der "Musterverschiebung" die Geschwindigkeit in der Zeilenrichtung berechnet.
:
Bearbeitet durch Moderator
Das Thema war schon mal aufm Tisch.. Wuerde mir das mal reinziehen: https://people.inf.ethz.ch/pomarc/pubs/HoneggerIROS12.pdf Gab auch mal irgendwo ein Modul mit STM32 und MT9V032-Globalshutter-Sensor, koennte das PX4FLOW gewesen sein. Der MT9V032 (oder 034) in monochrom ist auch DER Sensor fuer solche optischen Navigationsgeschichten. Schlussendlich war's allerdings pragmatischer, sich ein paar alte Avago-Sensoren zu besorgen und die Optik anzupassen.
Lothar M. schrieb: > "aufwändig, komplizert und langsam" bekommt man das schnell hin. Fein. Lothar M. schrieb: > Es sollte aber "billig, einfach und schnell genug" sein. Wurde das hier gefordert? Lothar M. schrieb: > Ich bin mir sicher, dass in den aktuellen Mäusen viele, viele > Ingenieursmannjahre stecken. Natürlich. Lothar M. schrieb: > Nur, weil etwas billig an jeder Ecke zu haben ist, [...] Das war auch nicht gefordert. Es geht drum das schlicht ans Laufen zu bekommen, ohne Chipdesign, ohne Gehäuse, nicht in klein und leicht und auch nicht in sehr günstig. Und das kann man schon in vertretbarer Zeit alleine schaffen.
DIC-FPGA schrieb: > Hallo zusammen, > > Mich würde es mal reizen einen optischen Positionssensor (z.B. > https://www.pixart.com/products-detail/4/PMW3389DM-T3QU ) selbst zu > bauen. D.h. FPGA mit Kamera und Datenausgabe per UART an den PC. Kann man machen. > Hat hier sowas schonmal jemand gemacht und kann mir Tipps geben. Im > besonderen würden mich Einschätzungen zur FPGA-Größe sowie einer > geeigneten Kamera interessieren. Wer solche Fragen stellt kann es allerdings nicht. Wer es kann fängt erst mal an. Der braucht dazu kein Forum. Wer erstmal zu Adam und Eva ein Forum befragen muss, kann es nicht.
Gustl B. schrieb: > Wurde das hier gefordert? Nein, es entstand für mich nur ein wenig der Eindruck und ich wollte es mal erwähnt haben. Dieser Eindruck entsteht für mich immer dann, wenn jemand nach Schätzungen zur "FPGA-Größe" fragt, statt einfach das Design zu implementieren und zu schauen, welches FPGA denn nötig wäre. Oder nach einer "geeigneten Kamera" fragt, offensichtlich ohne sich die handelsüblichen Dokumente und Patente oder den Wikipedia-Artikel zum Thema mal angeschaut zu haben. Und noch ein kleiner Nachtrag zu dem, was ich schrieb: > BTW: zum Sammeln von Erfahrungen könnte man das Ganze ja einfach mal > eindimensional als Geschwindigkeitsmesser machen, indem man nur 1 > Pixelzeile nimmt Man könnte das sogar einfach mit 2 Fototransistoren machen, die nacheinander über die selbe Stelle "fahren" und so zeitversetzt das gleiche Helligkeitsmuster erzeugen. Dahinter 2 ADC und die Auswertung.
Lothar M. schrieb: > Dieser Eindruck entsteht für mich immer dann, wenn jemand nach > Schätzungen zur "FPGA-Größe" fragt, statt einfach das Design zu > implementieren und zu schauen, welches FPGA denn nötig wäre. Das stimmt. Den Eindruck habe ich schon auch ab und zu. Aber wenn Leute dann nicht trotzdem anfangen und entweder scheitern oder zu einem Ziel kommen dann lernt Niemand etwas. Man lernt auch dann wenn man ein paar Tage verbrät, sich einliest und dann eben den Aufwand besser abschätzen kann. Eben deshalb damit man da nichts kauft und dann doch nicht nutzt würde ich erstmal nur in Software anfangen. Das mit den Transistoren ist zwar gut, aber kein Zwischenschritt auf dem Weg zum Ziel. Da kann er auch mit einzelnen fiktiven Helligkeitswerten in der Simulation anfangen. Den Schritt auf die Hardware würde ich erst am Ende wagen.
Wie weiter oben beschrieben, muß die Berechnung relativ fix gehen, um nicht den Bildbereich zu verlassen. Üblicherweise wurde dafür (vor 20 Jahren als ich das gemacht habe) translations- und rotationsinvariante Momente ausgerechnet. Das geht relativ schnell und der Algorithmus läßt sich massiv parallelisieren sowie dann für einen FPGA aufbereiten. Letztlich war es nur noch eine Matrix aus z^-1 Filtern. Sollte ich meine alten Unterlagen dazu noch finden und der TO noch interessedaran haben, würde ich sie bereitstellen.
Hab es gefunden :-) tatsächlich war es schon vor 27 Jahren ;-) Anbei meine damaligen Berechnungen (Achtung viel Mathematik) aber zum Schluss ist die Lösung ganz einfach.
Ich möchte noch darauf hinweisen, dass diese Sensoren oft sehr hohe Frameraten haben. So scheinen 500fps das Minimum zu sein, aber auch 5.000fps sind nicht ungewöhnlich. https://media.digikey.com/pdf/Data%20Sheets/Avago%20PDFs/ToolKitSelectionGuide.pdf Bei normalen Imagern kann man ja oft nur einen Teil der Zeilen auslesen, damit könnte man natürlich hohe Frameraten erreichen. Man muss dazu aber natürlich ein vernünftiges Datenblatt haben.
Lothar M. schrieb: > BTW: zum Sammeln von Erfahrungen könnte man das Ganze ja einfach mal > eindimensional als Geschwindigkeitsmesser machen, indem man nur 1 > Pixelzeile nimmt und aus der "Musterverschiebung" die Geschwindigkeit in > der Zeilenrichtung berechnet. Der Autofokus einer Spiegelreflexkamera arbeitet genau so (Phasen-Autofokus).
Markus K. schrieb: > Ich möchte noch darauf hinweisen, dass diese Sensoren oft sehr hohe > Frameraten haben. Und die brauchen sie vermutlich auch weil sonst bei schneller Mausbewegung die Einzelbilder nicht mehr überlappen würden. Ist aber erstmal egal, man kann das ja rein in der Simulation entwickeln und sich dann passende Hardware kaufen für einen Demonstrator.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.