|
||||||
|
FB3 |
||||||
| AG BKB > Thomas Röfer > Kognitive Robotik II > Übungszettel > | ||||||
1. Übungszettel: Kognitive Architekturen |
||||||
Ausgabe: 12. Mai 2003 1. Begriffe (30%)Erläutert die Grundideen hinter folgenden Begriffen:
Nutzt hierfür auch die Website http://ai.eecs.umich.edu/cogarch0/. 2. Blackboard-Architektur (30%)Teilaufgabe 1. Es soll ein Blackboard-System erstellt werden, das aus folgenden Komponenten besteht:
Teilaufgabe 2. Beschreibt die Anforderungen, die eure Implementierung an die im Blackboard zu speichernden Daten stellt. Teilaufgabe 3. Schreibt ein einfaches Programm, um euer Blackboard-System zu testen. Dazu braucht ihr einen zweiten Thread. Leitet dazu die Klasse MyController zusätzlich von Thread<MyController> ab und startet eine parameterlose Memberfunktion als separaten Thread, der parallel zu execute() läuft (s.u.). Tipps. Um einen zweiten Thread starten und Datenzugriffe synchronisieren zu können, müsst ihr Platform/Win32/Thread.h einbinden. Für die Synchronisation beim Zugriff auf Membervariablen einer Klasse fügt ihr in die Deklaration der Klasse das Makro DECLARE_SYNC ein. An allen Stellen, an denen der Zugriff auf die Membervariablen der Klasse synchronisiert geschehen sollen, fügt ihr das Makro SYNC ein. SYNC gilt immer bis zum Ende des aktuellen Programmblocks. Beispiel: #include "Platform/Win32/Thread.h"
class A : public Thread<A>
{
DECLARE_SYNC;
void main()
{
while(isRunning())
{
Sleep(1); // wichtig, da AiboControl sonst sehr träge reagiert
SYNC;
// auf Member synchronisiert zugreifen
}
}
public:
A()
{
start(this,main);
}
void fn()
{
SYNC;
// auf Member synchronisiert zugreifen
}
};
3. Pufferung (20%)Die Klassen Writer und Reader puffern die Daten nicht, d.h. im Blackboard steht immer nur die aktuellste Version eines Datenpakets. Dies ist für manche Informationen unzureichend, z.B. für Tastenanschläge. Teilaufgabe 1. Erstellt daher zwei weitere Klassen:
Teilaufgabe 2. Erstellt ein einfaches Testprogramm. 4. Selbstlokalisation mit dem Blackboard (20%)Stellt euch folgendes Blackboard-System vor: Im Steuerungsprogramm eines mobilen Roboters gibt es zwei parallel laufende Module für die Selbstlokalisation. Das eine führt eine Odometrie-Rechnung mit hoher Geschwindigkeit durch und legt das jeweilige Ergebnis im Blackboard ab. Das andere bestimmt, z.B. mit Methoden der Bildverarbeitung, die globale Position des Roboters, ist aber viel langsamer als das Odometriemodul und kann daher viel seltener eine aktuelle Position liefern. Diese ist beim Beenden der Berechnung bereits veraltet. Welche Informationen muss das langsame Selbstlokalisationsmodul im Blackboard ablegen, damit weitere Module jederzeit (d.h. maximal mit dem Takt des Odometriemoduls) eine gute Schätzung der aktuellen Position in x, y und Rotation berechnen können? Wie sieht die Berechnung aus? |
||||||
| Autor: Dr. Thomas Röfer |
||||||
| Kognitive Robotik II |
|
|||||