RoboterNetz.de Foren-Übersicht Werbung
 Home  •  Forum  •  Suchen •  Mitgliederliste  •  RN-Landkarte  •  Ränge  •  Statistik  •  Download •  Album  •  Links  •  Kalender  •  Letzte Themen
 RN-Wissen Artikelbereich  •  Mitarbeiter  •  Benutzergruppen  •  Chat  •  Registrieren  •  FAQ  •  Profil  •  log in, Nachrichten zu lesen  •  Login
Kalender 
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Neues Thema eröffnenNeue Antwort erstellen
Vorheriges Thema anzeigen Dieses Thema einem Freund schickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Textdatei speichernPrintable versionlog in, Nachrichten zu lesen Nächstes Thema anzeigen
Autor Nachricht
ehenkes

Roboter Experte
Roboter Experte




Anmeldungsdatum: 14.04.2007
Beiträge: 677
Wohnort: Einhausen
Alter: 54

germany.gif
Beitrag Verfasst am: 03.06.2007, 17:34 Antworten mit ZitatNach oben

ASURO mit US-Abstandssensoren und den zusätzlichen Funktionen aus ultrasonic.c (aus Lib 3). Mich würde interessieren, wie ihr das Bewegungsmuster optimiert habt, damit sich ASURO nicht ständig fest fährt? Hier meine aktuelle Version, mit der er sich schon ganz nett bewegt. Er kann sich jetzt allerdings noch nach hinten fest fahren. Da fehlt mir noch die richtige Idee.

#include "asuro.h"
#define MAXDIFF 80

int main(void)
{
  int abstand, abstand_alt, diff, zaehler=0;
  Init();
  abstand = Chirp();
   
  while(TRUE)
  {
    abstand_alt = abstand;
   abstand = Chirp();   ++zaehler;
   diff = abstand - abstand_alt;
   
   if( (abstand>15) && (abs(diff)<MAXDIFF) )
   {
     StatusLED(GREEN);
     MotorDir(FWD, FWD);
     MotorSpeed(150, 150);
   }
   else if( (abstand>10) && (abstand<=15) && (abs(diff)<MAXDIFF) )
   {
     StatusLED(GREEN);
     MotorDir(FWD, FWD);
     MotorSpeed(100, 150);
     Msleep(30);
   }
   else
   {
     StatusLED(RED);
     MotorDir(RWD, RWD);
     MotorSpeed(150, 100);
     Msleep(100);
   }
   
   if (zaehler > 400)
   {
      StatusLED(RED);
      BackLED(ON,ON);
       MotorDir(RWD, RWD);
       MotorSpeed(200, 250);
       Msleep(10);
      BackLED(OFF,OFF);
   }
   if (zaehler > 405)
   {
      StatusLED(RED);
      BackLED(ON,ON);
       MotorDir(RWD, RWD);
       MotorSpeed(250, 200);
       Msleep(10);
      BackLED(OFF,OFF);
            
      if(zaehler > 410)
        zaehler = 0;
   }
  }
  return 0;
}

_________________
http://www.henkessoft.de/Roboter/Roboter.htm
http://www.henkessoft.de/Roboter/Nibo.htm
http://www.henkessoft.de/Roboter/ASURO.htm
Offline Benutzer-Profile anzeigen Website dieses Benutzers besuchen
stochri

Roboter Genie
Roboter Genie




Anmeldungsdatum: 12.06.2005
Beiträge: 1042

Beitrag Verfasst am: 03.06.2007, 21:25 Antworten mit ZitatNach oben

Du kannst die Reibung detektieren, um eine Kollision festzustellen ( auch nach hinten ).


#include "asuro.h"  // bitte die neue Datei benutzen
                    // asuro.h und asuro.c vom 31.03.05

#define aus MotorDir(BREAK,BREAK)
#define go {MotorSpeed(150,150);MotorDir(FWD,FWD);}
#define backturn { MotorSpeed(150,250);MotorDir(RWD,RWD);Msleep(1000);}

/*************************************************************************************

  ASURO discovers your apartment

  program made by stochri july, 2005

*************************************************************************************/

int speed()
{
   int rightspeed,leftspeed;
   int leftold,rightold;

   Encoder_Set(0,0);      // reset encoder


   leftold=encoder[LEFT];
   rightold=encoder[RIGHT];
   Msleep(300);
   leftspeed=encoder[LEFT]-leftold;
   rightspeed=encoder[RIGHT]-rightold;

   //SerWrite("  speed Left,Right ",19);
   //PrintInt(leftspeed);
   //PrintInt(rightspeed);
   return leftspeed+rightspeed;
}

int main(void)
{
   int n,v,nullspeed;

   Init();
   Encoder_Init();
   StatusLED(OFF);
   SerWrite("\n\rASURO OK\n\r",8);

   go;
   Msleep(500);

   nullspeed=speed()-10;

   while(1)
   {
      v=speed();
      SerWrite("\n\r speed ",9);
      PrintInt(v);

      if(v<nullspeed)
      {
         backturn;
         go;
         Msleep(500);
      }

   }
   return 0;
}
Offline Benutzer-Profile anzeigen
ehenkes

Roboter Experte
Roboter Experte




Anmeldungsdatum: 14.04.2007
Beiträge: 677
Wohnort: Einhausen
Alter: 54

germany.gif
Beitrag Verfasst am: 03.06.2007, 22:33 Antworten mit ZitatNach oben

Gute Idee. Danke!

_________________
http://www.henkessoft.de/Roboter/Roboter.htm
http://www.henkessoft.de/Roboter/Nibo.htm
http://www.henkessoft.de/Roboter/ASURO.htm
Offline Benutzer-Profile anzeigen Website dieses Benutzers besuchen
stochri

Roboter Genie
Roboter Genie




Anmeldungsdatum: 12.06.2005
Beiträge: 1042

Beitrag Verfasst am: 04.06.2007, 17:51 Antworten mit ZitatNach oben

Hallo Erhard,

schön, dass Dir die Idee gefällt. Wir haben hier auch schon über weitergehende Verfahren diskutiert ( hier ) Vielleicht sind ja noch was interessantes für Dich dabei.

Zitat:

Vielleicht hier noch mal zur Intention dieses Threads:
Mein Ansatz ist, mit den vorhandenen Mitteln das Maximale aus der Technik herauszuholen. Das interessante daran ist, dass man unter Umständen auf Lösungsmöglichkeiten kommt, die andere auf Grund des Suchraumes gar nicht finden würden.
Der ASURO hat eine sehr eingeschränkte Sensorik und Aktuatorik und es hängt sehr stark von den geistigen Vorstellungskraft derjenigen ab, was damit erreicht werden kann.

Mir ist bei der Beschäftigung mit dem Kollisionserkennungsalgorithmus aufgefallen, dass sich der ASURO zwar selten aber doch machmal in einer Ecke verfangen kann.
Normalerweise bemerkt der Algorithmus, wenn die Radgeschwindigkeit langsamer wird. Dann fährt der Roboter in einem ca. 90° Winkel zurück.
Jetzt gibt es Situationen, bei denen der Roboter sozusagen in einene Dead-Lock gerät, bei dem er ständig anstößt, zurückfährt, vorfährt und an der selben Stelle anstößt.
Wenn ein Mensch den ASURO nicht sehen könnte, aber auf einem Computerbildschirm die Radgeschwindigkeit beobachtet, dann könnte er aus der Periodizität der Radgeschwindigkeitsänderung Rückschlüsse auf das Hängenbleiben des Roboters ziehen.

Hier läst sich ein Algorithmus entwickeln, der sozusagen auf einer höheren Abstraktionsebenene den Zustand des Roboters erkennen kann und entsprechend eingreift.

Eine zweite Sache, die ab und zu mal passiert, ist, dass der Roboter nach hinten umfällt und die Räder in der Luft drehen. Hier liese sich ebenfalls ein Algorithmus erstellen, der aus der Kenntnis der Raumgröße weiss, dass wenn die Räder längere Zeit ohne Kollisionserkennung laufen, der Roboter umgefallen sein muss.
Offline Benutzer-Profile anzeigen
ehenkes

Roboter Experte
Roboter Experte




Anmeldungsdatum: 14.04.2007
Beiträge: 677
Wohnort: Einhausen
Alter: 54

germany.gif
Beitrag Verfasst am: 30.07.2007, 20:59 Antworten mit ZitatNach oben

Jetzt benötige ich genau diese Ideen für den Nibo. Thx a lot! Smile

_________________
http://www.henkessoft.de/Roboter/Roboter.htm
http://www.henkessoft.de/Roboter/Nibo.htm
http://www.henkessoft.de/Roboter/ASURO.htm
Offline Benutzer-Profile anzeigen Website dieses Benutzers besuchen
Beiträge vom vorherigen Thema anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen
Vorheriges Thema anzeigen Dieses Thema einem Freund schickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Textdatei speichernPrintable versionlog in, Nachrichten zu lesen Nächstes Thema anzeigen



 Gehe zu:   



Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen




Die große Community für Robotik-, Mikrocontroller- und Elektronik Bastler als auch Experten
 Roboternetz RSS2.0 News Feed
Alle Zeiten sind GMT + 1 Stunde