Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
1/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Robotica e Animazione DigitaleIntroduzione
Prof. Alberto BorgheseDott. Gilberto Decaro
Dott. Fabio MelziCarlo Colombi
2/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Cos'è Open-R
The OPEN-R SDK is a cross-development environment based on gcc (C++) with which you can make software that works on AIBO (ERS-7, ERS-210, ERS-220, ERS-210A, and ERS-220A).
E' un SDK per la programmazione degli Aibo in C++
basato sui tool di GNU/Linux (disponibile in Windows
e MacOs sotto il semi-emulatore Linux Cygwin).
Si basa sui concetti di programmazione concorrente
e parallela.
Permette un controllo assoluto sul robot.
3/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Trovare Open-R
Sony has discontinued the OPEN-R SDK and is no longer distributing the system binaries and header files. An useful guide is available athttp://www.cs.cmu.edu/~tekkotsu/openr-install.htmlScaricare l'ambiente di sviluppo (SDK)Nell'area Download sono presenti questi file, seguiti dalla guida per l’installazione:• build-aibo-toolchain-3.3.6-r1.sh
• gcc-3.3.6.tar.bz2 (22.9MB, do not unzip)
• binutils-2.15.tar.bz2 (11.0MB, do not unzip)
• newlib-1.15.0.tar.gz (10.2MB, do not unzip)
• OPEN_R_SDK-1.1.5-r5.tar.gz (11.9MB, do not unzip)
4/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Da cosa è composto Open-R
• Open-r è basato sui tool di sviluppo base forniti con Linux.
– Gcc: compilatore C/C++ GNU
– Binutils: utility per la gestione dei file.
– Newlib: libreria standard C embedded, sviluppate
da RedHat
5/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Da cosa è composto Open-R
• E' necessario creare un ambiente di sviluppo (cross-develop) per processori MIPS in ambiente Linux.
6/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Da cosa è composto Open-R
Essendo basati su tool GNU distribuiti con GPL, è possibile creare un ambiente di sviluppo per i seguenti sistemi:
Linux: standardWindows: con emulatore (Cygwin)MacOs: con emulatore (Cygwin)
7/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Supporto per i programmi
Sistema Operativo: Aperios, Real Time sorgenti non disponibili.Supporto per dati e programmi: Aibo Programmable Memory Stick, rosa, da 8 o 16MB
SW applicativo
8/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Terminologia Open-R
• Oggetto Open-R: thread di elaborazione concorrente realtime.
• Comunicazione inter-object: sistema di comunicazione tra
oggetti Open-R.
• Servizio: gate (porta) di comunicazione di un oggetto Open-R.
– Observer: servizio in ricezione.
– Subject: servizio in spedizione.
9/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Oggetti Open-R
• Gli oggetti Open-R sono simili a thread realtime in ambiente Linux, eseguiti in parallelo.
• Ereditano dalla classe OObject.
• Oggetti di sistema (e.g.
OVirtualRobotComm,OVirtualRobotAudioComm, IPStack)
• Oggetti creati dall’Utente
10/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
OObject.hclass OObject {
public:
OObject();
virtual ~OObject();
void Init (const OSystemEvent& event);
void Start (const OSystemEvent& event);
void Stop (const OSystemEvent& event);
void Destroy(const OSystemEvent& event);
virtual OStatus DoInit (const OSystemEvent& event);
virtual OStatus DoStart (const OSystemEvent& event);
virtual OStatus DoStop (const OSystemEvent& event);
virtual OStatus DoDestroy(const OSystemEvent& event);
11/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
OObject.h
protected:
OID myOID_;
OStatus RegisterServiceEntry(const OServiceEntry& entry, const char* name);
private:
static OObjectManagerProxy objectManager_;
static OServiceManagerProxy serviceManager_;
// These method are forbidden.
OObject(const OObject&);
OObject& operator=(const OObject&);
};
12/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Comunicazione inter-object
Gli oggetti comunicano tra loro (e con gli oggetti di sistema) mediante:
Memoria condivisa (classe RCRegion)
Scambio di messaggi (tipi predefiniti, struct, array,
oggetti non polimorfici)
13/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Servizi•Ogni oggetto offre dei servizi di spedizione e ricezione dei messaggi (gate):
•Servizi subject: spediscono il messaggio verso observer, ricevono
Assert Ready da parte di observer.
•Servizi observer: ricevono un messaggio spedito da un subject,
spediscono Assert Ready ai subject.
Sintassi dei servizi:
<nome oggetto Open-R>.<nome del servizio>.<tipo di dato
scambiato>.
14/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Classi per la comunicazione
Classi per i Subject
Classe OSubject: classe per la gestione runtime dei servizi subject dell'oggetto; offre metodi utili alla loro gestione.
Classe OReadyEvent: oggetto passato come parametro alle entry point invocate al ricevimento di un Assert Ready.
Classi per gli Observer
Classe Oobserver: classe per la gestione runtime dei servizi observer dell'oggetto.
Classe ONotifyEvent: oggetto passato come parametro all'entry point invocata al ricevimento di un messaggio; contiene tra i vari campi il messaggio stesso.
15/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Esempi di comunicazione
• Esempio spedizione messaggio:
• subject[sbjMotionControl]
->SetData(&mStandCommand,sizeof(Motion::MotionCommand));
subject[sbjMotionControl]->NotifyObservers();
• Esempio ricezione messaggio:
• void IRSensor::Sensing(const ONotifyEvent& event){
OSensorFrameVectorData* sensorVec =
reinterpret_cast<OSensorFrameVectorData*>(const_cast<void*>(even
t.Data(0)));
...
observer[event.ObsIndex()]->AssertReady();
16/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
stub.cfg
Dichiara i servizi offerti dall’Oggetto in compilazione.
ObjectName: GeneraMoveNumOfOSubject: 1NumOfOObserver: 1Service: "GeneraMove.MotionControl.MotionCommand.S",
null, Ready()Service: "GeneraMove.DummyObserver.INT.O", null, null
Extra: TimerEnd()
.O sta per Observer.
.S sta per Subject.
17/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Tipi di Entry Point
Tipi di Entry Point di un oggetto Open-R:Standard: DoInit(), DoStart(), DoStop(), DoDestroy().Dei servizi: Ready().Extra Entry Point TimerEnd().
18/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
CONNECT.CFG
Definisce i canali di comunicazione tra gli Oggetti eseguiti mettendo in relazione i vari servizi.Inserito nella directory:OPEN-R\MW\CONF.Caricato all’avvio da Aperios.
# GeneraMove <--> Motion
#
GeneraMove.MotionControl.MotionCommand.S MotionObject.Control.MotionCommand.O
19/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
OS da caricare
3 tipi di sistema utilizzabili WBASIC: senza accesso alla rete WirelessWLAN: con accesso alla rete WirelessWCONSOLE: con rete Wireless e console Telnet per il debug (porta 59000)
Vengono scritte la prima volta sulla memory stick.
20/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Ormai tutti siamo dotati di un computer portatile con una schedawireless incorporata, Ora andremo a spiegare come configurare una connessione Ad Hoc (peer-to-peer) tra il nostro computer e AIBO con caricato il software W3AIBO (reperibile su http://homes.dsi.unimi.it/~borghese/Research/LinesResearch/Robotics/AIBO/Software/W3AIBOmodified.tar.gz )
permettendo così di monitorare il log di debug creato da AIBO tramite TELNET e visualizzare tramite un browser le immagini della telecamera di AIBO
Modalità configurazione accessomodalità Ad-hoc
21/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Come prima cosa visualizziamo le reti disponibili per la connessione, e andiamo a cliccare su “cambia impostazioni avanzate”.
1
22/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Nel nuovo pannello aperto dobbiamo andare a creare la connessione ad Hoc, clicchiamo quindi su “Reti senza fili”
2
23/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Clicchiamo su aggiungi
3
24/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
4
Compiliamo le informazioni richieste come indicato nella figura:
Nome della rete: RETEAIBO
Autenticazione: aperto
Cifratura dati: disabilitata
Spuntare l’opzione in basso per far riconoscere che è una connessione ad hoc.
25/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
6
5Chiusa la finestra precedente ritorniamo nelle impostazioni generali e con doppio click su “protocollo internet(TCP/IP)”andiamo a modificare l’indirizzo IP della nostra scheda.
26/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
7
Inseriamo l’indirizzo IP da noi scelto 192.168.3.1 e subnetmask 255.255.255.0
E confermiamo la nostra scelta.
27/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
8
Ora dovremmo poter visualizzare la rete appena creata.
Viene segnata come “non connesso”perché nessun AIBO è al momento connesso alla rete, ma comunque questa è attiva e pronta a ricevere connessioni.
28/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
9
Ora possiamo modificare le impostazioni relative alla connessione da parte di AIBO.
All’interno della memoryStickci posizioniamo nella cartella OPEN-R\SYSTEM\CONF e apriamo il file wlanconf.txt
29/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Andiamo a modificare il file con i parametri corretti per la connessione con il PC
HOSTNAME: il nome dell'AIBO sul network stabilito
ETHER IP: l'indirizzo IP del robot
ETHER NETMASK: la maschera della subnet
IP GATEWAY: l'indirizzo IP del gateway in uso
ESSID: il nome della rete a cui si vuole collegare AIBO
WEPENABLE: se impostato a 1 questo parametro attiva la crittograa WEP in caso contrario lo si lascia a 0
APMODE: questo parametro specifica la tipologia di rete utilizzata per connettersi e ha 3 settaggi: 0 per ad-hoc, 1 per infrastruttura e 2 per rilevare la modalità automaticamenteCHANNEL: canale usato nella modalità ad-hoc il suo valore può variare da 1a 11Altri parametri possibili ma non utilizzati
30/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Posizionare su ON l’interruttore WLANsugli AIBO che all’accensione si collegherà alla nostra rete ad hoc.
31/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
I due principali utilizzi sono tramite:
-TELNET, per monitorare i log di AIBO.
“telnet IPAIBO 59000”
IPAIBO nel nostro caso è 192.168.3.2
-Browser per visualizzare le immagini catturate da aibo“http://IPAIBO:60080/”
32/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Configurazione Rete WiFi modalità Access Point
WLANCONF.TXT Sulla memory stick nella directory: OPEN-R/SYSTEM/CONF
HOSTNAME = AIBOETHER_IP = 172.16.1.192ETHER_NETMASK = 255.255.255.0IP_GATEWAY = 172.16.1.180ESSID = AibonetWEPENABLE = 1WEPKEY = AIBO2APMODE = 2CHANNEL = 3#DNS_SERVER_1=10.0.1.1#DNS_DEFDNAME=example.net#USEDHCP = 1
33/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Configurazione Rete WiFi
HOSTNAME: il nome dell’Aibo in rete (massimo 8 caratteri).ETHER_IP: indirizzo IP dell’Aibo (da impostare nel caso non venga utilizzato il DHCP).ETHER_NETMASK: specifica la subnetmask dell’Aibo.IP_GATEWAY: l’indirizzo IP del Gateway.ESSID: il nome della rete Wireless a cui accedere (massimo 32 caratteri).WEPENABLE: 0 disattiva la cifratura dei dati WEP, 1 la attiva.WEPKEY: chiave di cifratura da utilizzare nel caso WEP sia attivato. E’ supportato il WEP64 (chiave a 40 bit o 5 caratteri) e WEP128 (chiave a 104bit o 13 caratteri). APMODE: specifica la modalità di rete Wireless da utilizzare: 0 per la modalità AdHoc, 1 per la modalità Infrastructured, 2 per il rilevamento automatico.
34/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Configurazione Rete WiFi
CHANNEL: cancale di comunicazione Wireless da utilizzare nella modalità Ad Hoc (sono permessi I canali compresi tra 1 e 11); per usare più Aibo in modalità Ad Hoc è necessario configurare entrambi sullo stesso canale.DNS_SERVER: specifica l’IP del server DNS da utilizzare (da specificare se non viene utilizzato il DHCP).DNS_DEFDNAME: specifica il nome di dominio di default.USEDHCP: 0 disabilita il DHCP, 1 lo abilita.
35/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Debugging
Macro: OSYSDEBUG((...)); equivalente ad una printf di C.
telnet <ip aibo> 59000 per la lettura degli output di OSYSDEBUG.-DOPENR_DEBUG:flag di compilazione per attivare la macro OSYSDEBUG(());
Se si hanno crash del processore (e.g. memory violation), viene salvato lo stato del processore nel file emon.log.
36/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Libreria “Motion” della Carnegie MellonUseremo la libreria di di gestione dei movimenti della Carnegie Mellon (www.cmu.edu).
Sviluppata per la loro squadra di RobocupBasata su cinematica inversa Ottimizzata con algoritmi geneticiGestisce tutti i servo motori dell'Aibo, il sottosistema audio e i LED
37/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Libreria Motion della Carnegie
Mellon• Sul sito dell'Aislab (ais-lab.dsi.unimi.it) sono
presenti:
Sorgenti dell'oggetto
Manuale di utilizzo
38/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Motion della Carnegie MellonOffre il servizio observer MotionObject.Control.MotionCommand.O per l'esecuzione di comandi di movimento.
I comandi di movimento sono specificati nella struct MotionCommand (descritta nel
file MotionInterface.h nella directory dell'oggetto Motion). Permette di specificare:
Direzione e velocità di spostamento dell'Aibo.
Movimento della testa.
Accensione dei LED (utili per Debug o per fornire maggiori informazioni di
esecuzione).
Suono di file audio predefiniti.
L'oggetto Motion non fornisce feed-back:
al ricevimento di un comando, manda un Assert Ready, quindi esegue il comando
fino al ricevimento di un altro comando.
39/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Esempio: GeneraMove
Oggetto GeneraMoveUtilizza gli oggetti:
Motion: dellaCarnegie Mellon per i movimentiPowerMonitor: per la gestione dell'alimentazione del caneShMemMgr: utilizzato internamente da Motion per la gestione della memoria condivisa.
Alla pressione del sensore posteriore dell'Aibo effettua un tiro di testa.
40/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Esempio: GeneraMove
41/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Esempio: Compilazione
•Nella root del progetto digitare:
•Make all
•Compila tutti gli oggetti del progetto
•Make install
•Installa tutti gli oggetti nella directory MS
42/42 http:\\homes.dsi.unimi.it\∼borghese\A.A. 2006-2007
Esempio: Installazione
La directory MS contiene l'albero delle directory da copiare nella memorystick.
Una volta copilato e installato il progetto (make install) èsufficiente copiare il contenuto di MS nella memorystick