PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Webcam und Roboterarm



Massimus
03.02.2007, 21:51
Servus!
Ich hab da ein Problem. Bin mir jetzt nicht sicher, ob ich hier in der richtigen Rubrik bin. Falls ja, kann vielleicht ein Admin das Thema verschieben. (Danke)
Also:
Ich habe einen Roboterarm mit 5 Servos, gesteuert von der RNControl. Der Arm soll nach einem Objekt greifen. Hierzu nehme ich mit einer Webcam ein Bild auf um das Objekt zu erkennen. Wie in der Wiki erklärt, habe ich den RGB in HSV Raum umgerechnet. Dann den Sobelfilter drüberlaufen lassen. Das ganze mache ich mit OpenCV. Nun weiß ich nicht wie ich weitermachen soll? Muss ich die Pixelkoordinaten des Objektes rauskriegen? Wenn ja wie? Oder habt ihr eine andere Idee?
Weiß einfach nicht weiter. Häng schon seit Tagen an dem Prob.
Gruß *m*

Massimus
06.02.2007, 17:18
So, hab nun selbst weitergeforscht und bin zu folgendem Ergebnis gekommen:
Nach Binarisierung und Dilatation des Bildes, werden die gefundenen Konturen mit einer Ellipse angenähert. Durch eine Flächenberechnung aller gefundenen Objekte kann ich rauskriegen, welche Fläche die größte ist und sich dementsprechend am nähesten zur Kamera befindet. Der Mittelpunkt der größten Fläche ist die gesuchte Zielkoordinate. Das Bild wird ca. jede Sekunde aktualisiert.
Soweit erstmal.....ich hoffe, man kann das auf dem jpg einigermaßen erkennen. Wenn ihr Verbesserungsvorschläge habt, dann nur her damit :cheesy:

Jetzt muss ich nur rauskriegen, wie ich das Programm zusammen mit meiner RN-Control laufen lasse. Kommunizieren tun die beiden ja über die RS232 Schnittstelle, oder? Naja, wird schon klappen, hoffe ich...

Bis bald
*m*

NumberFive
07.02.2007, 07:05
Hallo,

sieht sehr toll aus was du da gemacht hast wie schnell bist du ?
Ich bin bis jetzt immer an dem speed gescheitert. OK so weit wie du war ich noch nie.

RN-Control und PC da muß du dich erstmal entscheiden wo du rechnest oder ?
Was ich damit meine ist wie kommst du von der Zielkordinarte im bild auf den bewegungs ablauf in dem Arm. Seriale kommunikation ist eher kein problem. Ist halt nur die frage was dort übertragen willst also die Zielkordianaten oder den bewegungs befehl.

Da ich nicht so wirklich ein problem sehe währe es schön wenn du dein problem etwas genauer beschreibst.

Ich arbeite zur Zeit an ein Videoserver und Client damit die Machine wo die Cam dran ist nicht zwangsweis ist die anzeigt. Könnte dein prg auch ein jpg verarbeiten ? Guck doch mal bei mein Projekt link vorbei viel kann das dort einbauen dann löst sich auch dein problem der Komunikation.

So weit

Massimus
08.02.2007, 16:56
Hi!
Danke schön. War aber gar nicht so viel Arbeit wie es aussieht. Die OpenCV Library nimmt einem ja die meiste Arbeit ab. In der Regel dauert ein Durchlauf 1,7sek. Wenn ich die Bilder nicht ausgebe dauerts ca. 1,4sek. Aber die Geschwindigkeit stört mich nicht. Ich will nur am ziel ankommen :cheesy:
Bisher hab ich nur mal nen Servo über die RN-Control angesteuert. Das geht gut. Alle Berechnungen will ich so weit wie möglich auf den PC übertragen. Die RN-Control gibt dann nur noch die Servobefehle. So stell ich mir das vor. Ob das alles so funzt weiß ich natürlich nicht.

Ob mein Programm ein jpg verarbeiten kann???
Also, wenn ich das richtig verstehe, dann meinst Du, ob ich ein jpg laden kann und dies genauso behandele wie das aufgenommene Bild. Richtig?
Das ist natürlich kein Problem.

Ich schau mir am Wochenende mal in Ruhe Dein Projekt an.

Gruß Massimus

NumberFive
09.02.2007, 06:19
Ok so weit so gut.

ist doch ganz einfach wenn du die Kodinaten hast. in RN-Control alle Servo einstellen abfragen. und dann rechnen und die neue servostellung raus an dem arm. Eignedlich ganz simple wenn der speed egal ist.

bis auf die berechnung der servo pos natürlich.

1,4 sec bei 15 Km/h
1,4 sec bei 250 m /minute
1,4 sec bei 417 cm / sec => 584 cm pro berechung

Das ist ein bisschen arg weit dann bin ich über ziel geschossen. das muß schneller gehen.

Viel spass bei lesen es ist aber nicht meine Projekt sondern ein roboternetz projekt arbeiten ein paar leute dran.

Gruß

PS:OpenCV Library war das einfach diese ein zu binden ? habe gesehn du arbeits auch mit MS VC++ 6 Compiler richtig ?

Massimus
09.02.2007, 20:07
Ich versuch mich die nächsten Wochen mal daran, wenn ich Zeit finde.

Also, wegen der Geschwindigkeit:
1.) Mein Programm ist null optimiert. Da kann man bestimmt noch einiges machen.
2.) Ich benutze einen 400Mhz Rechner mit 256MB SDRAM. Hab zwar nicht so viel Ahnung von dem Ganzen, aber das Ding is so brutal langsam, dass ich manchmal schneller tippe als das Ding den Text anzeigen kann. Ich vermute, dass dies der ausschlaggebende Punkt ist für die "gemütliche" Berechnung.

Die OpenCV Lib find ich klasse. Die ist zwar sehr umfangreich und funktionell, dass es gerad am Anfang schwierig ist, sich zurecht zu finden. Wenn man aber mal die Beispielprogramme, die dabei sind, anschaut, dann kommt man schon mit wenig Code sehr weit. Kann diese Lib echt nur empfehlen.

Ja, benutze Visual C++ 6.0 und das Einbinden is subbä einfach. Gibt auch im Netz genug Infomaterial darüber.

Viel Erfolg wünsch ich Dir weiterhin und falls ich noch Fragen habe, wegen der Kommunikation, meld ich mich bei Dir noch mal, ok???

Greetz *m*

NumberFive
28.02.2007, 07:59
Hast du dir mal den Projekt link in mein Fuß zeile angesehen ?

Das währe auch ne möglich die daten an den AVR zu bekommen. Und die Welt könnte dein programm verwenden.

Gruß

stochri
01.03.2007, 22:04
Hallo Masimus,

probier mal dieses Progamrm aus:

http://www.roborealm.com/

Damit ist es ziemlich einfach, die Objektkoordinaten eines farbigen Objekts zu ermitteln und die Koordianten weiterzugeben.

Gruss,
stochri

Massimus
05.03.2007, 11:09
Nee, sorry, kam noch net dazu. War im Urlaub gewesen. Bin gestern erst zurück gekommen. Ich gugg mal wie ich Zeit habe. Muss jetzt erst mal auf der Arbeit viel nachholen.

Danke für all die Tipps. Irgendwann werd ich vielleicht auch mal fertig. Habs aber nicht eilig.

gruß *m*

Massimus
09.03.2007, 21:12
Hi ihr.
Mein alter PC hat nun endgültig den Geist aufgegeben. Also, habe ich mir einen neuen geleistet :cheesy:
Diesmal ist es ein AMD Doppelkernprozessor (4600+) mit einer XPro 1300 Grafikkarte. Vielleicht sagt euch das was. Ich kenn mich da jedenfalls nicht so aus. Aber egal. Worauf ich hinaus will. Das selbe Objekterkennungsprogramm was bei meinem old school Rechner 1,7sek gedauert hat braucht hier nur noch 1,06 sek! Was die Rechenleistung doch ausmacht.
Schönes Wochenende.

Greetz Massimus

Massimus
09.03.2007, 22:20
Hab doch noch ne Frage :-k
Ich will ja die Kamera auf dem Greifarm verbauen. Die Zielkoordinaten hab ich nun, die Entferung messe ich mit Ultraschall- bzw. Infrarotsensoren.
D.h. die Bildverarbeitung ist soweit erstmal abgeschlossen.
Das Problem ist nun eher die Berechnung der Servostellungen. Wenn ich mich richtig informiert habe, dann benötige ich eine sog. Rückwärtstransformation. Kann mir da jemand weiterhelfen? Gibt doch bestimmt genug Cracks, die sich mit Roboterarmen und deren Bewegungen auskennen.
Also, jetzt noch mal:
Schönes Wochenende