- Labornetzteil AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 25 von 25

Thema: Asuro und Odometrie

  1. #21
    Neuer Benutzer Öfters hier
    Registriert seit
    30.08.2005
    Ort
    Paderborn
    Alter
    60
    Beiträge
    20
    Anzeige

    E-Bike
    Ich habe mir die Funktionen "Go" und "Turn" mal ein bisschen angesehen. ("Go" geht bei mir nicht ganz geradeaus, aber das kann durchaus am Umgebungslicht liegen. Gelegentlich muss ich es mal bei Dunkelheit probieren.)

    Zwei Fragen habe ich zu "Go"
    1. Wie weit fährt "Go" überhaupt ?
    Egal was ich in "distance" übergebe: Asuro fährt bei mir endlos geradeaus ...
    Anders gefragt, in welcher Einheit wird "distance" angegeben ? Oder dient es nur zur Angabe vorwärts bzw. rückwärts ?

    2. Interrupts für Berührungsschalter ?
    "Go" verwendet offenbar eine Interrupt-Steuerung für die Odometriewerte, die man dann der Variablen encoder[2] entnehmen kann.
    Nun beschäftigt "Go" den Prozessor die ganze Zeit mit dem Geradehalten der Strecke (ständiges Abgleichen der Geschwindigkeiten) und prüft nicht, ob in der Zwischenzeit irgendwelche Schalter gedrückt sind.
    Wenn man also annimmt, dass der Asuro während "Go" vor eine Wand laufen könnte, muss man eine Abfrage in die Funktion einbauen, oder einen weiteren Interrupt (zusätzlich zur Odometrie) verwenden.
    Wie macht Ihr das ? Die Interrupt-Lösung ist die elegantere. Kann man überhaupt zwei Interrupts verwenden ? Falls ja - wie sieht ein Beispiel aus ?

    Danke !

  2. #22
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.04.2005
    Ort
    Weilburg
    Beiträge
    676
    Eigendlich soll der Auso nur die angegebene Distanz fahren. Wenn das nicht so ist, muss ein Fehler vorliegen. Vermutlich zählt die Interupt-Routine nicht richtig hoch ?
    Probier doch mal die asuro,c von: https://www.roboternetz.de/phpBB2/ze...ag.php?t=11256

    In der asuro.c kannst du sogar drei Inerupt programme sehen:
    SIGNAL (SIG_OVERFLOW2) - zählt die Zeit weiter.
    SIGNAL (SIG_INTERRUPT1) - wenn eine Taste gedrückt wird.
    SIGNAL (SIG_ADC) - wenn der Analog-Wandler arbeitet.

    Du kannst ja mal versuchen die Hindernisserkennung in di Go-Function mit einzubauen.
    Oder du baust deinen Asuro ein wenig um, und benutzt den IR-Sensor. dann rennt dein Asuro nicht an die Möbel oder bleibt mit den Rädern hängen. https://www.roboternetz.de/phpBB2/vi...?p=88782#88782
    Prostetnic Vogon Jeltz

    2B | ~2B, That is the Question?
    The Answer is FF!

  3. #23
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    36
    Beiträge
    826
    Also was ich am Anfang immer nicht gebacken bekommen habe, war dass ich vergessen habe die encoder zu starten und zu initalisieren. Das habe ich immer vergessen:

    Encoder_Init() initializing encoder-counter
    Encoder_Start() start autoencoding

    Dann fährt er nämlich auch immer gerade aus.
    www.subms.de
    Aktuell: Flaschcraft Funkboard - Informationssammlung

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Code:
    //Dieses Programm dient zum geradeausfahren
    //zusammengestellt und umgeschrieben von julien 
    
    #include "asuro.h" 
    
    int main(void) 
    { 
        unsigned int Rmin = 1024, Rmax = 0, Lmin = 1024, Lmax = 0, Rmitte = 512, Lmitte = 512, lspeed=150, rspeed=150, data[2];
        unsigned int wegr=0, wegl=0; 
       unsigned char flagl=FALSE, flagr=FALSE; 
        Init(); 
        MotorDir(FWD,FWD); 
        while(1) { 
         MotorSpeed(lspeed,rspeed);
            OdometrieData(data); // 0. links, 1. rechts       
            // max links 
            if (data[0] > Lmax) 
                Lmax += (data[0] - Lmax) / 2; 
            // min links 
            if (data[0] < Lmin) 
                Lmin -= (Lmin - data[0]) / 2; 
            // max rechts 
            if (data[1] > Rmax) 
                Rmax += (data[1] - Rmax) / 2; 
            // min rechts 
            if (data[1] < Rmin) 
                Rmin -= (Rmin - data[1]) / 2; 
        Rmitte=(Rmax+Rmin)/2; 
        Lmitte=(Lmin+Lmax)/2; 
          if ((data[0] < Lmitte) && (flagl == TRUE)) { 
          flagl = FALSE; 
          wegl++; 
          } 
          if ((data[0] > Lmitte) && (flagl == FALSE)) { 
          flagl = TRUE; 
          wegl++; 
          } 
          if ((data[1] < Rmitte) && (flagr == TRUE)) { 
          flagr = FALSE; 
          wegr++; 
          } 
          if ((data[1] > Rmitte) && (flagr == FALSE)) { 
          flagr = TRUE; 
          wegr++; 
          } 
         if(wegr>wegl){
          if(lspeed<=254) lspeed++ else rspeed--;
         }
         if(wegr<wegl){
          if(rspeed<=254) rspeed++ else lspeed--;
         }
         SerWrite("WL: ",4); 
         PrintInt(wegl); //Ausgabe Weg linkes Rad 
         SerWrite("WR: ",4); 
         PrintInt(wegr); //Ausgabe Weg rechtes Rad); 
         SerWrite("/r/n",2); 
       } 
        return 0; 
    }
    So, das dürfte ziemlich genau laufen. Egal, wie das Umgebungslicht ist.
    MfG julien

  5. #25
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    71
    Beiträge
    157
    Gibt es eine Möglichkeit die Wandlungszeit zu beschleunigen?

    Ich habe es gerade selber heraus gefunden.
    ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS1) ; // clk/128
    HI,

    bei dem o.g. Takt dauert eine Wandlung ca. 0,2 ms. Wenn nur Odometrie gemessen wird, bedeutet das bei einer 12-Sektor-Scheibe (6 weiße und 6 schwarze Flächen auf dem 1. Getrieberad (d.h. Standard)) je nach Geschwindigkeit 10-25 Abtastzyklen (AD-Wandlungen) pro Sektor und pro Rad, d.h. abwechselnd links und rechts gemessen. Das ist mehr als genug um einen Sektorübergang sauber zu erkennen.

    RedBaron

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress