Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Linienverfolgung nur mit EINEM Sensor
rbaleksandar
28.06.2009, 13:04
Hallo, Robofans :)
Ich habe vor ein paar Tagen festgestellt, dass einer meinen Photosensoren, die man für Lichtverfolgung benutzt werden, nicht funktioniert. Ich hab's getestet und es scheint, dass das Ding für die Mülltonne ist (der Sensor meine ich ;)). Ich war gerade auf der Linienverfolgung...Und jetzt weiß ich nicht, was ich machen muss, um dieses Aufgabe fertig zu machen. Ja, den Sensor werde ich wechseln, aber später. 8-[ Außerdem hatte ich eine Idee um beide Sensoren für verschiedene Aufgaben zu benutzten. Jetzt hab ich auch kein Wahl. Der rechte Sensor funktioniert problemlos, der linke - überhaupt nicht. Meine Frage ist - kann man Linienverfolgung nur mit einem Sensor machen und wenn "ja", dann wie? Ich habe erlicht gesagt keine Idee. :( Hoffe, dass ihr mich verstanden hat (bin ein Ausländer). :)
Vielen Dank im Voraus!
Grüße,
rbaleksandar
EDIT: Ich hatte die Idee, dass ich einfach eine Schranke messen kann (Mittelwert so zu sagen). Dann kann mein Sensor messen und in dem Program die Messwerte mit der Mittelwert (nennen wir das Hell/Dunkel-Gränze) vergleichen und < oder > rausspucken, also dunkel oder hell...Aber das ist sehr doff, da man nicht immer das geleiche Licht hat, also muss man bei jedem Start eine neue H/D-Gränze setzen. Und auch kann man nicht sagen: "Ok, rechter Sensor liefert kleinere Messwerte als der linke, also gehe nach rechts...".
Nur ne Idee:
Man kann doch immer nach links rechts fahren (n bissl) und wenn es dort besser wird dann dort bleiben sonst zurück. Dürfte recht lustig ausschaun :D :D
mfG
rbaleksandar
28.06.2009, 13:30
:D Jö, danke. Aber ich will kein betrunkener ASURO. Ja, es wird lustig aussehen, aber es wir ziemlich lange dauern bis der Asuro von Punkt A zum Punkt B mit Hilfe von Linienverfolgung fahren muss, da er die ganze Zeit hin und her fahren wird. :)
Besserwessi
28.06.2009, 13:44
Wenn die Linie genügend breit (im Vergleich zur Auflösung des Sensors) ist, sollte es mit einem Sensor kein Problem sein. Man folgt dann nicht der Linie, sondern mehr dem einen Rand der Linie.
Wie schon gesagt wird man dann aber den Hell dunkel abgleich genauer machen müssen, als mit 2 Sensoren. Sollte aber kein so großes Problem sein.
Wenn man sich den rechten Rand der Linie ausgesucht hat, lenkt man also mehr nach rechts wenn der Sensor dunkler als den halben Wert meldet und mehr nach links wenn es heller ist.
Wenn die Linie sehr schmall ist, ist die Schlangenlinie wohl die beste Lösung. Solange die Linie keine engen Kurven macht, muß das gar nicht so schlecht sein.
Das problem ist mit einer sensor kann man nicht feststellen ob den sensor sich links oder rechts von den linie befindet. Den gleichen abstand zum linie an beider seiten gibt in prinzip den gleichen wert.
Wenn du einer schwarzen linie auf einen weissen untergrund hat mus er zuchen nach den minimalen beleuchtung der sensor. Wenn er von den linie weg geht wird die wert hoher (mehr weiss, hohere werten bei jeder messungen). Wenn er in die nahe von den line komt wird den wert anderung niedriger bis er uber den linie steht und den wert minimal ist. Einer losung konnte sein den anderung der wert zu messen (also, neuesten wert minus letzten wert) und immer den andere richtung drehen biss die werten kleiner werden. Wenn er dan uber die linie geht werden den werten wieder grosser und wechselt er wieder von richtung zum andere seite.
Aber versuch das mal mit langsame geschwindigkeit, und kleine MotorSpeed differenz zwischen beider seiten. Den linie in die nähe behalten wird er schwierig finden denke ich.
rbaleksandar
28.06.2009, 14:51
Danke sehr führ die schnelle und außfürliche Antworten. =D>
Wenn man sich den rechten Rand der Linie ausgesucht hat, lenkt man also mehr nach rechts wenn der Sensor dunkler als den halben Wert meldet und mehr nach links wenn es heller ist.
:-k Bin nicht ganz sicher was du hier meinst... Also wenn wir Messwert M_n mit M_(n+1) vergleichen (d.h. zuerst wirt M_n und dann M_(n+1) von dem Sensor gemessen), wie entscheidet ASURO in welche Richtung zu fahren. Ok, falls M_n < M_(n+1) ist, dann heißt es, dass es heller wird, und andernfalls (M_n > M_(n+1)) - dunkler. Aber was für eine Anweisung muss man geben, damit ASURO nicht nach links z.B. fährt, obwohl die Linie rechst steht. Der Sensor misst in einem Punkt (mindestens denk ich so :)). Ja, er kann sagen "Es ist heller/dunkler geworden" aber wie kann man es machen, dass der Roboter nicht in der falsche Richtung fährt? Das ist mir überhaupt nicht klar.
Leichter kann man das machen, wenn man ein Gradient neben der Linie zeichnet, d.h. wir haben ein weißes Feld und je näher wie zur die Linie kommen, desto dunkler wird dieses Feld bis man am Ende ganz schwarz kriegt, d.h. wir haben die Linie gefunden. So gehts ganz leicht auch für die
Richtungbestimmung. ASURO fährt nach eine beliebige Richtung und wenn man die Werte kleiner sind, als die, die vorher gemessen sind, heißt das, dass wir näher zur Linie kommen.
Leider geht das nicht für eine Linie ohne Gradient, d.h. nur schwarz und weiß.
__________________________________________________ _________
Hier ist das Ding mit Gradient, was ich ja normalerweise benutzen kann, aber in diesem Fall nicht.
http://img218.imageshack.us/img218/7840/followingalineforonesen.png
ASURO geht auf m0 (weiß). Dann kommt er auf z.B m1. Ein Vergleich findet statt. m1<m0, also es ist dunkler geworden. Fahre nach links oder rechts (beliebige Richtung, weil ich kein zweites Sensor habe). Messe wieder. Falls ASURO nach links gefahren ist, landet er wieder auf m0, was ein größeres Wert als das forige m1 hat. Also es ist heller geworden, d.h. falsche Richtung, gehe in der andere Richtung. Falls ASURO nach rechts gefahren ist, landen wir auf m2, was ein kleineres Messwert als m1 representiert. Also wir sind näher zu der Linie gekommen. Und so weiter. So...Jetzt kommt das schwierige Aufgabe die Linie zu verfolgen. Das kann man so machen - man nimmt 2 Messwerte nacheinander. Das wird unser Schwanungsinterval sein. Danach muss man eigentlich die Messwerte sehen, ob die zu diesem geschlossenen Interval gehören. Wenn "ja", dann fährt man weiter forwärts, wenn "nein" - gehe links oder rechts und wiederhole die Messungen von oben (mit m0, m1, m2...). Das ist meine Idee. Ich glaub die funktioniert mindestens theoretisch. :D Aber die funktioniert (denke ich) nicht, wenn wir nur 2 Farben haben - schwarz und weiß.
Hallo rbaleksandar!
Die Ide von Besserwessi ist die beste, man muß nur die aktuelle Helligkeit M_(n) nicht mit der vorheriger M_(n+1) sondern mit der mittlerer M_(n)/2 vergleichen. Der Wert M_(n)/2 wird am Anfang der Linienverfolgung gespeichert und bleibt unverändert.
Die mittlere Helligkeit kann z.B. berechnet werden, wenn der Asuro ausser der Linie steht, weil das Stellen des Asuros genau auf der Liniengrenze ist in der Praxis sehr schwer durchfürbar.
Die Linie muß natürlich viel dunkler/heller als die übrige Fläche sein. Es muß immer die gleiche Linienseite analisiert werden. Theoretisch könnte der ASURO die Linie selber finden und sie verfolgen, wenn er auf der richtiger Seite der Linie vor dem Starten gestellt wird.
MfG
Besserwessi
28.06.2009, 16:13
Wenn der Sensor analog ausgelsen wird, wird man immer Zwischenwerte kriegen, denn der Sensor mißt ja nicht die Helligkeit an einem Punkt, sondern für eine kleien Fläche. Die Schwierigkeit bei der Verfolgung einer Kante ist nur das man aufpassen muß die Kante nicht zu verlieren und versehentlich doch mal auf die andere Seite der Linie zu kommen.
Wenn die Motoren das nicht mitmachen, muß wenigstens der Sensor so schnell ausgewertet werden, dass man mitkriegt wenn man über die linie rüber ist.
Übertragen ins Richtge Leben ist das so als würde man beim Deich immer auf halber Höhe langlaufen.
rbaleksandar
28.06.2009, 16:25
Die mittlere Helligkeit kann z.B. berechnet werden, wenn der Asuro ausser der Linie steht [...]
Na ja, hier kommt ein Problem - und wenn ASURO schon vom Anfang an auf der Linie ist? :-k Du hast recht, aber auch das mit dem Vergleichen von M_n und M_(n+1) hat Sinn, da wir ungefähr die Grenze zwischen hell und dunkel bestimmen müssen um auch diese Mittelwert zu bestimmen.
Ich habe noch eine Idee (die auch etwas ähnliches wie diese mit dem Mittelwert ist) und bitte um Bewertung so zu sagen. :)
Diese Grenze von der Linie kann man ungefähr folgendermassen bestimmen:
ASURO ist auf eine Farbe (schwarz oder weiß). Offensichtlich sind die Werte von WEISS und SCHWARZ ziemlich verschieden. Also da kann man ein festes Wert nehmen z.B. N (vielleicht mehr). Wenn sich die Helligkeit drastisch ändert, kann man mit diesem Wert zeigen, dass der Roboter sich schon auf einem dunkleren/helleren Feld befindet. Da ich ganz ganz schwarze Farbe benutze und das Blatt weiß ist, kann ich einfach vergleichen, ob mein Wert unter oder über N ist. Falls unter 100, d.h. ASURO befindet sich auf der Linie. Da kann man einfach nach vorne fahren bis sich das Wert so ändert, dass die über N wird. Hier kann ich über irgenwelche Speicher nachdenken, der die Richtung bis jetzt speichert. Falls es über N wird (also hell), kann ich diese Auslesen und entweder nach links oder rechts abbiegen.
Theoretisch könnte der ASURO die Linie selber finden und sie verfolgen, wenn er auf der richtiger Seite der Linie vor dem Starten gestellt wird.
Na ja, ich will's so machen, dass es von beide Seiten die Linie finden und verfolgen kann.
Danke sehr für die sehr gute Vorschläge!
Besserwessi
28.06.2009, 21:54
Wenn man den Asuro am Anfang etwas bewegt (z.B. einmal auf der Stelle drehen), sollte man schon die Werte von Schwarz bis weiss finden. Wenn man die Linie verloren hat, ist halt ein brauchbarer Algorithmus gefragt zum Wiederfinden. Da man ja weiss in welcher Richtung man den Sensor dabei bewegt, weiss man auch auf welcher Seite man gerade ist.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.