Forum: Mikrocontroller und Digitale Elektronik Brauche Hilfe bei Roboterbau


von Stefan (Gast)


Lesenswert?

Hallo Leute

Ich habe den Auftrag bekommen, einen Roboter zu bauen welcher farbige 
Gegenstände erkennen und einsammeln kann. Dazu werden Gegenstände mit 
den Farben Rot, Grün, Blau & Gelb auf einer vordefinierten Fläche 
verteilt. Der Roboter soll nun herausfinden von welcher Farbe die 
meisten Objekte vorhanden sind und diese dann einsammeln. Wenn zum 
Beispiel 3 Rote und jeweils 2 von den anderen Farben vorhanden sind soll 
er nur die roten Objekte einsammeln. Es besteht die Möglickeit den 
Roboter extern durch einen PC zu steuern. Die Steuerung kann sich aber 
auch direkt auf dem Roboter befinden.

Mein erster Ansatz ist, dass der Roboter zu beginn ein Gesamtfoto der 
Objekte schiesst und an den Rechner sendet. Der Rechner soll dann 
auswerten welche Farbe im Bild dominiert und diese Farbe wird dann 
zurück an den Roboter gesendet. Mit dieser Information macht sich dann 
der Roboter auf den Weg und sammelt ein Objekt nach dem anderen ein. 
Mithilfe eines Farbsensors überprüft er, ob das Objekt die gewünschte 
Farbe hat oder nicht. Falls ja, deponiert er das Objekt an einem 
vordefinierten Ort, falls nicht, wirft er es aus dem Feld. Dies macht er 
so lange, bis er alle Objekte kontrolliert hat.

Nun habe ich aber keinen Ansatz, wie ich auswerten kann, welche Farbe 
dominiert. Gibt es da eventuell schon fertige Programme, welche das 
bereits können? Andernfalls gibt es irgendwelche Algorithmen welche ich 
in Java oder C implementieren könnte, damit dies funktioniert?

Und was haltet ihr von meinem Ansatz der Problemlösung?

Weitere Möglichkeiten das Problem zu lösen wären, dass der Roboter 
zuerst alle Objekte einsammelt und nach Farbe sortiert. Nachdem alle 
eingesammelt sind kann er bestimmen von welcher Farbe am meisten objekte 
vorhanden sind und diese an einen vordefinierten Ort bringen. Bei dieser 
Variante wäre keine vorgängige Farbauswertung nötig.

Weiter gäbe es die Möglichkeit wie bei meinem ersten Ansatz die 
dominierende Farbe durch eine Gesamtaufnahme mit dem Rechner zu 
ermitteln. Anschliessend hebt der Roboter dann gezielt nur Objekte mit 
dieser Farbe auf. Dies könnte zum Beispiel mit einer CUCam oder AVRCam 
realisiert werden. Da ich aber noch nie mit solchen Kameras gearbeitet 
habe, wird der Aufwand wohl zu gross sein.

Hoffe auf Feedback von euch

Gruss Stefan

von Digi S. (digispark)


Lesenswert?

schau Dir mal dieses Kickstarter-Projekt an: 
http://www.kickstarter.com/projects/254449872/pixy-cmucam5-a-fast-easy-to-use-vision-sensor

insbesondere das Produkt-Video ganz oben auf der Seite. Das dürfte im 
Prinzip schon fast alles können, was Du brauchst. Das Modul teilt Dir 
dann über I2C mit, welche Objekte es erkannt hat und wo sich diese im 
Bildausschnitt befinden.

Wenn ich mich recht erinnere, ist das ein Open-Hardware-Projekt ... das 
heißt, der Quellcode steht irgendwo auch zur Verfügung.

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Digi Spark schrieb:
> schau Dir mal dieses Kickstarter-Projekt an:
> 
http://www.kickstarter.com/projects/254449872/pixy-cmucam5-a-fast-easy-to-use-vision-sensor

Vielen Dank für die schnelle Antwort, genau sowas habe ich gesucht. 
Leider wird Pixy aber voraussichtlich erst im November ausgeliefert. Um 
aber Test durchzuführen bräuchte ich die Kamera spätestens mitte 
Oktober.

Gibt es eventuell noch andere Möglichkeiten?

von Vabi (Gast)


Lesenswert?

Google mal nach Opencv; damit sollte es nicht schwierig sein, die 
Bilderkennung in C++ zu machen - zumindest wenn die Farben der Kugeln 
und des Untergrundes sich klar unterscheiden.

von Stefan (Gast)


Lesenswert?

Vabi schrieb:
> Google mal nach Opencv; damit sollte es nicht schwierig sein, die
> Bilderkennung in C++ zu machen - zumindest wenn die Farben der Kugeln
> und des Untergrundes sich klar unterscheiden.

Vielen Dank für eure Antworten. Hab mich jetzt in OpenCV eingearbeitet 
und kann nun auch Farben erkennen. Mein grösstes Problem bis lang ist 
jedoch, dass mein Programm momentan extrem Lichtempfindlich ist. Ich 
arbeite im HSV Farbraum.

Nun ist die Frage, welche Filter kann ich in OpenCV programmtechnisch 
oder auch physikalisch vor der Kameralinse anwenden, damit ich die 
Farben auch bei Lichtunterschieden erkenne? In OpenCV habe ichs schon 
mit equalizeHist() versucht, jedoch bringt das nicht den gewünschten 
Effekt.

Über Hilfe wäre ich extrem dankbar.

Grüsse

von Peter (Gast)


Lesenswert?

Stefan schrieb:
> Hab mich jetzt in OpenCV eingearbeitet
> und kann nun auch Farben erkennen.

Das wage ich zu bezweifeln. Wir haben in der Firma 4 Leute die seit 
ihrem Studium sich auf Bildverarbeitung spezialisiert haben und seit 
2007 mit OpenCV arbeiten und selbst diese absoluten Cracks/Nerds kennen 
nicht den Funktionsumfang diese Projekts. Du kannst höchstens einen 
Stream öffnen und dann wahllos einen Filter draufklatschen.

Stefan schrieb:
> Mein grösstes Problem bis lang ist
> jedoch, dass mein Programm momentan extrem Lichtempfindlich ist. Ich
> arbeite im HSV Farbraum.

Hat genau 0,0 miteinander zu tun. Deine Kamera sollte das eigentlich 
beherrschen. Brauchst du ein vernünftige Kamera.

von Stefan (Gast)


Lesenswert?

Vielleicht war eingearbeitet die falsche Wortwahl. Mir ist klar, dass 
man nicht in einem Monat zum OpenCV Crack wird. Auch Jahre reichen da 
nicht. Es tut mir leid, wenn ich dir durch meine Aussage auf den Schlips 
getreten bin. War definitiv nicht meine Absicht.

Trotzdem würde ich sagen, dass ich in einem Monat ziemlich weit gekommen 
bin. Und nein, ich klatsche nicht wahllos Filter drauf, sondern ich 
weiss was ich da tu.

Mir ist klar, dass der HSV Farbraum nichts mit Lichtverhältnissen zu tun 
hat. Jedoch ist man flexibler bei der Farbkalibration, da man nicht nur 
die Farbkanäle hat sondern auch noch die Sättigung und Helligkeit. Daher 
ist sie resistenter gegen Lichtänderungen im Vergleich zum RGB Raum.

Da ich mich bei diesem Projekt auf eine Webcam beschränken muss, muss 
ich diese Lichtfilterung entweder softwaretechnisch oder mit einem 
physikalischen Filter lösen. Und da ich weder in der Bildverarbeitung, 
noch in der Fotografie/Optik über ein breites Wissen verfüge, habe ich 
hier um Hilfe gebeten.

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.