Archiv verlassen und diese Seite im Standarddesign anzeigen : Odometrie
HAWK-Matze
04.01.2008, 18:27
Habe ein Problem mit der Odometrie!
Wenn ich mir 200 Werte ausgeben lasse dann pendeln diese Sinusförmig zwischen 550 und 800, und das für beide Sensoren.
Wenn ich nun aber das "Geradeausfahrprogramm" aus ASURO Band 1 und 2 verwende fährt mein kleiner nur im kreis!
Ich habe mir auch da für jeden durchlauf mal die Werte ausgeben lassen und habe das gefühl, dass das programm zu langsam läuft und der Asuro manchmal garnicht merkt das da ein weis zwischen zwei schwarzen ist...
Das komische ist aber, das er immer gegen den urzeigersin im Kreis fährt.
Mit dem TRIGGERLEVEL und HYSTERESIS habe ich herumgespielt, daran liegts wohl nicht.
Hat jemand das Problem mit dem Programm auch? Oder kann mir jemand nen Tip geben wie ich das Programm schneller machen kann? Oder ne idee wo es sonst dran liegen könnte?
Wie kann ich nen Quelltest posten?
damaltor
04.01.2008, 21:27
hmm.. da das programm bei den anderen geht...
was für aufkleber hast du aufgeklebt?
HAWK-Matze
05.01.2008, 10:18
Die engen kleber.... also die mit mehr flächen (ich glaube 12).
Die anderen drauf machen?
damaltor
05.01.2008, 12:14
hmm ich dachte die engen wären die richtigen. aber versuchs ruhig mal
HAWK-Matze
06.01.2008, 14:25
Hmmm hab das jetzt nochmal getestet (mit den engen).
Wenn das licht gleichmässig auf den Asuro scheint und es hell genug ist dann gehts... ich muss wohl noch ein bisschen mit den werten herumspielen, was habt ihr denn da so eingestellt?
da schwankt leider sehr stark ... 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
radbruch
06.01.2008, 19:02
Hallo
versuch mal zwischen zählrad und platine ne dünne unterlegscheibe zu setzenDie U-Scheibe sollte zwischen die großen Zahnräder, damit wird die Codescheibe zu den Sensoren gedrückt:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=26874
Eine Abschirmung gegen Fremdlicht hilft auch sehr.
Gruß
mic
HAWK-Matze
06.01.2008, 20:15
Haha mit Unterlegscheiben fährt bei Zimmerbeleuchtung geradeaus!
Er definiert eine Gerade neu!!!
Nur im Dunkeln läufts noch nicht ganz optimal, probiere das erstmal Softwareseitig zu lösen, diese abdeckungsbastelei gefällt mir optisch nicht ganz so gut, hoffentlich komme ich da drum rum.
Danke an alle für die Hilfe, das Forum hier ist echt toll...
radbruch
06.01.2008, 20:59
Hallo
Nur im Dunkeln läufts noch nicht ganz optimalDann schafft er wohl die Pegel nur mit Hilfe des Fremdlichts, vielleicht ist der TRIGGERLEVEL noch zu hoch.
Gruß
mic
also die idee mit der unterlegscheibe zwischen triebzahnard und ritzel der odoscheibe hab ich ja noch gar net gesehn, aber geil isse allemal ...
nimm dir auf jeden fall mal radbruchs post zu hilfe und schirm die sensoren möglicht dicht gegen die odoscheibe ab und spiel mal mit den werten rum, bis es zu 99% klappt
radbruch
06.01.2008, 21:34
Hallo
Ich bin zwar selbst auf diese Idee gekommen, war aber nicht der erste:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=8153
Viele Infos zu Optimierung des asuros findet man auch im asuro-wiki (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/OdometrieModifikation).
Hier noch ein netter Thread zum Geradeausfahren:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=19948
Gruß
mic
pinsel120866
14.01.2008, 12:01
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?
HAWK-Matze
14.01.2008, 13:30
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
Gerry1973
30.01.2008, 22:46
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.
#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,zaehl er_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;
}
ä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
damaltor
07.02.2008, 19:47
geht auch ohne umbau. :)
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
Gerry1973
15.02.2008, 20:30
Ö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
H3llGhost
27.02.2008, 08:57
[quote=HAWK-Matze]
[...]
#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,zaehl er_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?
damaltor
27.02.2008, 18:11
evtl verschiedene odoscheiben aud den rädern? :)
Gerry1973
27.02.2008, 22:07
Der Rechtsdrall liegt wohl entweder an mechanischen Toleranzen (Durchmesser der Räder) oder die Aufnahme der Signale ist durch das labberige Zahnrad nicht optimal.
Ich hab mein Zahnrad mit ner plattgedrückten Federscheibe, die auf der Welle klemmt, fixiert.
Gerry
also n studienkollege hat mir heute ne ENDGEILE lösung für alle helligkeitsprobleme mit odometrie serviert, er hat 2 alte PC-Lüfter mit Oszi-Ausgang zerlegt, aus den magnetringen 6 stückchen ausgeschnitten, mit 2 unterlegscheiben für den abstand aussen auf die geberscheibe montiert und von hinten die fototransistoren mit dem hall-sensor aus dem lüfter verbunden, jetzt ham wa konstante 0-1024 pegelwechsel (^_^) und die motoren stören auch nicht ... ziemlich billige aber effiziente lösung (^_^)
damaltor
27.02.2008, 23:06
nich schlecht, gute idee...
mikydog89
29.02.2008, 12:04
Haste auch ein Bild davon?
Wäre cool wenn du das mal online stellen könntest.
Case1990
29.02.2008, 17:12
hey...also..
wenn ich bei meinem asuro n odometrie programm draufmach, dann passiert genau des gleiche wie bei dem video:
http://www.youtube.com/watch?v=tW8aXWY6uuU
finds komishc....und weis auch net weiter...wär cool wenn mir jemand weiter helfn kann...THX
PS: unterlegscheibe hab ich schon drangemacht..aber des bringt garnix
pinsel120866
29.02.2008, 18:36
Sieht für mich nach Lesefehlern des Odometriesensors aus. Möglicherweise ein Lötfehler, hast du schon das Odometriemessprogramm versucht?
ok bilder muss ich mal machen .... wo iss nur wieder die scheiss digicam <_< ... ich muss mal zusehen das ich nen 2ten hallsensor auftreibe, bisher hab ich nur einen lüfter zerlegt XD
Case1990
01.03.2008, 17:39
hey....kenn mich da net so aus?...was is des?
also...bei dem selftest...der von anfang an drauf is....da hat bei da odometrie alles super geklappt....also...dass die status led einmal rot leuchtet...auf der anderen seite grün....
gruß
damaltor
02.03.2008, 19:46
beschreib...mal...dein...problem...genau...
dann können wir dir bestimmt helfen... aber nicht puschen ;)
Bei uns pendelt der linke Odometriewert zwischen 1014 und 1023 und der rechte zwischen 181 und 761 (jeweils größter bzw. kleinster Wert).
Was bedeutet das? Der Asuro an sich läuft relativ gerade mit einem ganz leichten Linksdrall
pinsel120866
04.03.2008, 19:03
Ich würde meinen dass die Lötstellen, die für die rechte Odometrie verantwortlich sind, kontrolliert werden müssen.
Habt ihr die Odo-Scheiben gegen seitliches Wandern gesichert (z.B. mit einer Beilagscheibe)?
Sind die Schwarz/Weiss Aufkleber in Ordnung?
also ein odometriewert von über 1000 ist utopisch, klingt mir nach ner ungewollten brücke, oder der transistor hat ne macke
Hmm.....was bedeuten diese Werte überhaupt? Ich kann damit garnichts anfangen.
Wir haben nen Satz von 5 Asuros. Die anderen haben Werte zwischen ca. 300 und knapp unter 800 und schwanken dazwischen. Nur dieser eine (und der läuft noch mit am besten!) zeigt für den linken Motor die oben genannten Werte. Haben uns das extra mehrmals ausgeben lassen.
Haben schon mit Unterlegscheiben gearbeitet, das brachte aber weder eine Verbesserung noch eine Verschlechterung. Auch die Aufkleber sind in Ordnung.
radbruch
05.03.2008, 10:40
Hallo
Das sind die gemessen Helligkeitswerte an den Radsensoren. Die Werteschwankungen werden von den Codescheiben erzeugt. Fehler an den Sensoren wirken sich nur aus, wenn man sie im Programm auch verwertet. Vermutlich macht ihr das nicht, deshalb fahren eure asuros ohne Probleme.
Extrem hohe Werte (1023 sind maximal möglich, werden aber in der Praxis nie erreicht) deuten auf einen Hardwarefehler wie schlechte Lötstellen, Lötbrücken oder eher selten auf ein defektes Bauteil hin.
Gruß
mic
btw: Der seltsam kreisende asuro im Video oben hat einen Progammfehler in der Drehzahlregelung. Die berechneten Werte für MotorSpeed() werden nicht begrenzt und deshalb gibt es einen Überlauf des Wertes. Ich kann leider den dazu passenden Thread nicht mehr finden :(
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.