Universität Bremen  
  FB3 DFKI Kontakt  
  AG BKB > Thomas Röfer > Kognitive Robotik II > Übungszettel > Deutsch
English
 

2. Übungszettel: Verhaltensmodellierung und Bildverarbeitung

 

Ausgabe: 26. Mai 2003
Abgabe: 10. Juni 2003

1. Verhaltensmodellierung (20%)

Beschreibt das Prinzip der Verhaltensmodellierung mit hierarchischen Zustandsmaschinen. Erklärt in diesem Zusammenhang folgende Begriffe:

  • Option
  • Zustand
  • Entscheidungsbaum
  • Grundverhalten

2. Wettbewerb, nochmal mit Cabsl (30%)

Die Datei Cabsl.h definiert eine einfache Sprache zur Verhaltensmodellierung mit hierarchischen Zustandsmaschinen (Beispiel aus dem Praktikum):

behavior     = BEGIN_OPTIONS declarations END_OPTIONS options
declarations = declaration { declaration }
declaration = DECLARE(<optionName>)
options = option { option }
option = BEGIN_OPTION(<optionName>) states END_OPTION(<optionName>, <initialState>)
states = state { state }
state = BEGIN_STATE(<stateName>) { transition } [ DO commands ] END_STATE
transition = ON(<C++ boolean expression>, <stateName>)
commands = { <C++ statement>; } [ OPTION(<optionName>) ]

<optionName>, <stateName> und <initialState> sind Bezeichner entsprechend der normalen C++-Namenskonventionen. In der <C++ boolean expression> können die beiden vordefinierten Symbole timeInOption und timeInState (in ms) sowie globale Variablen und Funktionen verwendet werden. <C++ statement>s können auf globale Variablen und Funktionen zugreifen. Ein Durchlauf durch das Modell wird durch folgenden Aufruf gestartet:

DO_ROOT(<optionName>)

Modelliert eure Implementierung für den Wettbewerb Ende des letzten Semesters noch einmal neu mit Cabsl. Falls ihr nicht teilgenommen habt, könnt ihr alternativ auf die damalige Musterlösung zurückgreifen. Versucht, die Möglichkeiten der Modellierungsprache auszunutzen. Welche Grundverhalten braucht ihr und welche Symbole? Stellt den Optionenbaum in eurer Dokumentation auch grafisch dar.

3. Farbräume (20%)

Teilaufgabe 1. Erläutert die drei Farbräume YUV, RGB und HSI. Wie rechnet man Farben von YUV nach RGB und von RGB nach HSI um?

Teilaufgabe 2. Überlegt euch, wie man die Umrechnung von YUV nach HSI effizient gestalten kann.

4. Segmentierung (30%)

Teilaufgabe 1. Schreibt eine Funktion colorClass getColorClass(unsigned char y, unsigned char u, unsigned char v), die die Farbklassen skyblue, orange und noColor zurückliefert. Dazu soll sie die YUV-Pixel des von der Kamera gelieferten Bildes in den HSI-Raum transformieren und dort auf von euch zu ermittelnde Grenzen testen. Für Pixel des blauen Tores soll die Funktion skyblue liefern und für den Ball orange. Für jede andere Farbe soll noColor geliefert werden. Füllt ein Feld colorClass segmentedImage[144][176] mit den Farbklassen.

Teilaufgabe 2. Erweitert euer Programm so, dass es zusammenhängende Bereiche gleicher Farbe erkennt. Dazu durchlauft ihr das segmentierte Bild Pixel für Pixel. Bei jedem Pixel, das nicht der Klasse noColor angehört, soll ein Füllalgorithmus gestartet werden, der Breite und Höhe des zusammenhängenden Bereichs ermittelt, zu dem das gefundene Pixel gehört. Während des Füllens sollen alle Pixel dieses Bereichs auf noColor gesetzt werden, damit sie nur einmal durchlaufen werden. Am Ende jedes Füllvorgangs soll die Mitte der gerade ermittelten Fläche dargestellt werden, falls die Fläche eine von euch festzulegende Mindestgröße hat.

Tipp. Um das segmentierte Bild darzustellen, könnt ihr euch mit folgender Funktion behelfen:

void MyController::drawSegmentedImage()
{
for(int y = 0; y < image.height; ++y)
{
int left = 0;
colorClass last = noColor;
for(int x = 0; x < image.width; ++x)
if(segmentedImage[y][x] != last)
{
if(last != noColor)
{
LINE(image,left,y,x,y,Drawings::ps_solid,0,ColorClasses::colorClassToDrawingsColor(last));
}
last = segmentedImage[y][x];
left = x;
}
if(last != noColor)
{
LINE(image,left,y,x,y,Drawings::ps_solid,0,ColorClasses::colorClassToDrawingsColor(last));
}
}
DEBUG_DRAWING_FINISHED(image);
}

Beachtet, dass ihr die aktualisierte Fassung der Datei RobotConsole.cpp in AiboControl2 einspielen müsst, damit die Darstellung funktioniert. 

 
   
Autor: Dr. Thomas Röfer
 
  Kognitive Robotik II 
Zuletzt geändert am: 26. Mai 2003   impressum