- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Motorgeschwindigkeitssynchronisation für ASURO

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    Powerstation Test
    Na dann hoff' ich, daß der Juilien das ev. berücksichtigt. Ich kann nix sagen dazu, keinerlei Unterlagen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    08.05.2005
    Ort
    München
    Alter
    53
    Beiträge
    59
    Hi,

    das mit den Back LED's ist korrekt. Beides geht nicht.
    Wenn man sich den Sourcecode von OdometrieData ansieht, werden da auch die Back LED's explizit ausgeschaltet.
    Wenn man beides verwendet bekommt man Phantasiewerte für die Odometrie

  3. #13
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Oh je. Na, wenn er richtig fährt, isses ja nicht so schlimm, wenn nix leuchtet
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Jo, danke für eure Tipps. Ich werde dann wohl das mit den Back-LED's weglassen. Jetzt funktionierts!
    @PicNick:
    sagte: "Und wenn du mit der Speed oben oder unten anstehst, musst du wohl auch ein Wort mit dem anderen Motor wechseln, sonst bricht Verzweiflung aus."
    Das habe ich ja beachtet siehe:
    ...
    if (sr>254){sr=255; sl--;}
    if (sr<61){sr=60; sl++;}
    ...
    sr=Speed Rechts
    sl=Speed Links

  5. #15
    hallo, ich habe mir vor kurzem den asuro zusammen gebraten, und mit hilfe des oben geposteten codes selber mal was versucht, gebt mir bitte verbesserungs vorschläge und tipps^^

    Code:
    #include "asuro.h" 
    
    int main(void)
    { 
    
    	int Lnow; 
    	int Rnow; 
    	int Rold; 
    	int Lold; 
    	int Count1=0;
    	int Count2=0;
    	int sl=180; 
    	int sr=180; 
    	unsigned int data[2]; 
    	unsigned char taste; 
    	
    	Init(); 
    	
    	while(1)
    	{ 
    		MotorDir(FWD,FWD); 
    		MotorSpeed(sr,sl); 
    		
    		OdometrieData(data);
    		
    		if (data[0] > 312) Lnow = 1; else Lnow = 0; 
    		
    		if (data[1] > 312) Rnow = 1; else Rnow = 0; 
    		
    		if (Lnow ^ Lold) Count1++; 	
    		if (Rnow ^ Rold) Count2++; 
    		
    		Lold=Lnow; 
    		Rold=Rnow; 
    		
    		if (Count1>80 && Count2<80)
    		{
    			sr=180;
    			sl=sl+5;
    			Count1=0;
    			Count2=0;
    		} 
    		
    		else if (Count2==80 && Count1<80)
    		{
    			sl=180;
    			sr=sr+5;
    			Count1=0;
    			Count2=0;
    		} 
    	} 
    	return 0; 
    }
    gruß
    GE-RO

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    08.05.2005
    Ort
    München
    Alter
    53
    Beiträge
    59
    Hi,

    wie kommst du auf den Grenzwert 80? Ist das einfach eine experimentell ermittelte Zahl oder hat das eine Bedeutung?

    Bei der 2. Bedinung prüft du: else if (Count2==80 && Count1<80) sollte es nicht heissen Count2>80 so wie in der ersten Bedingung?

    Ansonsten: Fährt dein Asuro damit gerade aus oder nicht?

  7. #17
    stimmt, das muss nicht == sondern > al 80 sein... 80 hab ich nur zufällig gewählt, da ich denke das der wert nicht zu groß und icht zu klein ist..

    gruß
    GE-RO

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo GE-RO,

    es ist immer schwer, sich in anderen Programmen zurecht zu finden. Irgendwie hast du auch links und rechts verwechselt.
    Der Einfachheit halber hab ich mal meine Geradeaus-Routine in dein Programm eingebaut. Zuerst lief es auch nicht. Dann habe ich bemerkt, daß du in MotorSpeed() rechts und links vertauscht hattest. Nach Korrektur laufen die Räder mit meiner Routine jetzt synchron. siehe Code

    Gruß waste

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    
       int Lnow;
       int Rnow;
       int Rold;
       int Lold;
       int Count1=0;
       int Count2=0;
       int diff;
       int sl=180;
       int sr=180;
       unsigned int data[2];
       
       Init();
       
       while(1)
       {
          MotorDir(FWD,FWD);
          MotorSpeed(sl,sr);
          
          OdometrieData(data);
          
          if (data[0] > 600) Lnow = 1; else Lnow = 0;
          
          if (data[1] > 600) Rnow = 1; else Rnow = 0;
          
          if (Lnow ^ Lold) Count1++;    
          if (Rnow ^ Rold) Count2++;
          
          Lold=Lnow;
          Rold=Rnow;
          
    	diff=Count2-Count1;
    	if (diff>0) sr--;
    		else if (diff<0) sl--;
    		else {sr=180; sl=180;}
    	if (sr<0) {sr=0;}
    	if (sl<0) {sl=0;}
       }
       return 0;
    }

  9. #19
    stimmt.. ich hab das verwechselt, hier nochmal komplett überarbeitet.. jetzt klappst ich habs selber gad ausprobiert..

    Code:
    #include "asuro.h" 
    
    int main(void) 
    { 
    	
    	int Lnow; 
    	int Rnow; 
    	int Rold; 
    	int Lold; 
    	int Count1=0; 
    	int Count2=0; 
    	int sl=180; 
    	int sr=180; 
    	unsigned int data[2]; 
    	unsigned char taste; 
        
    	Init(); 
        
    	while(1) 
    	{ 
    		MotorDir(FWD,FWD); 
    		MotorSpeed(sr,sl); 
    		
    		OdometrieData(data); 
    		
    		if (data[0] > 312) Lnow = 1; else Lnow = 0; 
    		
    		if (data[1] > 312) Rnow = 1; else Rnow = 0; 
    		
    		if (Lnow != Lold) Count1++;     
    		if (Rnow != Rold) Count2++; 
    		
    		Lold=Lnow; 
    		Rold=Rnow; 
    		
    		if (Count2==80 && Count2<80) 
    		{ 
    			sl=180; 
    			sr=sr+5; 
    			Count1=0; 
    			Count2=0; 
    		} 
    		
    		else if (Count1==80 && Count1<80) 
    		{ 
    			sr=180; 
    			sl=sl+5; 
    			Count1=0; 
    			Count2=0; 
    		}
    	} 
    	return 0; 
    }
    gruß
    GE-RO

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Hallo!
    Danke! Ich werds mal testen.

    MfG
    Julien
    http://cap.gediam.de/ - lxde-sid-lite - eine inoffizielle, sidux-basierende Linuxdistribution

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

LiFePO4 Speicher Test