AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

20
AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran

Transcript of AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Page 1: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

AIBO Tutorial

CS 4631 – Spring 2004

Ram Ravichandran

Page 2: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Outline

Introduction Basic OPENR Program Constructs Code Development Executing and Debugging Flow of Development Parting advice

Page 3: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Introduction

Environment Code developed using C++, OPENR API Installed under /usr/OPENR_SDK available from www.jp.aibo.com/openr/

Documentation (available under /usr/OPENR_SDK/documentation ) AIBO Programming manual ERS-210 Information API Specifications (Level II reference Guide)

Page 4: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Introduction

Sample Programs Best way to learn writing code All sample programs are available

under /usr/OPENR_SDK/sample Copy to your home directory and change

permissions. run using make PREFIX=/usr/OPENR_SDK

Page 5: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

OPENR Objects

True OO (very similar to Squeak/SmallTalk) Similar to a UNIX process Communication through message passing.

Object waits for message {selector,data} to arrive. Once a message arrives, objects call the method

based on the selector specified in stub.cfg. Arguments to the method is the data in the

message Wait for more messages.

Page 6: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Inter-object communication

Brief overview Subject

Object that sends a message

Observer Object that receives the message

Every observer has a message queue. Subject sends Observer a ‘NotifyEvent’. Observer replies with a ‘ReadyEvent’

ASSERT_READY DEASSERT_READY

Page 7: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Core Class

Each Object has a Core Class A Sample Core Class

#include <OPENR/OObject.h>#include <OPENR/OSubject.h>#include <OPENR/OObserver.h>#include "def.h“

class SampleClass : public OObject {public:SampleClass();virtual ~SampleClass() {}OSubject* subject[numOfSubject];OObserver* observer[numOfObserver];

Page 8: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Core Class (2)

Continued…

virtual OStatus DoInit(const OSystemEvent& event);virtual OStatus DoStart(const OSystemEvent& event);virtual OStatus DoStop(const OSystemEvent& event);virtual OStatus DoDestroy(const OSystemEvent& event);//Describe the member functions corresponding to Notify,//Control, Ready, Connect method.};

Page 9: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Inter-object Communication

Control Method Used by the Subject to receive a connection

result Connect Method

Used by observer to receive a connection result Notify Method

Used by Observer to receive a message Ready Method

Used by Subject to receive the ASSERT_READY and DEASSERT_READY signals from Observer.

Page 10: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

DoXXXX() Method Macros

DoInit NEW_ALL_SUBJECT_AND_OBSERVER

Registers the necessary number of Subjects & Observers. REGISTER_ALL_ENTRY

registers the connection to services offered by other objects SET_ALL_READY_AND_NOTIFY_ENTRY

This registers all entry points.

DoStart ENABLE_ALL_SUBJECT

Enables all the Subjects ASSERT_READY_TO_ALL_OBSERVER

This sends ASSERT_READY to all subjects.

Page 11: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

DoXXXX() Method Macros (2)

DoStop()

DISABLE_ALL_SUBJECT

This disables all subjects of core class.

DEASSERT_READY_TO_ALL_OBSERVER

This sends a DEASSERT_READY to all connecting subjects.

DoDestroy()

DELETE_ALL_SUBJECT_AND_OBSERVER This deletes all observer and subjects.

Page 12: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

More Message Passing

Observer first sends all its subjects an AssertReadyvoid SampleObserver::SendAssertReady(){

observer[obsfunc1]->AssertReady( );}

When Subject receives AssertReady, it sends the data.

void SampleSubject::Ready(const OReadyEvent& event){

char str[32];strcpy(str, “Some Text Message”);subject[sbjFunc2]->SetData(str,sizeof(str));subject[sbjFunc2]->NotifyObservers( );

}

Page 13: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

More Message Passing (2)

When observer receives the data, it sends an ASSERT_READY againvoid SampleObserver::Notify(const ONotifyEvent& event){

const char* text = (const char*)event.Data(0);observer[sbjFunc1]->AssertReady();

}

Page 14: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Stub File

Used to define member functions that receive messages

A sample Stub File (stub.cfg)

ObjectName : SampleClassNumOfOSubject : 1NumOfOObserver : 2Service : “SampleClass.Func1.Data1.S”,Control(),Ready()Service : “SampleClass.Func2.Data2.O”,Connect(),Notify1()Service : “SampleClass.Func3.Data2.O”,Control(),Notify2()Extra : WakeUpOnLan()Extra : UpdateBatteryStatus()

Page 15: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Building

Make a Directory (let’s call it Output) in the parent directory of the directory where you have the source files. We will put the final output executables in this directory.

Copy the directory OPEN-R from /usr/OPENR_SDK/MS into Output.

Copy Makefile-parent from /usr/OPENR_SDK/MS to <Parent dir>/Makefile

Copy Makefile-child from /usr/OPENR_SDK/MS to <src file dir>/Makefile

Edit both makefiles. type make;make install in the parent directory.

Page 16: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Building (2)

A picture is worth a thousand words

Page 17: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Editing Configuration Files.

.ocf file Has one line in it of the following format.object NAME STACK_SIZE HEAP_SIZE SCHED_PRIORITY cache tlb user

connect.cfg file This file is in <parent_dir>/MS/OPEN-R/MW/CONF Dictates who talks to who using what services (registered in stub.cfg) Contains lines similar to :

object1.sendStream.datatype1.S object2.recvStream.dataType1.O

object.cfg file contains a list of .bin files (objects) add the objects you have compiled do not erase tinyftpd.bin and powermon.bin

Page 18: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Executing and Debugging

Insert the memory stick in the laptop. At the prompt, type

mount /sony Once the memory stick has been mounted, then copy the files from

/MS/OPEN_R to /sony cp –rf <parent dir>/MS/OPEN_R /sony

un-mount the memory stick.umount /sony

Put the memory stick in the dog and press the power button on the dog.

DEBUGGINGFor debugging information see chapter 5 in the programmer’s manual. The explanation in the chapter is very clear and

extensive.

Page 19: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Flow of Development

Design your objects Decide on the data type for the inter-object

communication Write the stub.cfg file Write the core class with the necessary member

functions Write connect.cfg file Write your .ocf file Build Write object.cfg file Execute on AIBO Debug (perhaps)

Page 20: AIBO Tutorial CS 4631 – Spring 2004 Ram Ravichandran.

Parting Advice

See sample programs Do NOT let the AIBO walk on hard surfaces. This will break

the joints. Use the robocup field or a similar carpet like surface.

Do NOT use joint values greater than the ones in the manual. The software does not impose a limit on the joint angles. Thus you can BREAK the joints by putting in arbitrary values.

You will PAY for any broken part. This tutorial is available online (by tonight) at

http://www.cc.gatech.edu/~borg/robotsoccer/aibotut.html Programming the dogs for the first time can be frustrating.

Do not hesitate to use the mailing list to ask questions.