heise online
  • c't
  • iX
  • Technology Review
  • Mac & i
  • mobil
  • Security
  • Netze
  • Open Source
  • Developer
  • c't-TV
  • Download
  • Telepolis
  • Resale
  • Foto
  • Autos
  • Preisvergleich
  • Stellenmarkt
  • Abo
  • weitere Angebote
    • Shop
    • Artikel-Archiv
    • Veranstaltungen
    • Whitepapers
    • heise-marktplatz
    • IT-Markt
    • Tarifrechner
    • Jobs bei Heise

c't Magazin
  • Startseite
  • Artikel
  • c't-Projekte
  • Hotline & FAQ
  • Treiber & mehr
  • Kolumnen
Software zu Projekten Allgemeine Hinweise
Archiv-Suche Newsletter RSS-FeedRSS

c't › c't-Projekte

Trac
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Back to Patches

Patches: solve_maze_cancel.patch

File solve_maze_cancel.patch, 7.0 KB (added by ip, 5 years ago)
  • C:/eclipse/workspace/ct-Bot/bot-logic/behaviour_map_go_destination.c

     
    9797 */ 
    9898static uint8 hangon_behaviour_fired=False; 
    9999 
     100/*! 
     101 * Kennung ob bereits solve_maze nach einem erfolglosen Planungsversuch gelaufen ist 
     102 */ 
     103static uint8 solve_maze_started=0; 
    100104 
    101105 /*! Elternposition, d.h. Botposition vor neuer Position */ 
    102106static uint16 x_parent=0; 
    … …  
    117121        bot_drive_distance(0,0,-BOT_SPEED_FOLLOW,10);// 10cm rueckwaerts nur bei Hindernis       
    118122} 
    119123 
     124/* Abbruchbedingung fuer den Wandverfolger solve_maze; ist laut Map der Weg zum Ziel frei, dann 
     125 * wird solve_maze beendet 
     126 */ 
     127 int8 stop_if_way_free(void) { 
     128        // bei freier Fahrt zum Endepunkt Loesen von Wand 
     129        if (map_way_free_fields(world_to_map(x_pos),world_to_map(y_pos),dest_x_map,dest_y_map)) { 
     130                return True; 
     131        }  
     132   return False; 
     133 } 
    120134 
    121135// ============= eigenstaendiges Parallelverhalten zum eigentlichen Fahrverhalten ======= 
    122136 
    … …  
    527541                                 
    528542                        // Pfadplanung hat naechsten anzufahrenden Punk um den Bot ermittelt                 
    529543            if (next_x==0 && next_y==0) {  // nichts gefunden -> Ende 
    530                                 gotoStatexy=POS_REACHED;  // Kein Ziel mehr gefunden go_path und Schluss  
    531                                 break; 
     544                                if (solve_maze_started==0) { 
     545                                        solve_maze_started=1; 
     546                                        gotoStatexy=DIRECTION_GOAL;  // Pfadplanung vorsehen 
     547                                        // Pfadplanung kommt hier nicht weiter, solve_maze anwerfen-dieses 
     548                                        // laeuft solange bis Weg zum Ziel frei ist oder dieses eben am Ausgang angekommen ist 
     549                                        // dazu wird eine Abbruchfunktion uebergeben; sobald keine Wand mehr zu sehen ist und damit 
     550                                        // an einer Ecke angekommen, wird diese Routine immer durchlaufen; ist laut Map der Weg zum 
     551                                        // Ziel frei, dann liefert die Routine True und solve_maze wird beendet 
     552                                        bot_solve_maze(data,stop_if_way_free); 
     553                                        break; 
     554                                } 
     555                                else {                           
     556                                  gotoStatexy=POS_REACHED;  // Kein Ziel mehr gefunden go_path und Schluss  
     557                                  break; 
     558                                } 
    532559                        }        
    533560            // Zwischenziel belegen  
    534561                    target_x = next_x; 
    … …  
    776803                activateBehaviour(bot_avoid_border_behaviour); 
    777804        #endif   
    778805 
     806    solve_maze_started=0; // Pfadplaner schon gelaufen init. 
    779807    gotoStatexy=DIRECTION_GOAL;  // auf Zielfahrt init. 
    780808        switch_to_behaviour(caller, bot_gotoxy_behaviour_map, OVERRIDE);  // Umschaltung zum Fahr-Verhalten 
    781809} 
  • C:/eclipse/workspace/ct-Bot/bot-logic/behaviour_solve_maze.c

     
    5454#define MEASURE_LEFT                            1 
    5555#define MEASURE_RIGHT                           -1 
    5656 
     57/* Abbruchfunktion des Verhaltens() */ 
     58int8 (*check_function_solvemaze)(void)=0; 
    5759 
    5860/*! 
    5961 * Das Verhalten dreht sich um 45 Grad in die angegebene Richtung (0=rechts, 1=links) 
    … …  
    592594                                mazeState=SOLVE_MAZE_LOOP; 
    593595                                break; 
    594596                        } 
     597                        /* Pruefen der Abbruchfunktion wenn ueberhaupt definiert */ 
     598                        if(check_function_solvemaze && (*check_function_solvemaze)()) { 
     599                            mazeState=REACHED_GOAL;  
     600                                break; 
     601                        } 
     602                         
    595603                        /* messen, wo genau die Ecke ist */ 
    596604                        mazeState=APPROACH_CORNER; 
    597605                        if (followWall==CHECK_WALL_LEFT){ 
    … …  
    644652 * in nicht immer optimaler Weise aber in jedem Fall. Es arbeitet nach dem Hoehlenforscher-Algorithmus. 
    645653 * Einschraenkung: Objekte im Labyrinth, die Endlossschleifen verursachen koennen, z.b. ein einzeln 
    646654 * stehender Pfeiler im Labyrinth um den der Bot dann immer wieder herum fahren wuerde.  
     655 * @param caller Verhaltensdatensatz 
     656 * @param check Funktion, die bei True das Verhalten beendet; bei Uebergabe von 0 endlos  
    647657 */ 
    648658  
    649 void bot_solve_maze(Behaviour_t *caller){ 
     659void bot_solve_maze(Behaviour_t *caller,int8 (*check)(void)){ 
    650660        LOG_INFO("bot_solve_maze()"); 
     661        check_function_solvemaze = check;  // Abbruchfunktion wird zugewiesen 
    651662        switch_to_behaviour(caller, bot_solve_maze_behaviour,NOOVERRIDE); 
    652663} 
    653664 
  • C:/eclipse/workspace/ct-Bot/include/bot-logic/behaviour_solve_maze.h

     
    3838 * in nicht immer optimaler Weise aber in jedem Fall. Es arbeitet nach dem Hoehlenforscher-Algorithmus. 
    3939 * Einschraenkung: Objekte im Labyrinth, die Endlossschleifen verursachen koennen, z.b. ein einzeln 
    4040 * stehender Pfeiler im Labyrinth um den der Bot dann immer wieder herum fahren wuerde.  
     41 * @param caller Verhaltensdatensatz 
     42 * @param check Funktion, die bei True das Verhalten beendet; bei Uebergabe von 0 endlos  
    4143 */ 
    4244  
    43 void bot_solve_maze(Behaviour_t *caller); 
     45void bot_solve_maze(Behaviour_t *caller,int8 (*check)(void)); 
    4446 
    4547/*! 
    4648 * Das Verhalten findet seinen Weg durch ein Labyrinth, das nach gewissen Grundregeln gebaut ist 
  • C:/eclipse/workspace/ct-Bot/Changelog.txt

     
    11CHANGELOG fuer c't-Bot 
    22====================== 
     32007-07-27 Frank Menzel  [mail@Menzelfr@gmx.net]: Verhalten solve_maze mit Abbruchfunktion versehen; einfach 0 uebergeben wenn es wie bisher endlos laufen soll; 
     4                                                  Abbruchfunktion muss true liefern, wenn Verhalten beendet werden soll; so eingebaut in map_go_destination falls 
     5                                                  Pfadplaner keinen Weg findet, dann solve_maze solange ausgefuehrt bis Weg zum Ziel frei laut Map 
     6 
    372007-07-19 Timo Sandmann [mail@timosandmann.de]: PC-EEPROM: Bugfix und Doku-Update 
    48 
    592007-07-13 Achim Pankalla [achim.pankalla@gmx.de]: PC-EEPROM-Emulation weiter optimiert 
  • C:/eclipse/workspace/ct-Bot/ui/rc5.c

     
    125125                #endif 
    126126 
    127127                #ifdef BEHAVIOUR_SOLVE_MAZE_AVAILABLE 
    128                         case 5: bot_solve_maze(0); break; 
     128                        case 5: bot_solve_maze(0,0); break; 
    129129                #else 
    130130                        #ifdef BEHAVIOUR_GOTOXY_AVAILABLE 
    131131                                case 5: bot_gotoxy(0, 20, 20); break; 
  • C:/eclipse/workspace/ct-Bot/.settings/org.eclipse.cdt.core.prefs

     
     1#Fri Jul 27 19:11:28 CEST 2007 
     2eclipse.preferences.version=1 
     3indexerId=org.eclipse.cdt.core.fastIndexer 

Download in other formats:

  • Original Format

Trac Powered

Powered by Trac 0.11.7
By Edgewall Software.

http://www.ctmagazin.de/
http://www.ctmagazin.de/projekte/

  • Datenschutzhinweis
  • Impressum
  • Kritik, Anregungen bitte an c't-WWW
  • Mediadaten
  • Copyright © 2011 Heise Zeitschriften Verlag
  • International: The H, The H Security, The H Open Source