PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Positionsbestimmung per Webcam



mik79
18.06.2007, 13:24
Hallo zusammen,

ich überleg gerade an einer Idee für ein Technikerabschlussprojekt.

Angedacht habe ich eine kleine Modellbauplatte mit 2 selbstfahrenden Modellautos von Faller für Modelleisenplanplatten zu bauen.

Eine Ampel, die wahrscheinlich per SPS oder Mikrocontroller gesteuert wird.

Den Autos verpassen wir einen Mikrocontroller, der von außen per IR (RC5 Code) die Geschwindigkeit der Autos regelt.

Die Positionserkennung möchte ich über eine Webcam, die ich über der Platte aufhänge, realisieren. Warscheinlich färbe ich die Autodächer rot bzw grün ein und suche auf dem Webcambild nach den Farben.

Jetzt zu meinem Problem... Die Platte muss mindesten 1,5m * 1,5m groß sein... ehr 2*2... Jetzt habe ich ein Problem mit dem Sichtfeld.

Die beste kostengünstige Kamera, die ich gefunden habe hat ein Sichtfeld von 76°. Um Damit die komplette Platte erfassen zu können muss man die Kamera in eine höhe von 2,5m hängen :-(.

Kennte jemand eine Webcam mit größerem Sichtfeld oder eine alternative zu der Webcam Idee?

Xtreme
18.06.2007, 13:29
Du kannst ja mal versuchen ne Optik davor zu hängen. Fischauge etc.
Man muss das Bild dann allerdings wieder softwaretechnisch entzerren. Nicht einfach, aber machbar.

pongi
18.06.2007, 14:17
Warum sind 2,5 m ein Problem? Wenn die Auflösung passt, sollten Farben erkennbar sein. Wie gross ist denn ein Autodach? Wie gross ist die Auflösung von der Webcam?

Optik ist mühsam... Evtl 4 Cams einsetzen? Ist zwar teurer, aber es ist auf alle Fälle einfacher aus vier rechteckigen Bilder ein grosses zu machen, als ein Fischaugenoptik zu entzerren.

mik79
18.06.2007, 14:40
Hallo!

mit dem Fischauge seh ich auch als schwierig an, aber werde mir da nochmal gedanken machen...

von der Auflösung müsste das klappen. die dächer sind 2,5 cm * 15 cm. ich bin mal von ner Auflösung 640*480 ausgegangen, da sind das bei 2m*2m Platte ca 3mm pro pixel.

Ne Alternative wär dann noch eine Creative Webcam mit twain treiber. die hat dann eine Auflösung von einem MegaPixel. Ich müsste nur mal testen wie schnell mein Delphiprogramm dann ist... Das geht so schon in die Knie. Hätte eine hardwarenahe Programmiersprache lernen sollen...

Bei den 2m höhe seh ich nur das transport problem z.B. bei der Präsentation des Projektes. Muss dann nen kleinen bohrturm mit durch die gegend schleppen um ne kamera und nen scheinwerfer zur ausleuchtung daran zu befestigen...

pongi
18.06.2007, 14:57
Modular oder steckbar aufbauen. ZB 4 Streben, die in den Ecken in Rohre eingeführt werden, oben in der Mitte ein Verbindungsstück, wo die Kamera auch dranhängt. Man kanns dann immer auseinandernehmen.
Es gab in zu meiner Kindheit solche kleinen Spielhäuser, die bestanden aus Kunsstoffstreben und Rohrverbindungsstücken, woraus man dann das ganze aufbauen konnte, so in der Art würde ich es mir auch in deinem Fall vorstellen.

Wegen der Auflösung: 2*2m sind quadratisch, deine Webcam macht aber ein rechteckiges Bild. Du musst also entweder von der Auflöisung was "verschwenden", da Nutzbild nur 480*480, oder du hast zwei nicht erfasste Streifen. Da sehe ich also noch ein Problem :-D
Ansonsten sollten die Farbpunkte erkennbar sein, falls der Unterboden einheitlich eine andere Farbe hat.

mik79
18.06.2007, 15:56
hab schon mit 480*480 gerechnet. hab auch erst nen schreck bekommen :-)

werde wirklich mal versuchen mir ein gestell zu basteln. teste im moment erstmal auf einer 50*50cm platte ob das mit der erkennung im ansatz funktioniert...

tornado
18.06.2007, 16:20
mich wÜrde mal interresieren wie das geht mit der Bilderkennung. könntest du ein bischen mehr über dein Projekt schreiben. Wäre toll.
danke,
tornado

Xtreme
18.06.2007, 17:02
Such mal im Forum nach Farbraum- Umrechnung und Farb- Schwerpunktbestimmung.
Dann findest du irgendwo ein Programm von mir... nur ich finds grad selbst nicht ;)

mik79
19.06.2007, 12:06
Hallo,

ich bin gerade auch erst am sammeln von informationen.

interessant ist der Thread:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=15762

ich denke, dass ist der den xtreme meint.

Zuerst möchte ich mal probieren den beiden autos farbige punkte zu verpassen und die Platte selber grau zu streichen.

Dann lasse ich nach der Farbe suchen (toll wär dann die von xtreme beschriebene Schwerpunktsbestimmung um die mitte des Punktes zu errechnen).

Im Programm werde ich eine Matrix (480*480) machen in der der Fahrdraht eingetragen wird so ala:

x steht dabei für den gefundenen Punkt und die zahlen für die imaginäre strecke


0 0 0 0 0 0 9 0 0 0 0 0
0 0 0 0 0 0 8 0 0 0 0 0
0 0 0 0 0 0 7 0 0 0 0 0
0 0 0 0 0 0 6 5 0 0 0 0
0 0 0 0 0 0 0 4 0 0 0 0
0 X 0 0 0 0 0 3 2 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0

von dem x aus suche ich dann per angepasstem Lee Algorithmus die Strecke und bestimme damit den nächsten Punkt auf der Strecke. den kann man dann zur visualisierung geschwindigkeitsmessung missbrauchen.

Wenn das mit dem rgb nicht klappen sollte wollte ich über die konvertierung nach hsv gehen, habe den link zu nem interessanten pdf leider zuhause, werde ich bei gelegenheit mal posten.

ich will das ganze mit delphi realisieren und hab gerade gesehen, das xtreme auch damit arbeitet :-)
Hast du Erfahrungen mit der performance? Fürchte ja das zwingt meinen rechner ganz schön in die knie.

Ich hoffe ich konnte das schonmal etwas erklären. wir sind im moment aber auch noch am ideen sammeln und die bilderfassung/auswertung macht mir noch am meisten kopfschmerzen.

MfG
Michael

Xtreme
19.06.2007, 18:46
Zu Delphi... es gibt sicher bessere Lösungen, aber bei Optimierung läuft es doch recht anständig. Mit Optimierung meine ich zb nur jede zweite oder dritte Zeile des Bildes auszulesen.
Mein Programm von damals (ja, ich meine den Thread) habe ich inzwische überarbeitet und hab nun Rechenverzögerungen von ca. 20ms. Das ist schon annehmbar.
Bedenke aber, das du für jede Farbe die Berechnung neu machen musst!

Wenn du C kannst würde ich es heute mit opencv machen... die Lib ist einfach genial!

mik79
20.06.2007, 14:02
Hallo,

ich hab mich gestern abend mal etwas damit beschäftigt.

was schon funktioniert ist:

1. Kamerabild einlesen
2. Schreibe des bilds in ein array x,y,(rgb)
3. umrechnung in hsv
4. schwerpunkt von rot bestimmen
5. grafische darstellung

bei der schwerpunktberechnung nehme ich jetzt alle pixel die hsv mäßig hue =0 +/- 10 grad und sat > 70% haben. zum testen klappts schonmal ganz gut. musste nur feststellen, das 10€ kameras wegen dem rauschen total ungeeignet sind...

gibt es dazu noch ideen? ich hab das scilab bsp in einigen punkten nicht ganz verstanden...

momentan brauche ich 100 ms für die 5 punkte, aber das ist bis dato auch quick and dirty geschrieben.

Momentan überlege ich einfach 2 webcams zu benutzen, aber dann geht das ganze ja noch mehr in die knie

Goblin
23.06.2007, 09:01
wie genau brauchst du denn die positionsbestimmtung? ich würde evlt die auflösung soweit runterrechnen, dass die autos nur noch wenige pixel groß sind. dann geht das schneller. ausserdem: delphi ist für sowas denkbar ungeeignet. das verfahren zum finden von zusammenhängenden flächen nennt sich überigens "blob-tracking".

mik79
23.06.2007, 12:58
Hallo,

die auflösung brauche ich leider sonst klappt das mit den 1,5m * 1,5m nicht. wie oben schonmal gesagt hab ich da ja schon 3,3 mm pro pixel. das sind bei einem autodach dann 6 pixel breite und 30 pixel länge...

delphi ist wegen seiner hardwareferne mit sicherheit nicht das programm meiner wahl. hab nur c schon ewig nicht merh programmiert und in meiner schule wird ... warum auch immer... delphi unterrichtet.

werde mich heute erstmal dran setzen und versuchen die performance zu steigern. so schnell bewegen sich die autos ja nicht. wenn das nicht klappt werd ich mich an c probieren.... hoffe ihr habt dann ein paar tips für mich ;-)

Ratte
24.06.2007, 19:13
Für Delphi gibt es auch sehr schnelle Bildverarbeitungsunits. Sind halt nicht dabei, können jedoch bedeutend mehr und sind performanter.

Xtreme
24.06.2007, 20:19
Kannst du mal ein Beispiel nennen? Hab ich noch nichts von gehört, was aber nichts bedeuten muss...

Ratte
24.06.2007, 20:22
habs gefunden (deswegen vorhin auch kein link, da hatte ich keine zeit zum suchen):
http://sourceforge.net/projects/graphics32
die soll sehr gut sein.

Xtreme
25.06.2007, 13:43
In most cases Graphics32 considerably outperforms the standard TBitmap/TCanvas methods.

Ist also praktisch "nur" eine optimierte Version der standard Routinen.
Die Routinen zur Schwerpunktbestimmung, Blob etc müsste man selbst schreiben... OpenCV liefert das schon fertig.
Ich werde die lib bei Gelegenkeit mal testen und evtl in meine Programme einbinden.