PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro soll Teppich meiden..



mtzE
08.05.2010, 12:48
Halli Hallo,
Habe gleich noch eine Frage zu einem Code von mir.. Ich möchte ein Programm schreiben das dem Asuro verbietet auf den Teppich zu fahren.. klingt ja eigentlich ganz einfach.. Einen Linedata am Anfang setzen und dann durchgehend unterm fahren vergleichen wenn der (im fahrende) Linedata dunkler ist (dunkler Teppich) dann soll er rückwärts wegfahren..

Hab so auch alles gemacht jedoch bleibt er bei mir einfach sturr stehen, die Status-LED leuchtet gelb und die BackLEDs glimmen.. mehr passiert nicht.. :(
Worin liegt mein Fehler?

Hier der Code:


#include "asuro.h"

int main(void)
{
unsigned int L1[2], L2[2], left, right;


Init();

FrontLED(ON);
LineData(L1);
left = L1[0] - 10;
right = L1[1] - 10;

while(1){
StatusLED(OFF);
FrontLED(ON);
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(150,150);
LineData(L2);
if(left > L2[0] && right > L2[1]){ // Wenn er auf den Teppich fährt
MotorSpeed(0,0);
FrontLED(OFF);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(220,220);
Msleep(500);
MotorSpeed(0,0);
MotorDir(FWD,BREAK);
MotorSpeed(200,0);
Msleep(500);
MotorSpeed(0,0);
}
}
return 0;
}


MfG. mtzE

Andun
08.05.2010, 13:42
Moin

Vorweg: Benutze bitte immer die Möglichkeit Quellecode in einer code-Umgebuung zu posten. Das macht das lesen einfacher und den Thread kürzer!

Probier doch generell mal aus, die Differenz die du ja zu 10 gewählt hast, oben größer zu machen.

Wenn dein Asuro dann tatsächlich fährt, wirst du aber sicherlich auch Probleme mit Lampen bekommen. Deswegen würde ich dir dann dazu raten, dass du als "Helligkeitswert" eher eine Art Reflektionswert des Boden nimmst.

Dazu misst du die Helligkeit mit FrontLED an und anschließend ohne. Die Differenz ist der Anteil des Lichtes der durch die FrontLED reflektiert wird. Dadurch hast du einigermaßen die Möglichkeit externe Lichteinflüsse zu reduzieren.

Viele Grüße,
Andun

mtzE
08.05.2010, 14:30
Ok der Code ist jetzt in einer CodeUmgebung vllt. doch ne bessere Idee als ihn einfach so rein zu posten :P

Ähm.. Ich glaube mein Problem wurde nicht ganz verstanden.. Der Asuro erkennt den Teppich doch!.. Fährt dann aber nicht rückwärts weg wie im Code steht sondern bleibt einfach nur stehen und die Status-LED leuchtet gelb??

Worin liegt denn der Fehler?

MfG. mtzE

radbruch
08.05.2010, 14:51
Hallo

Vielleicht bricht die Bordspannung zusammen wenn der asuro direkt von vorwärts mit 150 auf rückwärts mit 220 umschaltet.

Wenn die FrontLED eingeschaltet wird, dauert es etwas bis sie mit voller Helligkeit leuchtet. Außerdem ist die erste Lesung mit dem ADC etwas kritisch, weil es sein kann, dass man Schrott misst. Deshalb würde ich am Anfang beim Speichern der Referenzwerte für "kein Teppich" folgende Änderungen einbauen:

FrontLED(ON);
Sleep(50); // Zeit für Lampe
LineData(L1); // Dummylesung
LineData(L1);
left = L1[0] - 10;
right = L1[1] - 10;

Gruß

mic

mtzE
08.05.2010, 14:55
Oohhh maaan -.- das war die Lösung xD
Ich denk halt immer komplizierter als es ist :P Naja bin ja auch erst seit 1ner Woche in der Robotik dabei :)

Vielen Dank! Hätte warscheinlich noch Stunden gegrübelt xD

MfG. mtzE