PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kamerasensor?



Richard
15.03.2009, 18:46
Moin moin allerseits.

Die oft gestellte Frage wie sich ein Bot orientieren kann läßt mir
so recht keine Ruhe. Wegstrecken Messung ungenau, GPS noch
ungenauer, Laserscanner + Auswertung zu teuer, Baken nicht
Autonom u.s.w.

Wenn man sich so eine Optische Mouse näher ansieht ist dort
eine kleine 16x16 (?) Pixel Kamera verbaut und diese Kamera
macht eine Bildauswertung auf die Untergrund Bewegung.

Das sollte doch auch mit einer normalen Kamera auf dem Bot
montiert, möglich sein? Verschiebt sich ein kleiner ausgesuchter
Bildbereich aus dem aufgenommenen Hintergrund, sollte damit
auch der Mousezeiger oder eine Motorsteuerung machbar sein.

Es gibt ja auch Bildvermessung, also sollte auch eine Entferhnung
ermittelt werden können.

Meine Frage jetzt, warum hat das SO noch keiner versucht? Das ganze
große Bild muß ja nicht Ausgewertet werden ein kleiner Bereich sollte
ausreichen und die Bilddaten stehen gewöhnlich an fest vorgegebenen
Speicherstellen. Ich stelle mir z.B. vor aus den Farb oder Graustufenwerten
eines Bereiches einen Mittelwert zu bilden und bei einer gewissen Abweichung
in den Nachbarbereich gegensteuern.

Als Beispiel: http://wiki.unixboard.de/index.php/BMP

Hier einmal den Aufbau einer BMP, wenn man daraus eine Matrix abgreift
sollten sich Verschiebungen in dieser Matrix doch bemerkbar machen
und auswerten lassen?

Allerdings bin ich kein Profi in Bildverarbeitung und sehe das möglicherweise
etwas "zu grün".

Trotzdem würde ich mich freuen wenn dieses Thema aufgenommen und
Diskutiert würde, ich denke das dort einige Möglichkeiten zu finden sind.

Grüße Richard

Vitis
15.03.2009, 22:21
wer sagt das dies noch keiner probiert hat? ;)

Das Problem ist die Platform ...
Hab mal mit Bildverarbeitung am AVR rumgewerkelt,
per Sobel Kanten erkennen und verschiedene Suchalgorythmen
bei Auflösung von 320 x 240 in 32 Graustufen (waren mehr, habs dann
verringert) ... der Rechenaufwand und auch RAM-Bedarf für die Geschichte war
immens, deutlich über meiner gewählten Plattform.
Aber machbar.
Hab dann Richtung FPGA weitgergemacht, aber mangels Zeit da noch
keine vorzeigbaren Ergebnisse erzielt :(

vohopri
16.03.2009, 12:50
Hallo Richard,

wer sagt, dass es hier die Bestrebungen mit Kamera zu navigieren nicht gibt? Das Forum hat auch eine Suchfunktion und in meiner Signatur ist zur Zeit ein Link auf mein Projekt.

Da ich den Speicher- und Rechenaufwand von vornherein (zumindest für die Entwicklungsphase) als recht gross eingeschätzt habe, wie Vitis es auch in der Praxis erfahren hat, hab ich für die Entwicklungsphase, das System umgestülpt. Mein Pozessor steht auf dem Schreibtisch, die Kamera ist fix und die optischen Navigationsmarkierungen befinden sich auf dem Fahrzeug. Die grundlegenden Aufgaben der Navigation bleiben aber gleich. Später kann man die fertigen Algorithmen streamlinen, Kamera und Prozessor an Bord verstauen und die Markierungen fix in die Gegend pflanzen.

grüsse,
Hannes

Richard
16.03.2009, 16:30
Moin moin,

@ Viotis, ich habe Deine arbeiten über Kantenerkennung natürlich
gelesen. Ist allerdings schon etwas her. FPGA ist bei Bildverarbeitung
natürlich optimal, es sollen auch kostenlose (?) Testboards von
den Herstellern zu bekommen sein....

@Hannes, Durch Deinen schönen Thread bin ich wieder etwas
wach geworden. :-)

Mein Problem ist eher das ich über 30 Jahre Soft wie Hardwaremäßig
Pausiert habe. Heute sind Reperaturen wenn überhaupt möglich, einfach
zu teuer. Heute wird einfach ausgetauscht.

Beispiel Aldi, alles was vom Kunden zurückkommt wird ohne Prüfung
ausgetauscht. Im Hauptlager gesammelt um dann per LKW auf die
Sondermüllkippe gekarrt zu werden......Da weint das Technikerherz!

Ich würde mich über Tip`s wo ich mich über die Grundlagen wie man
so etwas, vorerst möglichst einfach, einlesen kann.

Grüße Richard

vohopri
16.03.2009, 17:03
Hallo nochmals,

danke für das Kompliment für meinen Thread.

Mit einem Tip zu Fachliteratur kann ich leider nicht dienen. Die betreffende Fachliteratur würde ich auch wahrscheinlich kaum verstehen, da mir der mathematische Hintergrund fehlt. Darum gehe ich auch sehr pragmatisch vor, ich gehe die Bitmap durch, berechne Farbdistanzen, reihe die Ergebnisse, werde dann noch mit der Umgebungsähnlichkeit gewichten und berechne den Schwerpunkt der gefundenen Fläche. Erstaunlicherweise zeigt sich, dass ich die Farbmarkierungen schon recht brauchbar orten kann.

Ich hoffe, du wendest dich auch diesem Thema zu, denn dann könnten wir in der Diskussion ein paar interessante Themen zur Bildanalyse erforschen.

Es ist auch meine Überzeugung, dass man mit optischer Navigation mittels Kamera im Bereich dieser kleinen Fahrzeuge die besten Ergebnisse mit minimalem Aufwand erhält.

grüsse,
Hannes

Richard
16.03.2009, 17:42
[quote="vohopri"

Mit einem Tip zu Fachliteratur kann ich leider nicht dienen. Die betreffende Fachliteratur würde ich auch wahrscheinlich kaum verstehen,

Erstaunlicherweise zeigt sich, dass ich die Farbmarkierungen schon recht brauchbar orten kann.

Da Deine Kamera wie bei den Fußballbot`s extern plaziert ist brauchst Du
das ganze Bild = große Datei, aber ganz klar SO könnte man auch einen
Rasenmäher super steuern! Ich war letztes Jahr auf der Bot Fussball DM
in Bremen. Absolut IRRE mit welcher Geschwindigkeit die kleinen Spieler
Per Kamera und laptopp übers Feld gehetzt sind.

Wenn die Kamera auf dem Bot sitzt sollten ein paar Bildbereiche für
eine Lageerkennung ausreichen. z.B. 4 4x4 Blöcke innen, 5x5 Blöcke
außen. Wandert der innere Block in einer Richtung in den äußeren
wird gegengesteuert.....Bei einer gewünschten Richtungsänderung werden
die Blöcke halt entsprechend verschoben, dadurch wird dann automatisch
"Gegengesteuert". SO mein "Hintergrund" Gedanke.

Ich hoffe, du wendest dich auch diesem Thema zu, denn dann könnten wir in der Diskussion ein paar interessante Themen zur Bildanalyse erforschen.

Ich versuche halt etwas zu lernen um letztendlich den Bot halbwegs
autonom agieren zu lassen.

Es ist auch meine Überzeugung, dass man mit optischer Navigation mittels Kamera im Bereich dieser kleinen Fahrzeuge die besten Ergebnisse mit minimalem Aufwand erhält.

Alles unter xyz k Euro scheint zur Zeit nicht geeignet einen vorgegebenen
Kurs auf großer Fläche +/- 3 cm genau zu halten. Ob das mittels
Bildverarbeitung zu realisieren ist? Aber es währe ein quasie "Multisensor".


grüsse,
Hannes[/quote]

Ich habe jetzt einma versucht in Deinem Text zu Antworten, ich hoffe das klappt?

Grüße Richard

vohopri
16.03.2009, 19:40
Hallo Richard,



Da Deine Kamera wie bei den Fußballbot`s extern plaziert ist brauchst Du
das ganze Bild = große Datei


Nein, ich verarbeite immer nur den Bildteil, wo die Land- beziehungsweise Fahrzeugmarke erwartet wird.



4 4x4 Blöcke innen, 5x5 Blöcke
außen.


Hier kann ich dir nicht folgen, da du nicht schreibst, was in den Bildblöcken erfasst werden soll. Es wäre ohnedies leichter, du würdest dein Projekt einmal ausführlich und nachvollziehbar darstellen. Oder habe ich da einen Projektvorstellungsthread übersehen?



Ich versuche halt etwas zu lernen ...


Ja genau, ich versuche auch zu lernen und das ist hoffentlich der Sinn von dem Forum.



Alles unter xyz k Euro scheint zur Zeit nicht geeignet einen vorgegebenen
Kurs auf großer Fläche +/- 3 cm genau zu halten


+/-30 mm ist unnötig +/- 100 mm ist ein hohes, gutes Ziel. Wieviel Grad ein Pixel auflöst, das lässt sich für jede Kamera / Objektiv / Entfernungs Kombination ausrechnen. So teuer ist das Aufnehmen von ausreichend auflösenden Bildern nicht mehr. Wie gesagt, muss nicht das ganze Bild verarbeitet werden.

grüsse,
Hannes

Vitis
16.03.2009, 21:11
hmmm ... also kostenlose Dev-Boards sind mir jetzt noch
nicht unter gekommen, haste da ne Quelle dafür?
Kann man immer brauchen :)

FPGA ist halt ne ganz andere Herangehensweise als
bei µC ... hab erst den Ansatz über VHDL gesucht,
aber das ist ne ganz andere Programmierweise als im
typischen zeilenweise Proggen in C oder Basic ...
Wie gesagt, bin da aber noch dran, dauert halt,
auch deswegen weil ich noch in ARM7
und auf AVR32 noch an dem Problem dran bin ... so recht
will der Knoten aber halt nicht platzen leider.

Ceos
16.03.2009, 23:08
ich schmeiss hier mal den "neuen" Atmega1284P in den raum, hab auch erstmal net schlecht geschaut als ich den ram gesehen habe ^_^

hab mir direkt mal einen organisiert ... aber bildverarbeitung werd ich wohl nicht damit machen ... ich bleib erstmal bei meinen webcontrollern

Vitis
16.03.2009, 23:52
16K sind schon ne Menge, aber leider nicht genug.
Um nen Bot zu steuern brauchste schon n paar pixel
damit die Route nicht zu "grob" wird.
Das Problem ist ... nehmen wir mal an minimalste
Auflösung 320 x 240 4-Bit Graustufen ... dann sind das
schon 38400 Byte zu speichern für einen Frame.
Dann lässte nur mal noch die Kantenerkennung drüber laufen,
gibt dann nochmal ne 1-Bit Grafik, die 9600 Byte hat ...
Das ist dann mal der Bedarf um ein Bild zu puffern und
einmal bearbeiten. Den Puffer kannste ja löschen bzw.
mit dem nächsten Frame überschreiben, aber die Bearbeitungsergebnisse
musste halt mindestens 1mal zwischenspeichern um die Veränderung
rauszurechnen ... übereinstimmende Kanten suchen und die Bewegung
im Bild errechnen, daraus den Vektor der Bewegung der Kamera
errechnen ... die Rechenzeit geht noch, bei mir ging das
wärend der Übertragung des nächsten Frames nebenher
aber die Framerate war einfach zu niedrig ... :(

Auch n Kandidat für die Geschichten wär der neue XMega, bin
mal gespannt was der so drauf hat ;)

Richard
17.03.2009, 18:59
hmmm ... also kostenlose Dev-Boards sind mir jetzt noch
nicht unter gekommen, haste da ne Quelle dafür?
Kann man immer brauchen :)


Leider nicht mehr, ich hatte damals als ich über die Kantenfindung
hier gelesen habe einfach mal in Foren geschaut die mit FPGA
arbeiten. Dort wurde berichtet das der Hersteller auf Anfrage schon
mal etwas herausgibt Das waren Foren wo es hauptsächlich um
Grafickbearbeitung für Spiele ging.

Für Bitschupser welche früher noch alles von Hand in TTL gebastelt
haben sollte so ein FPGA verständlicher sein als ein AVR...?
Es gibt so weit ich das gelesen habe, auch die Möglichkeit das tatsächlich
am Bildschirm als Schaltplan zu entwickeln. Der Code wird dann automatisch
optimiert und ins FPGA gebrannt.

Nett ist dabei auch das man die Ein/Ausgänge frei wählen kann, damit
passt dann die Restliche Hardware mit möglichst wenig Brücken. :-)
Es gibt auch Fertige "Blöcke" welche z.B. einen AVR gleich mit
"Einbauen" u.s.w.

Eine echt Eierlegendewollmilchsau son FPGA, nur halt nicht besonders
Preisgünstig. :-(

Ich habe es vergessen, aber 64 32 Bit Register in Reihe (?) und davon
dann etliche hintereinander parallel getacktet....da tut sich schon ein wenig!

Gruß Richard.

Vitis
17.03.2009, 22:28
ja, schon richtig, FPGAs sind schon mächtige Teile
und das Prinzip vom "graphischen" Design gibts da schon,
soweit ists noch einfach, man nehme die IO-Ports
lege die ins Scematic verknüpfe sie mit Zählern, Und, Oder etc.
und gut ist ... bei der Verarbeitung von Bilddaten wirds da
aber schon etwas ... hmmm ... kniffliger ;)

Es gibt auch quasi fertige Cores, die man mit einbinden kann,
di müssen dann aber auch wieder programmiert werden
und man hat dann halt auch Schnittstellen zwischen
den Funktionsblöcken ... ist nicht so easy wie sich das
so liest.

Für den Einstieg recht hilfreich war der FPGA-Kurs
von "elektor" ... war aber recht happig die PDF-Sammlung.

Richard
18.03.2009, 06:11
Hallo Richard,

Moin moin Hannes,



4 4x4 Blöcke innen, 5x5 Blöcke
außen.


Hier kann ich dir nicht folgen, da du nicht schreibst, was in den Bildblöcken erfasst werden soll. Es wäre ohnedies leichter, du würdest dein Projekt einmal ausführlich und nachvollziehbar darstellen. Oder habe ich da einen Projektvorstellungsthread übersehen?

Erfasst werden soll die Bewegungsrichtung/Änderung aus Sicht vom Bot.
Je nachdem ob gewünscht oder nicht dann halt gegengesteuert werden.
Was da als "Bild_Teil" abgelichtet ist interessiert (vorerst) überhaupt nicht.




Alles unter xyz k Euro scheint zur Zeit nicht geeignet einen vorgegebenen
Kurs auf großer Fläche +/- 3 cm genau zu halten


+/-30 mm ist unnötig +/- 100 mm ist ein hohes, gutes Ziel.

Rasen hat leider am Rand oft Kanten (?), einerseits will diese niemand
mit der Nagelschehre nacharbeiten, andererseits kommt der Mäher mit
einem Rad in/über/hinter so eine Kante bekommt er Probleme mit dem
Spuhrhalten. Das würde und muß sicher auch mit geeigneten
Nahbereichssensoren überbrückt werden können.

Mit xyz k Euronen meinte ich z.b. GPS im !mm! Bereich über 1..2 km
Entfernung (kann Mensch kaufen!) oder Laserscanner die gibt es
auch z.B. 100m Entfernung Auflösung +/- 1..2 mm

Projekt: Einfach einmal wieder etwas reinkommen ins Programmieren
und über machbares oder unmachbares nachdenken...Hirntraining. :-)
So ein Bot ist da einfach klasse für geeignet.

Sehr fiel "Freizeit" habe ich dafür nicht, wirklich brauchbares Werkzeug
eher auch nicht und klar die Euronen drucke ich leider auch nicht selber.

Ich muß da halt einen Kompromiss eingehen und habe meinen Prototyp
mit einfachen Mitteln aus dem Baumarkt durchaus sprichwörtlich
zusammengeschußtert. Ich baue auch im Gegensatz zu Dir eher etwas
spontan aus dem "Bauch" heraus wenn gerade mal etwas Zeit übrig ist.

Ein Paar Zeichnungen für einige Teile habe natürlich vor dem "Absägen"
gemacht, an so einen Aluwinkel ist "Ranhobeln" zu mühselig. :-)

Auch habe ich es echt satt gehabt in Bascom Theoretisch tolle Motor
Steuerungen zu entwickeln ohne diese auch real testen zu können.

Teileliste:

2 Pollin Scheibenwischermotore, die wurden zerlegt und am Kollecktor
mit 4 um 90 Grad versetzte 3 x 1 mm Magnete versehen welche von
einem Hallsensor abgetastet werden. Dadurch bekomme ich pro
Radumdrehung 62,xx cm 240 Ticks = ~ 2,5 mm Weg.

ca. 28 Euro zusammen.

Plattform, Tischplatte vom Baumarkt.

15 Euro.

Aluwinkel 200 mm lang 10 mm stark als Motorhalterung.

6 Euro.

2 Stehlager für die Radwellen Conrad ca. 20 Euro.

2 Wellen für Rad Motorverbindung gedreht am 24.12.08 15 h :-)

15 Euro.

2 Sackkarrenräder

25 Euro.

Kleinmaterial

25 Euro

2 x 12 V 12 AH Accus

0,0 Euro

1 RN Dualmotortreiber

~ 45 Euro.

Der "natürliche Schwund" hält sich dank Labornetzteil mit einstellbarer
Stronbegrenzung in Gernzen...aber wer keine Fehler macht ist ganz einfach
ein faules Schwein, wer Angst hat Fehler zu machen soll einfach im Bett
bleiben. :-))

Bilder teilweise sehr groß.

rbwagner.cwsurf.de

Mit Deiner sehr sauberen Arbeit kann man da keinen Vergleich ziehen.
Aber das ist ja auch nicht mein vorragiges Ziehl. Ich möchte vorerst
einmal überhaupt mit einfachsten/Finanziellen Mitteln testen wie weit ich
das ganze überhaupt realisieren kann. EHE ich xyz Lasergefräste Euronen
in die Mülltonne schmeisse....Wobei Du ja beweist, mit etwas Freizeit
kann man auch "Prototypen" sehr sauber bauen..etwa schähm. :-)

Ein kleiner Entschuldigungsversuch für meinen "Fusch" gegenüber hier
so verdammt gute Arbeiten, mir setzt keiner das Abenessen vor und
die Klamotten muß ich zwischenzeitlich auch selber Bügeln...

grüsse,
Hannes

Grüße Richard

vohopri
18.03.2009, 08:07
Hallo Richard,

das ist schon einmal beeindruckend, was die Bilder da zeigen. Das "Gerätchen" hat einen ordentlichen Durchmesser.

Wieviel?

Auf alle Fälle kannst du da zum Experimentieren einiges draufstellen. Mein Spielzeug verschwindet da daneben.

Nur zu deinem Navigationskonzept fehlt mir etwas Information.
Erfasst werden soll die Bewegungsrichtung/Änderung aus Sicht vom Bot.
Je nachdem ob gewünscht oder nicht dann halt gegengesteuert werden.


Die Erfassung der relativen Bewegung erscheint mir recht ungenau und die Fehler summieren sich auf. Das stört bei der optischen Maus nicht, weil immer die Kontrolle über die absolute Position des Cursors da ist. Auf manchen Untergründen springt auch der Mauscursor gewaltig durch die Gegend.

In der maritimen und terrestrischen Navigation sprich segeln und bergwandern, arbeite ich zum Teil auch mit der relativen Bewegung. Die Seefahrer nennen das ein gegisstes Besteck. Aber wenns drauf ankommt, muss ich rechtzeitig eine absolute Standortbestimmung gemacht haben. Sonst wird es gefährlich.

Wie das in deinem Konzept ablaufen soll, kann ich mir noch nicht vorstellen.

grüsse,
Hannes

Vitis
18.03.2009, 10:48
ist im Prinzip recht einfach, man arbeitet mit Vektoren,
Schlupf, Bewegungsrichtung, Drehwinkel, Fahrtstrecke etc.
Bis man wieder einen bestimmten Referenzpunkt für ne
Dreieckspeilung hat, dann Abgleich und das ganze von Vorn.

vohopri
18.03.2009, 10:56
ja genau, das ist der übliche Ablauf, die Frage hat sich auf seine Umsetzung und nicht aufs bekannte Prinzip bezogen.

grüsse,
Hannes

GeoBot
18.03.2009, 12:17
Ich hab mal vor einiger Zeit mal über Kameras, Stereobilder und Bildvermessung recherchiert. Mein Ideenspeicher gibt folgendes her:

Sünderhauf, N. & Protzel, P. (2006). Towards Using Sparse Bundle Adjustment for Robust Stereo Odometry in Outdoor Terrain. In Proc. of
Towards Autonomous Robotic Systems TAROS06, Guildford, UK, pp. 206–213.

Lässt sich in goggle suchen und den Artikel gibt es Online.
http://www.tu-chemnitz.de/etit/proaut/mitarbeiter/niko.html

Dort auch

Sünderhauf, N., Protzel, P. (2007). Stereo Odometry - A Review of Approaches. Technical Report 3/07

Vielleicht für den einen oder anderen ein Ansatzpunkt?
Auch wenn man nicht alles versteht.

Richard
18.03.2009, 18:03
Hallo Hannes,

das ist schon einmal beeindruckend, was die Bilder da zeigen. Das "Gerätchen" hat einen ordentlichen Durchmesser.

Wieviel?

80 cm Durchmesser, Räder 25 cm Durchmesser, maximale 1/Minute
40 oder rund 1,5 km/h

Auf alle Fälle kannst du da zum Experimentieren einiges draufstellen. Mein Spielzeug verschwindet da daneben.

Die Erfassung der relativen Bewegung erscheint mir recht ungenau und die Fehler summieren sich auf. Das stört bei der optischen Maus nicht, weil immer die Kontrolle über die absolute Position des Cursors da ist. Auf manchen Untergründen springt auch der Mauscursor gewaltig durch die Gegend.

Wie das in deinem Konzept ablaufen soll, kann ich mir noch nicht vorstellen.

Ich auch noch nicht, ich habe mir einfach vorgestellt einen bestimmpen
Punkt, Baum oder ähnlich als Make/Bake zu wählen und wenn diese Make
aus ihrem Bildbereich herauswandert den Bot so zu steuern das die Make
wieder an ihren ursprünglichen "Bildplatz" wandert. Das wird aber kaum
klappen, beim Näherkommen muß die Marke zwangsläufig im Bild
"Wandern".

Ich habe eine WII_Remote, die Kamera kann bis zu 4 bewegte IR Quellen
orten und dessen Position im Kamerafeld 1024 x 768 über i²c ausgeben.
Außerdem soll die Kamera von 2 IR Quellen auch die Entfernung ermitteln
und ausgeben können. Leider habe ich da nur eine Englische Beschreibung
im Netz gefunden und mit "Plattdeutsch" habe ich erhebliche Probleme. :-(

Außerdem währe das ja wieder nicht autonom, währe aber für den
Anfang auch eine Lösung. :-)

grüsse, Richard

sechsrad
20.03.2009, 16:28
Wenn man sich so eine Optische Mouse näher ansieht ist dort
eine kleine 16x16 (?) Pixel Kamera verbaut und diese Kamera
macht eine Bildauswertung auf die Untergrund Bewegung.


Mit der normalen Kamera ist es nichts neues. Habe eine 5 Euro-kam von Conr.. genommen.