Upload
trinhphuc
View
213
Download
0
Embed Size (px)
Citation preview
1
31/08/2004
1/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Programmierung des AIBO31/08/2004
2/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Inhalt• Hardware
• OPEN-R
• Eventhandling
• InterObjectCommunication
• Beispiel
• Programmaufbau
• Eigenes Projekt erstellen
• AiboLib
• Verzeichnisstruktur
• Makefiles
31/08/2004
3/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Die HardwareAibo ERS-220A mit „SuperCore”
• 64 Bit-RISC CPU (MIPS) 384 MHz
• 32 MB RAM
• 8 MB „MemoryStick” (MS) für Daten und Programme
• CF-Slot für WLAN-Karte
• Gewicht ca. 1,5 kg mit Akku
• Betriebsdauer ca. 1,5 Stunden
31/08/2004
4/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Freiheitsgrade
• 3 Gelenke am Kopf
• 3 Gelenke je Bein
• 1 Versenkbare Kopflampe
-> 15 „echte“ Bewegungspunkte
• Max. Gelenkgeschwindigkeit 112 - 172 Grad/Sek.
2
31/08/2004
5/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Sensoren• Stereomikrophon
• Temperatursensor (für Internetemperatur)
• IR-Distanzsensor (Reichweite:10 cm - 90 cm)
• Beschleunigungssensor
• Vibrationssensor
• Diverse binäre Berührungssensoren (Antenne, Taster an Rücken, Kopf und Beinen)
31/08/2004
6/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Kamera• CMOS-Bildsensor (100.000 Pixel)• YCrCb Bildformat• Blickwinkel von 57,6° horizontal und 47,8° vertikal • Brennweite von 2.18mm• Liefert Bilder in drei unterschiedlichen Auflösungen
176x144, 88x72, 44x36 mit 25fps
• Ist in der Lage über CDTs (ColorDetectionTable) 8 Farben pro Bild in Echtzeit zu segmentieren. Auflösung: 88x72
31/08/2004
7/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Ausgabemöglichkeiten
• Lautsprecher
- 8 Bit PCM, Mono, 8000Hz
- 16 Bit PCM, Mono, 16000Hz
• Leuchtdioden (20 Stück, über den gesamten Aibo verteilt)
• WLAN - Schnittstelle
31/08/2004
8/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Funktionsweise• Betriebssystem (BS) und Programme werden auf dem MemoryStick
gespeichert
• Das BS wird von Sony nur als vorkompiliertes Binary zur Verfügung gestellt und heißt Aperios
• Der AIBO bootet das System vom MS und lädt die Programme
• Der MS kann auch als Speicher für Bilder und Geräusche verwendet werden
• Die Programme werden mit OPEN-R in C++ entwickelt
3
31/08/2004
9/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
OPEN-R„OPEN-R“ ist die von SONY zur Verfügung gestellte, frei erhältliche
Programmierschnittstelle für Unterhaltungsroboter.
Eigenschaften von OPEN-R:• Unterstütz modularen Hardwareaufbau
• Hardwareteile, wie z.B. Bein oder Kopf sind Austauschbar• Jedes Modul ist durch einen seriellen Bus angeschlossen
• Ermöglich modularen Softwareaufbau• Softwaremodule heißen „Objects“• Gleichzeit laufende Objects können Nachrichten austauschen• Object wird vom MemoryStick (MS) geladen
• Netzwerkunterstützung• Unterstützt IEEE802.11b W-LAN• Unterstütz TCP/IP Netzwerkprotokoll
• Ermöglicht Verteiltes Rechnen
31/08/2004
10/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
EventhandlingFür die Behandlung von Ereignissen (egal ob von Außen durch Sensoreingabe
oder aus anderen Software Teilen) sind Methoden erforderlich, die auf das jeweilige Ereignis reagieren.
• Die Methode zur Behandlung des Events ist „das eigentliche Programm“
• Diese Art des Eventhandling hat SONY
InterObjectCommunicationgenannt
31/08/2004
11/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
InterObjectCommunication• Die Kommunikation zwischen einzelnen Tasks (Bilderkennung,
Bewegungssteuerung, Spracherkennung, -synthese) geschieht durch InterObjectCommunication.
• Die Kommunikation findet immer zwischen (mind.) zwei Partnern statt:- Subject- Observer
• Der Observer schickt eine “Ready” Nachricht an das Subject, woraufhin dieser eine “Notify” Nachricht an den Observer schickt, die auch die zu verarbeitenden Daten enthält.
31/08/2004
12/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
InterObjectCommunication
Objekt A Objekt B
Subject Observer
Notify incl. Daten
Ready
4
31/08/2004
13/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel: SendNachdem der Sender ein ReadyEvent erhalten hat, schickt er eine Nachricht
(„Hello World“) ab.
void Sender::Send(const OReadyEvent &event)
{
OSYSDEBUG((„Sender::Send()\n“));
char *str = „Hello World“;
subject[sbjSendString]->SetData(str,sizeof(str));
subject[sbjSendString]->NotifyObservers();
};
31/08/2004
14/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel: ReceiveNachdem der Receiver ein NotifyEvent erhalten hat, holt er sich Daten aus der
Nachricht und gibt sie auf einem Terminal aus. Anschließend teilt er dem Sender mit, dass er für den Empfang weiterer Nachrichten bereicht ist.
void Receiver::Receive(const ONotifyEvent &event)
{
char *output = (char*)event.Data(0);
OSYSPRINT((„Receiver::Receive() %s\n“, output));
observer[event.ObsIndex()]->AssertReady();
};
31/08/2004
15/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel: Send AlternativeDer Nachrichtenaustausch im ersten Beispiel ist eine Endlosschleife. Hier eine
Variante die die Nachricht nur einmal Übermittelt:
void Sender::SendAlt()
{
OSYSDEBUG((„Sender::SendAlt()));
char *str = „Hello World“;
subject[sbjSendString]->SetData(str,sizeof(str));
subject[sbjSendString]->NotifyObservers();
};
31/08/2004
16/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Wo wird definiert welche Daten eine Klasse sendet ?Aus der Datei „stub.cfg“ werden mit Hilfe eines speziellen Kommandos weitere Dateien
generiert, die bei der Kompilation mit berücksichtig werden müssen.
Stub.cfg für den Sender:ObjectName : SenderNumOfOSubject : 2NumOfOObserver : 1Service : „Sender.SendString.char.S“, null , Send()Service : „Sender.SendString.char.S“, null , nullService : „Sender.DummyObserver.DontConnect.O“, null, null
Das Format für einen Service-Eintrag ist hierbei:Service : „Connection name“, Member function 1, Memeber function 2
Connection name ist dabei:Object name.Subname.Data name.Service type
Methode zum Senden
Methode zur Verarbeitung eines Verbindungsergebnisses
Verbindung für SendAlt()
5
31/08/2004
17/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Wo wird definiert welche Daten eine Klasse empfängt ?Stub.cfg für den Empfänger:
ObjectName : ReceiverNumOfOSubject : 1NumOfOObserver : 1Service : „Receiver.DummySubject.DontConnect.S“, null , nullService : „Receiver.GetString.char.O“, null, Receive()
Anmerkungen:• Es muss mindestens je ein Subject und Observer pro Object in stub.cfg
eingetragen sein (Dummys gültig).• Klassen können gleichzeitig Sende - und Empfangsmethoden beinhalten
31/08/2004
18/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Woher kennt der AIBO die Kommunikation zwischen den Klassen?Die Kommunikationspunkte der Klassen werden in der Datei CONNECT.CFG
festgelegt. Sie liegt auf dem MS in dem Verzeichnis /OPEN-R/MW/CONF/
Sie ist für die Kompilierung der Objects nicht erforderlich, wird aber für den korrekten Programmablauf benötigt.
Beispiel für CONNECT.CFG mit Sender und Receiver:
Sender.SendString.char.S Receiver.GetString.char.O
31/08/2004
19/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Welche Daten können versand werden?Folgende Daten lassen sich über die InterObjectCommunication zwischen einzelnen
Objekten des AIBO austauschen:
• char * char *dummy = „dummy“; xxxx->setData(dummy, sizeof(dummy));
• int * int i = 42; xxxx->setData(&i, sizeof(i));
• Zeiger von Komplexendatentypen
Float und Double Werte können nicht versand werden.
Ein Beispiel ist zu finden unter:/local/tams1.2/develop/aibo/progs/examples/objectComm
31/08/2004
20/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
ProgrammaufbauEs reicht nicht nur das Eventhandling zu implementieren. Ein Object besteht
aus einer Klasse, in der die folgenden Methoden implementieren sein müssen :
1. OStatus DoInit (const OSystem Event &event)
2. OStatus DoStart (const OSystem Event &event)
3. Eventhandler4. OStatus DoStop (const OSystem Event &event)
5. OStatus DoDestroy (const OSystem Event &event)
Die Methoden DoInit(), DoStart() werden beim Laden eines Objects DoStop()und DoDestroy() beim Entladen eines Objects ausgeführt.
6
31/08/2004
21/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel: DoInit(…)
OStatus Example::DoInit(const OSystemEvent& event)
{
NEW_ALL_SUBJECT_AND_OBSERVER;
REGISTER_ALL_ENTRY;
SET_ALL_READY_AND_NOTIFY_ENTRY;
OPENR::SetMotorPower(opowerON);
return oSUCCESS;
};
31/08/2004
22/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel: DoStart(…)
OStatus Example::DoStart(const OSystemEvent& event)
{
ENABLE_ALL_SUBJECT;
ASSERT_READY_TO_ALL_OBSERVER;
return oSUCCESS;
};
31/08/2004
23/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel DoStop(…)
OStatus Example::DoStop(const OSystemEvent& event)
{
DISABLE_ALL_SUBJECT;
DEASSERT_READY_TO_ALL_OBSERVER;
return oSUCCESS;
};
31/08/2004
24/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel DoDestroy(…)
OStatus Example::DoDestroy(const OSystemEvent& event)
{
DELETE_ALL_SUBJECT_AND_OBSERVER;
return oSUCCESS;
};
7
31/08/2004
25/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Hinweise zu DoStop und DoDestroy
Die Methoden DoStop und DoDestroy werden sofort beim Abschalten/Rebooten des AIBO (auf welche Weise auch immer) ausgeführt. Sie haben die folgenden Eigenschaften:
• In den Methoden können nur noch Speicherinhalte gelöscht werden (Sounddateien, etc…)!
• Es sind keine Bewegungen mehr möglich!
• Die Motoren sind sofort Ausgeschaltet!
• Es gibt keine Möglichkeit DoStop und DoDestroy durch andere Methoden zu Überladen!
31/08/2004
26/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel: KlassendefinitionSenderClass Sender : OObject{public:
Sender();virtual ~Sender(){};
OSubject* subject[numOfSubject];OObserver* observer[numOfObserver];
virtual OStatus DoInit (const OSystemEvent &event);virtual OStatus DoStart (const OSystemEvent &event); virtual OStatus DoStop (const OSystemEvent &event);virtual OStatus DoDestroy (const OSystemEvent &event);
void Send (const OReadyEvent &event);
void SendAlt();};
31/08/2004
27/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel: KlassendefinitionReceiverClass Receiver : OObject{public:
Receiver();virtual ~Receiver(){};
OSubject* subject[numOfSubject];OObserver* observer[numOfObserver];
virtual OStatus DoInit (const OSystemEvent &event);virtual OStatus DoStart (const OSystemEvent &event); virtual OStatus DoStop (const OSystemEvent &event);virtual OStatus DoDestroy (const OSystemEvent &event);
void Receive( const ONotifyEvent &event);
};
31/08/2004
28/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
OSYSPRINT , OSYSDEBUGDurch die OPEN-R Makros OSYSPRINT(()) und OSYSDEBUG(()) lassen sich
Ausgaben, vergleichbar mit printf generieren.
• OSYSPRINT((„Receiver::Receive() %s\n“, output));
Gibt die Zeichenkette aus, die zwischen den Anführungsstrichen steht. Mit %* lässt sich die Ausgabe von Variablen einfügen
• %s für Zeichenketten
• %f für Zahlenwerte• OSYSDEBUG((„Receiver::Receive() %s\n“, output));
Verhält sich im Prinzip wie OSYSPRINT, die Ausgabe erscheint jedoch nur, wenn beim Kompilieren das Flag –DOPENR_DEBUG benutzt worden ist
8
31/08/2004
29/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
W-LAN TerminalÜber ein W-LAN Terminal werden die printf und debug Anweisungen ausgegeben.Mit der Anweisung
Telnet <IP> 59000
lässt sich ein entsprechendes Terminal öffnen. Zunächst erfolgt die Ausgabe der ausgeführten Programme, anschließend die Ausgaben der Programme selbst.
Für das Beispiel von Send und Receive sollte die Ausgabe wie folgt Aussehen:Sender::Send()
Receiver::Receive() Hello World
Sender::Send()
Receiver::Receive() Hello World
…
31/08/2004
30/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Welche Programme lädt der Aibo beim Booten automatisch?Einfache Antwort: KEINE!
Die zu startenden Programme müssen in der Datei MS/OPEN-R/MW/CONF/OBJECT.CFG festgelegt werden.
Beispiel für OBJECT.CFG für Send und Receive:
/MS/OPEN-R/MW/OBJS/POWERMON.BIN
/MS/OPEN-R/MW/OBJS/TFTP.BIN
/MS/OPEN-R/MW/OBJS/SEND.BIN
/MS/OPEN-R/MW/OBJS/RECEIVE.BIN
31/08/2004
31/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Sonstige Konfigurationsdateien.ocf definiert diverse Parameter eines Programms und wird zum Kompilieren
bereits benötig.
Das Format ist:object OBJECT_NAME STACK_SIZE HEAP_SIZE SCHED_PRIORITY
CACHE TLB MODE
Beispiel für Send.ocf und Receive.ocf:
object Send 3072 16384 128 cache tlb user
object Receive 3072 16384 128 cache tlb user
31/08/2004
32/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Fragen?
15 Minuten PAUSE!
9
31/08/2004
33/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
AiboLibDetails zur AiboLib:• Selbstgeschriebene Klassenbibliothek zur vereinfachten AIBO
Programmierung• Es gibt Klassen für
• Die Grundfunktionen des AIBO (noch nicht viel implementiert) • Gelenksteuerung• LED-Steuerung• Verarbeitung von Sensordaten• Kamerasteuerung• Soundaufnahme und Ausgabe
• „Wrapped“ einige OPEN-R Methoden• Keinen Anspruch auf Vollständigkeit• Provided as it is! (Not bug free!!)
31/08/2004
34/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Beispiel zur AiboLibIm folgenden wird ein Programm zur LED-Steuerung mit der AiboLib entwickelt. Hierzu
ist die Kommunikation mit dem AIBO erforderlich. Hierfür gilt (kurz und knapp, für Details: Level2 Reference Guide S44):
• Die Kommunikation erfolgt über eine virtuelle Schnittstelle:
OVirtualRobotComm für Gelenke, LEDs, Kamera
OVirtualRobotAudioComm für Sound
• Daten werden durch Kommando Vektoren zwischen AIBO und Programm ausgetauscht
• OCommandVectorData.O für Gelenke und LEDs
• OSensorFrameVectorData.S für Sensorinformationen
• OFbkImageVectorData.S für Kamera
• OSoundVectorData.O (.S) für Lautsprecher (Mikrophone)
31/08/2004
35/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Timing• Jede Schnittstelle liefert bzw. bekommt alle 8ms (125 Hz) einen Datenvektor
• Das Zeitintervall von 8ms ist ein Frame
• Die Datenvektoren beinhalten u.a. ein „Verfallsdatum“, minimal ein Frame –maximal 16 Frames
• Timing ist besonders bei Gelenken schwierig, aufwendigen Berechnungen führen zum „Zittern“ des AIBO, da die Befehle nicht rechtzeitig abgearbeitet werden können
• Eine bestimmte Initialisierungsreihenfolge ist unb edingt einzuhalten
31/08/2004
36/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
InterObjectCommunication
Objekt A Objekt B
Subject Observer
Notify incl. Daten
Ready
10
31/08/2004
37/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
LED-Steuerung(Klassendefinition)SYSTEM_STATE{ SYSTEM_START, SYSTEM_IDLE};class LedsExample: public Aibo {
public:LedsExample();virtual ~LedsExample(){};OSubject* subject[numOfSubject];OObserver* observer[numOfObserver]; ( DoInit(…); DoStart(…); DoStop(…); DoDestroy(…); )
void NotifyLeds (const OReadyEvent& event);
protected: void InitLedVectors(); SYSTEM_STATE State;
AiboLed Leds;};
31/08/2004
38/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
LED-Steuerung LedsExample()
LedsExample::LedsExample() : State(SYSTEM_IDLE)
{
};
31/08/2004
39/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
LED-SteuerungDoInit(…)OStatus LedsExample::DoInit(const OSystemEvent& event){
NEW_ALL_SUBJECT_AND_OBSERVER; REGISTER_ALL_ENTRY; SET_ALL_READY_AND_NOTIFY_ENTRY;
// open primitvesLeds.OpenPrimitives();// create new command vectors you have to create one for each led pattern... Leds.NewCommandVectorData(2); // initialize the led valuesInitLedVectors();
// turn motorpower on MotorPowerOn(); };
31/08/2004
40/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
LED-Steuerung(Implementierung InitLedVectors(…))void LedsExample::InitLedVectors(){
OSYSDEBUG(("LedsExample::InitLedvectors()\n"));
// for all leds
for(int i= NUM_LEDS-1; i >= 0; i--){
// set leds on
if(i != LED(HL))
Leds.SetLed(LED(i), 375, true, 0);
else
// except the head light
Leds.SetLed(LED(i), 375, false, 0);
// all leds off in cmdvector 1
Leds.SetLed(LED(i), 375, false, 1);
}
};
11
31/08/2004
41/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
LED-Steuerung DoStart(…)OStatus LedsExample::DoStart(const OSystemEvent& event){
// set each command vector once to OVirtualRoboComm
subject[sbjLEDTEST]->SetData( Leds.GetRegion(0));
subject[sbjLEDTEST]->SetData( Leds.Region[1]);
// notify OVirtualRoboComm
subject[sbjLEDTEST]->NotifyObservers();
State = SYSTEM_START;
ENABLE_ALL_SUBJECT; ASSERT_READY_TO_ALL_OBSERVER;
return oSUCCESS;
};
31/08/2004
42/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
LED-Steuerung NotifyLeds(…)void LedsExample::NotifyLeds(const OReadyEvent& event){
// variable to determine which pattern should be loadedstatic bool toggle = true;// if system is up and runningif(State == SYSTEM_START){
if(toggle)subject[sbjLEDTEST]->SetData(Leds.GetRegion(0));
elsesubject[sbjLEDTEST]->SetData(Leds.GetRegion(1));
subject[sbjLEDTEST]->NotifyObservers(); toggle = !toggle;
}};
31/08/2004
43/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Leds Example -InterObjectCommunication
LedsExample
Subject ObserverNotify incl. Daten(OCommandVectorData)
ReadyOVirtualRobotComm
NotifyLeds(…);
Effector
31/08/2004
44/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Definition des DatenflussesLokal für Object•Stub.cfg (lokal für LedsExample)
ObjectName : LedsExample
NumOfOSubject : 1
NumOfOObserver : 1
Service :"LedsExample.DummySubject.DoNotConnect.O", null, null
Service :"LedsExample.LEDTEST.OCommandVectorData.S", null, NotifyLeds()
12
31/08/2004
45/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Definition des DatenflussesGlobal•CONNECT.CFG (Global für gesamtes Projekt)
LedsExample.LEDTEST.OCommandVectorData.SOVirtualRobotComm.Effector.OCommandVectorData.O
31/08/2004
46/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
LED-Steuerung(Implementierung DoStop(…),DoDestroy(…))OStatus LedsExample::DoStop(const OSystemEvent& event){
State = SYSTEM_IDLE;
DISABLE_ALL_SUBJECT;
DEASSERT_READY_TO_ALL_OBSERVER;
return oSUCCESS;
};
OStatus LedsExample::DoDestroy(const OSystemEvent& event){
DELETE_ALL_SUBJECT_AND_OBSERVER;
return oSUCCESS;
};
31/08/2004
47/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Konfigurationsdateien(für Kompile-Vorgang)
•LedsTest.ocfobject Ledtest 3072 16384 128 cache tlb user
31/08/2004
48/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Konfigurationsdateien(für Programmablauf)
• OBJECT.CFG
/MS/OPEN-R/MW/OBJS/TFTP.BIN
/MS/OPEN-R/MW/OBJS/POWERMON.BIN
/MS/OPEN-R/MW/OBJS/LEDTEST.BIN
13
31/08/2004
49/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
RemoteProcessingEs ist möglich über das RemoteProcessing-Tool OPEN-R Objekte verteil, d.h. sowohl
auf dem AIBO als auch auf einem Host-Rechner ablaufen zu lassen.Dies bietet vielfältige Möglichkeiten rechenintensive Aufgaben auszulagern.Das Debuggen wird stark vereinfacht und beschleunigt, da ein der Remote-Software
auf dem AIBO laufen kann, während auf dem PC das geänderte Programm immer wieder neu gestartet wird. Es muss also nicht jedes mal auf den AIBO Übertragen und dieser neu gebootet werden.
ABER:Es werden andere Konfigurationsdateien benötigt Die Objekte müssen sowohl für den PC als auch für den AIBO kompiliert werden
Ein Beispiel für eine solche Konfiguration incl. Makefiles ist zu finden unter: /local/tams1.2/develop/aibo/progs/examples/remote/.
31/08/2004
50/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Verzeichnisstruktur von /local/tams1.2/develop/aibo/- bin
- config
- doc
- ERS200-3DModels
- include
- lib
- OPEN_R_SDK
- OPEN_R_SDK-doc
- OPEN_R_SDK-sample
- packages
- progs
- sound
• Hilfsprogramme: ftp, reboot, …
• Konfigurationsdateien
• „Nicht OPEN-R“ Dokumentation
• 3D-Modelle zum ERS-220
• include-Dateien zur AiboLib
• Verzeichnis der AiboLib
• OPEN-R Verzeichnis
• Dokumentation zu OPEN-R
• Beispiele zu OPEN-R
• tar-Archive
• Tutor Programmierverzeichnis
• Sound DateienFür Euch relevante
Verzeichnisse
31/08/2004
51/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Kompilierung/VerzeichnisseUm das Kompilieren und Erstellen von verschieden Konfigurationen des AIBO
zu vereinfachen, existiert ein Standart Makefile. Es Liegt unter /local/tams1.2/develop/aibo/config/
Für die Verwendung des Makefiles ist eine besondere Verzeichnisstruktur erforderlich!
Im Folgenden wird die Verwendung des Makefiles kurz vorgestellt. Ausführlich Dokumentation ist zu finden unter
/local/tams1.2/develop/aibo/doc/make/
31/08/2004
52/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Verzeichnisstruktur Lokal(im „HOME“-Dir)- Projekt
- Src1
- Src2
- Src3
- Src…
- MS
- data
- config
• Makefile (0)
– Src1
• Makefile (1)
• Leds.*, stub,cfg, Leds.ocf
– data
- P
- E
– config
• CONNECT.CFG
• OBJECT.CFG
• DESIGNDB.CFG
14
31/08/2004
53/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Makefile (0) I(im Projekt-Verzeichnis)INSTALLDIR=$(shell pwd)/MSAIBONAME=aibo2AIBOADDR=134.100.13.225all:
make all INSTALLDIR=$(INSTALLDIR) -C ./leds
install:make installlocal INSTALLDIR=$(INSTALLDIR) -C ./ledsmake installconfigmsmake installprog
installlocal:make installlocal INSTALLDIR=$(INSTALLDIR) -C ./ledsmake installconfig
31/08/2004
54/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Makefile (0) II(im Projekt-Verzeichnis)
clean:make cleanlocalmsmake cleanlocal -C ./leds
verycleansystem: veryclean clean
depend:make depend -C ./leds
world: installsystem installworldclean: verycleansystem memstickclean
include /local/tams1.2/develop/aibo/config/Make.defaults
31/08/2004
55/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Makefile (1)(im Quellcodeverzeichnis)include /local/tams1.2/develop/aibo/config/Make.defaults
LIBS = -laibo -lObjectComm –lOPENR
SRC = LedsExampleStub.cc LedsExample.cc
#CXXFLAGS+= -DOPENR_DEBUG
all: AiboLeds.bin
LedsExampleStub.cc: stub.cfg$(STUBGEN) stub.cfg
AiboLeds.bin: LedsExampleStub.o LedsExample.o LedsExample.ocf $(MKBIN) $(MKBINFLAGS) -o $@ $^ $(LIBPATH) $(LIBS) $(STRIP) $@
installlocal: AiboLeds.bin gzip -c AiboLeds.bin > $(INSTALLDIR)/OPEN-R/MW/OBJS/LEDTEST.BIN
depend: $(SRC) $(CC) -MM $(CFLAGS) $(INCLUDEPATH) $(SRC) > depend.aibo
include depend.aibo
Bei Verwendung dieses Compilerflags ist OSYSDEBUG() aktiv!
31/08/2004
56/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Verzeichnisstruktur auf dem MS- MS
- OPEN-R
- MW
- CONF
- OBJS
- DATA
- P
- E
- SYSTEM
- CONF
- OBJS
- DATA
- P
- E
- MW beinhaltet die „eigenen“ Programmdaten
- CONF
• CONNECT.CFG
• OBJECT.CFG
• DESIGNDB.CFG
- OBJS
• *.BIN (Objects)
- DATA
- P
• *.WAV
- SYSTEM beinhaltet das Betriebssystem
15
31/08/2004
57/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Benutzung des Standart Makefiles1. Lokales Makefile erstellen
• Include /local/tams1.2/develop/aibo/config/Make.defaults
2. Make localdirs erzeugt die lokal benötigte Verzeichnisstruktur
3. Make installsystem installiert Betriebssystem auf dem MS
4. Make install installiert Programm auf dem MemoryStick durch den Card-Reader
5. Make installlocal installiert ins MS Verzeichnis um die Dateien anschliessen mit ftp auf AIBO transferieren
ACHTUNG: Sounds etc. werden dabei nicht mitkopiert!
3. Make clean räumt das lokale Verzeichnis auf und löscht die Programm und Configurationsdateien aus dem lokalen MS Verzeichnis
31/08/2004
58/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Benutzung der Standartregeln• Bei einem neu erstellten Projekt
• Make cleanms
• Make installsystem
• Make install
(kopiert Daten auf MS der im CardReader sein muss!!)
• Bei einem vorhanden Projekt
• Make installlocal
• Make ftpinstall
(kopiert Daten via ftp auf den MS)
31/08/2004
59/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Benutzung der Standartregeln„zu Fuß“• Bei einem vorhanden Projekt
• Make clean
• Make installlocal
• ftp aibo
• Programme per Hand transferieren
• mstreeput Script verwenden (local/tams1.2/develop/aibo/bin/mstreeput)
(ACHTUNG: nur Dateien im 8+3 Format)
• Reboot aibo
31/08/2004
60/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Makefile Besonderheiten
• FTP und POWERMON werden bei einem make install/installlocalautomatisch in OBJECT.CFG eingetragen.
Auf den MS kopiert werden die jedoch nur bei make install. Bei makeinstalllocal werden sie aus dem lokalen MS- Verzeichnis entfernt.
• Fehlermeldungen wie „/dev/sdd1 Ein-Ausgabe Fehler“ können ignoriert werden.
16
31/08/2004
61/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Trapdoors und Besonderheiten
• Kommunikationsdaten die zwischen den Objects ausgetauscht werdengenau Spezifizieren!
• Dateinamen auf dem MS im 8+3 Format• Speichern auf dem MS dauert sehr lange und kostet viel Rechenzeit• Bei Soundplayback jeden Kommandovektor einmal an die Soundausgabe
senden!• FTP ist nicht sehr stabil! Nur kleine Dateien sollten übertragen werden!• Schlägt die Übertragung per FTP fehl muss ein make install mit dem Card-
Reader durchgeführt werden.
31/08/2004
62/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
HilfsprogrammeEs gibt ein paar Hilfsprogramme, die in dem Verzeichnis
/local/tams1.2/develop/aibo/bin liegen:
• ftp#, baut eine FTP Verbindung zu AIBO# auf. Hierzu ist kein Passworterforderlich.
• reboot# , rebootet AIBO#. ACHTUNG: Motoren werden natürlich ausgeschaltet!
• mstreeput addr verz, überträgt das Verzeichnis verz an den AIBO mit der IP-Adresse addr. Dies kann benutzt werden um eine komplettes MS-Verzeichnis auf einmal auf den AIBO zu übertragen.
31/08/2004
63/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Verhaltensregeln zum Umgang mit dem AIBO
• VORSICHTIG! Der AIBO besteht aus viel Plastik und ist daher nicht sehr stabil!
• Den AIBO zum Booten „verklemmungsfrei“ hinsetzen (oder halten)
• Bei neu programmierten Bewegungen immer den AIBO in der Hand halten!
• Der AIBO ist teuer und mit SONY telefonieren macht keinen Spaß!
31/08/2004
64/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Wie fange ich an?
1. Einloggen ;-)
2. Skript laden
3. Beispiele zur AiboLib durcharbeiten und dann die Aufgaben zu zweit lösen.
• Programmiert wird in eurem „home“- Verzeichnis
• Für die Gruppenaufgabe werden wir noch entsprechende Verzeichnisse einrichten
17
31/08/2004
65/64
AB TAMS
Technische Aspekte Multimodaler Systeme
Universität Hamburg
Fachbereich Informatik Praktikum: Programmierung des Aibo
Tim Baier
Viel Spaß!