PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pathfinding Roboter Bob



-Bob-
15.09.2012, 16:49
Moin zusammen,

zwecks Facharbeit arbeite ich momentan an einen Pathfinding Roboter namens Bob. :)

Er soll eine Schwarze Fläche abfahren und dort nach aufgeklebten Punkten suchen.

Blau: Wegpunkt
Rot: Zielpunkt
Grün: Startpunkt

Nach dem erfassen der Punkte soll der kürzeste Weg von Grün über Weiße Punkte zu Rot errechnet werden und dann abgefahren werden.

Den Kopf des ganzen bildet der AVR Butterfly.
Kann ich zum erfassen der Farben folgenden Sensor verwenden?
http://www.conrad.de/ce/de/product/180381/SMD-RGB-FARBSENSOR-KPS-5130PD7C/SHOP_AREA_37351&promotionareaSearchDetail=005

Ich hänge momentan bei dem Absuchen des Feldes fest.
Wie lasse ich Bob am besten die Fläche abfahren, ohne, dass er sie verlässt aber trotzdem alle Punkte erwischt?

Vielen Dank und Grüße

RP6conrad
16.09.2012, 09:18
Odometrie ist das Stichwort. Damit kann der Robby eine bestimmte Strecke abfahren. Aber die Positionsfehler werden auch aufaddiert, so benotigen sie dan auch noch eine zusatzliches System um diese Fehler zu corrigieren. Die Farbpunkte ist eine Moglichkeit um die Fehler zuruck auf 0 zu setzen.
Moglicherweise hat den AVR Butterfly nicht genugend freie Pins um das alles moglich zu machen. Wie gross sind die Punkte in Verhaltnis zu Robby ?

HeXPloreR
16.09.2012, 09:30
Hallo,

zum Problem das die Fläche möglicherweise verlassen wird: Ziehe einen weißen Rand um die schwarze Fläche, da du keine weißen Punkte suchst kannst Du damit feststellen ob die schwarze Fläche verlassen wird. Wenn diese Möglichkeit ausscheidet hilft wohl nur noch eine Wand.
Der Farbsensor von C ist möglicherweise schon etwas kompliziert auszuwerten, es mag aber damit gehen. Dennoch würd ich einen einfache IR-Sensor Lösung (z.B IS471F) vorziehen. Du möchtetst ja nicht herrausfinden wie blau dein blauer Punkt ist, sondern ob es ein Blauer oder Grüner ist. Da schwarz das Licht weniger reflektiert als deine Farbpunkte kann man damit denn Unterschied messen und damit rückschliessen auf welchen Punkt (Farbe) man sich befindet. Und der weiße Rand ist damit auch gut zu finden -> maximum Reflektion.
Zum absuchen und genauere Odometrie kann ich leider nichts sagen.

-Bob-
16.09.2012, 18:50
Vielen Dank für eure Antworten.
Meinst du, dass die daten des Farbsensors so komplex sind? Liefert er nicht für jeden Kanal (RGB) einen Wert?
EDIT:
Diesen Sensor kann ich nciht verwenden, da erst nach Abgabetermin lieferbar =/

Wie viele Pins werden denn benötigt, um 2 Getiebemotoren und den von mir genannten Farbsensor anzusteuern?
Die Pins sollen ca. 1,5 cm im Durchmesser haben, der roboter ist ca. 20 cm lang, 10 cm breit und die Höhe ist noch unbekannt.

Zur Odometrie lässt sich dann sicher was im Netz finden.

Zur Ansteuerung des Motors habe ich dann nocheinmal eine Frage.
Ich habe mir folgenden Doppelgetriebemotor beschafft:
Tamiya 70097
http://www.watterott.com/de/Dual-Motor-Getriebebox

Betriebsspannung 3-6V

Ich würde gern eine Motoransteuerung nach dem Bausteinprinzip nehmen.
Könnt ihr eine passende empfehlen? :)

Viele Grüße

ijjiij
16.09.2012, 21:28
Also ich verwende bei meinem kleinen Roboter auch die Tamiya Getriebebox. Ich steuere sie über diesen ( http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=65&products_id=206 ) Motortreiber an. Der ist recht klein (ca 2x1cm) und ist für die beiden Motoren meiner Meinung nach gerade richtig.

-Bob-
16.09.2012, 21:32
Also ich verwende bei meinem kleinen Roboter auch die Tamiya Getriebebox. Ich steuere sie über diesen ( http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=65&products_id=206 ) Motortreiber an. Der ist recht klein (ca 2x1cm) und ist für die beiden Motoren meiner Meinung nach gerade richtig.

super :)
danke die sieht sehr vielversprechend aus.

-Bob-
18.09.2012, 19:10
Ich habe nocheinmal eine Frage bezüglich des Farbsensors.

Ist es wirklich fehlerfrei möglich eine Farbe durch einen IR-Sensor zu erkennen?
Ist es nicht einfacher einen "normalen" rgb-sensor zu verwenden?

Vielen Dank

EDIT:

Da ich mit der Zeit etwas unter Zeitdruck gerate, habe ich nocheinmal ein paar Fragen an euch. Sie mögen evtl. etwas dämlich klingen, aber da dieses mein erstes Robotikprojekt ist, sind sie einfach notwendig ;)

Der AVR Butterfly wird über eine onboard-Batterie versorgt.
Versorgt er auch einen Sensor mit Strom oder muss dieser seperat an einen Akku angeschlossen werden und, wenn ja, wie?

Welchen Sensor könnt Ihr für meine Zwecke empfehlen? (Rot, Grün, Blau, Weiß erkennen)
Kann ein solcher Sensor ohne jegliche weitere Bauteile an den Butterfly angeschlossen werden?

Die empfohlene Motorsteuerung von RN benötigt eine Logigspannung und eine Betriebsspannung für die Motoren.
Kann ich für beide den selben 6V oder 4,8V Akku verwenden?

Habt ihr einen Tipp, wie ich die Position der Punkte auf der schwarzen Fläche, wenn sie gefunden wurden, festhalten kann?

Ich hoffe Ihr könnt und möchtet mir weiterhelfen :)

Zur Zeit sieht meine Materialliste folgendermaßen aus:

- Tamiya Twin Motor
- RN Motorsteuerung http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=65&products_id=206
- AVR Butterfly
- 4,8V oder 6V Akku
- Chassis und Räder
- Farbsensor
- div. Stecker und Stiftleisten

Fehlt noch irgendwo etwas?

EDIT 2:
Ich habe mich dazu entschieden die Position des Roboters auf dem Feld mittels zweier Ultraschallsensoren zu ermitteln.
Rechtwinklig zueinander angeordnet mächte ich so X und Y position bestimmen. Zur Bestimmung seiner Postion richtet sich der Roboter immer wieder in eine Richtung. Die Weiße Linie, die das Feld umrandet wird durch eine Mauer ersetzt.
Könnt ihr preiswerte Sensoren für eine Entfernung von ca. 1m empfehlen?
Kann ich mittels zwei Getriebemotoren überhaupt eine exakte 90° Kurve durchführen bzw. kann ich die Ausrichtung irgendwie kontrollieren?

Vielen Dank :)

ijjiij
19.09.2012, 10:16
Zur Motoransteuerung kann ich dir vorweg ein paar Infos geben, da ich mich jetzt selbst einige Zeit mit der gespielt habe.

Du brauchst auf jeden fall 6 Signalleitungen, von denen 2 PWM und 4 digital (ein, aus) sind. Mit denen steuerst du dann direkt die Motoren an.
Deinen Controller betreibst du ja nehm ich an mit entweder 5V oder 3,3V, wie das halt so üblich ist. Da du die Motoren aber auch mit weit höherer Spannung (ich glaub 36V maximal waren das) betreiben kannst, ist hier ein extra Anschluss am Motortreiber vorhanden. Wenn du die Motoren aber mit der Controllerspannung betreiben möchtest, schließt du die VCC und die VMOT einfach zusammen.
Es wird zwar dringend empfohlen für die Motorspannung eine eigene Energiequelle zu verwenden (also eigene Batterie), ich hab das jedoch aus Platzgründen und zu Testzwecken jetzt mal über die gleiche Spannungsquelle laufen lassen und es funktioniert problemlos.

Außerdem hast du noch den Standby-Pin, über den kannst du, wenn du das möchtest, den Motortreiber komplett ausschalten. Soll heißen, wenn der Standby aktiv ist dann reagieren die Motoren auch dann nicht, wenn du ein Signal an den Motortreiber sendest. Du kannst in dem Fall also die 6 Signalleitungen die sonst die Motoren ansprechen für etwas anderes Nutzen, solange sich dein Roboter nicht bewegt.
Wenn du den Standby nicht nutzen willst, schließt du den Standby-Pin einfach mit einem 1k Ohm Widerstand an die VCC, schon ist der Standby dauerhaft deaktiviert.


Zum Festhalten der Punkte auf deiner (rechteckigen?) Testfläche sehe ich mehrere Möglichkeiten.

1.) könntest du eine Matrix für die Testfläche eintragen die dann jedem Bereich (10x10cm oder noch kleiner) eine 0 zuordnet wenn hier kein Punkt ist, eine 1 Für den Startpunkt, eine 2 für Wegpunkt und eine 3 für Zielpunkt. Problem dabei ist halt, das eventuelle Ungenauigkeiten im Abfahren der Fläche sich aufsummieren könnten und die 1, 2, 3 dann eventuell um Kästchen "verrutscht" und dann nicht richtig gespeichert wird. Könnte aber eventuell ein erster Ansatzpunkt sein um den Roboter mal ungefähr in die richtige Gegend zu bekommen und dort dann den Punkt zu suchen.

2.) könntest du an den entsprechenden Punkten so eine Art kleiner "Wegmarken" abladen, eventuell eine leuchtende LED an einer Batterie oder ähnliches. Wenn du dann am Punkt 1 (grünes lämpchen) Stehst, dreht sich der Roboter (oder einen Sensor) und sucht den Wegpunkt 2 (rotes lämpchen) und fahrt dann dort hin, an Wegpunkt 2 sucht er dann entsprechend das nächste Lämpchen und so weiter.

3.) könntest du an jedem Wegpunkt (beim erstmaligen Auffinden) eine entsprechende Lage anhand von Referenzpunkten merken. Stichwort hierfür wäre dann wohl Triangulation.

Es gibt sicher noch mehr Möglichkeiten die mir jetzt nicht sofort einfallen.
Auf jeden fall bräuchtest du für jede dieser Methoden noch weitere Sensoren an deinem Bot.

HeXPloreR
19.09.2012, 11:49
Du kannst mit einem einfachen (Gleichstrom)Getriebe keine genaue 90° Drehung durchführen, noch die differenz dazu feststellen. Entweder benutzt Du Schrittmoteren, auch gerne mit Getriebe, oder Du benötigst noch Odometrie um festzustellen wie weit und schnell sich deine Räder drehen. Aber auch damit allein ist nicht sicher gestellt das dein Bot sich korrekt dreht. Das ist dann der Schlupf der irgendwie auch noch gemessen werden müsste - z.B. ein Kompass könnte das Problem beheben.

Also gibt es einen weißen Rand?

Was bnedeutet Dir rennt die Zeit davon? ...möchtest Du morgen fertig sein? ...denke das wird nichts.

Viel Erfolg und nicht aufgeben ;)

-Bob-
19.09.2012, 14:48
Danke an euch beide für die ausführlichen Antworten :)

Wenigstens bin ich nun nichtmehr so extrem unwissend, was den motortreiber betrifft.
Ich denke dass ich die Positionsprüfung mit den 2 Ultraschallabstandssensoren durchführen werde.

Die Sache mit dem Kompass ist ein super tipp, danke. Kannst du simple Fertigmodule empfehlen?

Fertig sein mit der Geschichte sollte ich Zeitnah, wenn's glatt läuft in ca. einem Monat.

ijjiij
19.09.2012, 15:33
Also ich hab jetzt auf die schnelle nur 2 Fertigmodule gefunden:

http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=71&products_id=137

http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=71&products_id=228

Frag mich dazu aber nicht wie gut die sind, wie man sie anspricht etc, habe mit den beiden Modulen leider auch keinerlei Erfahrung.
Außerdem weiß ich auch nicht wie Präzise die sind, weil ja bei beiden eine Genauigkeit von 3-4 Grad angegeben ist.

-Bob-
19.09.2012, 17:48
Also ich hab jetzt auf die schnelle nur 2 Fertigmodule gefunden:

http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=71&products_id=137

http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=71&products_id=228

Frag mich dazu aber nicht wie gut die sind, wie man sie anspricht etc, habe mit den beiden Modulen leider auch keinerlei Erfahrung.
Außerdem weiß ich auch nicht wie Präzise die sind, weil ja bei beiden eine Genauigkeit von 3-4 Grad angegeben ist.

Ich habe grade nocheinmal nachgesehen und denke, dass die Anzahl der Ports des Butterfly nicht für derart viele Sensoren ausreicht.
Grade kam mir eine Idee, wie alles mit Einschränkungen nur mit dem Farbsensor machbar wäre:

Ich ziehe eine Linie in Schlangenform über das gesamte Feld. Dann teile ich das Feld, wie du vorgeschlagen hast, in ein Raster ein.
Bei einem Feld von meinetwegen 100cm * 100cm Größe in 100 Felder. Diese Felder werden natürlich alle von der Linie durchzogen.
Ist in dem Feld kein Wegpunkt, dann ist auf der Linie in dem Feld ein gelber Punkt. Ist dort ein Wegpunkt, so ist dort ein Schwarzer Punkt.
Ich kann dem Roboter dadurch die Position jedes der 100 Punkte einprogrammieren. Es ließe sich dann auch Winkel zwischen den Punkten berechnet werden, zu denen gedreht werden muss.

Das einzige, dass neben dem Farbsensor dann noch benötigt wird ist ein Sensor, der den Drehwinkel überprüft.
Geht das Über ein Zahnrad mit Taster, der die Zähne mitzählt?

Was haltet ihr von der Idee?

Viele Grüße
bob

ijjiij
19.09.2012, 21:11
Wieso musst du hier dann noch den Drehwinkel überprüfen? Solange der Sensor auf der (farbigen) Schlangenlinie ist passt doch alles...

Alternative wäre hier dann eventuell noch so eine Art "Linefollower" damit die Linie komplett abgefahren wird, also zwei Fotodioden links und rechts einer LED die erkennten, wann die Linie verlassen wird. Zu dem Thema findest du auch einiges im Forum.

-Bob-
19.09.2012, 22:12
Wieso musst du hier dann noch den Drehwinkel überprüfen? Solange der Sensor auf der (farbigen) Schlangenlinie ist passt doch alles...


Nachdem die Punkte gescannt wurden muss er ja den kürzesten Weg berechnen und diesen abfahren. Dann muss er ja von der Linie abweichen.
Meinst du das geht über Zahnräder? (Ein Zahnrad pro Achse)

ijjiij
20.09.2012, 06:31
Würde ich dann eher über eine Encoderscheibe + Lichtschranke, oder einer schwarz-weißen Scheibe mit einem Sensor davor machen. Aber dann pro Rad eine von diesen Drehmessungen.

Kannst dazu ja mal nach dem Asuro Googlen, da wird das Problem über so eine schwarz-weiße Scheibe und Sensoren gelöst.

-Bob-
20.09.2012, 17:14
Die Lichtschranke hier sollte gehen, oder?

http://www.conrad.de/ce/de/product/179999/Gabellichtschranke-EE-SX1041-Omron-EE-SX1041-Gabel-Lichtschranke-Reichweite-5-mm

Müsste ich die Encoderscheibe selbst bauen oder kann man sowas auch kaufen? :)

ijjiij
20.09.2012, 20:12
kann man natürlich auch kaufen, zb robotikhardware.de hat sowas im angebot... oder du nimmest eine einfache holzplatte / Zahnrad irgendwas und bohrst ein loch rein, schon hast sie selbst gebaut ;)

Je mehr Löcher die Scheibe hat desto exakter sollte die Messung möglich sein