Forum: FPGA, VHDL & Co. Selbstbau "Maussensor"


von DIC-FPGA (Gast)


Lesenswert?

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!

von -gb- (Gast)


Lesenswert?

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.
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Martin S. (strubi)


Lesenswert?

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.

von Gustl B. (gustl_b)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Gustl B. (gustl_b)


Lesenswert?

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.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

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.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Markus K. (markus-)


Lesenswert?

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.

von Walter T. (nicolas)


Lesenswert?

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

von Gustl B. (-gb-)


Lesenswert?

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
Noch kein Account? Hier anmelden.