- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 6 von 6

Thema: Odometrie: Position, winkel und Strecke

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    Erstes muss du verstehen was dahinten steckt : die reine Mathematic. Ist gar nicht so schwierig :
    Abstand L-rad : encoder_tics L, Abstand R-rad : encoder_tics R.
    Dan wird die Verplatzung von mittelpunkt Radachse : (encoder_tics L + encoder_tics R). Das ist naturlich nur eine Gerade wen Abstand L-rad = Abstand R-rad. When nicht, ist das eine Boge.
    Die Verdrehung um die Hochachse ist auch gans einfach : (encoder_tics L- encoder_tics R) Wiederum, wen beide gleich ist da kein Verdrehung passiert ! So wird die ganse Fahrstrecke in kleine Bogen verteilt und immer wird die Aenderungen aufaddiert mit folgende Mathematic :
    Neue X_pos= cosinus(Winkelaenderung/2)*Verplatzung + Alte X_pos
    Neue Y_pos= sinus(Winkelaenderung/2)*Verplatzung+Alte Y_pos
    Neue Winkel = Winkeaenderung+alte Winkel
    Für ihre Winkelberechnungen ist es notwendig das die wirkliche Winkel in radial berechnet werd. Das ist abhangig von Radabstand und Encoder-resolution. Auch wichtig ist naturlich das die Encoder Auf und Abzaehlen konnen (kwadratuurencoder)
    Code:
    int16_t delta_compass;   //hoekverdraaing tov vorige doorloop 
    void odometrie (void){    
    static int16_t e_compass_old; //waarde e_compass bij vorige doorloop (encodertics)
     
    delta_compass=e_compass - e_compass_old;  //hoekverdraaing tov vorige doorloop (encodertics)
     
    if((abs(delta_distance) > 200)||(abs(delta_compass) > 100)||(isMovementComplete()&(abs(delta_distance) >10)&(program>40))){  //alleen update indien voldoende verschil !!
     int32_t delta_x = 0;         //||((delta_distance>5)&isMovementComplete())
     int32_t delta_y = 0;
     double hoek= ((e_compass_old+e_compass)/2/E_COMPASS_RESOLUTION)*M_PI/180;//hoek omzetten naar radialen
     
     delta_x = delta_distance*cos(hoek); //
     delta_y = delta_distance*sin(hoek); // opgelet overflow vanaf delta_distance >125 !!
     total_distance=total_distance+delta_distance; //totaal afgelegde baan-afstand
     delta_distance=0;  //resetten van delta_distance ; 
     x_pos=x_pos+delta_x; //aktuele x_pos updaten *ENCODER_RESOLUTION/2
     y_pos=y_pos+delta_y; //aktuele y-pos updaten *ENCODER_RESOLUTION/2
     e_compass_old=e_compass;
     if(print_data==1){
      writeString("\n");
      writeInteger((x_pos*ENCODER_RESOLUTION/2),DEC);writeString_P(" ");
      writeInteger((y_pos*ENCODER_RESOLUTION/2),DEC);writeString_P(" ");
      writeInteger((e_compass/E_COMPASS_RESOLUTION),DEC);writeString_P(" ");
      writeInteger(state,DEC);writeString_P(" ");
      }
     }
    }

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.094
    Der Quatraturencoder braucht eine A und eine B Spur. Die B Spur ist um 90° versetzt zur A Spur.

    MfG Hannes

Ähnliche Themen

  1. Strecke messen
    Von johannes_b im Forum Robby RP6
    Antworten: 8
    Letzter Beitrag: 28.05.2010, 17:46
  2. Asuro Fährt strecke ab
    Von zigenpeter im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 2
    Letzter Beitrag: 17.12.2008, 13:44
  3. GoTurn () Winkel und Strecke
    Von Wo2le im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 05.06.2008, 07:59
  4. Strecke abmessen
    Von m1ch15inner im Forum Asuro
    Antworten: 42
    Letzter Beitrag: 30.11.2006, 21:07
  5. Zurückgelegte Strecke
    Von Albanac im Forum Software, Algorithmen und KI
    Antworten: 9
    Letzter Beitrag: 14.10.2004, 17:19

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress