hallo

ich möchte ein älteres thema wieder aufgreifen:
und zwar habe ich versucht den asuro eine kurve fahern zu lassen. dabei habe ich mich an GoTurn orientiert, aber leider klappt es nicht so wie ich wollte. vl kann mir jemand helfen.

hier einmal mein code:
Code:
#define BREITE 100    //spurbreite in mm
#define PI 3.141592


void kurve(int radius, int winkel, int speed) //radius in mm, winkel in Grad
{
     unsigned long count_a_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/winkel;  //Bruchteil des Kreises
     quot=((float)radius_a)/((float)radius_i);


     //berechnen der notwendigen tics am außenrad
     count_a_soll=2*radius_a*(PI*10000L);
     count_a_soll/=MY_GO_ENC_COUNT_VALUE;

     //anfangsgeschwindigkeiten berechnen
     speed_a=speed;
     speed_i=speed/quot;

     //Motoren starten
     MotorSpeed(speed_i,speed_a);

     while(count_a<count_a_soll)
     {
               count_a+=encoder[RIGHT];
               count_i+=encoder[LEFT];

               if(count_a<(count_i*quot)) speed_a+=5;   //zu großer radius
               if(count_a>(count_i*quot)) speed_a-=5;   //zu kleiner radius


               //reset encoder
               EncoderSet(0,0);

               MotorSpeed(speed_i,speed_a);
               Msleep(1);
     }
     MotorDir(BREAK,BREAK);
     Msleep(200);
}
kurz zur erklärung:
-erstmal kann nur eine kurve gegen den uhrzeigersinn gefahren werden (andere richtung möchte ich erst einbauen wenn diese funktioniert)
- _a bedeutet immer außen(rad)
- _i bedeutet immer innen(rad)


wenn ich diese funktion in ein programm einbaue und den asuro nach erfolgreichem flashen einschlate, dann fährt er zwar im kreis und regelt nach, jedoch hält er nicht nach dem vorgegebenen winkel an, und der radius stimmt leider auch nicht ganz

ebenso ist mir beim experimentieren aufgefallen, dass es bei mir auch bei der GoTurn funktion probleme gibt (er hält nich nach vorgegebenem weg an). daher vermute ich, dass es bei mir bei der odometrie ein problem gibt und würde euch ersuchen diese funktion einmal aus zu probieren, damit ich weiß, ober es nur an meinem asuro bzw. den werten in myasuro.h liegt, oder doch am oben angeführten code.

ich bedanke mich jetzt schon mal für eure hilfe und werde selber auch noch weiter experimentieren


[edit]
sorry, ich habe vergessen zu erwähnen, dass sich der radius auf die mitte der hinteren achse bezieht (daher jeweils die korrektur um BREITE / 2 )
[/edit]