Zeilenkamera: Fortschritte

Nachdem wir nun mit unserem Navigationsalgorithmus und der Kartenerstellung mit dem neuen Roboter erhebliche Fortschritte erzielen konnten, haben wir uns noch einmal die Zeilenkamera vorgenommen.

Zuletzt hatten wir massive Timingprobleme, die uns letztendlich auch dazu veranlasst haben, einen Scheduler zu verwenden. Nach dem zweiten Programmieranlauf funktioniert die Kamera nun optimal. Im Wesentlichen gibt es nun den Task für die Kamera, in dem in einer Statemachine die Kamera initialisiert wird und das Bild belichtet wird. Wenn die Belichtungszeit, die am Ende jeder Aufnahme mithilfe eines Referenzpixels, der immer auf ein weißes Stück Papier gerichtet ist, ermittelt wurde, abgelaufen ist, wird eine Variable auf einen bestimmten Wert gesetzt. In dem Timer Interrupt, der unabhängig vom Scheduler und wesentlich schneller (mit 8kHz) aufgerufen wird, in dem die Anlogeingänge ausgelesen und aus 5 Messungen eines Analogeingangs der Median gebildet wird, wird kontrolliert, ob die Variable gesetzt wurde. Wenn sie gesetzt wurde, wird nun zum Analog Eingang geschaltet, an dem die Kamera angeschlossen ist und so lange die Werte gemessen, bis die Kamera einmal ausgelesen wurde (nach jedem gemessenen Wert wird eine Funktion aufgerufen, in der der Kamera mitgeteilt wird, dass der aktuelle Pixel ausgelesen wurde und somit zum nächsten Pixel geschaltet werden kann). Wir lesen nur jeden vierten Pixel der Kamera aus, da wir die volle Auflösung von 128 Pixeln nicht benötigen. Das Auslesen der Analogwerte dauert insgesamt
(1/8000)  *5           *(128/4)                        = 20ms
Freq.       Median   Auflösung der Kamera
Plus im schlimmsten Fall einer Belichtungszeit von 100ms = 120ms. Die Auswertung der Analogeingänge liegt dann immer noch im Rahmen, da die Sharp IR Entfernungssensoren ihren Ausgang sowieso nur alle 39ms aktualisieren.
Normalerweise liegt die Belichtungszeit um 60ms. Wenn es zu dunkel wird, wird immer noch automatisch die LED dazu geschaltet.

Als nächstes werden wir das Ergebnis der Kamera auswerten, weiterverarbeiten, das Ergebnis in unsere Kartenerstellung mit einbeziehen und die Kamera intensiv testen, sodass wir hoffentlich danach eine präzise Sackgassenfrüherkennung haben.

Wahrscheinlich werden wir allerdings direkt unter den Roboter einen zusätzlichen Sensor bauen, der die Sackgassen 100%ig zuverlässig erkennt, dann allerdings erst, wenn der Roboter in die Sackgasse gefahren ist, was insofern problematisch ist, dass die Sackgassenmarkierung beweglich ist, der Roboter sie also unter Umständen beim Befahren verschiebt und sich somit selbst den Weg zubaut. Aber so weit wird es wahrscheinlich nie kommen. 😉