- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Asuro fährt im Kreis

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    Anzeige

    Praxistest und DIY Projekte
    sehr ungenau. hauptäschliuches problem störlicht, wo die messung behindert.
    ...

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    03.11.2006
    Beiträge
    41
    ich brauche aber einen roboter, der weiss, wo der ort ist, von dem aus er gestartet ist...

    ist das mit dem asuro überhaupt möglich
    wenn ja wie?

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    man kann die odmetrioewerte durch umbaueten schon verbessern
    auserdem bräuchte man für eine zuverlässige ortung noch nen kompassensor

    aber das wurde alles schon desöfteren diskutiert.
    ...

  4. #14
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    man könnte auch eine infrarot-bake aufstellen. eine bake ist ein licht, das immer wieder das gleiche lichtsignal aussendet. diese könnte der asuro evtl finden.

    ansonsten wäre es theoretisch machbar, nur mithilfe der odo-sensoren zum startpunkt zurückzufahren, schliesslich müsste ja nur die gleiche strecke rückwärts gefahren werden, aber die Sensoren sind wirklich extrem ungenau. schon kleine figuren zu fahren ist sehr schwierig. such mal nach haus vom nikolaus oder rechteck oder nach stift hier im forum. alles versuche, den asuro eine gezielte strecke fahren zu lassen.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    03.11.2006
    Beiträge
    41
    hmm mach ich sofort danke

    mal sehen, was die arschitekten mit dem Bau vom haus des nikolaus geleistet haben

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    27.11.2006
    Ort
    Steiningen
    Alter
    36
    Beiträge
    8
    Sooo! Er fährt geradeaus!

    So hab ich's gemacht:
    - Für ein Bruchteil einer Sekunde wird mit gleicher Geschwindigkeit links und rechts. Dann wird die durchschnittliche Lichtintensität ermittelt.
    - Nun fährt er wieder mit der gleichen Geschwindigkeit, prüft ob der Wert über oder unter der mittleren Lichtintensität liegt und ermittelt so einen Schwarz-Weiß-Wechsel.
    - Die Wechselrate zwischen links und rechts wird verglichen und dann der schnellere Motor etwas langsamer gemacht.

    Ich muss sagen, es funktioniert sehr gut. Außerdem macht es ihm nichts aus, wenn er in einen helleren Raum fährt oder wenn ich das Licht ausschalte.

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    So hab ich's gemacht:
    - Für ein Bruchteil einer Sekunde wird mit gleicher Geschwindigkeit links und rechts. Dann wird die durchschnittliche Lichtintensität ermittelt.
    - Nun fährt er wieder mit der gleichen Geschwindigkeit, prüft ob der Wert über oder unter der mittleren Lichtintensität liegt und ermittelt so einen Schwarz-Weiß-Wechsel.
    - Die Wechselrate zwischen links und rechts wird verglichen und dann der schnellere Motor etwas langsamer gemacht.
    poste doch mal den passenden code
    ...

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    27.11.2006
    Ort
    Steiningen
    Alter
    36
    Beiträge
    8
    Ihr sollt doch selbst nachdenken! Naja, egal.

    Hier ist er (nicht so toll programmiert; lieg dadran, dass seeeehr oft was geändert wurde, weil es nicht so richtig geklappt hat).

    Code:
    #include "asuro.h"
    
    unsigned char speed, flagl=FALSE, flagr=FALSE;
    unsigned int data[2];
    unsigned int wegl, wegr, diff, schnittl, schnittr;
    int speedLeft,speedRight;
    
    int vorne_frei(void)
    {
    	int temp1, temp2, temp3;
    	temp1 = PollSwitch(); Sleep(7);
    	temp2 = PollSwitch(); Sleep(7);
    	temp3 = PollSwitch(); Sleep(7);
    	if((temp1 * temp2 * temp3) == 0)
    	{
    		return 1;
    	}
    	else
    	{
    		return 0;
    	}
    }
    
    void start(void)
    {
       Init();
       
       StatusLED(GREEN);
    }
    
    void setze_speed(int geschwindigkeit)
    {
    	int i;
    	speedLeft = geschwindigkeit;
    	speedRight = geschwindigkeit;
    	
    	MotorDir(BREAK,BREAK); Sleep(72);
    	
    	if(geschwindigkeit > 0)
    	{
    	   MotorDir(FWD,FWD);
    	}
    	else
    	{
    		geschwindigkeit *= -1;
    		MotorDir(RWD,RWD);
    	}
    	   schnittl = 0;
    	   schnittr = 0;
    	   
    	   MotorSpeed(speedLeft,speedRight);
    	   
    	   for(i = 1; i < 100; i++) 
    	   {
    			OdometrieData(data);
    			schnittl += data[0];
    			schnittr += data[1];
    			Sleep(72);
    	   }
    	   schnittl /= 100;
    	   schnittr /= 100;
    }
    
    void geradeaus(void)
    {
    	   int logl, logr, log;
    	   wegl=0; wegr=0;
    	   logl = 0;
    	   logr = 0;
    	   log = 0;
    	   while(log < 100)
    	   {
    		  OdometrieData(data);
    		  logl += data[0];
    		  logr += data[1];
    		  wegl=0; wegr=0;
    		  if ((data[0] < schnittl) && (flagl == TRUE)) {flagl = FALSE; wegl++; SerWrite("l",1);}
    		  else if ((data[0] > schnittl) && (flagl == FALSE)) {flagl = TRUE; wegl++; SerWrite("L",1);}
    		  if ((data[1] < schnittr) && (flagr == TRUE)) {flagr = FALSE; wegr++; SerWrite("r",1);}
    		  else if ((data[1] > schnittr) && (flagr == FALSE)) {flagr = TRUE; wegr++; SerWrite("R",1);}
    		  diff=wegr-wegl;
    		  if (diff>0) speedRight--;                  // fahre geradeaus
    			 else if (diff<0) speedLeft--;
    			 //else {speedRight=speed; speedLeft=speed;}
    		  if (speedRight<0) {speedRight=0;}
    		  if (speedLeft<0) {speedLeft=0;}
    		  MotorSpeed(speedLeft,speedRight);
    		  Sleep(7);
    		  log++;
    	   }
    	   SerWrite("|",1);
    	   schnittl = logl / 100;
    	   schnittr = logr / 100;
    }
    
    int main(void)
    { int x;
       start();
       while(1)
       {
    	setze_speed(200);
    	while(vorne_frei() == 1)
    	{
    		geradeaus(); StatusLED(GREEN);
    	}
       MotorDir(RWD,RWD);
       MotorSpeed(200,100);
       for(x = 1; x <= 1000; x++)
    	{
    		Sleep(72);
    	}
       }
       return 0;
    }
    Gruß,
    Yoshi

  9. #19
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    sieht gut aus... herzlichen glückwunsch =)

    du kannst dir ja mal aus der asuro.c die go() funktion ansehen, ob du dieses prinzip auch verstehst.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    Ihr sollt doch selbst nachdenken!
    bei roboterwettbewerben werben hernach auch immer die codes ausgetauscht.
    ...

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen