- LiFePO4 Speicher Test         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 34

Thema: Odometrie

  1. #11
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Anzeige

    E-Bike
    Hallo

    Ich bin zwar selbst auf diese Idee gekommen, war aber nicht der erste:
    https://www.roboternetz.de/phpBB2/ze...rag.php?t=8153

    Viele Infos zu Optimierung des asuros findet man auch im asuro-wiki.

    Hier noch ein netter Thread zum Geradeausfahren:
    https://www.roboternetz.de/phpBB2/ze...ag.php?t=19948

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #12
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Hallo,
    mal einige Verständnisfragen zur Odometrie:

    Bei meinem Asuro habe ich lt. Auswertungsprogramm auf beiden Seiten Werte, die Sinusförmig sich zwischen 700 und 900 bewegen. Der hohe Wert kommt daher, weil ich beide Seiten abgedeckt habe (es fließt mehr Strom), der geringe Unterschied zwischen hoch und niedrig, weil die Scheiben seitlich wenig wandern (Beilagscheibentrick).

    1. Ist dies Richtig, oder hab ich da was übersehen?
    2. Ist es besser, wenn der Min/Max - Unterschied kleiner ist?
    3. Ist es gut wenn sich die Werte in die 1000er - Nähe bewegen?

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    17.12.2007
    Ort
    Hann. Münden
    Alter
    38
    Beiträge
    63
    3.: In welchem Bereich sich die Werte bewegen ist egal, hauptsache, sie sind immer im gleichen bereich, dass sollte bei dir gewährleistet sein
    2. Je größer der unterschied zwischen Min und Max desto besser, weil du dann ne geringere wahrscheinlichkeit für fehler hast. du machst ja ne abfrage ob der Wert kleiner ist als z.b. 790 und dann wann er die 810er Marke wieder überschreitest. Du zählst quasi die hell-dunkel und dunkel hell übergänge!
    1. Der unterschied ist bei mir nicht wesentlich größer (550 - 800), deine aussagen sind richtig

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2008
    Ort
    Ahnatal / Kassel
    Alter
    50
    Beiträge
    11
    Zitat Zitat von HAWK-Matze
    3.: In welchem Bereich sich die Werte bewegen ist egal, hauptsache, sie sind immer im gleichen bereich, dass sollte bei dir gewährleistet sein
    Ich hab nen Programm geschrieben, da wird der Mittelwert der Odometrie-Werte immer wieder neu gebildet.

    Ne kleine Hysterese von 10 hab ich auch eingebaut, dürfte aber auch ohne Funktionieren, hab ich aber noch nicht getestet.

    Mit dem Programm fährt er ziemlich genau geradeaus.
    Allerdings je langsamer mal ihn stellt, umso ungenauer wird die Geradeausfahrt.

    Edit: Hier mal meine neue Version mit Tasterabfrage.


    Code:
    #include "asuro.h"
    
    int main(void) {
    	unsigned int odo_max_l,odo_max_r,odo_min_l,odo_min_r,odo_mitte_l,odo_mitte_r,data[2];
    	unsigned char auf_l,auf_r,speed,speed_wert,speed_l,speed_r,zaehler_l,zaehler_r,schwing,rueckw,dreh_l,dreh_r,taste;;
    	unsigned long dauer1,dauer2;
    	Init();
    	MotorDir(FWD,FWD);
    	auf_r=auf_l=0;
    	zaehler_r=zaehler_l=rueckw=dreh_l=dreh_r=0;
    	odo_max_l=odo_max_r=odo_min_l=odo_min_r=300;
    	speed=120;
    	speed_l=speed_r=speed;
    	speed_wert=(speed/20);
    	MotorSpeed(speed_l,speed_r);  
    
    	while(1) {
    		
    		for(schwing=0;schwing<30;schwing++) {
    			dauer1=Gettime();
    			odo_max_l--;
    			odo_max_r--;
    			odo_min_l++;
    			odo_min_r++;
    			OdometrieData(data);
    			if (data[0]>odo_max_l) {odo_max_l=data[0];}
    			if (data[1]>odo_max_r) {odo_max_r=data[1];}
    			if (data[0]<odo_min_l) {odo_min_l=data[0];}
    			if (data[1]<odo_min_r) {odo_min_r=data[1];}
    			odo_mitte_l=(odo_max_l+odo_min_l)/2;
    			odo_mitte_r=(odo_max_r+odo_min_r)/2;
    			if ((auf_l==0) && (data[0]>(odo_mitte_l+5))) {
    				auf_l=1;
    				zaehler_l++;
    			}
    			else if ((auf_l==1) && (data[0]<(odo_mitte_l-5))) {
    				auf_l=0;
    			}
    			if ((auf_r==0) && (data[1]>(odo_mitte_r+5))) {
    				auf_r=1;
    				zaehler_r++;
    			}
    			else if ((auf_r==1) && (data[1]<(odo_mitte_r-5))) {
    				auf_r=0;
    			}
    		
    			dauer2=Gettime();
    			while ((dauer1+5)>dauer2) {dauer2=Gettime();}
    		}
    		
    		if (zaehler_l<speed_wert) {speed_l=speed_l+speed_wert;}
    		else if (zaehler_l>speed_wert) {speed_l=speed_l-speed_wert;}
    		
    		if (zaehler_r<speed_wert) {speed_r=speed_r+speed_wert;}
    		else if (zaehler_r>speed_wert) {speed_r=speed_r-speed_wert;}
    		
    		zaehler_l=zaehler_r=0;
    		
    		if (PollSwitch()>0) {
    			taste=PollSwitch();
    			if (taste==1) {dreh_l=(800/speed);}
    			if ((taste==2) || (taste==4)) {dreh_r=(1200/speed);}
    			if (taste==31) {dreh_r=(800/speed);}
    			if ((taste==8) || (taste==16)) {dreh_l=(1200/speed);}
    		}
    		
    		if (dreh_l>0) {
    			MotorDir(RWD,BREAK);
    			dreh_l--;
    		}
    		else if (dreh_r>0) {
    			MotorDir(BREAK,RWD);
    			dreh_r--;
    		}
    		else {
    			MotorDir(FWD,FWD);
    		}
    		
    		MotorSpeed(speed_l,speed_r);
    	}
    	return 0;
    }

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    05.01.2008
    Ort
    Erlangen
    Alter
    32
    Beiträge
    58
    ähm für genaues geradeaus fahren, is es da unbedingt notwendig die lichtschranken umzubauen so wie im Buch "mehr spaß mit asuro band 1" beschriebn ist oder reicht es voll und ganz die normale stelle für dich odometer zu benutzen. ein vorteil von der neuen position is das das sich die geberscheibe schneller dreht und das man somit genauer bestimmen kann welches rad sich schneller dreht, bloß ich schaff es net richtig die enue geberscheibe exakt draufzukleben, d.h. der abstand zwischen odometern und geberscheibe schwank sehr

    mfg

    Theux

  6. #16
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    geht auch ohne umbau.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    05.01.2008
    Ort
    Erlangen
    Alter
    32
    Beiträge
    58
    Zitat Zitat von Ceos
    versuch mal zwischen zählrad und platine ne dünne unterlegscheibe z setzen, damit der abstand sich nciht mehr verändert und dann die dioden/transistoren mit ner kleinen hülle zu versehen die möglichst dich an dem zahnrad anliegt, damit lassen sich klarere werte erzielen
    wenn ich bei mir ne unterlegscheibe drauf tue dann tut sich der asuro iwie sua schwer beim fahren obwohl ich ihn schon was "geölt" hab

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2008
    Ort
    Ahnatal / Kassel
    Alter
    50
    Beiträge
    11
    Ölen ist bei dem Ding absolutes No-Go !
    Damit fängt er sich Fussel und Haare und läuft dann entsprechend schwer.

    Die Scheiben darf man natürlich nur soweit draufdrücken, dass sich das Ritzel noch leicht drehen kann. Nur kippeln sollte es in dem Maß nicht mehr können.

    Ich hab das mit ner plattgerdückten Federscheibe gelöst, die ich nach Belieben verschieben kann. Musste allerdings die Achsen etwas weiter nach aussen löten, weil sonst nicht mehr genug Platz war.

    Meinen muss ich auch ab und zu mal auseinanderbauen, weil sich auch ohne Öl ziemlich viel Fusselzeug auf den Achsen sammelt. Ein gekapselter Antrieb wäre da sehr von Vorteil.

    Grüsse,
    Gerry
    *** Hier könnte Ihre Signatur stehen. ***

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    [quote="Gerry1973"]
    Zitat Zitat von HAWK-Matze
    [...]
    Code:
    #include "asuro.h"
    
    int main(void) {
    	unsigned int odo_max_l,odo_max_r,odo_min_l,odo_min_r,odo_mitte_l,odo_mitte_r,data[2];
    	unsigned char auf_l,auf_r,speed,speed_wert,speed_l,speed_r,zaehler_l,zaehler_r,schwing,rueckw,dreh_l,dreh_r,taste;;
    	unsigned long dauer1,dauer2;
    	Init();
    	MotorDir(FWD,FWD);
    	auf_r=auf_l=0;
    	zaehler_r=zaehler_l=rueckw=dreh_l=dreh_r=0;
    	odo_max_l=odo_max_r=odo_min_l=odo_min_r=300;
    	speed=120;
    	speed_l=speed_r=speed;
    	speed_wert=(speed/20);
    	MotorSpeed(speed_l,speed_r);  
    
    	while(1) {
    		
    		for(schwing=0;schwing<30;schwing++) {
    			dauer1=Gettime();
    			odo_max_l--;
    			odo_max_r--;
    			odo_min_l++;
    			odo_min_r++;
    			OdometrieData(data);
    			if (data[0]>odo_max_l) {odo_max_l=data[0];}
    			if (data[1]>odo_max_r) {odo_max_r=data[1];}
    			if (data[0]<odo_min_l) {odo_min_l=data[0];}
    			if (data[1]<odo_min_r) {odo_min_r=data[1];}
    			odo_mitte_l=(odo_max_l+odo_min_l)/2;
    			odo_mitte_r=(odo_max_r+odo_min_r)/2;
    			if ((auf_l==0) && (data[0]>(odo_mitte_l+5))) {
    				auf_l=1;
    				zaehler_l++;
    			}
    			else if ((auf_l==1) && (data[0]<(odo_mitte_l-5))) {
    				auf_l=0;
    			}
    			if ((auf_r==0) && (data[1]>(odo_mitte_r+5))) {
    				auf_r=1;
    				zaehler_r++;
    			}
    			else if ((auf_r==1) && (data[1]<(odo_mitte_r-5))) {
    				auf_r=0;
    			}
    		
    			dauer2=Gettime();
    			while ((dauer1+5)>dauer2) {dauer2=Gettime();}
    		}
    		
    		if (zaehler_l<speed_wert) {speed_l=speed_l+speed_wert;}
    		else if (zaehler_l>speed_wert) {speed_l=speed_l-speed_wert;}
    		
    		if (zaehler_r<speed_wert) {speed_r=speed_r+speed_wert;}
    		else if (zaehler_r>speed_wert) {speed_r=speed_r-speed_wert;}
    		
    		zaehler_l=zaehler_r=0;
    		
    		if (PollSwitch()>0) {
    			taste=PollSwitch();
    			if (taste==1) {dreh_l=(800/speed);}
    			if ((taste==2) || (taste==4)) {dreh_r=(1200/speed);}
    			if (taste==31) {dreh_r=(800/speed);}
    			if ((taste==8) || (taste==16)) {dreh_l=(1200/speed);}
    		}
    		
    		if (dreh_l>0) {
    			MotorDir(RWD,BREAK);
    			dreh_l--;
    		}
    		else if (dreh_r>0) {
    			MotorDir(BREAK,RWD);
    			dreh_r--;
    		}
    		else {
    			MotorDir(FWD,FWD);
    		}
    		
    		MotorSpeed(speed_l,speed_r);
    	}
    	return 0;
    }
    Ich habe schon einige Programme für Odometrie ausprobiert, leider hat mein ASURO immer einen Rechtsdrall.
    Woran könnte das liegen?

  10. #20
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    evtl verschiedene odoscheiben aud den rädern?
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

12V Akku bauen