c't

c't-Projekte - Mailinglisten


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

[ct-bot] Abstandsberechnung in sensor_abstand

Absender: Achim Pankalla
Datum: Fr, 25.08.2006 19:37:49


hallo,
beim experimentieren mit den realen bot ist mir aufgefallen, das die abstandswerte bei größeren distanzen öfter mal auf null springen. die ursache war schnell gefunden, dies passiert immer, wenn die werte der sensoren sehr klein werden, aber noch nicht kleiner als zb SENSDISTOFFSETLEFT. dabei ist mir nun auch aufgefallen, das durchaus eine division durch null entstehen könnte. dies habe ich auch bei meinen bot mir logausgaben feststellen können. nun frage ich mich, ob jemand weiss warum der prozessor das so wegsteckt. ein reset macht das programm anscheinend nicht! wird das über die fusebits gesteuert oder wird nur ein irq ausgelöst und dann gehts weiter. wenn jemand mir eine antwort geben könnte, spare ich mir das durchsuchen von unterlagen und foren, man ist ja faul ;-) . anbei ein patch, um das springen der distanzwerte auf null und auch div durch 0 zu verhindern.
viel spass allen weiterhin.
mit freundlichen grüssen
    achim
Index: Changelog.txt
===================================================================
RCS file: /ctbot/ct-Bot/Changelog.txt,v
retrieving revision 1.95
diff -u -r1.95 Changelog.txt
--- Changelog.txt	22 Aug 2006 10:07:24 -0000	1.95
+++ Changelog.txt	25 Aug 2006 17:21:05 -0000
@@ -1,5 +1,7 @@
 CHANGELOG fuer c't-Bot
 ======================
+2006-08-25 Achim Pankalla [achim.pankalla@xxxxxx]: Verhindert in sensor_abstand den Wert Null und eine Division durch Null.
+
 2006-08-04 Benjamin Benz [bbe@xxxxxxxx]: motor_low_pc.c Bugfix
 
 2006-08-16 Felix Beckwermert [felix@xxxxxxxxxxxxxx]: sensor.c -- buf-fix (aus forum): Klammern bei dHead ergaenzt
Index: sensor.c
===================================================================
RCS file: /ctbot/ct-Bot/sensor.c,v
retrieving revision 1.18
diff -u -r1.18 sensor.c
--- sensor.c	22 Aug 2006 10:07:24 -0000	1.18
+++ sensor.c	25 Aug 2006 17:21:06 -0000
@@ -105,14 +105,17 @@
  * @param right Rechter Rohwert [0-1023]
  */
 void sensor_abstand(uint16 left, uint16 right){
+	if(left  == SENSDISTOFFSETLEFT)  left++;
+	if(right == SENSDISTOFFSETRIGHT) right++;
+
 	sensDistL = SENSDISTSLOPELEFT / (left - SENSDISTOFFSETLEFT);
 	sensDistR = SENSDISTSLOPERIGHT / (right - SENSDISTOFFSETRIGHT);
 	
 			// Korrigieren, wenn ungueltiger Wert
-	if (sensDistL > SENS_IR_MAX_DIST || sensDistL<0)
+	if (sensDistL > SENS_IR_MAX_DIST || sensDistL<=0)
 		sensDistL=SENS_IR_INFINITE;
 
-	if (sensDistR > SENS_IR_MAX_DIST || sensDistR<0)
+	if (sensDistR > SENS_IR_MAX_DIST || sensDistR<=0)
 		sensDistR=SENS_IR_INFINITE;
 	
 }