Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258

Warning: count(): Parameter must be an array or an object that implements Countable in /homepages/28/d22766828/htdocs/raspiblog/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/package.module.fs.php on line 258
Raspi-Blog | Raspberry Pi Projekt | Seite 2

RAT: putting it all together

Projekt-Psychologie: Es ist vielleicht die unbewusste Angst vor dem finalen Schritt. Je näher ich dem Ziel komme, umso langsamer erscheinen mir selbst die Fortschritte. In diesem Beitrag widme ich mich dem Thema Multitasking. Die Ressourcen des Raspbery sind begrenzt, so viel ist mal klar. Mit den sehr rechenintensiven visuellen Komponenten heißt es also haushalten. In der Software laufen mehrere unabhängige Tasks und meine Devise lautet, durch Umverteilung von Rechenzeit, den jeweils wichtigen Tasks zu unterstützen.

  1. Die Haupt-Ereignisschleife (rat_controller), in der alle events zusammenlaufen und verarbeitet werden.
  2. Der Sensortask, der fortlaufend den Arduino abfragt und von dort die Meßwerte der Ultraschall-Abstands-Sensoren, des Kompass usw. bekommt.
  3. Der Video-Tasks, der die Kamerabilder auswertet und nach „interessanten“ Objekten fahndet (mein kleiner gelber Ball)
  4. Darüber hinaus gibt es noch den Audio-Task, der zurzeit aber noch nicht aktiv ist (,weil noch nicht so wichtig).

Das alles spielt zusammen. Die Frage, ob die Meßfrequenz im Zusammenspiel mit der Videoauswertung akzeptable Ergebnisse liefert, erhoffe ich mir von den nächsten Experimenten.

 

OpenCV: Catch The Ball

Die Fähigkeiten des RAT entwickeln sich fort. Mir drängt sich der Vergleich mit der wachsenden Wahrnehmungsfähigkeit eines Säuglings auf, der deine Umgebung zunächst nur schemenhaft erkennt, um dann immer bewusster auf Signale zu reagieren. Man verzeihe mir diese Hybris.

Logische Fortschreibung des visuellen Subsystems ist, wie im letzten Beitrag angekündigt, das Erkennen von Konturen bzw. Objekten. Am einfachsten sind dabei simple geometrische Formen, wie zum Beispiel ein Kreis als Projektion eines runden Körpers. OpenCV bietet dafür leistungsfähige Funktionen. In diesem Falle nutze ich HoughCircles(), was mir eine Liste von erkannten Kreisformen innerhalb eines Bildes (oder Frames) liefert. Die visuellen Fähigkeiten des RAT habe ich in einer Subklasse gebündelt, sinnigerweise rat_eyes genannt.

 

Für eine höhere Verlässlichkeit der Ergebnisse muss man mit den Parametern experimentieren, um das Optimum zu finden. Unter Anderem spielen die konkreten Lichtverhältnisse eine nicht unerhebliche Rolle. Wie im Video zu erkennen ist, springt das Erkennungsergebnis von Frame zu Frame gelegentlich. Dafür benötige ich eine Software-Dämpfung, die letztlich aus einer Menge von Ergebnissen das wahrscheinlich richtige herausfiltert.

Die Entfernung zum Objekt lässt sich theoretisch auf 2 Wegen ermitteln.

  1. Wenn das Objekt bekannt ist (die tatsächliche Größe des Balls), lässt sich über den ermittelten Radius des Bildes die Entfernung zurückrechnen. Wenig elegant, weil wenig flexibel. Je weiter die Entfernung, umso ungenauer zudem.
  2. Mit dem Bild der zweiten Kamera ist die Verschiebung des Objekts abhängig von der Entfernung (Disparität). Diese Methode ist unabhängig vom betrachteten Objekt, also flexibler. Auch steigt der Messfehler mit höherer Entfernung.

sonderschau_net_bild_1_gross

OpenCV: Die Griechen und mein RAT

Eine Woche Kreta war einerseits sehr erholsam, andererseits war es eine erzwungene Bastelpause beim Projekt RAT. Viel Zeit, sich über Grundsätzliches Gedanken zu machen. Mein ganz privates „Quo vadis“. Im Kern bleibt natürlich der Weg das Ziel. Gleichwohl kann es nicht schaden, den Versuch einer Zieldefinition zu unternehmen.

Was also soll der kleine Racker letztendlich können?

  1. Die Umgebung wahrnehmen und daraus Handlungen ableiten. Der Begriff der Umgebung bedarf der genaueren Definition. Es geht um visuelle Wahrnehmung, also Gegenstände eines bekannten Musters (der gelbe Ball,  die rote Tasse, der olle Schuh,…)  oder gar Personen (mich, Mutti, irgendein anderer Mensch, Frau Merkel…). Umgebung bedeutet für mein Verständnis aber auch Hören. Der RAT soll über Spracherkennung verfügen und einfache, gesprochene Kommandos entgegennehmen und ausführen können. Entsprechende Frameworks werden im www reihenweise angeboten.
  2. Bewegung ohne Reue. Der RAT soll sich autonom durch die Gegend bewegen können, konkrete Ziele ansteuern und dabei  Hindernissen ausweichen.


 

Gucken: Ein bisschen Theorie

Nachdem die OpenCV nun funktioniert, gehts es daran, aus den Kamera-Bildern „echte“ Informationen für den RAT zu extrahieren. Das bedeutet in der Praxis, dass das einzelne Bild in Segmente zerlegt werden muss, die für sich dann auswertbar sind. Meine derzeitiger Plan sieht vor, das Bild zunächst in nebeneinander liegende Rechtecke zu zerteilen, die durch bestimmte optische Merkmale voneinander getrennt sind. Zum Beispiel ein Türrahmen oder eine Ecke.

Dazu wird das Originalbild zuerst in ein binäres Grau-Bild umgerechnet. Das spart bei den folgenden Operationen Rechenzeit.

shot1
Der Original-Frame

 

shot2

Anschließend wird das Bild per Schwellwert-Berechnung in ein abstraktes Bild umgewandelt, indem Ränder identifiziert werden.

shot3

Der nächste Schritt ist das Finden von vertikalen Linien. Das alles funktioniert Dank OpenCV übrigens mit einigen wenigen Befehlen. Allerdings musste ich für die richtigen Parameter ein Weile fummeln.
Die gefundenen Linien werden jetzt, zur Anschauung, wieder in das Originalbild projiziert.

Auf dem PC geht das Ganze sogar in Echtzeit. Bleibt zu hoffen, dass der Raspberry genügend Rechenleistung hat, um diese Operationen wenigstens mit, sagen wir mal 1 Frame pro Sekunde auszuführen.

shot5

 

 

Gucken, Fortsetzung

Es ist definitiv ein Meilenstein in der Geschichte dieses Projekts: Mein kleiner blinkender Freund (der RAT) hat Augen bekommen und beginnt, seine Umwelt wahrzunehmen. Die Analogie zu einem Säugling, der fröhlich vor sich hin sabbernd, zunächst nur ganz verschwommen die Konturen von Mutti oder Pappi wahrnimmt und darauf mit einem Lächeln reagiert, ist durchaus nahe liegend. Aber lassen wir die Kirche im Dorf. Es bleibt eine Maschine, da kann ich noch so herzliche Vatergefühle entwickeln.

opencv_logoDas OpenCV Framework ist mir eine große Hilfe. Im Netz wimmelt es von Anleitungen und Beispielen mehr oder weniger guter Qualität. In Erwartung dessen, was OpenCV zu leisten in der Lage ist, bin ich schon ganz aufgeregt. Aber – gut Ding will Weile haben.

Meine Hoffnungen konzentrieren sich darauf, dem RAT beizubringen, sich mittels vorhandener (gespeicherter) und abstrahierter Bilder bzw. Muster zu orientieren. Zudem sollen einfache Objekte erkannt werden und daraus ggf. Aktionen abgeleitet werden. Die ersten Versuche geben Mut zu mehr.