c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


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

[ct-bot] drive_area Aenderungen

Absender: Frank Menzel
Datum: Sa, 02.05.2009 20:58:00


Hallo Timo,
habe das drive_area-Verhalten etwas überarbeitet und anbei der Patch
dafür.
Zur Visualisierung und damit Veranschaulichung der Arbeitsweise des
Verhaltens zeichne ich die im Stack gemerkten und dann angefahrenen
Nebenspuren als Linien ein. Ein freier Weg wird Grün, ein nicht freier
Rot und die Linie, die erst einmal nur im Stack gemerkt wird, wird
Schwarz.
Weiterhin gebe ich einige Debugausgaben mehr aus und habe nich ein paar
Bugänderungen und Verbesserungen vorgenommen.
 
Gruß, Frank
Index: C:/eclipse/workspace/ct-Bot/bot-logic/behaviour_drive_area.c
===================================================================
--- C:/eclipse/workspace/ct-Bot/bot-logic/behaviour_drive_area.c	(revision 1583)
+++ C:/eclipse/workspace/ct-Bot/bot-logic/behaviour_drive_area.c	(working copy)
@@ -38,6 +38,7 @@
 #include "math_utils.h"
 #include "pos_store.h"
 #include "log.h"
+#include "command.h"
 #include <math.h>
 #include <stdlib.h>
 
@@ -45,7 +46,7 @@
 
 #define GO_WITH_PATHPLANING  		// auskommentieren, falls ohne Pfadplanung
 
-//#define DEBUG_BEHAVIOUR_AREA		// Schalter fuer Debug-Code
+#define DEBUG_BEHAVIOUR_AREA		// Schalter fuer Debug-Code
 //#define DEBUG_DRIVE_AREA_TIMES	// Schalter fuer Zeitmessungen
 
 
@@ -72,7 +73,7 @@
 #define DIST_AWARD_HAZ  OPTIMAL_DISTANCE
 
 /*! Mindestabstand der Punkte fuer eine gueltige Bahn, welche es zu befahren gilt */
-#define DIST_VALID_QUAD (uint32_t)(150 * 150)
+#define DIST_VALID_QUAD (uint32_t)(140 * 140)
 
 
 /*! Defines zum festlegen, auf welcher Seite des Bots sich die Spur befindet */
@@ -94,7 +95,9 @@
 
 /*! Statusvariable des area-Verhaltens */
 static uint8_t track_state = 0;
+static uint8_t next_behavstate=0;
 
+
 /*! Notfallkennung fuer Abgrund; wird gesetzt in registrierter Notfallroutine */
 static uint8_t border_fired = False;
 
@@ -128,7 +131,26 @@
  * ===== Start der allgemein fuer diese Verhalten notwendigen Routinen ==============
  * ==================================================================================*/
 
+
+#ifdef MAP_2_SIM_AVAILABLE
 /*!
+ * Zeichnet eine Linie von Koordinate from nach to in der Farbe color in die Map ein; 
+ * dient zur Visualisierung der Arbeitsweise des Verhaltens
+ * @param from	Koordinaten des ersten Punktes der Linie
+ * @param to	Koordinaten des zweiten Punktes der Linie
+ * @param color Farbe der Linie: 0=gruen, 1=rot, sonst schwarz
+ */
+void map_draw_line_world(position_t from, position_t to, uint8_t color) {
+	from.x=world_to_map(from.x);
+	from.y=world_to_map(from.y);
+	to.x=world_to_map(to.x);
+	to.y=world_to_map(to.y);
+	command_write(CMD_MAP, SUB_MAP_CLEAR_LINES, 2, 0, 0);
+	map_draw_line(from, to, color);
+}
+#endif
+
+/*!
  * Notfallhandler, ausgefuehrt bei Abgrunderkennung und muss registriert werden
  */
 void border_drive_area_handler(void) {
@@ -164,6 +186,13 @@
 	// Push der Linien-Einzelpunkte
 	pos_store_push(pos_store, point1);
 	pos_store_push(pos_store, point2);
+	
+	LOG_DEBUG("PUSH x1y1: %1d %1d x2y2: %1d %1d", point1.x,point1.y,point2.x,point2.y);
+	
+#ifdef MAP_2_SIM_AVAILABLE
+		map_draw_line_world(point1,point2,2);  // schwarze Linie
+#endif
+	
 }
 
 /*!
@@ -363,6 +392,9 @@
     // Abstand zum Startpunkt muss gueltig sein sonst ist Schluss
 	if (!(dist_valid(observer->point1, map_pos))) {
 			*behavstate = (endrequest) ? TRACK_END : 1;// bleibt in Endepunktsuche wenn nicht Endeanforderung kam
+			if (endrequest) {
+			  LOG_DEBUG("Nebenpunkt zum Startpunkt dist nicht valid %1.0f", sqrt(get_dist(observer->point1.x,observer->point1.y,map_pos.x,map_pos.y)));
+			}
 			return False; //Endepunktsuche ungueltig
 		}
 
@@ -376,6 +408,9 @@
 
 		//zuletzt gueltigen Endpunkt auf Stack sichern
 		push_stack_pos_line(observer->point1,*lastpoint);
+		
+		if (lastpoint->x!=0 || lastpoint->y!=0)
+		  LOG_DEBUG("Autopush wg. Hind oder befahren xy: %1d %1d mapval: %1d",lastpoint->x,lastpoint->y,mapval);
 
 		//letzten gemerkten Punkt wieder als ungueltig kennzeichnen
 	    set_point_to_lastpoint(lastpoint, 0, 0);
@@ -655,6 +690,12 @@
 		if (check_haz_sensDist() || (sensDistL <= 200 || sensDistR <= 200)) { //gar nicht erst fahren bei <20cm Hindernis
 			track_state = GET_LINE_FROM_STACK;
 			LOG_DEBUG("zu Stackholen wg. Abstand %1d %1d", sensDistL, sensDistR);
+			
+#ifdef MAP_2_SIM_AVAILABLE
+	        if (nextline.point2.x != 0 || nextline.point2.y != 0) 
+		      map_draw_line_world(nextline.point1,nextline.point2,1);//Strecke wird verworfen, nicht anfahrbar und rot darstellen
+#endif
+			
 			break;
 		}
 
@@ -662,17 +703,33 @@
 		//einen Punkt in der Bahn voraus berechnen um Wegfreiheit laut Map zu bestimmen
 		disttodrive = 900; //hoher init. Wert
 		if (sensDistL < 400 || sensDistR < 400) {
-			disttodrive = (sensDistL < sensDistR) ? sensDistL - 50 : sensDistR
-					- 50; //in kurzer Entfernung Hind. gesehen
+			
+            //notwendig, weil bei Map-Simexport Lampen als genausogrosses Hindernis gekennzeichnet sind wie Wandelemente, d.h. gesehener Abstand groesser
+            //als in Map eingetragen und gesehener Anfahrpunkt waere im Hindernis und Strecke nicht anfahrbar; daher so weit kleinere Strecke
+            //als gesehene nehmen, damit Punkt auf jeden Fall vor Hindernisfeld liegt
+			disttodrive = (sensDistL < sensDistR) ? sensDistL - 80 : sensDistR
+					- 80; //in kurzer Entfernung Hind. gesehen
 			getpoint_side_dist(0, disttodrive, TRACKLEFT, &pos); // Punkt etwas vor Hindernis berechnen
+			LOG_DEBUG("Mappunkt fuer %1d voraus berechnet l/r: %1d %1d",disttodrive,sensDistL, sensDistR);
 		} else {
-			getpoint_side_dist(0, 250, TRACKLEFT, &pos); //nur etwas voraus Punkt berechnen wenn weiter gesehen
+			getpoint_side_dist(0,250, TRACKLEFT, &pos); //nur etwas voraus Punkt berechnen wenn weiter gesehen
+			LOG_DEBUG("Mappunkt fuer 25cm voraus berechnet l/r: %1d %1d",sensDistL, sensDistR);
 		}
+		
+		if (nextline.point2.x!=0 || nextline.point2.y!=0) {
+		  position_t botpos;
+		    botpos.x=x_pos;
+		    botpos.y=y_pos;   
+		   // Wenn Tracklaenge kleiner als Laenge voraus laut Abstandssensoren, dann Tracklaenge nehmen
+		   if (get_dist(nextline.point1.x,nextline.point1.y,nextline.point2.x,nextline.point2.y)< get_dist(botpos.x,botpos.y,pos.x,pos.y)) {
+		   	 getpoint_side_dist(0,sqrt(get_dist(nextline.point1.x,nextline.point1.y,nextline.point2.x,nextline.point2.y)), TRACKLEFT, &pos); //nur etwas voraus Punkt berechnen wenn weiter gesehen
+			 LOG_DEBUG("Mappunkt korrigiert fuer kleinere Tracklaenge %1.0f",sqrt(get_dist(nextline.point1.x,nextline.point1.y,nextline.point2.x,nextline.point2.y)));
+		   }
+		}
 
-		LOG_DEBUG("Abstaende voraus: L/R: %1d %1d", sensDistL, sensDistR);
-
 		// Wegfreiheit bis zum Punkt auf Strecke voraus bestimmen; manchmal kein Hind gesehen aber schon in Map
 		uint8_t free1 = map_way_free(x_pos, y_pos, pos.x, pos.y);
+		LOG_DEBUG("Wegfreiheit fuer Mappunkt voraus: %1d",free1);
 
 		// ist der Weg voraus nicht frei laut Map, dann gar nicht erst fahren und verwerfen
 		if (!free1) {
@@ -682,6 +739,13 @@
 			// einem Schwellwert wirklich verwerfen
 			track_state = GET_LINE_FROM_STACK;
 			LOG_DEBUG("Weg versperrt zu Zwischenpunkt %1d %1d, Endpunkt %1d %1d", pos.x, pos.y, nextline.point2.x, nextline.point2.y);
+#ifdef MAP_2_SIM_AVAILABLE
+		    position_t aktpos;
+		    aktpos.x=x_pos;
+		    aktpos.y=y_pos;
+		    map_draw_line_world(aktpos,pos,1);//Linie wird rot, so weit voraus ist Weg nicht frei
+#endif
+
 			break;
 		}
 
@@ -691,7 +755,7 @@
 
 		// anzufahrende naechste Strecke initialisieren
 		set_point_to_lastpoint(&nextline.point1, 0, 0);
-		set_point_to_lastpoint(&nextline.point2, 0, 0);
+		//set_point_to_lastpoint(&nextline.point2, 0, 0);
 
 		// Observer starten zum Beobachten der Nebenspuren
 		start_observe_left_right(data);
@@ -723,6 +787,7 @@
 
 		lastCheckTime = TIMER_GET_TICKCOUNT_16; // Var auf Systemzeit setzen, damit etwas zeit vergehen kann im naechsten Zustand
 		track_state = AFTER_FORWARD; //naechster Verhaltenszustand
+		next_behavstate=GET_LINE_FROM_STACK;  //Verhaltenszustand nach AFTER_FORWARD
 
 		break;
 
@@ -742,8 +807,8 @@
 		if (!timer_ms_passed_32(&lastCheckTime, CORRECTION_DELAY + 300))
 			break;
 
-		// der naechste Weg liegt immer auf dem Stack und von dort holen
-		track_state = GET_LINE_FROM_STACK;
+		// naechster Verhaltenszustand abhaengig von gesetzter naechster Zustandsvariablen
+		track_state = next_behavstate;
 
 		break;
 
@@ -810,7 +875,59 @@
 			bot_cancel_behaviour(data, bot_goto_pos_behaviour,
 					check_haz_sensDist);
 		}
+		else {
+		  // in Testparcours2 bleibt bot oft an unterer rechter Ecke haengen, weil der Weg als Frei erkannt wird obwohl auch laut
+		  // Map schon die Ecke Grau-Schwarz eingezeichnet ist (bei nicht uebergebener Karte mit on_the_fly Hindernis-Aktualisierung)
+		  // aber selbst mit uebergebener clean Karte aus sim-Export bleibt er haengen, da wap_way_free Weg frei liefert	
+		  uint8_t free1 = map_way_free(x_pos, y_pos, nextline.point1.x,nextline.point1.y);
+		  LOG_DEBUG("kurze Wegefreiheit zu P1: %1d, l/r: %1d %1d, Zielabstand %1d",free1,sensDistL,sensDistR,dist_to_point);	
+		  
+		  // Falls Abstand des Zielpunktes kleiner als ein gesehener Hindernisabstand ist, dann auch nicht anfahren
+          if (free1 && (dist_to_point>=sensDistL+20 || dist_to_point >=sensDistR+20)) {
+        	  LOG_DEBUG("Abstand zu fahren groesser als Hindabstand l/r: %1d %1d",sensDistL,sensDistR);
+        	  free1=False;       	       	
+          }
+          
+          if (!free1) {// Visualisierung der Nicht Anfahrbarkeit
+#ifdef MAP_2_SIM_AVAILABLE  // zur Visualisierung Weg zu P1 Rot einfaerben 
+		position_t akt_pos;
+		akt_pos.x=x_pos;
+		akt_pos.y=y_pos;
+		map_draw_line_world(akt_pos,nextline.point1,1);//Linie von Botpos zu P1 wird rot	
+#endif	
+          }
+          
+          
+         // evtl erst den Punkt 2 anfahren wenn P1 nicht anfahrbar war, d.h. Punkte vertauschen
+         if (!free1 /*&& (get_dist(nextline.point1.x, nextline.point1.y,nextline.point2.x, nextline.point2.y)>300*300)*/) {
+          uint8_t free2 = map_way_free(x_pos, y_pos, nextline.point2.x, nextline.point2.y);
+ 	      LOG_DEBUG("Wegfreiheit P2: %1d, Abstand P1: %1.0f P2: %1.0f",free2, sqrt(get_dist(x_pos,y_pos,nextline.point1.x, nextline.point1.y)),sqrt(get_dist(x_pos,y_pos,nextline.point2.x, nextline.point2.y)));
+          if (free2) {
+           set_nextline(nextline.point1, nextline.point2, True); //Werte egal da nextline nur getauscht
+           next_behavstate=TURN_TO_NEAREST;
+           track_state=AFTER_FORWARD;//muss sich hiernach zum Zielpunkt ausrichten
+           LOG_DEBUG("P2 anfahren, da dieser frei");
+           break;
+          }
+         }
+         
+        // ist der Weg voraus nicht frei laut Map in geringerem Abstand, dann gar nicht erst fahren und verwerfen
+		if (!free1) {
+			track_state = GET_LINE_FROM_STACK;
+			LOG_DEBUG("P1 nicht anfahrbar %1d %1d", nextline.point1.x,nextline.point1.y);
 
+#ifdef MAP_2_SIM_AVAILABLE  // zur Visualisierung Weg zu P1 Rot einfaerben 
+		position_t aktpos;
+		aktpos.x=x_pos;
+		aktpos.y=y_pos;
+		map_draw_line_world(nextline.point1,nextline.point2,1);// eigentliche Fahrspur wird verworfen und auch Rot einfaerben
+		
+#endif		
+        break;
+		}	
+          
+		}
+
 		break;
 
 	case CHECK_DIST:
@@ -913,25 +1030,47 @@
 		// der naheste Punkt zum Bot laut Luftdistance wird nextline
 		set_nextline(nextline.point1, nextline.point2, 0);
 
+#ifdef MAP_2_SIM_AVAILABLE
+		map_draw_line_world(nextline.point1,nextline.point2,0);//naechste anzufahrende Linie gruen
+#endif
+
 		LOG_DEBUG("Stackholen P1: %1d %1d P2: %1d %1d", nextline.point1.x, nextline.point1.y, nextline.point2.x, nextline.point2.y);
 
 		//pruefen, ob Wege zu den Punkten frei sind und Freikennungen speichern
 		free1 = map_way_free(x_pos, y_pos, nextline.point1.x, nextline.point1.y);
+	    LOG_DEBUG("Wegfreiheit zu P1: %1d, Abstand P1: %1.0f P2: %1.0f",free1, sqrt(get_dist(x_pos,y_pos,nextline.point1.x, nextline.point1.y)),sqrt(get_dist(x_pos,y_pos,nextline.point2.x, nextline.point2.y)));
 
+       // wenn Weg zu P1 nicht frei ist aber Weg zu P2 und Abstand nicht zu kurz ist, dann zuerst P2 anfahren 
+       if (!free1) {
+         uint8_t free2 = map_way_free(x_pos, y_pos, nextline.point2.x, nextline.point2.y);
+ 	     LOG_DEBUG("Wegfreiheit zu P2: %1d, Abstand P1: %1.0f P2: %1.0f",free2, sqrt(get_dist(x_pos,y_pos,nextline.point1.x, nextline.point1.y)),sqrt(get_dist(x_pos,y_pos,nextline.point2.x, nextline.point2.y)));
+         if (free2 && (get_dist(nextline.point2.x,nextline.point2.y,x_pos,y_pos) >=300*300)) {
+           set_nextline(nextline.point1, nextline.point2, True); //Werte egal da nextline nur getauscht
+           track_state=AFTER_FORWARD;//muss sich hiernach zum Zielpunkt ausrichten
+           next_behavstate=TURN_TO_NEAREST;  //Verhaltenszustand nach AFTER_FORWARD; muss sich nach Observerstopp zum 1. Zielpunkt ausrichten
+           LOG_DEBUG("P2 anfahren und dann zu P1, da P2 frei");
+           break;
+         }
+       }
+
 		// bei Pfadplanung Weg um Hindernis finden und fahren; problematisch, weil auch ueber noch unbefahrene Gebiete geplant und gefahren wird
 //TODO: Pfadplanung ueber nur bereits befahrene Gebiete
 #ifdef GO_WITH_PATHPLANING
 		if (!free1) {
 			bot_stop_observe(); // auf jeden Fall erst mal stoppen
 			LOG_DEBUG("Weg nicht frei, >> Pfadplanung << zu %1d %1d", nextline.point1.x, nextline.point1.y);
-			bot_calc_wave(data, nextline.point1.x, nextline.point1.y, MAP_DRIVEN_THRESHOLD);
+			bot_calc_wave(data, nextline.point1.x, nextline.point1.y, /*MAP_DRIVEN_THRESHOLD*/0);// Pfadplanung klappt nie ueber befahrenes Gebiet
+			track_state=TURN_TO_DESTINATION;//muss sich hiernach zum Zielpunkt ausrichten
+			break;
 		}
 #else
-		uint8_t free2 = map_way_free(x_pos, y_pos, nextline.point2.x, nextline.point2.y);
+		if (!free1) {
+		 uint8_t free2 = map_way_free(x_pos, y_pos, nextline.point2.x, nextline.point2.y);
+		 LOG_DEBUG("Wegfreiheit zu P2 ohne Pfadplanung: %1d",free2);
 
 		// falls Weg zu keinem Punkt frei, dann mit dem naechsten Stackweg tauschen; ist dieser auch nicht befahrbar,
 		// wird dieser verworfen und der Weg
-		if (!free1 && !free2) {
+		if (!free2) {
 			LOG_DEBUG("Stackweg nicht frei");
 
 			static trackpoint_t pt; //zum Merken beim Vertauschen
@@ -954,6 +1093,7 @@
 				break;
 			}
 
+		 }
 		}
 #endif	// GO_WITH_PATHPLANING
 		//naechster Verhaltenszustand zum Anfahren der naechsten Bahn mit Ausrichten auf den naeheren Punkt laut nextline
Index: C:/eclipse/workspace/ct-Bot/Changelog.txt
===================================================================
--- C:/eclipse/workspace/ct-Bot/Changelog.txt	(revision 1583)
+++ C:/eclipse/workspace/ct-Bot/Changelog.txt	(working copy)
@@ -1,5 +1,7 @@
-CHANGELOG fuer c't-Bot
+CHANGELOG fuer c't-Bot
 ======================
+2009-04-30 Frank Menzel [Menzelfr@xxxxxx]: Einzeichnen der Fahrspuren in drive_area zur Visualisierung der Arbeitsweise des Verhaltens sowie Korrekturen und mehr Debugausgaben
+
 2009-04-22 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: Bugfix fuer map_2_sim_send()
 
 2009-04-16 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: Initialisierung in Pfadplanung korrigiert, Code in mcu/os_thread.c etwas verbessert
Index: C:/eclipse/workspace/ct-Bot/ct-Bot.h
===================================================================
--- C:/eclipse/workspace/ct-Bot/ct-Bot.h	(revision 1583)
+++ C:/eclipse/workspace/ct-Bot/ct-Bot.h	(working copy)
@@ -59,7 +59,7 @@
 
 #define ADC_AVAILABLE		/*!< A/D-Konverter */
 
-//#define MOUSE_AVAILABLE	/*!< Maus Sensor */
+#define MOUSE_AVAILABLE	/*!< Maus Sensor */
 
 #define ENA_AVAILABLE		/*!< Enable-Leitungen */
 #define SHIFT_AVAILABLE		/*!< Shift Register */
@@ -72,8 +72,8 @@
 
 #define POS_STORE_AVAILABLE		/*!< Positionsspeicher vorhanden */
 
-//#define MAP_AVAILABLE			/*!< Aktiviert die Kartographie */
-//#define MAP_2_SIM_AVAILABLE	/*!< Sendet die Map zur Anzeige an den Sim */
+#define MAP_AVAILABLE			/*!< Aktiviert die Kartographie */
+#define MAP_2_SIM_AVAILABLE	/*!< Sendet die Map zur Anzeige an den Sim */
 
 //#define SPEED_CONTROL_AVAILABLE /*!< Aktiviert die Motorregelung */
 //#define ADJUST_PID_PARAMS		/*!< macht PID-Paramter zur Laufzeit per FB einstellbar */
Index: C:/eclipse/workspace/ct-Bot/include/bot-logic/available_behaviours.h
===================================================================
--- C:/eclipse/workspace/ct-Bot/include/bot-logic/available_behaviours.h	(revision 1583)
+++ C:/eclipse/workspace/ct-Bot/include/bot-logic/available_behaviours.h	(working copy)
@@ -58,7 +58,7 @@
 
 #define BEHAVIOUR_DELAY_AVAILABLE /*!< Delay-Routinen als Verhalten */
 
-//#define BEHAVIOUR_DRIVE_AREA_AVAILABLE /*!< flaechendeckendes Fahren mit Map */
+#define BEHAVIOUR_DRIVE_AREA_AVAILABLE /*!< flaechendeckendes Fahren mit Map */
 
 //#define BEHAVIOUR_LINE_SHORTEST_WAY_AVAILABLE /*!< Linienfolger ueber Kreuzungen zum Ziel */
 
Index: C:/eclipse/workspace/ct-Bot/include/map.h
===================================================================
--- C:/eclipse/workspace/ct-Bot/include/map.h	(revision 1583)
+++ C:/eclipse/workspace/ct-Bot/include/map.h	(working copy)
@@ -47,7 +47,7 @@
 
 #define MAP_2_SIM_BUFFER_SIZE	32	/*!< Anzahl der Bloecke, die fuer Map-2-Sim gecachet werden koennen */
 
-#define MAP_OBSTACLE_THRESHOLD	-20	/*!< Schwellwert, ab dem ein Feld als Hindernis gilt */
+#define MAP_OBSTACLE_THRESHOLD	-15	/*!< Schwellwert, ab dem ein Feld als Hindernis gilt */
 #define MAP_DRIVEN_THRESHOLD	1	/*!< Schwellwert, ab dem ein Feld als befahren gilt */
 
 #define MAP_RATIO_NONE	0		/*!< Rueckgabe von map_get_ratio(), falls kein Feld den Kriterien entspricht */
Index: C:/eclipse/workspace/ct-Bot/.cdtbuild
===================================================================
--- C:/eclipse/workspace/ct-Bot/.cdtbuild	(revision 1583)
+++ C:/eclipse/workspace/ct-Bot/.cdtbuild	(working copy)
@@ -10,8 +10,8 @@
 <option id="gnu.c.compiler.option.include.paths.387475860" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
 <listOptionValue builtIn="false" value="&quot;${ProjDirPath}&quot;"/>
 <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/include&quot;"/>
-<listOptionValue builtIn="false" value="&quot;C:\Programme\MinGW\include&quot;"/>
-<listOptionValue builtIn="false" value="&quot;C:\Programme\pthreads\pthreads.2&quot;"/>
+<listOptionValue builtIn="false" value="&quot;C:\MinGW\include&quot;"/>
+<listOptionValue builtIn="false" value="&quot;C:\pthreads\pthreads.2&quot;"/>
 </option>
 <option id="gnu.c.compiler.option.preprocessor.def.symbols.1823712582" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
 <listOptionValue builtIn="false" value="PC"/>
@@ -27,8 +27,8 @@
 <listOptionValue builtIn="false" value="pthreadGC2"/>
 </option>
 <option id="gnu.c.link.option.paths.142594843" superClass="gnu.c.link.option.paths" valueType="stringList">
-<listOptionValue builtIn="false" value="&quot;C:\Programme\pthreads\Pre-built.2\lib&quot;"/>
-<listOptionValue builtIn="false" value="&quot;C:\Programme\MinGW\lib&quot;"/>
+<listOptionValue builtIn="false" value="&quot;C:\pthreads\Pre-built.2\lib&quot;"/>
+<listOptionValue builtIn="false" value="&quot;C:\MinGW\lib&quot;"/>
 </option>
 <option id="gnu.c.link.option.noshared.1812776571" superClass="gnu.c.link.option.noshared" value="true" valueType="boolean"/>
 </tool>
Index: C:/eclipse/workspace/ct-Bot/.settings/org.eclipse.cdt.core.prefs
===================================================================
--- C:/eclipse/workspace/ct-Bot/.settings/org.eclipse.cdt.core.prefs	(revision 0)
+++ C:/eclipse/workspace/ct-Bot/.settings/org.eclipse.cdt.core.prefs	(revision 0)
@@ -0,0 +1,3 @@
+#Sat May 02 20:43:57 CEST 2009
+eclipse.preferences.version=1
+indexerId=org.eclipse.cdt.core.fastIndexer
Index: C:/eclipse/workspace/ct-Bot/.settings/org.eclipse.cdt.managedbuilder.core.prefs
===================================================================
--- C:/eclipse/workspace/ct-Bot/.settings/org.eclipse.cdt.managedbuilder.core.prefs	(revision 1583)
+++ C:/eclipse/workspace/ct-Bot/.settings/org.eclipse.cdt.managedbuilder.core.prefs	(working copy)
@@ -1,13 +1,15 @@
-#Thu Mar 29 15:23:55 CEST 2007
-cdt.managedbuild.config.gnu.exe.debug.1197043799/internalBuilder/enabled=false
-cdt.managedbuild.config.gnu.exe.debug.1197043799/internalBuilder/ignoreErr=true
-eclipse.preferences.version=1
-environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.debug.1077176217=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="C_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
-environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.debug.1197043799=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="C_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
-environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.debug.1197043799.2016949464=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="C_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
-environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.debug.1077176217=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
-environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.debug.1197043799=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
-environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.debug.1197043799.2016949464=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
-environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
-environment/project/cdt.managedbuild.config.gnu.exe.debug.1077176217=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
-environment/project/cdt.managedbuild.config.gnu.exe.debug.1197043799=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable delimiter\="\:" name\="PATH" operation\="append" value\="/usr/local/avr/bin"/>\n</environment>\n
+#Sat May 02 20:44:49 CEST 2009
+cdt.managedbuild.config.gnu.exe.debug.1077176217/internalBuilder/enabled=false
+cdt.managedbuild.config.gnu.exe.debug.1077176217/internalBuilder/ignoreErr=true
+cdt.managedbuild.config.gnu.exe.debug.1197043799/internalBuilder/enabled=false
+cdt.managedbuild.config.gnu.exe.debug.1197043799/internalBuilder/ignoreErr=true
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.debug.1077176217=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="C_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.debug.1197043799=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="C_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.debug.1197043799.2016949464=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="C_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.debug.1077176217=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.debug.1197043799=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.debug.1197043799.2016949464=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<environment/>\r\n
+environment/project/cdt.managedbuild.config.gnu.exe.debug.1077176217=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<environment/>\r\n
+environment/project/cdt.managedbuild.config.gnu.exe.debug.1197043799=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable delimiter\="\:" name\="PATH" operation\="append" value\="/usr/local/avr/bin"/>\n</environment>\n