hallo sternthaler und natülich auch alle anderen, die sich dafür interessieren oder mir helfen wollen
die werte in MY_GO_ENC_COUNT_VALUE habe ich schon an meinen Asuro angepasst (ich habe extra noch mit Go() geteste, alles so wie es sein sollte)
trotzdem zur info: ich habe scheiben mit 6 schwarz- weiß-flächen montiert
bei mir hat zwar noch nicht alles gepasst, trotzdem habe ich die geschwindigkeitsanpassung ähnlich der von GoTurn umgeändert, da ich mir dachte, dass es vl an der geschwindigkeitsbegrenzung bei 255 liegen kann. leider hat es auch nichts geholfen.
zusätzlich habe ich noch die zweite richtung ein zu bauen versucht ( positives vorzeichen beim winkel sollte eine kurve im gegenuhrzeigersinn sein)
wenn ich jetzt meine fkt wie folgt aufrufe
passten zwar radius und winkel nicht, aber die richtung.
wenn ich jetzt aber schreibe
, also eine geschwindigkeitsänderung, dann fährt mein asuro auf einmal in die falsche richtung. ich habe aber keine ahnung woher das kommen könnte.
hier einmal meine funktion:
Code:
void kurve(int radius, int winkel, int speed)
{
unsigned long count_a_soll,count_i_soll;
int count_a=0, count_i=0;
int speed_a, speed_i;
int radius_a, radius_i;
float quot, teiler;
MotorSpeed(0,0);
MotorDir(FWD,FWD);
radius_a=radius+BREITE/2;
radius_i=radius-BREITE/2;
teiler=(float)360/abs(winkel); //Bruchteil des Kreises
quot=((float)radius_a)/((float)radius_i);
//berechnen der notwendigen tics am außen- und innenrad
count_a_soll=2*radius_a*(PI*10000L/teiler);
count_a_soll/=MY_GO_ENC_COUNT_VALUE;
count_i_soll=count_a_soll/quot;
//mindestgeschwindigkeit=70
if(speed<70) speed=70;
//anfangsgeschwindigkeiten berechnen
speed_a=speed;
speed_i=speed_a/quot;
//speed_i=speed;
//Motoren starten
if(winkel>0)
MotorSpeed(speed_i,speed_a);
else
MotorSpeed(speed_a,speed_i);
EncoderSet(0,0);
while (count_a<count_a_soll)
{
//Odometrie einlesen
if(winkel>0)
{
count_a=encoder[RIGHT];
count_i=encoder[LEFT];
}
else
{
count_a=encoder[LEFT];
count_i=encoder[RIGHT];
}
//Geschwindigkeiten anpassen
if (count_a <(count_i*quot))
{ /*außen zu langsam */
if ((speed_a > speed) || (speed_a > 244))
speed_i -= 10;
else
speed_a += 10;
}
if (count_a >(count_i*quot))
{ /* außen zu schnell */
if ((speed_a > speed))
speed_a -= 10;
else
speed_i += 10;
}
/* reset encoder */
//EncoderSet (0, 0);
if(winkel>0)
MotorSpeed(speed_i,speed_a);
else
MotorSpeed(speed_a,speed_i);
//Msleep (1);
}
ich bedanke mich jetzt schon für jeden tipp
Lesezeichen