Hallo Henk!
War grad fort. Mittagessen und für die Schule lernen. Das muss man auch mal machen. Ich hab mir gerade deine Messung durchgelesen und musste an meine Versuche denken.
Ich hab auch mal so gemessen wie du, zwar nicht so genau, eher einfacher.
Das hat nie funktioniert wenn sich die Helligkeitswerte geändert haben. Ich hab immer den Asuro auf so etwas gestellt, damit die Räder den Boden nicht berühren und dann hab ich getestet. Auf dem Prüfstand hat es immer toll funktioniert, aber wie ich auf dem Boden gefahren bin, ist Blödsinn rausgekommen.
Da hab ich gewusst, dass die geänderten Helligkeitswerte schuld sein müssen. Also hab ich vor jeder Geschwindigkeitsmessung Helligkeitswerte gemessen und so wusste halt mein Asuro wann grad weiß und schwarz ist. Das hätte super funktioniert, nur war dann meine Geschwindigkeitsmessung viel zu langsam. Bevor ich einmal die Geschwindigkeit gemessen habe, ist Asuro schon mindestens 35-40cm falsch gefahren. Wenn ich nur 50cm Platz habe ist das ungenügend.
Dann wollte ich die Geschwindigkeit mit den Flanken messen. Das hat nicht funktioniert.
Jetzt mess ich die Geschwindigkeit ganz anders. Ich nehm in einem Feld 100 Odowerte auf und speichere sie dort. Dann schau ich mir einen Wert an und die darauf folgenden. Z.B: Wert 1 und Wert 10-Wert 15 vergeicht er dann. So in etwa. Dann schaut er ob sich dabei die Werte über einer bestimmten Grenze geändert hat. Die bleibt ja so ungefähr gleich, egal ob hell oder dunkel. Dann schaut er wie viele SchwarzeißÜbergänge stattgefunden haben.
Es ist nicht perfekt, dass wusste ich von Anfang an, aber ich war nach drei falschen(eine Methode hab ich noch probiert) eine Trotz-Methpde, von der ich nicht viel erwartet habe. Aber von Leistung 130-190 funktioniert die Geschwindigkeitserfassung und darüber und darunter seltsamerweise nicht.
Code:
#define ANZ 100
#define ABT 2
while(tsys<650)
//Ein mal abtasten ca.200, 2mal ca.500, dreimal ca. 650, usw.
{
ta=Gettime(); //Zeitmessung Anfang
for(i=0; i<ANZ; i++) //Beginn Werte in Feld einzulesen
{
Msleep(2);
OdometrieData(dataodo);
feldlinks[i]=dataodo[0];
feldrechts[i]=dataodo[1];
}
te=Gettime();
t=te-ta;
for(i=0;i<=(ANZ-ABT); i++) //Schwarz-Weiß-Messung
{
ists=uebertraglinks;
uebertraglinks=0;
for(a=0;a<=ABT; a++)
{
abweichung=feldlinks[i]-feldlinks[i+a];
if(abweichung > 100 || abweichung < -100)
{
ists++;
}
if(ists >= (ABT))
{
flankelinks++;
i=i+ABT;
ists=0;
}
}
if(i==(ANZ-ABT))
{
uebertraglinks=ists;
}
ists=0;
}
for(i=0;i<=(ANZ-ABT); i++)
{
istsr=uebertragrechts;
uebertragrechts=0;
for(a=0;a<=ABT; a++)
{
abweichungr=feldrechts[i]-feldrechts[i+a];
if(abweichungr > 100 || abweichungr < -100)
{
istsr++;
}
if(istsr >= (ABT))
{
flankerechts++;
i=i+ABT;
istsr=0;
}
}
if(i==(ANZ-ABT))
{
uebertragrechts=istsr;
}
istsr=0;
}
vl=((flankelinks*60000)/t)/40;
vr=((flankerechts*60000)/t)/40;
flankelinks=0;
flankerechts=0;
tse=Gettime();
tsys=tse-tsa;
}
Vielleicht kannst du ihn verbessern, oder mir sagen, dass er doch Müll ist, aber er funktioniert teilweise wie gesagt.
bis später
mfg theodrin
Lesezeichen