habs gefunden. danke. die frage ist allerdings, warum es bei einem sehr/zu breiten streifen nicht trotzdem funktioniert?
Was spricht dagegen?
Druckbare Version
habs gefunden. danke. die frage ist allerdings, warum es bei einem sehr/zu breiten streifen nicht trotzdem funktioniert?
Was spricht dagegen?
streifen zu breit --> es könnte passieren dass beide sensoren gleichzeitig schwarz sehen, und dann versucht der asuro einfach irgendwohin auszuweichen oder denkt passt scho, is ja beides gleich dunkel und fährt stumpf geradeaus... keine ahnung. geht es mit dem was ich dir geschickt hab?
Fröhliche Weihnachten Leute!
Ich habe heute mal das Programm aus der Asuroanleitung zur Linienverfolgung ausprobiert. Bei mir funste es zum Glück auf Anhieb.
Ich habe Asuro gleichmal eine Strecke um einen Tannenbaum aufgezeichnet und sie ihn abfahren lassen.
Hier ein Bild dazu:
Bild hier
Hier das Video dazu:
http://www.youtube.com/watch?v=U2bEKGTRwiY
Hier der Quellcode, den ich aus der Anleitung abgeschrieben habe(hab noch eine Anzeige der Richtungsänderung mit den BackLEDs hinzugefügt:
Code:#include "asuro.h" //Linienverfolgung auf einfachste Art
int main(void) {
unsigned int data[2]; //Speicher bereit stellen
Init();
FrontLED(ON); //Linienbeleuchtung einschalten
MotorDir(FWD,FWD); //Beide Motoren auf vorwärts
while(1){ //Endlosschleife, ASURO soll beliebig lang einer Linie nachfahren
LineData(data); //aktuelle Helligkeitswerte der Fototransistoren einlesen
if (data [0] > data[1]) //links heller als rechts
{MotorSpeed(200,150); //...dann links mehr Gas geben
BackLED(ON,OFF);} //Fahrtrichtung links anzeigen
else
{MotorSpeed(150,200); //...sonst rechts mehr Gas geben
BackLED(OFF,ON);} //Fahrtrichtung rechts anzeigen
}
return 0;
}
Habe noch eine Frage:
Woran liegt es, dass mein Asuro, wenn er mal keine Linie unter sich hat, immer nur nach rechts fährt?
Er müsste dann doch eigentlich gerade ausfahren...
wahrscheinlich sind deine beiden fototransistoren so verschieden, dass der wert des einen immer etwas höher liegt als der des anderen. oder er behält hat das bei, was er als letztes gemacht hat, nach rechts fahren eben. ansonsten... solange er auf der linie macht was er soll...
Ja daran liegt es glaub ich. Aber ich würde gerne wissen was ich dagegen tun könnte, dass er dann nach rechts fährt und nicht geradeaus.Zitat:
Zitat von damaltor
Ich versuche gleich mal das Programm so abzuändern, dass sich beide Motoren gleich schnell drehen sollen, wenn länger als 2 Sekunden kein Richtungswechsel stattgefunden hat. Somit würde er doch immer geradeaus fahren, wenn eine der beiden Fototransistoren immer etwas höhere Werte ausgibt.
Das dacht ich auch erst, aber habe es mit einem schwarzen Blatt Papier zwischen der Leuchtdiode und den einzelnen Fototransistoren ausprobiert und er hat in beiden Fällen nach wegnehmen des Blattes nach rechts gesteuert.Zitat:
Zitat von damaltor
*gähn*
Morgen ist Weihnachten und ich geh jetzt pennen.
Hab bis eben versucht das Programm hinzubekommen.
Ich weiß, wie ich die Zeit von ca. 2 Sekunden hinbekomme:
for(e=0;e<200;e++)
{Sleep(150);}
Aber wie verbinde ich das mit einer if-Abfrage, die nur dann gestartet wird wenn zwischen Data[1] und Data[2] 2Sekunden lang kein Wechsel war?
Ich bin die nächsten Tage erstmal feiern und schreibe erst ab 27.12. wieder zurück...
Wünsche euch ein Frohes Fest!
ja, dir aucch ein frohes fest. das problem an der abfrage ist, dass wenn der asuro 2 sekunden eine linkskurve fährt um auf der linie zu bleiben, er auch geradeaus fahren würde...
Genau das ist das Problem, das Programmtechnisch zu lösen.Zitat:
Zitat von damaltor
Die 2Sekundenabfrage soll nur so lange erfüllt sein, so lange ca. 2 Sekunden kein Wechsel zwischen Data[0] und Data[1] stattgefunden hat(Er also die Linie verloren hat). Solange er also einen weißen Untergrund hat, soll er gerade aus fahren bis er wieder einen Farbunterschied am Boden erkennt.
Ansonsten passiert nämlich wieder, dass er eine Rechtskurve fährt(Begründung hat Damaltor ja schon gebracht)
Hier in diesem Video verliert er die Linie(Warum auch immer) und fährt seine Rechtskurve und stößt gegen den Tannenbaum:
http://www.youtube.com/watch?v=DftAszJlcoc
lass ihn den kreis mal andersrum abfahren, und warte bis er die linie verliert. was passiert dann? auch ne rechtskurve oder jetzt ne linkskurve?
wenn du einfach nen wechsel der linedata werte voraussetzt, kann das probleme geben weil auch auf weisser fläche die werte nicht 100%ig konstant sind. (störlich, unebenheiten, irgend was anderes was den wert etwas beeinflusst)
Ja das hab ich auch schon gemerkt. Das mit den 2 Sekunden warten, ob die Werte nicht mehr wechseln haut nicht hin, weil auf weißem Untergrund die die linke BackLED stark leuchtet und die rechte BackLED schwach leuchtet. Das heißt beide Fototransistoren schalten ab und zu durch aber der Linke(T9) dominiert(schaltet also häufiger).
Hm dann müsste man das irgendwie anders auswerten. Habt ihr noch irgendwie ne Idee? Ich weiß da nicht mehr weiter. :(