|
 |
 |
 |
|
|
c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
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 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.
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
|
|
|