Absender: Timo Sandmann
Datum: Do, 19.06.2008 15:45:48
In-reply-to:
<48C139945BA47F4DB4DE05DF62CD57AA03B51B4C7F@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References:
<48C139945BA47F4DB4DE05DF62CD57AA03B51B4BB1@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <0C1FE2A6-F027-43FD-9E26-34C6871EBD05@xxxxxxxxxxxxxxx> <48C139945BA47F4DB4DE05DF62CD57AA03B51B4C7F@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Hallo, Am 19.06.2008 um 15:00 schrieb Menzel, Frank IT-OO4:
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 344math_utils.c(84) - DEBUG - Rueckgabe diff: 21math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -338 heading 6 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 22 heading 6 angle 344math_utils.c(84) - DEBUG - Rueckgabe diff: 22math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -338 heading 7 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 22 heading 7 angle 344math_utils.c(84) - DEBUG - Rueckgabe diff: 22math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -338 heading 7 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 22 heading 7 angle 344math_utils.c(84) - DEBUG - Rueckgabe diff: 22math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -336 heading 8 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 24 heading 8 angle 344math_utils.c(84) - DEBUG - Rueckgabe diff: 24math_utils.c(72) - DEBUG - pos. Sinn diff ergibt: -336 heading 8 angle 344 math_utils.c(82) - DEBUG - Ueberlauf diff 24 heading 8 angle 344math_utils.c(84) - DEBUG - Rueckgabe diff: 24math_utils.c(76) - DEBUG - neg. Sinn diff ergibt: 336 heading 8 angle 344math_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.
ja, das ist aus Sicht der Funktion turned_angle() auch richtig. Wie in der Doku steht, gibt sie zurück: "Winkeldifferenz [Grad] in Richtung der derzeitigen Botdrehung." und das ist im o.a. Fall dann 336 Grad. Klar, das möchtest du hier gar nicht haben, aber die Funktion kann ja nicht wissen, dass sich der Bot seit dem letzten Aufruf gar nicht um 336 Grad gedreht hat. Ändert der Bot seine Drehrichtung, kann die Funktion mit einem Startwinkel aus der Zeit, wo sich der Bot andersherum drehte, natürlich kein korrektes Ergebnis mehr liefern. Zur Berechnung der Drehrichtung wird die aktuelle Geschwindigkeit der Räder herangezogen. Bei einem Richtungswechsel müsste die Funktion mit neuem Startwinkel aufgerufen werden.
Eine Alternative wäre, dass sich die Funktion das letzte Ergebnis merkt und nur die Änderung seit dem letzten Aufruf addiert, dann könnte sie aber nur noch exklusiv benutzt werden. Andere Möglichkeit (so war das eigentlich mal gedacht): Das Verhalten merkt sich heading vom letzten Aufruf und verwendet das für den nächsten Aufruf als angle. Dann liefert die Funktion die relative Änderung des Drehwinkels und das Verhalten bildet die Summe darüber. Wobei es dann vielleicht sinnvoll wäre, wenn eine Drehung im negativen Sinn auch als negativer Wert zurückgegeben wird und nicht immer in Richtung der aktuellen Drehung. Dann müsste man aber halt mit abs() arbeiten, wenn man die Richtung gar nicht wissen will.
Gruß Timo