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.
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.
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.