## c't-Projekte - Mailinglisten

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

### Re: [ct-bot] neues Verhalten bot_drive_line_shortest_way...

Absender: Timo Sandmann
Datum: Mi, 07.01.2009 01:15:16
In-reply-to: <000001c965ae$2c0f39c0$0300a8c0@mexpnew>
References: <000001c965ae$2c0f39c0$0300a8c0@mexpnew>

    Hi Frank,

`ich habe das Verhalten jetzt mal genauer angeschaut und im Moment zwei` `Bugs bzw. Probleme:` `1. Nach erfolgreicher Zielankunft und Start von shortest_way_forward()` `ab Start-Position (0 | 0) dreht sich der Bot endlos auf dem ersten` `Grünen Feld.`

    Zur Verdeutlichung hiervon ein kleines Video:
    http://www.heise.de/ct/projekte/machmit/ctbot/browser/galery/line_shortest_way_bug1.mov?rev=1529&format=raw

`Wenn ich den Bot dann manuell etwas nach oben verschiebe, läuft das` `Verhalten weiter, findet allerdings das Ziel nicht mehr (siehe Video).` `Durch das manuelle Anschieben stimmt natürlich die vom Bot selbst` `gemessene Position nicht mehr ganz, aber eine so kleine Abweichung in` `X-Richtung darf das Verhalten eigentlich nicht aus dem Konzept` `bringen, denn auf dem echten Bot stimmt die gemessene Position ja nie` `so ganz exakt mit der Wirklichen überein. Kleine Abweichungen sollten` `das Verhalten nicht stören, sonst wird es dort nie so richtig` `funktionieren. Es kann aber auch sein, dass die falsche Route nichts` `mit der Verschiebung zu tun hat, ist nur eine Vermutung.`

    Das LOG zum Video von Bug 1 ist im Anhang.

`2. Zum weiteren Testen habe ich das störrische Grüne Feld direkt nach` `dem Start einfach mal entfernt, dann hakt es aber an anderer Stelle` `durch endloses hin- und her Gedrehe, hierzu auch ein Video:`

    http://www.heise.de/ct/projekte/machmit/ctbot/browser/galery/line_shortest_way_bug2.mov?rev=1529&format=raw

`Außerdem noch eine Frage: Das Verhalten verwendet jetzt nicht das` `Linienfolger-Verhalten, sondern hat im Kern eine Kopie davon, warum?` `Es wäre ja sehr elegant, wenn zur Linienverfolgung auf den Standard-` `Linienfolger zurückgegriffen würde und die Kreuzungen / Enden usw. zu` `einem Abbruch via cancel_behavior() führten. Gab's da Probleme mit der` `Umsetzung, oder warum hast du in das Verhalten noch mal den` `Linienfolger mit eingebaut?`

    Gruß,
    Timo

    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  0
    behaviour_line_shortest_way.c(336)	- DEBUG -	>> X ist neu vorw. und Push, counter 1
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  0
    behaviour_line_shortest_way.c(336)	- DEBUG -	>> X ist neu vorw. und Push, counter 1
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 163 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  0
    behaviour_line_shortest_way.c(336)	- DEBUG -	>> X ist neu vorw. und Push, counter 1
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 1023 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  1
    behaviour_line_shortest_way.c(324)	- DEBUG -	---X vom Stack nehmen wg. back 1 counter 2
    behaviour_line_shortest_way.c(328)	- DEBUG -	wieder push, back 0 counter 2
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 1023 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  1
    behaviour_line_shortest_way.c(324)	- DEBUG -	---X vom Stack nehmen wg. back 1 counter 3
    behaviour_line_shortest_way.c(328)	- DEBUG -	wieder push, back 0 counter 3
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 1023 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  1
    behaviour_line_shortest_way.c(324)	- DEBUG -	---X vom Stack nehmen wg. back 1 counter 4
    behaviour_line_shortest_way.c(330)	- DEBUG -	X wird vergessen-irrelevant
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  1
    behaviour_line_shortest_way.c(324)	- DEBUG -	---X vom Stack nehmen wg. back 1 counter 2
    behaviour_line_shortest_way.c(328)	- DEBUG -	wieder push, back 0 counter 2
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 259 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  1
    behaviour_line_shortest_way.c(324)	- DEBUG -	---X vom Stack nehmen wg. back 1 counter 3
    behaviour_line_shortest_way.c(328)	- DEBUG -	wieder push, back 0 counter 3
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  0
    behaviour_line_shortest_way.c(336)	- DEBUG -	>> X ist neu vorw. und Push, counter 1
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(212)	- DEBUG -	Ziel erreicht und Ende
    behaviour_line_shortest_way.c(441)	- DEBUG -	Ende Behav. l/r 545 975
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 545 545
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 545 68
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 545 545
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 545 68
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 545 545
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 545 68
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 545 545
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 1023 927
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 68 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  1
    behaviour_line_shortest_way.c(340)	- DEBUG -	Stack abfahren und Richtung aus Stack
    behaviour_line_shortest_way.c(358)	- DEBUG -	nach rechts
    behaviour_line_shortest_way.c(411)	- DEBUG -	X Richtg. 1
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 1023 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  1
    behaviour_line_shortest_way.c(340)	- DEBUG -	Stack abfahren und Richtung aus Stack
    behaviour_line_shortest_way.c(362)	- DEBUG -	nach links
    behaviour_line_shortest_way.c(411)	- DEBUG -	X Richtg. 3
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 927 1023
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 68 1023
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  1
    behaviour_line_shortest_way.c(340)	- DEBUG -	Stack abfahren und Richtung aus Stack
    behaviour_line_shortest_way.c(358)	- DEBUG -	nach rechts
    behaviour_line_shortest_way.c(411)	- DEBUG -	X Richtg. 1
    behaviour_line_shortest_way.c(424)	- DEBUG -	etwas vor nach Dreh l/r 1023 1023
    behaviour_line_shortest_way.c(218)	- DEBUG -	auf Gruen Umkehr
    behaviour_line_shortest_way.c(435)	- DEBUG -	etwas vor after green l/r 68 927
    behaviour_line_shortest_way.c(247)	- DEBUG -	beide zugeschlagen und vor!!!
    behaviour_line_shortest_way.c(309)	- DEBUG -	vor turn 90 l/r 1023 1023,way_back  1
    behaviour_line_shortest_way.c(340)	- DEBUG -	Stack abfahren und Richtung aus Stack
    behaviour_line_shortest_way.c(349)	- DEBUG -	kein Pop moeglich
    behaviour_line_shortest_way.c(441)	- DEBUG -	Ende Behav. l/r 1023 1023

    Am 24.12.2008 um 10:58 schrieb Frank Menzel:

>     Hallo,

> `in letzter Zeit ist es etwas scheinbar etwas ruhiger in der` `Mailingliste` `geworden. So möchte ich pünktlich zu Weihnachten diese Ruhe etwas` `stören`

>     und mein neues Verhalten bot_drive_line_shortest_way vorstellen.
>     Hier die Beschreibung laut Programmtext:
>     /*!
>     * @file    behaviour_drive_line_shortest_way.c
>     * @brief   Linienverfolger, der an Kreuzungen eine bestimmte
>     Vorzugsrichtung einschlaegt (links) und diesen Weg weiterverfolgt, bis
>     das Ziel

> `* (gruenes Feld an Wand) gefunden ist; Linien muessen immer` `an`

>     einem gruenen Feld ohne Hindernis enden, damit der botein Ende erkennt
>     und
>     *          umdrehen kann
>     *          Die Kreuzungen und der eingeschlagene Weg werden auf dem
>     Stack vermerkt, Wege die nicht zum Ziel fuehren vergessen; Am Ziel
>     angekommen
>     *          steht im Stack der kuerzeste Weg; Es kann nun via Display

> `auf dem kuezesten Weg zum Ausgangspunkt zurueckgefahren werden oder` `der`

>     Bot wieder
>     *          manuell an den Start gestellt werden und das Ziel auf
>     kuerzestem Weg angefahren werden
>     * @author Frank Menzel (Menzelfr@xxxxxx)
>     * @date    21.12.2008
>     */

> `Anbei auch der Parcour, mit dem das Verhalten funktioniert. Auf dem` `zum`

>     Verhalten gehörenden Screen kann mit Taste 5 (GoLine) das Verhalten
>     gestartet werden, der Bot fährt vorwärts zur Linie und weiter via

> `Linienverfolger. An einer Kreuzung angekommen schlägt er den linken` `Weg` `ein und erforscht so alle Wege und Möglichkeiten zum Ziel zu kommen.` `Das`

>     Ziel ist das rechte grüne Feld an der Wand (Zieldefinition Grün vor
>     Wand). Eine Linie endet an einem grünen Feld, wo der bot dann umkehrt
>     und zur Kreuzung zurückfährt und dann wieder den linken Weg nimmt. Die
>     Kreuzungen und die relativen Pfadabbiegungen werden auf den Stack
>     gespeichert. Eine Kreuzung, wo alle Wege ins Nichts führen, wird
>     vergessen, da diese irrelevant ist zur Zielfindung. So am Ziel
>     angekommen stehen im Stack nur noch alle Kreuzungen und Richtungen

> `direkt zum Ziel, der kürzeste Weg ist somit gefunden. Falls auf dem` `Weg` `dorthin die Linie verloren wird, kann der Bot manuell wieder richtig` `auf`

>     die Linie gesetzt werden und mit Taste 6 (Continue) das Verhalten an
>     dieser Stelle weitergeführt werden.
>     Am Ziel kann der Bot den nun feststehenden kürzesten Weg wieder zum
>     Ausgangspunkt zurückfahren via Taste 9 oder man stellt den Bot manuell
>     wieder an den Ausgangspunkt und mit Taste 8 geht’s direkt wieder zum
>     Ziel, d.h. an den Kreuzungen wird in die richtige Richtung direkt zum
>     Ziel abgebogen.
>     Ich habe Grün im Programm festgelegt, weil diese Farbe gut im Simu
>     darstellbar ist, kann aber auf die eigene gewünschte Farbe im Prog
>     festgelegt werden. Als Ziel gilt diese Farbe und dahinter Wand.

> `Als Erweiterungen könnte man später auch die die T-Kreuzungen` `erkennen,`

>     würde aber hier erst einmal höheren Aufwand bedeuten. Auch könnte man

> `den kürzesten Weg, der sich ja bei Zielankunft im Stack befindet,` `einem` `2. Bot senden via bot2bot-Kommunikation (wenn dies mal so möglich` `ist),` `der sich am Startpunkt des 1. Bots befindet und nun den Weg des 1.` `Bots` `abfährt. Nach Abfahren des Stacks (vorwärts oder rückwärts) ist hier` `der` `Stack wieder leer, so könnte man auch verlustlos den abfahren um` `diesen`

>     zu erhalten bzw. die Kreuzungen einfach erneut pushen.
>     Erst einmal so weit. Ich hoffe, in Kürze eine Doku nachreichen zu
>     können.

>     Gruß, Frank

> `<` `shortest_way_patch.txt>_______________________________________________`

>     ct-bot-entwickler Mailingliste
>     ct-bot-entwickler@xxxxxxxxxxxxxxxxx
>     http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler

- Antworten:
  - AW: [ct-bot] neues Verhalten bot_drive_line_shortest_way...
    - From: Frank Menzel
  - [ct-bot] ATmega644 oder ATmega644P??
    - From: Fred Ammann

- Referenzen:
  - [ct-bot] neues Verhalten bot_drive_line_shortest_way...
    - From: Frank Menzel

- Voriger (Datum): Re: [ct-bot] neues Verhalten bot_drive_line_shortest_way..., Timo Sandmann
- Nächster (Datum): AW: [ct-bot] neues Verhalten bot_drive_line_shortest_way..., Frank Menzel
- Voriger (Thread): Re: [ct-bot] neues Verhalten bot_drive_line_shortest_way..., Timo Sandmann
- Nächster (Thread): AW: [ct-bot] neues Verhalten bot_drive_line_shortest_way..., Frank Menzel
- Indizes:
  - Datum
  - Thread