Absender: Menzel, Frank IT-OO4
Datum: Do, 19.06.2008 15:00:39
In-reply-to:
<0C1FE2A6-F027-43FD-9E26-34C6871EBD05@xxxxxxxxxxxxxxx>
References:
<48C139945BA47F4DB4DE05DF62CD57AA03B51B4BB1@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <0C1FE2A6-F027-43FD-9E26-34C6871EBD05@xxxxxxxxxxxxxxx>
Hallo, habe mal in der Routine jede Stelle mit Protokollierung versehen und die letzten Ausgaben hier mal angefuegt: math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -339 heading 5 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 21 heading 5 angle 344 math_utils.c(84) - DEBUG - Rueckgabe diff: 21 math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -338 heading 6 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 22 heading 6 angle 344 math_utils.c(84) - DEBUG - Rueckgabe diff: 22 math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -338 heading 7 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 22 heading 7 angle 344 math_utils.c(84) - DEBUG - Rueckgabe diff: 22 math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -338 heading 7 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 22 heading 7 angle 344 math_utils.c(84) - DEBUG - Rueckgabe diff: 22 math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -336 heading 8 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 24 heading 8 angle 344 math_utils.c(84) - DEBUG - Rueckgabe diff: 24 math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -336 heading 8 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 24 heading 8 angle 344 math_utils.c(84) - DEBUG - Rueckgabe diff: 24 math_utils.c(76) - DEBUG - neg. Sinn diff ergibt: 336 heading 8 angle 344 math_utils.c(84) - DEBUG - Rueckgabe diff: 336: Der Ausgangswinkel war 344 Grad und die Routine ist im Linienfolger eingebaut und ruft diese ständig auf. Ach so, alles im Sim. Er dreht die ganze Zeit im Pos. Sinn, bis er bei 8 Grad aktueller Ausrichtung ist und berechnet den richtigen Winkel. Plötzlich ist da eine Drehrichtungskorrektur mit Drehung im neg. Sinn bei gleichem Winkel und ergibt damit anstatt 24 Grad die 336 Grad. Wie gesagt, der bot steht immer noch auf der Linie mit Blick nach oben und hat sich keinesfalls nach unten gedreht. Mit freundlichen Grüßen / best regards Frank Menzel -----Original Message----- From: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of Timo Sandmann Sent: Thursday, June 19, 2008 2:24 PM To: Entwicklung rund um den c't-bot Subject: Re: [ct-bot] turned_angle() fehlerhaft ? Hallo, Am 19.06.2008 um 14:03 schrieb Menzel, Frank IT-OO4: > <snip> > Als Beispiel hier mal einen Wert. Der Bot hat den Merkwinkel von 330 > Grad (mit diesem wird immer wieder die Routine aufgerufen) und hat > jetzt nach Drehung (im neg. Sinn) die Ausrichtung von 4. Die Routine > gibt nun den Differenzwinkel von 326 zurück, was zwar rein > mathematisch stimmt aber nicht während der Drehung. Es müssten 34 > sein, da der Bot sich ab 330 Grad gedreht hat, die 360 mit Überlauf > erreicht wurden und nun weitere 4 Grad, was 34 ergeben. nein, wenn im negativen Sinn gedreht wird, dreht sich der Bot von 330 Grad nach 320 Grad, nach 310 Grad, .... bis 4 Grad, hat sich also um 326 Grad gedreht. Es gibt keinen Überlauf in diesem Fall. Dreht sich der Bot hingegen im positiven Sinn von 330 Grad nach 4 Grad (diesmal mit Überlauf), wird folgender Code ausgeführt: /* Drehung im positiven Sinn */ diff = (int16_t)heading - angle; // im Beispiel: diff = 4 - 330 = -326 if (diff < 0) { /* Ueberlauf */ diff += 360; // im Beispiel: diff = -326 + 360 = 34 } return diff; // im Beispiel: return 34 Gruß Timo _______________________________________________ ct-bot-entwickler Mailingliste ct-bot-entwickler@xxxxxxxxxxxxxxxxx http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler