galileoGalilei
04.06.2012, 20:52
Hallo an alle,
ich bin etwas verzweifelt...
Der Asuro soll eine Linie verfolgen, Gegenständen ausweichen und dann die Linie wiederfinden und
weiterverfolgen.
Bis jetzt dachte ich, das schwierigste wäre die Ausweichung.
Mittlerweile bin ich der Meinung, dass es das Wiederfinden der Linie ist.
Folgenden Code habe ich bis jetzt zur Linienverfolgung mit Kollision
und anschließender kurzer Rückfahrt und wiederfinden der Linie:
#include "asuro.h" /*Linienverfolgung*/
#define tol 15 /*Toleranz der Sensoren*/
#define FULL_L 120 /* Fullspeed linker Motot */
#define FULL_R 120 /* Fullspeed rechter Motor */
/* Motor vorwärts */
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}
/* Motor rückwärts */
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}
void Msleep(int dauer)
{
int z;
for(z=0;z<dauer;z++) Sleep(72);
}
int main(void)
{
unsigned int data[2];
unsigned char t1, t2;
Init();
FrontLED(ON);
MotorDir(FWD,FWD);
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if(PollSwitch() == 0)
{
LineData(data);
if (data [0] > data [1] + tol )
{
MotorSpeed(140,80);
MotorDir(FWD,RWD);
}
LineData(data);
if (data [1] > data [0] + tol )
{
MotorSpeed(80,140);
MotorDir(RWD,FWD);
}
else
{
MotorSpeed(120,120);
MotorDir(FWD,FWD);
}
}
else if (PollSwitch() != 0)
{
if(t1 & 0x07)
{
MotorRwd();
Msleep(1000);
}
if (t1 & 0x38)
{
MotorRwd();
Msleep(1000);
}
}
}
return 0;
}
Das Problem:
Er folgt der Linie, wenn man etwas in den Weg stellt, fährt er zurück, aber er findet die Linie nicht mehr, bzw. er findet sie in der Kurve nicht.
Auf gerader Strecke findet er sie.
Hat vielleicht jemand einen fertigen Code, mit dem die Linie verfolgt werden kann, nach Kollision das Objekt umfahren wird und
die Linie wiedergefunden wird?
Ich mach da schon seit Wochen rum und komme einfach nicht
auf ein akzeptables Ergebnis
ich bin etwas verzweifelt...
Der Asuro soll eine Linie verfolgen, Gegenständen ausweichen und dann die Linie wiederfinden und
weiterverfolgen.
Bis jetzt dachte ich, das schwierigste wäre die Ausweichung.
Mittlerweile bin ich der Meinung, dass es das Wiederfinden der Linie ist.
Folgenden Code habe ich bis jetzt zur Linienverfolgung mit Kollision
und anschließender kurzer Rückfahrt und wiederfinden der Linie:
#include "asuro.h" /*Linienverfolgung*/
#define tol 15 /*Toleranz der Sensoren*/
#define FULL_L 120 /* Fullspeed linker Motot */
#define FULL_R 120 /* Fullspeed rechter Motor */
/* Motor vorwärts */
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}
/* Motor rückwärts */
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}
void Msleep(int dauer)
{
int z;
for(z=0;z<dauer;z++) Sleep(72);
}
int main(void)
{
unsigned int data[2];
unsigned char t1, t2;
Init();
FrontLED(ON);
MotorDir(FWD,FWD);
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if(PollSwitch() == 0)
{
LineData(data);
if (data [0] > data [1] + tol )
{
MotorSpeed(140,80);
MotorDir(FWD,RWD);
}
LineData(data);
if (data [1] > data [0] + tol )
{
MotorSpeed(80,140);
MotorDir(RWD,FWD);
}
else
{
MotorSpeed(120,120);
MotorDir(FWD,FWD);
}
}
else if (PollSwitch() != 0)
{
if(t1 & 0x07)
{
MotorRwd();
Msleep(1000);
}
if (t1 & 0x38)
{
MotorRwd();
Msleep(1000);
}
}
}
return 0;
}
Das Problem:
Er folgt der Linie, wenn man etwas in den Weg stellt, fährt er zurück, aber er findet die Linie nicht mehr, bzw. er findet sie in der Kurve nicht.
Auf gerader Strecke findet er sie.
Hat vielleicht jemand einen fertigen Code, mit dem die Linie verfolgt werden kann, nach Kollision das Objekt umfahren wird und
die Linie wiedergefunden wird?
Ich mach da schon seit Wochen rum und komme einfach nicht
auf ein akzeptables Ergebnis