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
97 97 */ 98 98 static uint8 hangon_behaviour_fired=False; 99 99 100 /*! 101 * Kennung ob bereits solve_maze nach einem erfolglosen Planungsversuch gelaufen ist 102 */ 103 static uint8 solve_maze_started=0; 100 104 101 105 /*! Elternposition, d.h. Botposition vor neuer Position */ 102 106 static uint16 x_parent=0; … … 117 121 bot_drive_distance(0,0,-BOT_SPEED_FOLLOW,10);// 10cm rueckwaerts nur bei Hindernis 118 122 } 119 123 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 } 120 134 121 135 // ============= eigenstaendiges Parallelverhalten zum eigentlichen Fahrverhalten ======= 122 136 … … 527 541 528 542 // Pfadplanung hat naechsten anzufahrenden Punk um den Bot ermittelt 529 543 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 } 532 559 } 533 560 // Zwischenziel belegen 534 561 target_x = next_x; … … 776 803 activateBehaviour(bot_avoid_border_behaviour); 777 804 #endif 778 805 806 solve_maze_started=0; // Pfadplaner schon gelaufen init. 779 807 gotoStatexy=DIRECTION_GOAL; // auf Zielfahrt init. 780 808 switch_to_behaviour(caller, bot_gotoxy_behaviour_map, OVERRIDE); // Umschaltung zum Fahr-Verhalten 781 809 } -
C:/eclipse/workspace/ct-Bot/bot-logic/behaviour_solve_maze.c
54 54 #define MEASURE_LEFT 1 55 55 #define MEASURE_RIGHT -1 56 56 57 /* Abbruchfunktion des Verhaltens() */ 58 int8 (*check_function_solvemaze)(void)=0; 57 59 58 60 /*! 59 61 * Das Verhalten dreht sich um 45 Grad in die angegebene Richtung (0=rechts, 1=links) … … 592 594 mazeState=SOLVE_MAZE_LOOP; 593 595 break; 594 596 } 597 /* Pruefen der Abbruchfunktion wenn ueberhaupt definiert */ 598 if(check_function_solvemaze && (*check_function_solvemaze)()) { 599 mazeState=REACHED_GOAL; 600 break; 601 } 602 595 603 /* messen, wo genau die Ecke ist */ 596 604 mazeState=APPROACH_CORNER; 597 605 if (followWall==CHECK_WALL_LEFT){ … … 644 652 * in nicht immer optimaler Weise aber in jedem Fall. Es arbeitet nach dem Hoehlenforscher-Algorithmus. 645 653 * Einschraenkung: Objekte im Labyrinth, die Endlossschleifen verursachen koennen, z.b. ein einzeln 646 654 * 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 647 657 */ 648 658 649 void bot_solve_maze(Behaviour_t *caller ){659 void bot_solve_maze(Behaviour_t *caller,int8 (*check)(void)){ 650 660 LOG_INFO("bot_solve_maze()"); 661 check_function_solvemaze = check; // Abbruchfunktion wird zugewiesen 651 662 switch_to_behaviour(caller, bot_solve_maze_behaviour,NOOVERRIDE); 652 663 } 653 664 -
C:/eclipse/workspace/ct-Bot/include/bot-logic/behaviour_solve_maze.h
38 38 * in nicht immer optimaler Weise aber in jedem Fall. Es arbeitet nach dem Hoehlenforscher-Algorithmus. 39 39 * Einschraenkung: Objekte im Labyrinth, die Endlossschleifen verursachen koennen, z.b. ein einzeln 40 40 * 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 41 43 */ 42 44 43 void bot_solve_maze(Behaviour_t *caller );45 void bot_solve_maze(Behaviour_t *caller,int8 (*check)(void)); 44 46 45 47 /*! 46 48 * Das Verhalten findet seinen Weg durch ein Labyrinth, das nach gewissen Grundregeln gebaut ist -
C:/eclipse/workspace/ct-Bot/Changelog.txt
1 1 CHANGELOG fuer c't-Bot 2 2 ====================== 3 2007-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 3 7 2007-07-19 Timo Sandmann [mail@timosandmann.de]: PC-EEPROM: Bugfix und Doku-Update 4 8 5 9 2007-07-13 Achim Pankalla [achim.pankalla@gmx.de]: PC-EEPROM-Emulation weiter optimiert -
C:/eclipse/workspace/ct-Bot/ui/rc5.c
125 125 #endif 126 126 127 127 #ifdef BEHAVIOUR_SOLVE_MAZE_AVAILABLE 128 case 5: bot_solve_maze(0 ); break;128 case 5: bot_solve_maze(0,0); break; 129 129 #else 130 130 #ifdef BEHAVIOUR_GOTOXY_AVAILABLE 131 131 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 2 eclipse.preferences.version=1 3 indexerId=org.eclipse.cdt.core.fastIndexer
