Absender: Peter Jonas
Datum: Mo, 01.05.2006 23:11:34
Hallo zusammen, da in meinem Wohnzimmer auf dem Parkettboden ein für den Bot unüberwindbarer Teppich liegt, suche ich nach einer Möglichkeit, beim Anfahren des Teppichs eine Änderung der Fahrtrichtung zu erreichen. Da die Distanzsensoren hier blind sind, soll die Änderung der Fahrtrichtung erfolgen, wenn bei positiver Geschwindigkeit (speed_l >0, speed_r > 0) die Radencoder-Ticks sich nicht mehr verändern, die Räder also stillstehen. Ich habe dieses Verhalten mal testweise in der "bot_avoid_border_behaviour" mit eingebaut: ----------------- void bot_avoid_border_behaviour(Behaviour_t *data){ static int8 stopped=0; static int16 sensEncL_old=0; static int16 sensEncR_old=0; // ----- ursprünglicher Code, um Abgrund zu behandeln ----- if (sensBorderL > BORDER_DANGEROUS) speedWishLeft=-BOT_SPEED_NORMAL; if (sensBorderR > BORDER_DANGEROUS) speedWishRight=-BOT_SPEED_NORMAL; // ----- Ende der ursprünglichen Routine ------------- if ((speed_l > 0) && (speed_r >0)) { // Bot soll sich vorwärts bewegen if ((abs(sensEncL - sensEncL_old) < 2) && (abs(sensEncR - sensEncR_old) < 2)) stopped++; if (stopped > 3) { bot_turn(data,90); stopped=0; } } sensEncL_old = sensEncL; sensEncR_old = sensEncR; } ----------------------- Dies scheint auf den ersten Blick auch zu funktionieren, aber nachdem der Bot sich in den Teppich "gefressen" hat und dann planmäßig abdreht, wird die Anzeige der Distanzsensoren nicht mehr aktualisiert (die letzten Werte bleiben stehen). Dies passiert nur, wenn "bot_turn(data,90)" nicht auskommentiert ist, also aktiv ist. Ich habe im Augenblick keine Idee mehr, woran dies liegen kann. Ich vermute, dass der Programmablauf in irgendeiner Routine hängenbleibt und dann nicht mehr auf die Routine "bot_sens_isr()" trifft und daher die Distanzwerte nicht mehr aktualisiert werden. Woran kann das liegen? Gruß Peter Jonas -- Analog-/ISDN-Nutzer sparen mit GMX SmartSurfer bis zu 70%! Kostenlos downloaden: http://www.gmx.net/de/go/smartsurfer