PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Odometrie von Asuro



pingpong
29.08.2005, 16:25
Hallo Leute!
Ich versuche gerade meinem Asuro das geradeaus-Fahren zu lernen!
Er will jedoch nicht so wie ich. Ich kann zwar die Odometriedaten auslesen und auch vergleichen, jdoch ist die Streuung der Daten sehr groß. Deswegen bilde ich aus mehreren Werten den Durchschnitt und vergleiche diesen.
Aber es Funkt noch nicht so richtig. Selbst wenn die Durchschnittswerte übereinstimmen, fährt mein Asuro nicht geradeaus!
Vielleicht kann mir ja einer von euch weiterhelfen, wäre super!

Danke im Voraus!!

mein Programm: [/list][/scroll]

pingpong
29.08.2005, 16:32
nochmal:[/scroll]

Manni2k
29.08.2005, 16:56
ich nenne dir mal 2 Alternativen:
a) klebe die motoren noch einmal exakt ein
b) spiele einfach mit verschiedenen werten bei MotorSpeed(), schreib eine Funktion (alle 10 Sekunden wird die MotorSpeed() auf der "schwächeren" Seite um 10 erhöht z.B. und du guckst wann die werte einigermaßen stimmen, danach programmierst du, dass er nur noch in 1er Schritten wechselt usw.) - hat den selben Effekt (du hast die richtigen Werte) und geht bestimmt schneller....bin selbst auch grad bei deinem Problem ;)
Ich werde mich für b) entscheiden wenn ich mal Zeit habe...


PS: eigentlich ist Odometrie doch sinnlos, wenn man die UpM/Drehzahl der Motoren kennt, oder? Damit kann man doch auch alles wunderbar ausrechnen - we weit er gefahren ist ect. Für mich machen diese Reflexlichtschranken ect. keinen Sinn (wenn man nicht gerade Justierungsprobleme hat und sich nicht für Vorschlag b) entscheiden möchte ;D)

waste
29.08.2005, 20:34
Hallo!

Probiert mal folgendes Programm:

/************************************************** *****************************
*
* Description: Asuro fährt geradeaus
*
************************************************** ***************************/
#include "asuro.h"
#include <stdlib.h>


int main(void)
{
unsigned char speed, flagl=FALSE, flagr=FALSE;
unsigned int data[2];
int wegl, wegr, diff;
int speedLeft,speedRight;
Init();
MotorDir(FWD,FWD);
StatusLED(GREEN);
speed = 150;
speedLeft = speedRight = speed;
wegl=0; wegr=0;
while(wegl<333){
OdometrieData(data);
if ((data[0] < 550) && (flagl == TRUE)) {flagl = FALSE; wegl++;}
if ((data[0] > 650) && (flagl == FALSE)) {flagl = TRUE; wegl++;}
if ((data[1] < 550) && (flagr == TRUE)) {flagr = FALSE; wegr++;}
if ((data[1] > 650) && (flagr == FALSE)) {flagr = TRUE; wegr++;}
diff=wegr-wegl;
if (diff>0) speedRight--; // fahre geradeaus
else if (diff<0) speedLeft--;
else {speedRight=speed; speedLeft=speed;}
if (speedRight<0) {speedRight=0;}
if (speedLeft<0) {speedLeft=0;}
MotorSpeed(speedLeft,speedRight);
}
MotorDir(BREAK,BREAK);
while(1);
return 0;
}


Damit fährt mein Asuro schön geradeaus.

Gruss Waste

pingpong
30.08.2005, 15:47
Danke für eure Hilfen, werde Morgen gleich testen.
Ich denke, dass es die Odometrie sowieso nur Sinn macht, wenn man eine vernünftige Scheibe benutzt und die Einflüsse von außen möglichst gut abstellt.
Aber ich werde es natürlich weiter versuchen...

Bin immer für Ratschläge dankbar!!!

pebisoft
31.08.2005, 07:15
die unterschiedliche fertigung der motoren, der zahnräder und der anpressdruck der zahnräder beeinflussen die geradeausfahrt. wenn ein motor mit einem spannband festgemacht wird, kann man auch keinen gleichlauf ohne korrektur verlangen. lass den ausro 1m fahren und diese korrektur baust du als ständigen begleiter ein.
mfg pebisoft