## c't-Projekte - Mailinglisten

[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

### RE: [ct-bot] turned_angle() fehlerhaft ?

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

- Antworten:
  - Re: [ct-bot] turned_angle() fehlerhaft ?
    - From: Timo Sandmann

- Referenzen:
  - [ct-bot] turned_angle() fehlerhaft ?
    - From: Menzel, Frank IT-OO4
  - Re: [ct-bot] turned_angle() fehlerhaft ?
    - From: Timo Sandmann

- Voriger (Datum): Re: [ct-bot] bot-2-bot-Kommunikation -> Senden der Stackdaten, Timo Sandmann
- Nächster (Datum): Re: [ct-bot] turned_angle() fehlerhaft ?, Timo Sandmann
- Voriger (Thread): Re: [ct-bot] turned_angle() fehlerhaft ?, Timo Sandmann
- Nächster (Thread): Re: [ct-bot] turned_angle() fehlerhaft ?, Timo Sandmann
- Indizes:
  - Datum
  - Thread