Wie gesagt, probier es einfach mal aus.
Die aktuelle Strecke kannst du definitiv auslesen, beim Winkel weiß ich es gerade nicht.
Ansonsten lässt den RP6 immer fest vorgegeben 45° drehen oder so und machst das dann paar mal hintereinander.
Wie gesagt, probier es einfach mal aus.
Die aktuelle Strecke kannst du definitiv auslesen, beim Winkel weiß ich es gerade nicht.
Ansonsten lässt den RP6 immer fest vorgegeben 45° drehen oder so und machst das dann paar mal hintereinander.
Zu dem Auslesen der Strecke hab ich was in der Lib.c gefunden:
Ich denke, das müsste es sein, oder? Dann kann ich einfach zu Beginn eines Fahr-Vorgangs mleft_dist und mright_dist auf Null setzen und danach auslesen, ins Array schreiben und Koordinaten berechnen?!?!?!Code:/*****************************************************************************/ // Encoders // Timing variable used for speed calculation: volatile uint8_t speed_timer; // Speed measurement variables volatile uint16_t mleft_counter; volatile uint16_t mright_counter; volatile uint16_t mleft_speed; volatile uint16_t mright_speed; // Distance volatile uint16_t mleft_dist; volatile uint16_t mright_dist; // This is only used for the selftest program. // You don't need this for your own programs! #ifdef DEBUG_MEASURE_DUTY_CYCLE volatile uint16_t cycle_h_l; volatile uint16_t cycle_l_l; volatile uint16_t cycle_h_r; volatile uint16_t cycle_l_r; volatile uint8_t cycle_h_l_tmp; volatile uint8_t cycle_l_l_tmp; volatile uint8_t cycle_h_r_tmp; volatile uint8_t cycle_l_r_tmp; #endif /** * External Interrupt 0 ISR * (ENCL) * */ ISR (INT0_vect) { mleft_dist++; mleft_counter++; // Only used for selftest program: #ifdef DEBUG_MEASURE_DUTY_CYCLE if(isEncoderLeft()) { cycle_l_l = cycle_l_l_tmp; cycle_l_l_tmp = 0; } else { cycle_h_l = cycle_h_l_tmp; cycle_h_l_tmp = 0; } #endif }
MfG
Korrekt. Anhand der unterschiedlichen Strecken könnte man sich übrigens auch mit etwas Mathe den Winkel ausrechen![]()
Meinst du jetzt, dass ich mir nach einem Drehmanöver den gedrehten Winkel berechne? Dafür gibts glaube ich auch schon vorgefertigte Funktionen für rotate etc.
Oder meinst du, dass ich mir nur die gesamt gefahrenen Strecken der linken und rechten Kette ansehe, durch die Differenz aus beiden auf den Winkel schließe? Das ginge glaube ich nicht...
Kann der RP6 Trigonometrie?
Ohne allzu viel drüber nachzudenken müsste man anhand der gefahren Strecke WÄHREND dem Drehen (auf der Stelle) über ein paar Kreisfunktionen auch den Winkel berechnen können.
Ist mir aber jetzt zu spät dafürdu hast ja dann quasi eine Strecke auf einer Kreisbahn, also einen Kreisabschnitt. Damit kann man eigentlich auch den entsprechenden Winkel berechnen.
Jojo, das geht. Danke Dir!!!
Werd das schon hinbekommen
Was ich aber noch nicht weiß: Wie schauts mit Sinus, Cosinus und Tangens aus? Die bräuchte ich um mit Strecke und Winkel einen x- und y-Koordinaten zu berechnen...
Bis denne...
Fabian
Ich hatte es schon mal angesprochen...
http://www.nongnu.org/avr-libc/user-...avr__math.html
Die Lib gehört zum gcc
Sind Sie auch ambivalent?
Hallo
Vom Ansatz her wohl gar nicht schlecht. Wenn ich mich recht erinnere, dann beträgt die Abweichung von der Geraden bei geregeltem moveAtSpeed() ca. 10 bis 20 cm auf 2m. Ursache dafür ist aber nicht nur der Schlupf, auch die sehr einfache Regelung der Geschwindigkeit ohne Berücksichtigung der Lage spielt da rein. Ein (von mir nicht getesteter) PID-Ansatz wurde hier beschrieben: http://www.arexx.com/forum/viewtopic...9&t=630&p=5572Nun ja, da ich das ganze in einem Raum mit rutschfestem, gleichmäßigem Boden mache, denke ich, dass sich der Schlupf der Ketten gering hält. ... Der Einfachheit halber werde ich zunächst nur geradeaus fahren und mich auf der Stelle Drehen.
Was würde eigentlich passieren, wenn zwischen Antriebsriemen und Boden kein Schlupf mehr auftreten würde? Der RP6 würde schnurrgeradeaus düsen. Eine Kurve oder gar eine Drehung auf der Stelle wäre aber unmöglich. Deshalb brauchen wir den Schlupf zum Drehen, aber leider können wir nicht sagen, wo er auftritt, bzw. wo letzlich der Drehpunkt ist.
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!
Lesezeichen