Diapositiva 1 - Automazione@ingre
Transcript
Diapositiva 1 - Automazione@ingre
25/11/2010
Automation
Robotics and
System
CONTROL
@ Unimore
Università degli Studi
di Modena e Reggio Emilia
UNIMORE
Controllo di un Robot Mobile
Pioneer 3-DX
Controllo di Robot Industriali
Rescue Robotics
Obiettivo:
Salvare i sopravvissuti ad una catastrofe
Esempio:
• Incendio o terremoto in un palazzo
• Alcune persone non riescono ad uscire
2
1
25/11/2010
Tema della gara
Scenario:
Nel 2100, gli ospedali delle zone a rischio
sismico sono forniti di un innovativo
sistema: i lettini sono robot mobili. In caso
di terremoto, i robot sono in grado di
uscire dall’ospedale, e trasportare i malati
presso un’altra struttura.
3
Tema della gara
In caso di terremoto, la struttura
dell’ospedale può subire lesioni. Ad
esempio, alcuni muri possono crollare. I
robot non possono quindi fare
affidamento su mappe note dell’ambiente:
devono utilizzare i propri sensori per
trovare una via d’uscita.
4
2
25/11/2010
Tema della gara
Dettagli sul problema:
• Nell’ospedale c’è una sola porta dalla quale si
può uscire
• La porta si trova in posizione nota rispetto al
sistema di riferimento “esterno”: una volta
uscito, quindi, il robot “sa” da che parte si trova
la sua destinazione
• La posizione iniziale del robot è ignota (può
essere posizionato in una qualunque stanza, e
5
i muri possono essere crollati)
Esempio
H
Porta
6
3
25/11/2010
Robot utilizzati: Pioneer 3-DX
Pioneer 3-DX
•Differential drive
•WiFi
•Sensori Sonar
7
Pioneer 3-DX: sonar
Sonar
•8 sensori
•Numerati da 0 a 7
•Permettono al robot di
misurare la distanza
rispetto ad ostacoli
•Ogni sensore fornisce
la distanza, in mm,
dall’ostacolo più vicino
che incontra
8
4
25/11/2010
Programmazione
סּL’ambiente di sviluppo utilizzato si chiama ARIA (Advanced
Robotics Interface for Applications). È stato sviluppato da
MobileRobots, per la programmazione di questo robot
סּARIA è un ambiente di sviluppo open-source. I programmi
verranno scritti in C++
סּL’architettura di controllo del robot è di tipo client-server:
סּI programmi realizzati rappresentano il client
סּEssi comunicano con un server, che è rappresentato dal
sistema operativo (ARCOS) presente sul robot
סּARIA può essere utilizzato con sistema operativo Windows o
Linux: sul PC del laboratorio è presente la versione per linux
(pertanto, per l’esame si dovrà utilizzare questa versione)
9
Alcune generalità su linux
סּLinux è un sistema operativo free e open source
סּIn realtà, con linux si intende unicamente il kernel del sistema
operativo
סּKernel + software = distribuzione
סּEsistono centinaia di distribuzioni. Sul PC in laboratorio è
installata la distribuzione Ubuntu 8.04 (Hardy Heron)
סּÈ possibile utilizzare la distribuzione che preferite. La
scelta di Ubuntu è dovuta alla sua diffusione e semplicità
10
5
25/11/2010
Ubuntu
http://www.ubuntu-it.org/
סּDistribuzione linux basata su Debian (una delle distribuzioni più note e più
antiche)
סּÈ gratuito, e si può liberamente scaricare
סּViene rilasciata una versione nuova ogni 6 mesi. Il codice indica l’anno e il
mese di rilascio. Es.: Ubuntu 8.04 è stata rilasciata nel 2008, ad aprile
סּOltre al numero, le versioni di Ubuntu sono indicate anche con un
codename:
סּUbuntu 7.10 Gutsy Gibbon
סּUbuntu 8.04 Hardy Heron LTS
סּUbuntu 8.10 Intrepid Ibex
סּUbuntu 9.04 Jaunty Jackalope
סּUbuntu 9.10 Karmic Koala
סּUbuntu 10.04 Lucid Linx
11
סּUbuntu 10.10 Maverick Meerkat LTS (attuale)
Ubuntu 8.04 Hardy Heron
סּ
סּ
סּ
סּ
Per ogni versione di Ubuntu è garantito il supporto per 18 mesi
(aggiornamenti)
Ogni 2 anni, però, esce una versione LTS (Long Term Support), il cui
supporto è garantito per 3 anni. Per evitare problemi dovuti a frequenti
cambi di sistema operativo, abbiamo scelto di usare una versione LTS
Ormai è quindi giunto il momento di aggiornare il PC del laboratorio, cosa
che non è ancora stata fatta. Il software è però perfettamente funzionante,
e voi potete utilizzare, sui vostri PC, la distribuzione che preferite
Il software è però fornito in pacchetti .deb. Questi pacchetti si installano
“direttamente” su distribuzioni Debian-based (quindi Debian, Ubuntu, Mint,
Mepis…). Per altre distribuzioni, è necessario convertire i pacchetti in modo
da renderli compatibili.
12
6
25/11/2010
Installazione di linux
Installazione (per chi volesse installarlo sul proprio pc, su cui si suppone sia installato
Windows)
Ci sono varie alternative:
סּInserite il cd al boot del pc e seguite le istruzioni. Otterrete due sistemi
operativi affiancati, e al boot potrete scegliere quale avviare. Questo è
valido per qualunque distribuzione linux.
סּValido solo per Ubuntu Inserite il cd da Windows: tramite il
programma Wubi, è possibile creare un file che fungerà da hard disk
per Ubuntu. Si ottiene un risultato simile al caso precedente, ma con
performance inferiori. È più veloce disinstallare Ubuntu, in caso non vi
servisse più.
סּCreare una macchina virtuale, ad esempio con Virtualbox
http://www.virtualbox.org/ ed installate lì la distribuzione di linux che
preferite. Per informazioni, riferitevi al manuale di Virtualbox (NB:
sconsigliato! A volte ci sono problemi con la compilazione!!!)
13
Installazione software in Ubuntu
סּ
סּ
La maggior parte dei software per Ubuntu è presente all’interno di server,
chiamati repository, il cui elenco presente in alcuni file di configurazione del
sistema operativo
Per installare pacchetti o programmi dai repository (es. i pacchetti della
slide precedente), ci sono due possibilità:
1. Aprire un terminale (Applicazioni Accessori Terminale) e digitare il
seguente comando:
sudo apt-get install nomepacchetto
• sudo = Super User DO: in linux ci sono utenti normali e superutenti.
L’installazione di un software richiede i privilegi di superutente
• apt-get = è il programma che si occupa della gestione dei pacchetti
• install = opzione che dice ad apt-get cosa deve fare
Dopo aver premuto Invio, vi viene richiesta la password. La password è
la stessa utilizzata per accedere al sistema. NB: Mentre scrivete la
password, sul terminale non appare nulla, per ragioni di sicurezza 14
7
25/11/2010
Installazione software in Ubuntu
2. Utilizzare il tool grafico Synaptic
Sistema Amministrazione Gestore pacchetti Synaptic
Anche in questo caso viene richiesta la password
1 Cercare il
pacchetto
desiderato
2 Selezionare
il pacchetto
3 Premere
Applica
15
Istruzioni dettagliate
RTFM
סּ
סּ
La comunità linux è molto disponibile a fornire informazioni. Ma chiunque si
irrita se chi chiede informazioni non ha nemmeno provato ad utilizzare
Google per trovarle
Online è possibile trovare i manuali ufficiali e le guide create dalla
comunità: queste sono le fonti principali da cui attingere informazioni per
qualunque operazione
16
8
25/11/2010
Utilizzo del pc del laboratorio
סּ
סּ
Utente: roomba
Password: roomba
17
Installazione del software ARIA
סּ
סּ
סּ
Vi verranno forniti i pacchetti per l’installazione del software necessario per
la programmazione del robot.
Si tratta di 6 pacchetti .deb, che si possono installare in due modi:
סּDa interfaccia grafica, facendo doppio click
סּDa terminale, con il comando
sudo dpkg –i nomepacchetto
Verranno installate le librerie, necessarie per la compilazione dei
programmi. Inoltre, verranno installati alcuni software “accessori”:
סּMobileSim: è un simulatore, permette di testare i programmi realizzati
su un robot simulato
סּMobileEyes: quando è connesso al robot, permette di vedere
graficamente le letture dei sonar
סּMapper3: permette di disegnare la mappa all’interno della quale il robot
si muove, in simulazione
18
9
25/11/2010
Svolgimento del progetto
סּPartendo dagli esempi forniti (che commenteremo in seguito),
dovrete scrivere il codice C++ che permetta al robot di
svolgere il suo compito
סּDovrete quindi compilare il codice scritto, ottenendo quindi un
file eseguibile
סּRealizzerete quindi una mappa “di prova”, con il software
Mapper3, per testare il vostro software in simulazione,
utilizzando MobileSim
סּSuccessivamente, testerete il software sul robot fisico,
facendolo muovere per la stanza
סּAnalizzeremo ora nei dettagli tutti i passaggi
19
Compilazione
La compilazione deve essere
eseguita come superutente
Programma compilatore
Nome dell’eseguibile
che otterremo dopo la
compilazione
sudo g++ -o nomeprogramma -lAria -L/usr/local/Aria/lib
-I/usr/local/Aria/include -lpthread -lrt -ldl nomeprogramma.cpp
Nome del sorgente
Per conoscere le opzioni dei programmi, come si utilizzano, ecc.: RTFM! Dal
terminale:
סּg++ --help
per ottenere un riassunto breve delle principali opzioni
סּman g++
per ottenere il manuale completo
Oppure usare Google!
20
10
25/11/2010
Progetto per l’esame
סּIl robot deve uscire da un labirinto, ignoto. Necessiterà quindi
di informazioni sensoriali, provenienti dai sonar
סּSi muoverà, in base alle informazioni sensoriali
סּLe informazioni sensoriali gli serviranno anche per capire
quando ha raggiunto l’uscita del labirinto (es. riconoscere che
non ci sono più muri intorno)
סּUna volta uscito, deve raggiungere la posizione finale
desiderata
סּPer la scrittura del codice, possiamo usare qualunque editor di
testo. Tuttavia, risulta comodo utilizzare un editor apposito
(che evidenzia le parole chiave, ecc.). Usiamo ad esempio
Anjuta
21
anjuta myfile.cpp
Esempio di programma
סּVi verranno forniti tre programmi esempio, chiamati
1. criexample.cpp
2. criexample2.cpp
3. criexample3.cpp
סּIl primo programma contiene unicamente un elenco dei
comandi principali che utilizzerete nel vostro progetto
סּIl secondo e il terzo, invece, fanno sì che il robot svolga un
semplice compito
סּDescriveremo ora nel dettaglio questi due file, che potrete
utilizzare come traccia
סּScorreremo ora il codice, descrivendo i dettagli più rilevanti
22
11
25/11/2010
criexample.cpp
Librerie da includere
Nella prima parte, che è standard, si
inizializzano tutti gli oggetti che servono
per il funzionamento. Qui, ad esempio,
definiamo un oggetto che si chiamerà
robot, ed è definito secondo la classe
ArRobot.
Se, ad esempio, vogliamo definire un
intero, e chiamarlo n, scriveremo
int n
Messaggi di errore, in caso di problemi
Associo il sonar al robot
23
criexample.cpp
Commento
•Se il commento sta tutto in
una riga, la riga deve essere
preceduta da //
Es.: // Commento
•Se servono più righe, si
utilizza la seguente struttura:
/* Commento
su più righe */
24
12
25/11/2010
criexample.cpp
Inizializzazione
di variabili
numeriche
robot_position è una
variabile di classe ArPose
Due modi diversi di scrivere
a schermo un testo o un
valore
Assegno alla
variabile
Range_sensor il
valore ottenuto dalla
lettura del sonar
identificato dal
numero sensor. In
questo caso, sto
leggento il sonar
numero 3
25
criexample.cpp
Per impostare una
velocità (lineare) al
robot
Per impostare
l’orientamento del robot,
rispetto al sistema di
riferimento assoluto. Cioè, il
robot ruota finché il suo
orientamento è pari a 90°
Per impostare una rotazione
relativa. Cioè, il robot ruota
di 90°. Consigliato!
26
13
25/11/2010
criexample.cpp
Salvo la posizione
corrente del robot (x, y,
Ɵ) nella variabile
robot_position
Salvo nella variabile a la
coordinata x della posizione
di robot. Per estrarre y e Ɵ
si usano, rispettivamente,
robot.getY(); e robot.getTh();
Per inserire un’attesa
27
criexample.cpp
Per fermare il robot
Per imporre uno
spostamento al robot: si
sposterà di 1000mm,
linearmente
28
14
25/11/2010
criexample2.cpp
סּIl programma descritto finora, criexample.cpp, è
semplicemente una raccolta di comandi
סּPotete utilizzarlo come “base”, sulla quale costruire il vostro
programma
סּAnalizzeremo ora criexample2.cpp, che rappresenta un
semplice esempio di algoritmo di controllo
סּIl robot:
סּSi muove a velocità costante, linearmente, finché non
incontra un ostacolo
סּQuando incontra un ostacolo, ruota di 90°
סּSuccessivamente, si muove linearmente a velocità
costante, per un tempo predefinito
29
criexample2.cpp
Come nell’esempio
precedente, la prima
parte è standard.
Si includono le librerie,
e si inizializzano tutti gli
oggetti necessari.
30
15
25/11/2010
criexample2.cpp
Variabile in cui salviamo la lettura di uno dei sonar
Il robot si muove con velocità costante, in avanti
Vogliamo si muova
finché non incontra
un ostacolo.
Selezioniamo quindi
il sonar numero 3: se
questo sonar rileva
“qualcosa”, significa
che c’è un ostacolo
di fronte al robot
31
criexample2.cpp
Ad ogni step, la lettura del sonar 3 viene salvata
nella variabile Range_sensor. La lettura viene
quindi scritta a schermo. Se, ad esempio, il valore
di Range_sensor è 1500, viene scritto a schermo:
Sensor number 3 reading 1500
Per terminare la riga e
andare a capo
32
16
25/11/2010
criexample2.cpp
Non appena il dato letto dal sonar è inferiore a
1000 (cioè, viene rilevato un ostacolo a distanza
inferiore a 1000mm), si pone a zero il valore della
variabile c. Questo causa l’uscita dal ciclo while.
Il robot si ferma
Il robot ruota di
90°, in senso
antiorario
33
criexample2.cpp
Il robot si muove con velocità costante, in avanti
Attesa di 30
secondi
Il robot si ferma, e il
programma termina
34
17
25/11/2010
criexample3.cpp
סּAnalizzeremo ora criexample3.cpp, che rappresenta un
semplice esempio di algoritmo di controllo
סּIl robot:
סּSi muove a velocità costante, linearmente, finché non
incontra un ostacolo
סּQuando incontra un ostacolo, ruota di 90°
סּRipete questo compito all’infinito
סּAd ogni step, stampa a schermo la lettura di uno dei sonar,
e la propria posizione (coordinate x e y)
35
criexample3.cpp
Questo ciclo viene ripetuto per sempre
Il robot si muove con velocità costante, in avanti
Stampa a schermo della lettura del sonar
Stampa a schermo delle coordinate x e y
Il robot si ferma, ruota di 90°, e il ciclo riprende
36
18
25/11/2010
Compilazione ed esecuzione
Una volta scritto il codice, è necessario compilarlo, per ottenere un file eseguibile:
1. Aprire il terminale, e portarsi nella directory contenente il file .cpp:
cd /home/roomba/mydirectory
2. Eseguire la compilazione, come visto in precedenza
sudo g++ -o criexample2 -lAria -L/usr/local/Aria/lib
-I/usr/local/Aria/include -lpthread -lrt -ldl criexample2.cpp
Per eseguire il file eseguibile appena ottenuto:
סּSe stiamo utilizzando il simulatore:
1. Avviare il programma MobileSim, selezionando la mappa desiderata
2. Dal terminale, portarsi nella directory contenente il file eseguibile appena
compilato:
cd /home/roomba/mydirectory
3.
Eseguire il file
./criexample2
37
Compilazione ed esecuzione
Per eseguire il file eseguibile appena ottenuto:
סּSe stiamo utilizzando il robot:
1. Accendere il robot
2. Attivare la connessione WiFi del PC, e selezionare la rete LTRX_IBSS
3. Dal terminale, portarsi nella directory contenente il file eseguibile appena
compilato:
cd /home/roomba/mydirectory
4.
Eseguire il file
./criexample2 –rh 10.0.126.11
Dove 10.0.126.11 è l’indirizzo ip che identifica il robot all’interno della rete
38
19
25/11/2010
Alcuni suggerimenti
Per terminare un programma, durante la sua esecuzione, si può utilizzare la
combinazione di tasti CTRL+C, oppure CTRL+Z, tenendo in primo piano la
finestra di terminale in cui il programma è in esecuzione.
Caratteri speciali, su Linux:
סּ
Alt Gr + ì = ~
סּ
Alt Gr + 7 = Alt Gr + Shift + [ = {
סּ
Alt Gr + 0 = Alt Gr + Shift + ] = }
39
Gara: Scopo e regole
Scopo della gara: uscire dal labirinto, e
raggiungere il goal
סּIl gruppo vincitore sarà quello che raggiungerà lo scopo della
gara nel minor tempo possibile
סּLimite di tempo: 10 minuti
סּIl cronometro verrà avviato nel momento in cui il gruppo farà
partire il programma, e verrà fermato al raggiungimento del
goal, o allo scadere del limite di tempo
40
20
25/11/2010
Gara: Scopo e regole
סּÈ necessario evitare le collisioni con gli ostacoli! Pertanto, le
pareti possono essere solo “toccate” dal robot. Se il robot
abbatte/attraversa le pareti, la missione è fallita, e la squadra è
eliminata
סּIl robot deve raggiungere il goal, e fermarsi. La posizione del
goal sarà identificata con una X, posta sul pavimento. Sarà poi
disegnata una circonferenza di raggio 20cm, attorno al goal. Il
robot raggiunge il goal se si sovrappone, almeno parzialmente,
all’area racchiusa dalla circonferenza.
Se il robot si ferma fuori da questa area, si avrà una penalità:
al tempo totale verrà aggiunto un 40%
41
Gara: L’ambiente
Δx
X
Dati:
Δy
L1= 210cm
L2= 100 cm
L3= 140 cm
L4= 310 cm
L5= 170 cm
L6= 100 cm
L5
L1
L2
?
L4
L6
Δx= 120 cm
Δy= 140 cm
I corridoi avranno larghezza
minima pari a 70cm
L3
42
21
25/11/2010
Utilizzo del laboratorio
סּ
Per l’utilizzo del laboratorio, utilizzate il calendario “Robot Mobile Pioneer” su
Google Calendar. Per visualizzare il calendario, seguite il seguente link
http://www.google.com/calendar/embed?src=0es9q1lf05e48aqvqc1fihhf2s%40group.calendar.google.com&ctz=Europe/Rome
סּ
סּ
סּ
סּ
Ogni gruppo può prenotare il laboratorio per un periodo di tempo non superiore a
due ore consecutive e quattro ore settimanali
Per prenotarvi, inviate un’email a [email protected]
Sul pc del laboratorio, ogni gruppo deve creare una directory all’interno della home,
da utilizzare come directory di lavoro
mkdir /home/roomba/gruppo
Potete utilizzare i vostri PC personali per fare simulazioni, e prove (anche a casa). Il
giorno della gara, però, sarà necessario utilizzare il PC del laboratorio.
43
Note sulla gara e l’esame
סּ
סּ
סּ
סּ
Ogni gruppo deve
סּScegliere un nome
סּDesignare un team-leader
Il team-leader dovrà quindi inviare un’email a [email protected],
specificando il nome del gruppo e i nomi dei componenti.
Ogni comunicazione inerente la gara verrà inviata ai team-leader
Ad ogni team-leader verrà fornito il software (circa 50MB, quindi non via
email)
44
22
25/11/2010
Note sulla gara e l’esame
סּ
סּ
סּ
סּ
סּ
סּ
סּ
Se dovessero verificarsi problemi (ad esempio perdita di comunicazione, il
PC che si blocca, ecc.), la prova verrà ripetuta
Ogni gruppo potrà eseguire 2 volte la missione e, ai fini della classifica,
verrà considerato unicamente il risultato migliore
Risulterà vincitore il la squadra che svolgerà la missione nel minor tempo
(tenendo conto di eventuali penalità)
Ogni decisione presa dalla commissione è da considerarsi
insindacabile
Ad ogni componente della squadra vincitrice verranno attribuiti 3 punti, ad
ogni componente della squadra seconda classificata 2 punti, ad ogni
componente della squadra seconda classificata 1 punto. Questi punti si
aggiungeranno alla voto ottenuto nell’esame di Controllo di Robot
Industriali
Il voto è determinato al 70% dalla prova orale, e al 30% da una relazione
sulle esperienze di laboratorio (robot antropomorfo e robot mobili)
La relazione dovrà essere sintetica, e dovrà spiegare e motivare ogni45
scelta progettuale
Se avete dubbi
[email protected]
0522 52 2666
46
23