17
1 31/08/2004 1/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim Baier [email protected] Programmierung des AIBO 31/08/2004 2/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim Baier [email protected] 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 [email protected] Die Hardware Aibo 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 [email protected] Freiheitsgrade 3 Gelenke am Kopf 3 Gelenke je Bein 1 Versenkbare Kopflampe -> 15 „echte“ Bewegungspunkte Max. Gelenkgeschwindigkeit 112 - 172 Grad/Sek.

Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

Embed Size (px)

Citation preview

Page 1: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

1

31/08/2004

1/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

Programmierung des AIBO31/08/2004

2/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

Freiheitsgrade

• 3 Gelenke am Kopf

• 3 Gelenke je Bein

• 1 Versenkbare Kopflampe

-> 15 „echte“ Bewegungspunkte

• Max. Gelenkgeschwindigkeit 112 - 172 Grad/Sek.

Page 2: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

2

31/08/2004

5/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

Page 3: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

3

31/08/2004

9/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

InterObjectCommunication

Objekt A Objekt B

Subject Observer

Notify incl. Daten

Ready

Page 4: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

4

31/08/2004

13/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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()

Page 5: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

5

31/08/2004

17/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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.

Page 6: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

6

31/08/2004

21/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

Beispiel DoDestroy(…)

OStatus Example::DoDestroy(const OSystemEvent& event)

{

DELETE_ALL_SUBJECT_AND_OBSERVER;

return oSUCCESS;

};

Page 7: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

7

31/08/2004

25/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

Page 8: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

8

31/08/2004

29/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

Fragen?

15 Minuten PAUSE!

Page 9: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

9

31/08/2004

33/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

InterObjectCommunication

Objekt A Objekt B

Subject Observer

Notify incl. Daten

Ready

Page 10: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

10

31/08/2004

37/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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);

}

};

Page 11: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

11

31/08/2004

41/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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()

Page 12: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

12

31/08/2004

45/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

Page 13: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

13

31/08/2004

49/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

Page 14: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

14

31/08/2004

53/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

Page 15: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

15

31/08/2004

57/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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.

Page 16: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

16

31/08/2004

61/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

Page 17: Universität Hamburg Inhalt file2 31/08/2004 5/64 AB TAMS Technische Aspekte Multimodaler Systeme Universität Hamburg Fachbereich Informatik Praktikum: Programmierung des Aibo Tim

17

31/08/2004

65/64

AB TAMS

Technische Aspekte Multimodaler Systeme

Universität Hamburg

Fachbereich Informatik Praktikum: Programmierung des Aibo

Tim Baier

[email protected]

Viel Spaß!