-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Objektverfolgung mit SUMO-Adapter

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847

    Objektverfolgung mit SUMO-Adapter

    Anzeige

    Hi,

    ich habe mir mal überlegt mit meinem SUMO-Adapter die Objektverfolgung zu realisieren. Jetzt mal ein paar Fragen:

    - ist dies mit dem SUMO-Adapter überhaupt möglich?
    - brauche ich dazu nicht mindestens 3 IR-LEDs?
    - hat das schon einmal jemand versucht?
    - muss ich Umbauten am ASURO vornehmen?

    Ich stelle mir das so vor, dass der ASURO einem anderen ASURO nachfährt und immer einen bestimmten Abstand einhält.

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    eine abstandsmessung, welche du ja für die verfolgung benötigst, geht schon mit einer LED. wenn du auch die richtung bestimmen willst, dann müssten 2 LEDs funktionieren, die etwas schräg zueinander stehen. so kann der asuro immer in die richtung fahren, wo die LED bzw die Abstandsmessung eitwas "sieht".
    kleinschreibung ist cool!

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Aha, jetzt wäre es noch cool herauszufinden wie ich eine weitere IR-LED auf die SUMO-Platine drauf bringe, damit der ASURO 2 "Augen" hat. Parallel schalten wird wohl nicht gehen, oder?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Interessanterweise sollte das auch mit einer LED gehen. Probier doch mal das Programm von M. aus, das "sieht" die Hindernisse eigentlich ganz gut.
    Wenn der ASURO beim Fahren leicht pendelt, kann er in die Richtung, deren Signal stärker ist, sich etwas mehr bewegen.
    Dann sollter er das Objekt verfolgen können.

    robo

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    OK, Robo. Ich werde außerdem versuchen dein Testprogramm für die Platine auszubauen, wenn du es erlaubst.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    OK, Robo. Ich werde außerdem versuchen dein Testprogramm für die Platine auszubauen, wenn du es erlaubst.
    Klar, deshalb habe ich auch die Open-Source Lizentbestimmung drangehängt. Nur eines wär e mir wichtig: "Please maintain the list of authors". Es soll ja so sein, dass man weiß, wer betstimmte Teile am Gesamtprojekt programmiert hat.

    Bester Gruß,
    robo

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Zitat Zitat von robo.fr
    Probier doch mal das Programm von M. aus, das "sieht" die Hindernisse eigentlich ganz gut.
    ja, mit dem "Verfolgungsteil" von meinen Joghurt-Sumo Programm funktionniert da so halbwegs, wenn sich das verfolgte Objekt nicht zu schnell seitlich wegbewegt. Ich hatte sowieso vor, bei Gelegenheit das Programm in ein Verfolgungsprogramm umzubauen.

    @pinsel
    Das kannst du aber auch selber versuchen:
    - das Programm von allen unnötigen Teilen befreien
    - wenns Objekt nah ist statt über die Linie schieben stehenbleiben
    - Geschwindigkeit, Abstand, Schwenkdauer, Verlierdauer anpassen
    Gruss
    M.

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Hallo,

    ich habe das Programm von M1.R mal an die Objektverfolgung angepasst. Funktioniert ganz gut, allerdings verliert der ASURO leicht das vorfahrende Objekt. Möglicherweise braucht es doch noch eine zusätzliche IR-LED, damit die Sache besser funktioniert.

    Code:
    #include "asuro.h" 
    #define  HALF  2 
    
    uint16_t i, zuf; 
    uint8_t objekt_weit, objekt_nah, rechts, links, speed1, speed2, richtung; 
    
    
    //abstand für ir-messung 
    #define nah 1   //1 
    #define weit 7  //max 16 
    
    #define schwenkdauer 100 
    #define verlierdauer 500  
    
    
    
    //------------------------------------------------------------------- 
    //projekt-funktionen 
    //------------------------------------------------------------------- 
    
    void BackLEDleft(uint8_t status); 
    void BackLEDright(uint8_t status); 
    uint8_t objekt_sichtbar(uint8_t abstand); 
    
    
    //------------------------------------------------------------------ 
    //backled funktionen um die leds unabhängig voneinander 
    //hell leuchten oder glimmen zu lassen 
    //------------------------------------------------------------------ 
    // rechte led 
    void BackLEDright(uint8_t status) // aus - hell - glimm 
    { 
      PORTD &= ~(1 << PD7);                 //odoleds aus 
      if (status == OFF) 
      { //rechte backled aus 
       DDRC |= (1 << PC0);               //rechts auf out 
       PORTC &= ~(1 << PC0);            //rechte aus 
      } 
      if (status == ON) 
      { 
        //rechte backled hell 
       DDRC |= (1 << PC0);               //rechts auf out 
       PORTC |= (1 << PC0);            //rechte an 
      } 
      if (status == HALF) 
      { //rechte backled glimmt 
       DDRC &= ~(1 << PC0);            //rechts auf in 
      } 
    } 
    
    //------------------------------------------------------------------ 
    // linke led 
    void BackLEDleft(uint8_t status) // aus - hell - glimm 
    { 
      PORTD &= ~(1 << PD7);                 //odoleds aus 
      if (status == OFF) 
      { //rechte backled aus 
       DDRC |= (1 << PC1);               //links auf out 
       PORTC &= ~(1 << PC1);            //linke aus 
      } 
      if (status == ON) 
      { 
        //rechte backled hell 
       DDRC |= (1 << PC1);               //links auf out 
       PORTC |= (1 << PC1);            //linke an 
      } 
      if (status == HALF) 
      { //rechte backled glimmt 
       DDRC &= ~(1 << PC1);            //links auf in 
      } 
    } 
    
    
    /************************************************************************* 
    
       uint8_t objekt_sichtbar(uint8_t abstand) 
      
        Ist ein Objekt in der Entfernung kleiner oder gleich 
       dem Eingangsparameter "abstand" erkennbar? 
    
       objekt_sichtbar(7) liefert TRUE zurück, falls überhaupt 
       ein Object detektierbar. 
        
       abstand: 
       0: 5cm 
       1: 7cm 
       2: 13cm 
       3: 15cm 
       4: 16cm 
       5: 17cm 
       6: 18cm 
       7: 22cm 
    
       ( Testobjekt: Joghurtecher, Umgebungsbeleuchtung: Zimmer ) 
    
       return: TRUE falls Objekt gefunden 
             FALSE wenn nicht 
       ------------------------------------ 
       geändert (m1.r): 
       schaltet nach dem messen die led aus 
       und wartet noch 1ms wegen 
        der AGC(automatic gain control, 
         automatische Verstärkungsregelung) des empfängers 
            ------------------------------------ 
    
       Zeitbedarf: 6ms 
    
       author: robo.fr, christoph ( ät ) roboterclub-freiburg.de 
       date: 2008 
    
    *************************************************************************/ 
    uint8_t objekt_sichtbar(uint8_t distance) 
    { 
       uint16_t j,z; 
        
          DDRD |= (1 << DDD1);   // Port D1 als Ausgang 
          PORTD &= ~(1 << PD1);   // PD1 auf LOW => ir-led an 
    
       OCR2  = 254-distance;   // wenn OCR2=0xFE dann Objekt sehr nahe 
       z=0; 
       for(j=0;j<30;j++) // loop time: 5ms 
       { 
          if (PIND & (1 << PD0))z++; 
          Sleep(6); // 6*Sleep(6)=1ms 
       } 
       PORTD |= (1 << PD1); // PD1 auf High led auschalten 
       Msleep(1); // kurz warten 
       if (z>=29) return FALSE; // Objekt nicht gefunden 
       else return TRUE; 
    } 
    
    
    //------------------------------------------------------------------- 
    //------------------------------------------------------------------- 
    //hauptprogramm 
    int main(void) 
    {    
          Init(); 
    
       objekt_weit = objekt_sichtbar(weit); 
    
    
       while(1) 
       {    
    
          objekt_weit = objekt_sichtbar(weit); 
    
          //-------------------------------------------------------------------       
          //wenn objekt gesehen, verfolgen!! 
          if (objekt_weit == 1) 
             {                   
                StatusLED(YELLOW); 
                BackLEDleft(OFF); 
                BackLEDright(OFF); 
                MotorDir(FWD,FWD); 
                richtung = 0; 
    
     
                   while ((objekt_sichtbar(weit) == 1) && (objekt_sichtbar(nah) == 0)) 
                   {                   
                       
                      //fahr nach links 
                      if ((objekt_sichtbar(weit) == 1) && (richtung == 0)) 
                      {    
                         i=0; 
                         while (i<= schwenkdauer) 
                         { 
                            StatusLED(YELLOW); 
                            BackLEDleft(HALF); 
                            BackLEDright(OFF); 
                            MotorSpeed(100,155); 
                            richtung=1; 
                            i++; 
                            Msleep(1); 
                         } 
                         i=0; 
                      } 
              
              
                      //fahr nach rechts 
                      if ((objekt_sichtbar(weit) == 1) && (richtung == 1)) 
                      { 
                         i=0; 
                         while (i<=schwenkdauer) 
                         { 
                         StatusLED(YELLOW); 
                         BackLEDleft(OFF); 
                         BackLEDright(HALF); 
                         MotorSpeed(155,100); 
                         richtung=0; 
                         i++; 
                         Msleep(1); 
                         } 
                         i=0; 
                      } 
                   } 
        
           
                   //wenn kein objekt mehr zu sehen ist    
                   if (objekt_sichtbar(weit) == 0) 
                      { 
                         //wenn letzte richtung nach rechts war 
                         //dann ist das objekt links verloren gegangen 
                         //linke backled an 
                         //nach links fahren bis objekt wieder da ist 
    
                         BackLEDleft(OFF); 
                         BackLEDright(OFF); 
                          
    
                         if (richtung == 0) 
                         { 
                            i = 0; 
                             
                            while ((objekt_sichtbar(weit) == 0) && (i<=verlierdauer)) 
                            { 
                               StatusLED(RED); 
                               BackLEDleft(HALF); 
                               BackLEDright(OFF); 
                               MotorSpeed(0,255); 
                               richtung=0; //danach mit links anfangen 
                               Msleep(1); 
                               i++;                            
                            } 
                                                 
                         } 
    
                         //wenn letzte richtung nach links war 
                         //dann ist das objekt rechts verloren gegangen 
                         //rechte backled an 
                         //nach rechts fahren bis objekt wieder da ist 
                         //oder nach einer gewissen zeit nicht wieder aufgetaucht ist 
                         else if (richtung == 1) //letzte richtung war nach links 
                         { 
                             
                            i = 0; 
                            while ((objekt_sichtbar(weit) == 0) && (i<=verlierdauer)) 
                            { 
                               StatusLED(RED); 
                               BackLEDleft(OFF); 
                               BackLEDright(HALF); 
                               MotorSpeed(255,0); 
                               richtung=1; //danach mit rechts anfangen 
                               Msleep(1); 
                               i++; 
                            } 
                            
                            StatusLED(OFF); 
                            BackLEDleft(OFF); 
                            BackLEDright(OFF); 
                         } 
                      } 
                   //wenn objekt ganz nah, stehen bleiben
                   if (objekt_sichtbar(nah) == 1) 
                   { 
                      StatusLED(RED); 
                      BackLEDleft(ON); 
                      BackLEDright(ON); 
                         MotorDir(FWD,FWD); 
                         MotorSpeed(0,0); //stehen bleiben
                         Msleep(1); 
                   } 
                }  
    
          //-------------------------------------------------------------------       
              
    
                 
    
                 
             } 
                  
    
    
              
           
    
       while (1); 
         return 0; 
    }
    Ausprobieren erlaubt, Anregung und Kritik erwünscht.

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557

    Re: Objektverfolgung mit SUMO-Adapter

    Zitat Zitat von pinsel120866
    ... mit meinem SUMO-Adapter ...
    Vermutlich ist die Frage doof, aber bitte, wie sieht der SUMO-Adapter aus? Oder - in welchem Thread findet man den Aufbau beschrieben (die Suchfunktion zeigt eine ziemlich lange Latte....).
    Danke für die Antworten.
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Hallo oberallgeier,

    Infos zum SUMO-Adapter kriegst du hier:

    http://www.roboterclub-freiburg.de/a...moAdapter.html

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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