Regelung fürs Geradeausfahren
Hallo!
Ich bin schon eine Weile dabei, daran zu basteln, dass mein Asuro endlich gerade aus fährt. Nach einigen Misserfolgen (vor allem bei der Geschwindigkeitsmessung) bin ich jetzt zumindest so weit, dass ich so ca. die Geschwindigkeit messen kann.
Dann wollt ich was schreiben, dass die beiden Geschwindigkeiten immer gleich geregelt werden. Ich kenn mich leider bei Regelungen nicht sonderlich gut aus, deswegen hab ich mal nur ein Programm geschrieben, was mir die Leistungen von einem Rad erhöht und von anderen erniedrigt(Also wenn das linke schneller ist => links weniger Leistung und rechts mehr Leistung) Hab mir dann die Geschwindigkeiten in LabView ausgeben lassen und halt aufzeichnen lassen. Das Ergebnis ist nicht zufriedenstellend. Ich wollt jetzt fragen ob da wer einen besseren Vorschlag zur Regelung hat. Danke schon mal!
mfg theodrin
Hab jetzt gscheite Regelungen benutzt
Hallo!
Ich hab jetzt einmal einen PI-Regler programmiert und einen PID-Regler. Bin mit dem Ergebnis vom PI-Regler eigentlich überrascht worden. Das hat recht gut funktioniert. Ich hab da so eine kleine Teststrecke von 8 Meter Länge und 1 Meter Breite. Da wollte ich halt das mein Asuro durchkommt ohne an die Seitenwände anzustoßen. Mitn PI-Regler hab ichs eigentlich oft geschaft. Also bei 3 Versuchen hab ichs immer einmal geschaft. Da hab ich mich gleich recht gut gefreut. Dumm war nur dass am Anfang immer ein Rad schneller war als das andere. Das hab ich nicht wegbringen können. Aber dann ist er eigentlich ziemlich schön gelaufen. Nicht immer exakt gerade, leicht geschwenkt, aber er hat den Korridor geschafft. Die Versuche wo er es nicht geschafft hat, ist er meistens bei 5-6 Metern angefahren.
Mitn PID-Regler ist es eigentlich schlechter gegangen, aber vielleicht muss ich da noch die Werte der Regelung ändern. Da hat er es nur mehr 1 mal bei 4-5Versuchen geschafft. Sonst ist er auch so bei 5 Metern gescheitert. Selten ist er ganz dumm gefahren.
Ich werd jetzt morgen das Programm vom Henk probieren. Schauen wir mal was sich da tut.
Ach übrigens: Ich hätte gerne wenn mir jemand bei meiner Geschwindigkeitsbestimmung hilft. Ich vertrau der nämlich nicht ganz. Sie funktioniert nur von einem Leistungsbereich von 130-190 richtig. Ich könnts sie euch mal zeigen. Vielleicht habt ihr bessere, oder könnt mir bei meiner helfen, dass sie "immer" geht.
mfg theodrin
Leider hat dein geradeausfahrprogramm nicht funktioniert
Hallo Henk!
Dein Geradeausfahrprogramm hat leider nicht funktioniert. Es hat zwar so ausgeschaut als würde er versuchen zu regeln, aber es war immer ein Rad schneller als das andere, aber konstant. Also hat dein Programm bei mir einen konstanten Fehler programmiert. Tut Leid, aber so hab ich meine Teststrecke nicht überwinden können. Da hat meine PI-Regelung noch etwas besser funktioniert. Aber das kann ja daran liegen, dass du vielleicht konstante Werte da reinprogrammiert hast, die nur auf deinen Asuro zutreffen. Vielleicht gehörten die bei mir geändert. Na ich schau mal ob ich mit meinem Regelprogramm weiterkomme.
mfg theodrin
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo theodrin,
dass ist ja Schade....
Mmmm....
Dass Program ist geeignet fur Asuro mit Odorader mit 6 Schwarz/Weiss flachen.
Da sich beim fahren die Odowerte durch wechselndes Umgebungslicht andern benutze ich ein festes durch experimentieren gefundene hysteresis von 40 Odowerte. Dass heisst, die hochste und niedrigste Odowerte bei jedem vorbeigehendes Odoflach wird gespeichert. Bewegt sich die momentane gemessene Wert kleiner als aximum-minus-40 oder grosser als minumum-plus-40 dann wird dass wie ein gultiges weiss/schwarz oder schwarz/weiss ubergang interpretiert.
Aber jetzt kommt's:
Weil sich die Odorader durch dass hin und her gleiten auf die Axen naher-an und weiter-weg vom infrarot systeem bewegen andert sich die gemessene Odowert so um die 300 !!!
Da muss ich mein ganzes Prinzip vielleicht uber bord schmeissen.
Meine Asuro fahrt vermutlich ganz gut weil ich die Infrarot Sender und Empfanger umgebogen habe damit die infrarot Strahlung besser ausgerichtet ist und die gemessene Werte weiter aus einander liegen.
Aber daruber bin ich mich noch nicht sicher.
Meine Asuro Odowerte sind: (im Halbschatten):
- Linkerrad weiss naher/weiter 50/400
Linkerrad schwarz naher/weiter 750/750
Rechterrad weiss naher/weiter 35/280
Rechterrad schwarz naher/weiter 615/645
Da sieht mann dass gleiten uber die Axe die reflektierung vom weissen Flach erheblich beeinflusst.
Vielleicht sollte die Hysteresis grosser sein.
Kannst Du vielleicht mal deine min/max odowerte schicken? (program auf meinen Homepage) und dann die 4 Werte posten so wie ich die ach gemessen habe?
Wenn dein Program fertig ist mochte ich es auch mal testen.
Gruss
Hab ein ganz anderes Prinzip gewählt
Hallo Henk!
War grad fort. Mittagessen und für die Schule lernen. Das muss man auch mal machen. Ich hab mir gerade deine Messung durchgelesen und musste an meine Versuche denken.
Ich hab auch mal so gemessen wie du, zwar nicht so genau, eher einfacher.
Das hat nie funktioniert wenn sich die Helligkeitswerte geändert haben. Ich hab immer den Asuro auf so etwas gestellt, damit die Räder den Boden nicht berühren und dann hab ich getestet. Auf dem Prüfstand hat es immer toll funktioniert, aber wie ich auf dem Boden gefahren bin, ist Blödsinn rausgekommen.
Da hab ich gewusst, dass die geänderten Helligkeitswerte schuld sein müssen. Also hab ich vor jeder Geschwindigkeitsmessung Helligkeitswerte gemessen und so wusste halt mein Asuro wann grad weiß und schwarz ist. Das hätte super funktioniert, nur war dann meine Geschwindigkeitsmessung viel zu langsam. Bevor ich einmal die Geschwindigkeit gemessen habe, ist Asuro schon mindestens 35-40cm falsch gefahren. Wenn ich nur 50cm Platz habe ist das ungenügend.
Dann wollte ich die Geschwindigkeit mit den Flanken messen. Das hat nicht funktioniert.
Jetzt mess ich die Geschwindigkeit ganz anders. Ich nehm in einem Feld 100 Odowerte auf und speichere sie dort. Dann schau ich mir einen Wert an und die darauf folgenden. Z.B: Wert 1 und Wert 10-Wert 15 vergeicht er dann. So in etwa. Dann schaut er ob sich dabei die Werte über einer bestimmten Grenze geändert hat. Die bleibt ja so ungefähr gleich, egal ob hell oder dunkel. Dann schaut er wie viele SchwarzeißÜbergänge stattgefunden haben.
Es ist nicht perfekt, dass wusste ich von Anfang an, aber ich war nach drei falschen(eine Methode hab ich noch probiert) eine Trotz-Methpde, von der ich nicht viel erwartet habe. Aber von Leistung 130-190 funktioniert die Geschwindigkeitserfassung und darüber und darunter seltsamerweise nicht.
Code:
#define ANZ 100
#define ABT 2
while(tsys<650)
//Ein mal abtasten ca.200, 2mal ca.500, dreimal ca. 650, usw.
{
ta=Gettime(); //Zeitmessung Anfang
for(i=0; i<ANZ; i++) //Beginn Werte in Feld einzulesen
{
Msleep(2);
OdometrieData(dataodo);
feldlinks[i]=dataodo[0];
feldrechts[i]=dataodo[1];
}
te=Gettime();
t=te-ta;
for(i=0;i<=(ANZ-ABT); i++) //Schwarz-Weiß-Messung
{
ists=uebertraglinks;
uebertraglinks=0;
for(a=0;a<=ABT; a++)
{
abweichung=feldlinks[i]-feldlinks[i+a];
if(abweichung > 100 || abweichung < -100)
{
ists++;
}
if(ists >= (ABT))
{
flankelinks++;
i=i+ABT;
ists=0;
}
}
if(i==(ANZ-ABT))
{
uebertraglinks=ists;
}
ists=0;
}
for(i=0;i<=(ANZ-ABT); i++)
{
istsr=uebertragrechts;
uebertragrechts=0;
for(a=0;a<=ABT; a++)
{
abweichungr=feldrechts[i]-feldrechts[i+a];
if(abweichungr > 100 || abweichungr < -100)
{
istsr++;
}
if(istsr >= (ABT))
{
flankerechts++;
i=i+ABT;
istsr=0;
}
}
if(i==(ANZ-ABT))
{
uebertragrechts=istsr;
}
istsr=0;
}
vl=((flankelinks*60000)/t)/40;
vr=((flankerechts*60000)/t)/40;
flankelinks=0;
flankerechts=0;
tse=Gettime();
tsys=tse-tsa;
}
Vielleicht kannst du ihn verbessern, oder mir sagen, dass er doch Müll ist, aber er funktioniert teilweise wie gesagt.
bis später
mfg theodrin
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
@theodrin
- Vielleicht kannst du ihn verbessern, oder mir sagen,
dass er doch Müll ist, aber er funktioniert teilweise wie gesagt.
ich mochte gerne etwas mehr Kommentar dazu lesen...
irgendwo scheint mir dein Program etwas zu kompliziert
Du schreibst: drei Methoden, ich bin jetzt bei 15 oder 16...;-)
Bei jedem Methode lernt sich wieder etwas neues.
@waste
Ich hab dein Program ausprobiert.
Da fahrt die Asuro erstaunlicherweise gerade.
Interessant, wenn mann dass eine Rad mehr oder
weniger blokkiert dreht sich dass andere Rad
gleich langsamer!
Finde dass ein einfaches robustes Program.
Aber wenn der Asuro an das Fenster heran kam
hort er auf gerade zu fahren.
Dein Program arbeitet mit festen vergelichswerte
fur die Odometrie. Da sollte vielleicht noch
etwas variabeles dazu kommen.
@jeden
Ich mochte meinen Prinzip noch mal besser studieren.
Ich mochte gerne wissen warum meine Odometriemessung
z.B. bei theodrin nicht geklappt hat.
Wenn ihr wollt, ladet mal mein neues test Program
dass hier zugefugt ist und schick mir bitte eure
Odometrie daten.
Dass zugefugte Program macht folgendes:
- Asuro startet mit ein durchschnitt geschwindigkeit
- nach 1 Sekunde fahren messt er 250 mal beide odometriewerte
(jeden millisekunde) Die messung daurt 0,25 Sekunde
- Asuro haltet
- startet Hyperterminal
- drucke auf eine beliebige Asuro Taste
- Asuro sendet die gemessene Daten zum Hyperterminal
Schick mir mal bitte die Daten.
Die gemessene Werte sind die 8 hochsten bits vom
10 bit Werte. So Werte von 0 bis 255 werden erscheinen.
Mit Microsoft Excel kann mann dann einfach ein Grafik
daraus machen.
Oder gucke sonst auf meine website. Dort kan
mann dass Program bekommen und meine
Grafiken anschauen.
http://home.planet.nl/~winko001/index.htm
(Logging Odometer values to Hyperterminal)
Ich hab eine Grafik versucht hier zu zu fugen.
Gruss
Henk