Lunarman
29.01.2006, 12:47
Habs jetzt endlich mal geschafft, die Odometrie zu programmieren - und ASURO dreht durch!
Das läuft ungefähr so: Ein Rad läuft vorwärts- wird langsamer - andres rad läuft - wird langsamer - aus - bumm - alle laufen - es surrt - es fängt an zu "puckern" (Wie bei Starwars Epi 1 die Podracer) - Die Räder werden immer schneller - sie wackeln ordentlich - ich mach aus, weil ich Angst habe, dass das Ding sich durch Hyperaktivität aufhängt. Was ist hier los?
int Rmin=1023;
int Rmax=0;
int Rhell=0;
int Rdunkel=0;
int RZaehler;
int UebergaengeR=0;
int RSpeed=100;
int Lmin=1023;
int Lmax=0;
int Lhell=0;
int Ldunkel=0;
int MittelwertR;
int MittelwertL;
int LZaehler;
int UebergaengeL=0;
int LSpeed=100;
long Zaehler=0;
BackLED(ON,ON);
while(1)
{
MotorDir(FWD,FWD);
MotorSpeed(LSpeed,RSpeed);
for (Zaehler=0; Zaehler<100;Zaehler++)
{
unsigned int data[2];
OdometrieData(data);
if (data[0] > Lmax)
Lmax=data[0];
if (data[0] < Lmin)
Lmin=data[0];
if (data[1] > Rmax)
Rmax=data[1];
if (data[1] < Rmin)
Rmin=data[1];
MittelwertL=(Lmin+Lmax)/2;
MittelwertR=(Rmin+Rmax)/2;
LongSleep(1);
}
unsigned int data[2];
OdometrieData(data);
if (data[0] < MittelwertL)
{
Lhell = data[0];
LZaehler = HELL;
}
else
{
Ldunkel = data[0];
LZaehler = DUNKEL;
}
if (data[1] < MittelwertR)
{
Rhell = data[1];
RZaehler = HELL;
}
else
{
Rdunkel = data[1];
RZaehler = DUNKEL;
}
int i;
for (i = 0; i< 100; i++)
{
OdometrieData(data);
if (data[0] < MittelwertL && LZaehler == DUNKEL)
UebergaengeL = UebergaengeL + 1;
else if (data[0] > MittelwertL && LZaehler == HELL)
UebergaengeL = UebergaengeL + 1;
if (data[1] < MittelwertR && RZaehler == DUNKEL)
UebergaengeR = UebergaengeR + 1;
else if (data[1] > MittelwertR && RZaehler == HELL)
UebergaengeR = UebergaengeR + 1;
}
if (UebergaengeR < UebergaengeL)
{
RSpeed = RSpeed + 1;
LSpeed = LSpeed - 1;
StatusLED(RED);
}
else if (UebergaengeR > UebergaengeL)
{
RSpeed = RSpeed - 1;
LSpeed = LSpeed + 1;
StatusLED(GREEN);
}
else if (UebergaengeR == UebergaengeL)
StatusLED(YELLOW);
}
Ich hab keine Ahnung, was das soll!
Tschüß,
Lunarman
Das läuft ungefähr so: Ein Rad läuft vorwärts- wird langsamer - andres rad läuft - wird langsamer - aus - bumm - alle laufen - es surrt - es fängt an zu "puckern" (Wie bei Starwars Epi 1 die Podracer) - Die Räder werden immer schneller - sie wackeln ordentlich - ich mach aus, weil ich Angst habe, dass das Ding sich durch Hyperaktivität aufhängt. Was ist hier los?
int Rmin=1023;
int Rmax=0;
int Rhell=0;
int Rdunkel=0;
int RZaehler;
int UebergaengeR=0;
int RSpeed=100;
int Lmin=1023;
int Lmax=0;
int Lhell=0;
int Ldunkel=0;
int MittelwertR;
int MittelwertL;
int LZaehler;
int UebergaengeL=0;
int LSpeed=100;
long Zaehler=0;
BackLED(ON,ON);
while(1)
{
MotorDir(FWD,FWD);
MotorSpeed(LSpeed,RSpeed);
for (Zaehler=0; Zaehler<100;Zaehler++)
{
unsigned int data[2];
OdometrieData(data);
if (data[0] > Lmax)
Lmax=data[0];
if (data[0] < Lmin)
Lmin=data[0];
if (data[1] > Rmax)
Rmax=data[1];
if (data[1] < Rmin)
Rmin=data[1];
MittelwertL=(Lmin+Lmax)/2;
MittelwertR=(Rmin+Rmax)/2;
LongSleep(1);
}
unsigned int data[2];
OdometrieData(data);
if (data[0] < MittelwertL)
{
Lhell = data[0];
LZaehler = HELL;
}
else
{
Ldunkel = data[0];
LZaehler = DUNKEL;
}
if (data[1] < MittelwertR)
{
Rhell = data[1];
RZaehler = HELL;
}
else
{
Rdunkel = data[1];
RZaehler = DUNKEL;
}
int i;
for (i = 0; i< 100; i++)
{
OdometrieData(data);
if (data[0] < MittelwertL && LZaehler == DUNKEL)
UebergaengeL = UebergaengeL + 1;
else if (data[0] > MittelwertL && LZaehler == HELL)
UebergaengeL = UebergaengeL + 1;
if (data[1] < MittelwertR && RZaehler == DUNKEL)
UebergaengeR = UebergaengeR + 1;
else if (data[1] > MittelwertR && RZaehler == HELL)
UebergaengeR = UebergaengeR + 1;
}
if (UebergaengeR < UebergaengeL)
{
RSpeed = RSpeed + 1;
LSpeed = LSpeed - 1;
StatusLED(RED);
}
else if (UebergaengeR > UebergaengeL)
{
RSpeed = RSpeed - 1;
LSpeed = LSpeed + 1;
StatusLED(GREEN);
}
else if (UebergaengeR == UebergaengeL)
StatusLED(YELLOW);
}
Ich hab keine Ahnung, was das soll!
Tschüß,
Lunarman