Andun
03.01.2008, 22:52
Hi
Ich überforde meinen Kleinen schon wieder... Es hat mich heute über 2h gekostet bis ich drauf kam, dass er überfordert ist und ich ihm nicht eine blöde Aufgaben stelle.
Die Idee: Fahre gerade aus bis ich ne Taste drücke und gib mir dann die gefahrene Strecke anhand der Odometrie Werte aus.
Der Code sa in etwa so aus:
EncoderInit()
fahre!
while(1)
taster=Pollswitch;
if(taster) break;
bremse!
Gib encoder[0] aus
Ja, eigentlcih ja ein ziemlich idiotensicheres Programm, aber nach 2m fahren kamen Werte von etwa 10 bis 15 heraus und damit ist eine vernünftige Korrektion der Fahreigenschaften nicht machbar.
Es hat mich 2h gekostet mit vielen kleinen Nebenversuchen drauf zu kommen, dass ich ja mit den ständigen Aufrufen von PollSwitch den ADC-Konverter blockiere und die eigentliche selbstständig im FreeRun Modus laufenden Konvertierungen unterdrücke.
Problem klar?
Des Problems kurze Lösung: Ich lass mir die Encoder-Werte nach 2,5s ausgeben. -> Werte um 480 für encoder[0] bei Tempo 200 in der Luft frei drehend.
Problem langfristig: Ich hab das ganze gebraucht, da ich meinen Asuro einen Parcour nach oben schicke, auf welchem er manchmal anecken kann. Per Tastendruck hab ich das schon abgefangen, aber leider kommt es immer wieder vor, dass er sich so verhakt, dass er sich nicht mehr bewegt, aber auch kein Taster gedrückt ist.
Idee -> Da auch meistens ein Rad dabei blockiert, lässt sich das über die Odometrie erkennen.
Ja, und wie werte ich nun die Odometrie aus während ich ständig auf die Tasten schaue? Hier kommt ihr ins Spiel!!!
Meine Überlegung:
Ich baue in die while(1) eine weitere if(Gettime()>zeit+xyz) ein, so dass ich bei yxz Millisekunden schaue ob eine Taste gedrückt wurde. Dann wird wieder zeit = Gettime() gesetzt und die Schleife läuft weiter.
Sonst läuft er ohne was zu tun durch die while-Schleife durch und darf encoden für die Odometrie.
Irgendwie ist mir nicht sooo wohl bei dem Gedanken, dass der Ausro irgendwas rammt und es erst ein paar Schleifendurchläuft später merkt. Oder meint ihr, dass das "harte" Erkennen von Hindernissen durch die Taster dann eh schon seinen Schaden angerichtet hat und der Asuro steht?
Was habt ihr für Vorschläge für dieses Problem? Wie kann der Asuro alles gleichzeitig schaffen?
Danke
Andun
--- Da ich selbst nicht's passendes über die SuFu gefunden hab, hier mal ein paar Tags, damit man diesen Thread später vielleicht mal besser findet:
Asuro gleichzeitig Odometrie Autoencode encode Tasten PollSwitch[/code]
Ich überforde meinen Kleinen schon wieder... Es hat mich heute über 2h gekostet bis ich drauf kam, dass er überfordert ist und ich ihm nicht eine blöde Aufgaben stelle.
Die Idee: Fahre gerade aus bis ich ne Taste drücke und gib mir dann die gefahrene Strecke anhand der Odometrie Werte aus.
Der Code sa in etwa so aus:
EncoderInit()
fahre!
while(1)
taster=Pollswitch;
if(taster) break;
bremse!
Gib encoder[0] aus
Ja, eigentlcih ja ein ziemlich idiotensicheres Programm, aber nach 2m fahren kamen Werte von etwa 10 bis 15 heraus und damit ist eine vernünftige Korrektion der Fahreigenschaften nicht machbar.
Es hat mich 2h gekostet mit vielen kleinen Nebenversuchen drauf zu kommen, dass ich ja mit den ständigen Aufrufen von PollSwitch den ADC-Konverter blockiere und die eigentliche selbstständig im FreeRun Modus laufenden Konvertierungen unterdrücke.
Problem klar?
Des Problems kurze Lösung: Ich lass mir die Encoder-Werte nach 2,5s ausgeben. -> Werte um 480 für encoder[0] bei Tempo 200 in der Luft frei drehend.
Problem langfristig: Ich hab das ganze gebraucht, da ich meinen Asuro einen Parcour nach oben schicke, auf welchem er manchmal anecken kann. Per Tastendruck hab ich das schon abgefangen, aber leider kommt es immer wieder vor, dass er sich so verhakt, dass er sich nicht mehr bewegt, aber auch kein Taster gedrückt ist.
Idee -> Da auch meistens ein Rad dabei blockiert, lässt sich das über die Odometrie erkennen.
Ja, und wie werte ich nun die Odometrie aus während ich ständig auf die Tasten schaue? Hier kommt ihr ins Spiel!!!
Meine Überlegung:
Ich baue in die while(1) eine weitere if(Gettime()>zeit+xyz) ein, so dass ich bei yxz Millisekunden schaue ob eine Taste gedrückt wurde. Dann wird wieder zeit = Gettime() gesetzt und die Schleife läuft weiter.
Sonst läuft er ohne was zu tun durch die while-Schleife durch und darf encoden für die Odometrie.
Irgendwie ist mir nicht sooo wohl bei dem Gedanken, dass der Ausro irgendwas rammt und es erst ein paar Schleifendurchläuft später merkt. Oder meint ihr, dass das "harte" Erkennen von Hindernissen durch die Taster dann eh schon seinen Schaden angerichtet hat und der Asuro steht?
Was habt ihr für Vorschläge für dieses Problem? Wie kann der Asuro alles gleichzeitig schaffen?
Danke
Andun
--- Da ich selbst nicht's passendes über die SuFu gefunden hab, hier mal ein paar Tags, damit man diesen Thread später vielleicht mal besser findet:
Asuro gleichzeitig Odometrie Autoencode encode Tasten PollSwitch[/code]