Odometrie ist schon eine spannende Sache. Ich bleibe hartnäckig
.
Jetzt habe ich mir ein Programm nach Radbruchs zweitem Vorschlag (Zwischenspeicherung) geschrieben, das eigentlich komplett logisch ist (/sein sollte
) aber natürlich nicht läuft. Schade, dachte es sähe so schon aus!
Hier der Code:
Code:
#include "asuro.h" // Konfigurationsdateien laden
/* Funktionen definieren */
/* Geradeausfahren */
void GeradeAus()
{
char e,f,h,i,j; // Zähler
unsigned int OdoData[2]; // Array für Odo Werte
unsigned int save[5]; // Zwischenspeicher für Odo Wertereihe
unsigned int wahr[5]; // Zähler
static unsigned int spd0=170; // Geschwindigkeit
static unsigned int spd1=170; // Geschwindigkeit
unsigned int n[2]; // Zähler
for(e=0; e<10; e++) // Anzahl der Messungen die durchgeführt werden
{
for(f=0; f<2; f++) // Messung für links/rechts
{
for(h=0; h<2; h++) // Zwei mal messen: Absteigend oder Aufsteigend?
{
for(i=0; i<5; i++) // Fünf mal messen pro Variable
{
OdometrieData(OdoData);
save[i]=OdoData[f];
if(i==4) // Wenn Array voll: Checken ob Ab oder Auf
{
for(j=0; j<4; j++)
{
if(h==0 && save[i]<save[i+1]) // Alter Wert kleiner als neuer? (Auf)
{
wahr[h]++;
}
else if(h==1 && save[i]>save[i+1]) // Neuer Wert größer als alter? (Ab)
{
wahr[h]++;
}
}
}
}
}
if(wahr[0]>2 && wahr[1]>2) // Umdrehung fand statt wenn beides zutraf!
{
n[f]++;
}
}
}
if(n[0]>n[1]) // gleiches Spiel wie immer!
{
if(spd0<255)
{
spd1++;
}
else
{
spd0--;
}
}
else if(n[0]<n[1])
{
if(spd1<255)
{
spd0++;
}
else
{
spd1--;
}
}
MotorDir(FWD,FWD);
MotorSpeed(spd0,spd1);
}
/* Beginn des Hauptprogramms */
int main (void){
Init(); //Prozessor initialisieren
while(1) // Endlosschleife
{
GeradeAus();
}
/* Schluss ! */
return 0;
}
ASURO fährt jetzt immer 8en, also quasi das gleiche wie im Video nur dass er nach einmal stehen bleiben bei dem einen rad und der darauf folgenden Beschleunigung da spd1=0 wird, das andere Rad bis auf 0 drosselt und das gleiche Spiel wieder von vorne beginnt. Das kann er schon ganz gut 
Würde mich freuen wenn ihr mal drüber guckt
Gute Nacht!
Lesezeichen