PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Laser erkennen für Roboter-Fernsteuerung



der_Gast
09.12.2009, 11:09
Hallo leute

Nach den ersten Einsteigerprojekten, möchte ich mich nun an meinen erstes, richtiges Roböterchen machen. Es soll aber eigentlich kein fertiger Roboter sein, sondern eine "Ausprobier-plattform".

als erstes möchte ich die Steuerung ausprobieren. Gedacht habe ich mir das wie folgt:
Ich möchte gerne den Roboter per Laser steuern, und zwar so, dass ich den Laser als "Zielmarkierung" nutze.
Am schönsten wäre es natürlich, wenn der Roboter im ganzen Haus den Laserstrahl selbst sehen könnte, doch ich glaube das ist nicht möglich, oder?

Also müsste man die Fläche, auf der der Roboter funktioniert, auf eine Fläche von ca 1m x 1m beschränken, auf der dann Fotosensoren o.ä. plaziert sind.
Die Frage ist einfach, wie erkennt diese Fläche den Laserstrahl? Oder gibts es doch eine Möglichkeit, den Laserstrahl ohne spezielle "Bodensensoren" vom Roboter aus zu erkennen?

Ich hoffe, ich konnte mein problem verständlich darlegen

Grüsse

ranke
09.12.2009, 12:53
Ich hoffe, ich konnte mein problem verständlich darlegen


Das ist Dir nicht so sehr gelungen.
Du möchtest, dass der Roboter einem Lichtpunkt folgt?
So ähnlich wie bei diesem (biogenen) Modell hier?
http://en.sevenload.com/videos/fJRi4xD-Hund-mit-Taschenlampe
Der Hund hat jedenfalls seine Lichtsensoren nicht über den Fußboden plaziert.
Oder habe ich es völlig falsch verstanden?

09.12.2009, 13:31
Sorry, war im stress und erst noch abgelenkt, ich probiers nochmal:

Es gibt einen Punkt A (dort wo der Roboter steht) und eine Fläche F, welcher am besten eine beliebige Fläche (Fussboden o.Ä. ist).
Wenn ich nun mit dem Laserpointer (welchen ich in der Hand halte) auf einen Belibigen Punkt auf der Fläche F "pointe", wird dieser Punkt zum Punkt B.
Dann läuft der Roboter zu diesem Punkt B

Mögliche Lösungsansätze die mir eingefallen sind, wäre

1.) Eine Kamera wird an der Zimmerdecke montiert. Diese erkennt den Punkt auf der Fläche F und rechnet seine Koordinaten in xy Koordinaten um, welche an den Roboter übermittelt werden.

Nachteil: -Keeeeine Ahnung wie ich das programmieren soll, der Roboter funktioniert nur auf der Fläche, welche von der Kamera eingesehen werden kann und die Koordinaten müssten am besten per FUnk an den Roboter übertragen werden.

2.)Hundmodell: Der Roboter hat vorne dran eine Kamera, welche den Punkt "sieht" und ihm folgt.
Frage: Gibts es eine einfachere Methode als die Kamerabilder auswerten zu müssen? Stell ich mir recht kompliziert vor...

Nachteil: Sowas in der Richtung hab ich noch nie entwickelt, der Roboter müsste, um erkennen zu können das er rückwärts fahren muss, auf allen 4 Seiten eine Kamera haben

Gibt es einfachere Methoden? Wie habt ihr so Sachen gelöst?

Grüsse

09.12.2009, 13:37
Ach ja, noch ne dritte Möglichkeit

Die Fläche auf der der Roboter funktioniert, besteht aus einem "Netz" von Fototransistoren, welche auf das Licht des Lasers ansprechen...

Nochmal: Die Lösung sollte, wenn ich nicht bereits alle aufgezählt habe, möglichst einfach und günstig sein. Einfach, weil einfach immer gut ist, genauso wie günstig;) (Und nein, ich bin nicht soeiner der eine Raumsonde für 1000Euro bauen will, ich bin mir bewusst, das ich ein rel. kostspieleiges Hobby habe, dementsprechend ist günstig relativ und bedeutet halt "so günstig wie möglich";))

ranke
09.12.2009, 14:29
Bei der dritten Möglichkeit müsste die Information noch irgendwie vom feststehenden Netz auf den mobilen Roboter übertragen werden.
Ich denke schon dass das Modell Hund abgewandelt werden kann. Damit man eine 360° Rundumsicht bekommt, braucht man aber mehrere Sensoren gleichmäßig um den Umfang verteilt. Der Algorithmus wäre einfach: bewege dich in die Richtung, aus der Du am meisten Licht empfängst.
Statt vieler Sensoren kann man auch einen einzigen Sensor nehmen der rotiert, oder das Licht über einen rotierenden Spiegel bekommt.
Problem: Empfindlichkeit für Fremdlicht. Die Sache funktioniert also nur im Dunkeln. Wenn man dem Pointer eine Frequenz aufmoduliert und die Sensoren spezifisch für diese Frequenz auslegt, dann kann man einigermaßen unempfindlich gegenüber Fremdlicht werden, es wird aber schon schwierig, bei direktem Sonnenlicht wird das wahrscheinlich auch nicht mehr gehen. Zusätzlich helfen auch Farbfilter in der Farbe des Pointers und Blenden, die Licht von oben vom Sensor fernhalten. Insgesamt muß man aber damit rechnen, dass Licht vom Fenster oder einer Lampe immer viel stärker ist als das Licht vom Pointer.

lokirobotics
09.12.2009, 14:48
Eine Möglichkeit wäre es, eine Kamera auf einen Kugelspiegel gucken zu lassen.
http://www.linux-magazin.de/var/linux_magazin/storage/images/media/linux_magazin/ausgabe/2004/07/kein_spielzeug/abb4_jpg/25916-1-ger-DE/abb4_jpg_medium.jpg
So kannst du mit einer Kamera schon mal 360° überblicken.
Wenn der Roboter dann noch mit dem Laserpointer "reden" kann, wird die Sache (die entsprechende Hardware voraussgesetzt) schon relativ beherrschbar.
1. Laserpointer anmachen - Foto schiessen.
2. Laserpointer ausmachen - Foto schiessen.
3. Bildinformationen von Foto2 von Foto1 subtrahieren.
Als Ergebnis sollte, bis auf ein wenig rauschen nur ein heller Punkt in einem sonst dunklen Bild übrigbleiben.
Dann noch ein bisschen rechnen und du hast die Koordinaten des Punktes.

Sowas kannst du schon mit ner CMU-Cam und nem ATM8 machen.[/img]

09.12.2009, 16:01
Die Variante mit dem Kugelspiegel gefällt mir sehr gut. Ich kann mir jedoch denken, dass so ein Teil nicht allzu günstig ist, könnte man dazu auch eine blanke Weihnachtskugel zweckentfremden oder ist die zu uneben?

Was ist eine CMU-Cam? :S

Die Idee mit dem BIld 2 von Bild 1 abziehen leuchtet mir ein, gibts vielleicht Seiten wo sowas beschrieben und erklärt wird? Am schönsten noch in BASCOM;p

09.12.2009, 16:09
kann man denn als Kamera auch ne billig-cam von Pollin für ungefähr 20 euro nehmen? Liebe Grüsse

09.12.2009, 17:03
Okay ich hab nun einen interessanten Thread gefunden, der sich ebenfalls mit dem thema beschäftigt:

Sehe ich das richtig, das die CMU-Cam das Bild selber schon soweit verarbeitet, dass sie Kanten oder Punkte oder Hell/Dunkel erkennt?
Ist das dann so, dass ich die an den MC anschliessen kann, und sie von dort aus konfigurieren muss, nach was sie im Bild suchen soll?

Die CMU ist schon ein bisschen teuer, aber ich habe ein Kameramodul gefunden, welches die Daten per i2C bereitstellt.
Wäre es realistisch, die Daten eines solchen kameramoduls per Mega32 @ 16 Mhz in Bascom auszuwerten (also nach dem Punkt abzusuchen?)

Liebe Grüsse

09.12.2009, 18:04
Das hauptproblem beim Mega32 wird der Mangel an Speicher sein. Der Mega32 hat nur 2 Kbytes, und davon wird auch noch ein bischen für andere zwecke gebraucht. Wenn man 2 Bilder voneinander abziehen will, muß man schon eines der Bilder speichern.
Für Bildbearbeitung sollte man schon besser 32 kBytes oder mehr an RAM haben.

09.12.2009, 18:23
... hauptproblem beim Mega32 ... nur 2 Kbytes ... Für Bildbearbeitung ... 32 kBytes oder mehr an RAM haben ...Das stimmt so wohl nicht immer. Es gibt Primaner, die Ähnliches mit einem mega32 gemacht hatten - CowZ. Einfach in der Suchfunktion schauen nach "Entfernungsmesser - Optische Triangulation".

09.12.2009, 18:31
okay

Und wenn man das ganze so macht:

Die Kamera macht das Bild, und übermittelt es an den MC, welcher es zuerst einmal in eine SD-Karte speichert. Dann macht die Kamera das 2te Bild, welches auch in die SD-Karte kommt. Danach wandelt der MC die Bilder in HSV um und verrechnet sie, so das nur noch der Lasefleck übrigbleibt.

Ich denke aber, das die Reaktionsgeschwindigkeit auf diese Weise sehr leiden würde...

Gäbe es doch bloss eine andere Möglichkeit meine Anforderungen zu erfüllen als Bildauswertung...

i_make_it
09.12.2009, 19:36
Laser haben den Vorteil monocromatisch und polarisiert zu sein.
Also Kamera, davor einen Farbfilter der nur die Laserfrequenz durchlässt.
Und ein Polarisationsfilter der immer um 180° gedreht wird.

Der Laser kann immer an sein.
Der Farbfilter blockiert alles Fremdlicht mit Frequenzen ungleich der Laserfrequenz.

Der Polarisationsfilter lässt nur in einem kleinen Winkelfenster das Laserlicht durch.
Somit ist alles Fremdlicht eliminierbar.

Da der Robby genauso von den Physikalischen gesetzen der Optik abhängt, wie z.B.: Lasergelenkte Waffen, ist die wirksame Leuchtfläche entscheident.
Das heist wenn sich der Robby auf dem Boden befindet, und der "Ziellaser" ebenfalls den Boden beleuchtet, wird die Wirksame Fläche umso kleiner je flacher der Winkel wird unter dem der Robby die Markierung sieht.

Deshalb macht in diesem Fall eine möglichst hoch angebrachte Kamera Sinn.
Anstelle einer Kamera kann auch ein Sensor aus Fotodioden oder Forotransistoren verwendet werden, die ebenfalls mit Forsatzfiltern vor Fremdlicht geschützt werden.
Jedes Sensorelement wird durch einen Tubus in seinem Sichtwinkel beschränkt. So wird eine Sensorzeile aufgebaut die in etwa einen Viertelkreis also 90° abdeckt.
Die Sensorzeile wird rotiert so das ein halbkugelförmiger Raum überwacht wird.
Die Signalführung muß allerdings per Schleifring erfolgen (wegen der Rotation). Eine Referenzmarke wie bei einem Diskettenlaufwerk gibt die null grad marke je Umdrehung an. So kann über die Zeit seit dem letzten Referenzimpuls im Verhältniss zur Zeit zwichen zwei Referenzimpulsen die Winkelstellung ermittelt werden.
Luftabwehrraketen haben in den 70er Jahren genau so gearbeitet, nur das die Rotation von der Rakete selbst kam und IR Dioden verwendet wurden die die Triebwerksabwärme erfassten.

09.12.2009, 19:45
okay, das heisst die Kamera würde dann nur noch ausschliesslich den roten Punkt sehen, und sonst gar nichts mehr?!

Wäre ja schonmal ein Fortschritt, doch immernoch müsste ich das Bild auswerten, und nach dem was ich inzwischen so gelesen hab, scheint das ohne CMU-Cam nur seeehr schwer realisierbar zu sein. Oder?

Ich weiss, ich stelle viele Fragen, aber ist halt ein komplexes Thema;)

Grüsse

i_make_it
09.12.2009, 20:25
Habe meinen letzten Post noch ergänzt um:
Sensor aus Fotodioden / Fototransistoren.

Bei einer Cam geht eine gute USB Cam durchaus auch.
Am besten mal nach den HD Cams sehen und für welche es auch schon Linux Treiber gibt.

Als Hardware für einen mobilen PC empfehle ich ein PC104 Low Power System.
Ein echtzeit Linux wie z.B.:
http://www.heise.de/open/meldung/Echtzeit-Linux-von-Concurrent-in-Version-5-4-erschienen-873953.html
einfach mal unter echtzeitlinux / realtime Linux googlen.
Windoof ist leider nicht echtzeitfähig.
Und als Softwarequelle für die Bildverarbeitung mal bei http://sourceforge.net/
stöbern.
Dazu halt einiges an fundiertem Wissen über Bildverarbeitung.
HW-Kosten Cam und PC104 System ca. 400,-€
OS und Software findet man kostenlos.
Einige hundert Stunden programmieren und testen je nach Vorwissen.
Wenn ich mich an Projekte wage die weit jenseits meiner Kenntnisse liegen, dann zerteile ich alles in Teilprobleme.
Z.B.: Bei der Bildverarbeitung nutze ich die Platform die ich schon kenne um mich mit den Algorithmen vertraut zu machen.
parallel kann man in einer VM-Ware oder auf einem alten Rechner schon mal das Echtzeit Linux hochziehen und mit verschiedenen Software Paketen experimentieren. Die Cam wird dabei einfach nur umgesteckt.
Ein einfacher Testauchbau aus einem Kantholz auf einer Sperrholzplatte und ein frisierter Laserpointer der z.B. per Servo verschiedene Positionen beleuchten kann, ersetzen den Robby und den realen Raum.
Unabhängig von dem Sensor kann dann auch schon der eigentliche Robby gebaut werden. so kannst du bei Frust immer schnell mal in ein anderes Teilprojekt wechseln und mal wieder ein Erfolgserlebniss haben.

Käfer
09.12.2009, 20:47
Danke vielmals für deine hilfsbereite Hilfe

Aber wie wäre es wenn man in eine etwas andere Richtung geht, und zwar mit den Fototransistoren (für mich muss es nicht unbedingt mit Bilderkennung sein, eher im Gegenteil;p)

Also wenn man 4 Fototransistoren nimmt (mal zum Anfangen) und auf jede Seite des Robis eine lötet, hat man schon mal eine rudimentäre Rundumsicht.

Dann werden alle Fototransistoren so präpariert, dass sie nur noch das Licht des Lasers empfangen können.

Wenn nun irgendwo der Laser auf den boden trifft, wird das vom Roby "gesehen" -> er fährt dort hin.

Die einzige Frage die sich mir da stellt: Sind die Fototransistoren sensibel genug, sprich: Der Laser ist ja kein idrekter Strahl auf den Fototransistor, reicht es trotzdem aus, damit dieser schaltet? und vor allem: bis in welche entfernung würde das funktionieren...?

Ich denke, dass das, wenn überhaupt, nur mit sehr sensibeln Fototransistoren möglich ist. Oder täusche ich mich und ein standard-Teil reicht aus? Oder geht es gar nicht und ich komm wirklich nicht um die Bilderkennung rum?

Grüsse

i_make_it
09.12.2009, 21:03
Das Problem ist das mit der "rudimentären Rundumsicht" kein genaues Navigieren drinn ist. eine Auflösung von 90° seitlich und die Entfernungssicht von 10cm bis 2m mit einer Diode bringt ja nicht so viel, da der Robby im ungünstigsten Fall mit einem Winkelfehler von 89° schräg zum Zielpunkt fährt, bis der Zielpunkt in den Sensorbereich des nächsten Quadranten wandert. Wenn der Kurven Algorithmus falsch ist, kann der Robby so ewig den Zielpunkt umkreisen ohne jemals anzukommen.

Wenn eine Sensorzeile aus 10 Dioden / Transistoren von 5° - 55° mit 5° Öffnungswinkel je Sensorelement besteht, und eine Winkelauflösung von 10°in der Horizontalen erreicht wird, dann sollte bei ca. 40cm Abstand Sensor zum Boden, eine Auflösung von 10x10cm erreichbar sein.
Damnach sollte der Robby auch bis auf maximal 10cm Abweichung an den Zielpunkt rankommen.

Käfer
09.12.2009, 21:10
Ich habe mich leider nicht genug gut ausgedrückt, bzw hab den Satz nicht fertig geschrieben.

Natürlich müsste ich beim fertigen Robi entweder mehrere Fototransis einsetzen, oder, am besten:

Ich nehme 5 Fototransistoren, setze sie in einer senkrechten Zeile aufeinander und schränke deren seitlichen "Sichtbereich" enorm ein.
Dieses Gebilde lasse ich dann drehen, bei jeder vollen Umdrehung wird ein Interrupt ausgelöst, dadurch kann dan der controller darauf schliessen, von wo das licht kam

Aber eigentlich stimmen wir ja überein;)
Das heisst ich brauche nur noch einen passenden Fototransistor und die Filter

Kann ich irgend n'Transistor nehmen oder brauch ich eben n'speziellen typen? natürlich könnte man das Signal vom Transistor auch noch verstärken...

und vo wo bekomm ich die ganzen Filtersachen?

Grüsse

i_make_it
09.12.2009, 21:29
"Normale" Farbfilter und Polarisationsfilter gibts bei Hama als Fotozubehör.
Polarisationsfilter gibt es auch bei Kinos die 3-D Filme zeigen.
Da ist die Folie einmal waagerecht und einmal senkrecht polarisierend in die Brillen eingeklebt.
Spezielle Laserfilter gibt es z.B. bei Laser 2000.

Günter49
10.12.2009, 07:31
Ein Beispiel für eine Laserpointeranwendung wie sie i_make_it beschrieben hat, findest du hier:
http://www.hsi.gatech.edu/hrl/project_clickable_world.shtml
mit Beschreibung:
http://www.hsi.gatech.edu/hrl/pdf/iros08_clickable.pdf

Gruß, Günter

Käfer
10.12.2009, 09:23
man ich springe hin und her zwischen Bildereknnung und Transistor-dings.

Ich komme einfach nicht dahinter, wie ich beim Transistor die Entfernung zum Laserpunkt rausbekommen kann.
Mit der Bilderkennung wär das ja einfacher...

grüsse

ranke
10.12.2009, 12:58
Wenn man es mit wenigen einzelnen Empfängern machen will, dann kann man die Entfernung eigentlich nicht feststellen. Das ist aber nicht unbedingt notwendig, weil die Richtung ja wichtiger ist. Der Fremdlichteinfluß ist bei dieser Lösung auch schwieriger. Weil der Einzelne Sensor eine recht große Fläche betrachtet, fällt auch viel Fremdlicht in den Sensor. Ein kleiner Lichtfleck durch den Pointer ändert fast nichts an dem Gesamtlichteinfall auf den Sensor. Deshalb wird man den Pointer mit einem typischen Signal modulieren müssen und im Sensorsignal diese Modulation suchen.
Die Alternative mit der Kamera: Hier hat man sehr viele Sensoren (im allgemeinen 3 farbspezifische pro Pixel). Der Lichtfleck des Pointers wird nur einige wenige benachbarte Pixel betreffen und und diese recht deutlich, weil diese Pixel ja genau auf die Stelle des Lichtflecks sehen. Modulieren ist weniger sinnvoll, weil die Frequenzauflösung des Sensorarrays gering ist, offenbar ist es auch nicht notwendig, wie das von Günter49 gepostete Beispiel zeigt. Die Bildauswertung ist insgesamt aufwändiger, man kann aber auch bessere Ergebnisse erwarten, wenn dann mal alles funktioniert.

oberallgeier
10.12.2009, 14:41
Hi Käfer,

schau Dir doch mal den Thread von vohopri an, ab diesem Posting, (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=428985&sid=4b3619e0974fe4d9d19ae757ade52ad9#428985) ab "... muss das Programm das gesteuerte Fahrzeug sehen können ...". So ungefähr ist die Erkennung bei (s)einer Lösung (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=430969&sid=4b3619e0974fe4d9d19ae757ade52ad9#430969) nach dieser Methode.