Professional Documents
Culture Documents
FACOLTÀ DI INGEGNERIA
Tesi di Laurea in
PROGRAMMAZIONE DEI CALCOLATORI
Laureando: Relatore:
Damiano VITTOR Dott. Ing. Massimiliano NOLICH
____________________________________
INDICE ......................................................................................................................... I
INTRODUZIONE..............................................................................................................1
Il materiale ................................................................................................................................ 2
L’ambiente di sviluppo .............................................................................................................. 3
Fasi dello sviluppo ..................................................................................................................... 3
IL PROGETTO............................................................................................................... 13
Lo sviluppo di controlli per Robot Mobili ................................................................................ 13
L’architettura generale............................................................................................................ 14
I task RTAI ................................................................................................................................ 15
Le FIFO e la Comunicazione Interprocesso ............................................................................. 17
Player, un framework Robotico .............................................................................................. 18
Il collegamento elettrico delle varie parti del robot ............................................................... 19
2d120xdriver ........................................................................................................................... 32
Driver MotoriDriver ................................................................................................................. 35
Lo script di configurazione ...................................................................................................... 35
CONCLUSIONI ............................................................................................................. 37
Risultati raggiunti .................................................................................................................... 37
Prospettive di sviluppo ............................................................................................................ 37
APPENDICI ................................................................................................................. 39
Redboot ................................................................................................................................... 39
Setup e configurazione di un server NFS ................................................................................. 41
Yaffs File-System...................................................................................................................... 42
RINGRAZIAMENTI ........................................................................................................ 45
BIBLIOGRAFIA ............................................................................................................. 47
ii
INTRODUZIONE
1
Introduzione
I Vincoli
Il lavoro è stato sviluppato nel laboratorio Smartlab del Dipartimento di
Elettrotecnica Elettronica e Informatica della Facoltà di Ingegneria presso
l’Università degli Studi di Trieste. Il materiale necessario al progetto era già stato
acquistato dal laboratorio per altre attività e quindi è stato utilizzato anche in
funzione di questo lavoro. Ciò è stato vincolante sia nella scelta dell’ambiente di
sviluppo sia in quella del sistema operativo. Infatti in base ai sistemi operativi
supportati dalla ditta produttrice dell’hardware, al loro costo economico e alla
possibilità di essere impiegati con processi real-time la scelta è dovuta ricadere
più o meno obbligatoriamente su un sistema GNU/Linux.
Il materiale
• Sistema embedded Ts-7250 della Technologic Systems
• Sensori ultrasuoni Devantech SRF005
• Sensori infrarosso Sharp 2D120X
• Sensori Odometrici HEDS-5505 della Agilent Technologies
• Driver Motori #203 della Wirz Electronics
• Motori m455m63 della Globe Motors
Devantech SRF005
Il sensore SRF005 è un sensore distanziometrico a ultrasuoni che integra già un
microcontrollore che gestisce la generazione degli impulsi e la loro rilevazione. E’
controllabile tramite delle porte di Digital I/O (DIO).
La sua portata è di circa 4 metri con una precisione dell’ordine del centimetro.
2
Introduzione
Sharp GP2D120X
Il sensore Sharp GP2D120X è un sensore distanziometrico a infrarosso e funziona
come un normale fotodiodo. Va collegato direttamente ad un analog-digital
converter (ADC) per la lettura della caduta di tensione.
La sua portata è di circa 0,3 metri con una precisione superiore al centrimetro.
L’ambiente di sviluppo
La cross-compilazione dei moduli rtai, del kernel e il servizio nfs sono stati eseguiti
su di un sistema Gnu/Linux Kubuntu 8.04 eseguito come macchina virtuale su un
host Windows VISTA. Per lo sviluppo dei driver si è scelto di utilizzare KDevelop
come IDE e make come build-tool. Il gestore di macchine virtuali utilizzato è
VirtualBox prodotto dalla SUN Microsystems.
VirtualBox, Kubuntu, KDevelop e make sono software scaricabili ed utilizzabili
gratuitamente.
3
Introduzione
4
IL SISTEMA EMBEDDED
Il Sistema Operativo
La Technologic System supporta per la TS-7250 GNU/Linux, WinCE e Netbsd. La
scheda viene precaricata dalla fabbrica con una distribuzione debian minimale
(TS-Linux), basata su kernel linux 2.4, realizzata dal produttore stesso.
5
Il sistema embedded
La preparazione
Il bootloader
Sulla TS-7250 è precaricato un bootloader basato su eCos, un sistema operativo
real-time minimale per sistemi embedded. Questo bootloader si chiama RedBoot
ed è stato utilizzato nel nostro progetto per il caricamento dell’immagine del
kernel, per la sua esecuzione e per scrivere l’immagine stessa sulla memoria flash
della scheda.
Per questioni di praticità, a tal proposito, sono stati realizzati due script di avvio
separati per Redboot: uno utilizzato in fase di sviluppo, ed uno per il sistema finale
“dimostrativo”.
Per quanto riguarda l’utilizzo di Redboot si è provveduto a riportare nel testo,
quando necessario, i comandi utilizzati.
Per ulteriori dettagli su Redboot sono stati scritti degli approfondimenti
nell’appendice.
1
ftp://ftp.embeddedarm.com
6
Il sistema embedded
-EXTRAVERSION =-ts11
+EXTRAVERSION =-ts11-rt
+CROSS_COMPILE = /tools/crosstool/arm-9tdmi-
linux-gnu/gcc-3.3.4-glibc-2.3.2/bin/arm-
9tdmi-linux-gnu-
+DEPMOD= /bin/true
E’ stato, poi, bypassato l’utilizzo del comando depmod sostituendolo con
/bin/true in quanto non è in grado di gestire la cross-compilazione.
E’ stata quindi applicata la patch con il comando:
ARCH := arm
CROSS_COMPILE = /tools/crosstool/arm-9tdmi-
linux-gnu/gcc-3.3.4-glibc-2.3.2/bin/arm-
9tdmi-linux-gnu-
DEPMOD = /bin/true
7
Il sistema embedded
make [ts7250_config|ts7250_2k_config]
per configurare le periferiche della scheda
make oldconfig
per configurare il supporto RTAI attivando quando richiesto solamente attivando
solamente ADEOS e ADEOS DOMAINS ARE THREAD
e quindi
make dep
make menuconfig
A questo punto sarà possibile visualizzare la configurazione finora impostata ed
eventualmente integrare il supporto per altre periferiche.
Nel nostro caso in specifico i seguenti moduli sono stati attivati/integrati:
1. Loadable module support
1.1. Kernel module loader
2. System Type
2.1. EP9301 Options
2.1.1. EP9301 Internal DMA Support
3. Plug and Play configuration
3.1. Plug and Play support
3.1.1. ISA Plug and Play support
4. Sound
4.1. Sound support
4.1.1. OSS sound modules
4.1.2. Verbose initialisation
5. USB support
5.1. USB verbose debug messages
5.2. USB Audio support
8
Il sistema embedded
make
make zImage
make modules
make modules_install INSTALL_MOD_PATH=<percorso
di destinazione>
A questo punto si ha a disposizione nella directory ./arch/arm/boot/ l’immagine
del kernel da installare nella scheda e (nella cartella specificata dalla variabile
INSTALL_MOD_PATH) i moduli del kernel da inserire nel file system della scheda
arm.
make ARCH=arm
CROSS_COMPILE=/tools/crosstool/arm-9tdmi-linux-
gnu/gcc-3.3.4-glibc-2.3.2/bin/arm-9tdmi-
linux-gnu-
make install
Nel menu di configurazione bisogna prestare attenzione a selezionare il giusto
path ai sorgenti del kernel che si è compilato precedentemente. E inoltre
conveniente specificare il percorso tipo /usr/realtime dove verrà effettuata la
build da spostare nella board.
9
Il sistema embedded
Compilazione di player
Per compilare una versione minimale di player bisogna disporre delle seguenti
librerie oltre quelle già presenti nel file-system base della TS-7250. Queste
ovviamente devono essere compilate per la piattaforma arm:
libpthread
libsdtc++
libtools
Le prime due erano disponibili sul file-system esteso chiamato debian-sarge-
1.14.tar reperibile sul ftp della technology system.
La terza è stata ricompilata in quanto non era disponibile un binario già pronto. In
particolare è stata usata la versione libtool-1.5.26 per la compilazione della
libreria. La procedura usata è stata quella riportata nel file INSTALL della root dei
sorgenti. E’ importante ricordarsi di fare l’export dei path per i binari del cross
compilatore e assicurarsi che lo stesso venga utilizzato.
Per quanto riguarda player bisogna quindi impostare le seguenti variabile
d’ambiente:
export CC=gcc
export PATH=<crosscompilers binaries path>
export CCFLAGS = -I <kernel headers path> -l
<libtool headers path>
export LDFLAGS = -L libs <libtool path>
Dove ai blocchi comprendenti le parentesi angolari vanno sostituiti i relativi
percorsi assoluti necessari.
Quindi si può procedere con la configurazione del pacchetto con il comando:
./configure --prefix=/home/damiano/Player-
Stage/build/ --build=x86-linux --host=arm-
9tdmi-linux-gnu --disable-alldrivers --
disable-debug --disable-tests --disable-
examples
E alla compilazione con
make install
Il risultato della compilazione sarà posto nella directory specificata dal parametro
PREFIX del configure e cioè nel nostro caso in /home/damiano/Player-
Stage/build/.
In ogni caso è sconsigliabile tentare di compilare player direttamente sulla scheda
arm, in quanto non è una strada facilmente percorribile.
10
Il sistema embedded
Il sistema di sviluppo
Il primo modo “di sviluppo” prevede la condivisione del root file-system tramite
una seconda macchina di sviluppo. Grazie a ciò, non è stato necessario aggiornare
di continuo il file-system presente sulla flash della scheda ad ogni modifica delle
librerie o dei moduli sviluppata. Inoltre, tale approccio ciò non ci ha vincolato alla
dimensioni della flash.
Questo è stato realizzato utilizzando una condivisione nfs contentente il file-
system che è stato creato (maggiori dettagli a questo proposito vengono forniti in
appendice) e provvedendo a modificare i parametri del comando exec dello script
di caricamento del kernel nel bootloader. In particolare è stato rimosso il
parametro root ed è stato aggiunto il parametro nfsroot come segue:
11
Il sistema embedded
dove
• <ipnfsserver> è l’ip del server che fa da host al servizio nfs
• <nome condivisione> è il nome della condivisione nfs contenente
il root file system da usare
Il sistema di Produzione
Il sistema di produzione è indipendente da altre macchine. Anzi, non è previsto sia
collegato in rete ad alcuna altra macchina. Deve quindi caricare il file-system dalla
memoria flash integrata nella scheda.
Per caricare il file-system sulla scheda è necessario seguire la procedura per il
ripristino del file-system specificata nell’appendice.
C’è da considerare, inoltre, un problema riguardante le dimensione del file-system
stesso. La scheda a nostra disposizione monta una memoria flash troppo piccola
(32MB) rispetto la dimensione necessaria a ospitare tutte le librerie di cui ha
bisogno Player per funzionare. Si è deciso quindi di dividere il file-system
spostando il contenuto di /usr su una memoria flash esterna da collegare alla
scheda tramite porta USB. Per fare ciò si è partizionata e formattata quest’ultima
con un file-system ext3 (con il comando mkfs). A questo punto non è rimasto che
copiare al suo interno la cartella /usr e fare il mount della stessa sul sistema con i
seguenti comandi.
/usr/bin/loadUSBModules.sh
Per caricare i moduli di gestione dell’USB.
mount -t auto
/dev/scsi/host0/bus0/target0/lun0/part1
/usr
Per fare il mount della prima partizione della chiavetta USB.
E’ tuttavia consigliabile salvare il primo script in /etc/init.d e richiamarlo con un
link simbolico in /etc/rc.d/rc3.d/ e aggiungere nel file /etc/fstab la seguente riga:
/dev/scsi/host0/bus0/target0/lun0/part1 ext3
/usr
Infine sarà necessario modificare la linea di avvio del kernel nello script di avvio
del bootloader nel seguente modo:
12
IL PROGETTO
13
Il progetto
L’architettura generale
Sono stati realizzati da me quattro task real-time atti a leggere le informazioni dai
sensori e al comando dei motori. Sul lato opposto, tre driver per il framework
player (sempre sviluppati da me) si occupano della gestione dei task real-time e
dell’interpretazione dei dati letti. Lo scambio delle informazioni tra il processo del
server player e dei task real-time avviene tramite FIFO di sistema. I driver di player
si occupano di rendere le informazioni tratte dei sensori disponibili tramite delle
interfacce standard ad altri driver Player o ai client stessi. Tale architettura viene
illustrata nel seguente diagramma:
14
Il progetto
I task RTAI
I task RTAI sono, in pratica, dei moduli del kernel linux che fanno uso di
caratteristiche speciali tipiche dei sistemi operativi real-time introdotte da RTAI.
15
Il progetto
int init_module(void)
void cleanup_module(void)
rt_task_init;
rt_task_make_periodic_relative_ns
start_rt_timer
stop_rt_timer();
rt_task_delete();
16
Il progetto
Le FIFO e la Comunicazione
Interprocesso
Uno dei punti cruciali del progetto è creare un sistema di comunicazione che
permetta di trasferire le informazione tra i task in real-time e il processo in user-
space (Player).
Per fare ciò, purtroppo, non è possibile utilizzare gli strumenti classici
dell’ambiente linux per l’IPC (Inter Process Communication). RTAI però mette a
disposizione strumenti simili che sopperiscono a questa mancanza.
Questi strumenti sono:
S HARED MEMORY
Viene allocato un blocco di memoria che può essere letto e scritto da tutti
i processi attivi nella macchina. Si accede a questa memoria direttamente
con un puntatore. Per questo motivo bisogna garantire l’accesso in mutua
esclusione per il corretto funzionamento. Ciò può avvenire tramite dei
semafori. E’ possibile accedere alla memoria condivisa tramite un file di
sistema. (/dev/rtai_shm)
17
Il progetto
M AILBOX
In questo caso la mailbox fa da centro di smistamento dei messaggi. Più
produttori e consumatori possono registrarsi contemporaneamente alla
stessa mailbox e mandare e ricevere messaggi.
Nel nostro caso è stato scelto di utilizzare delle FIFO per le IPC in quanto l’uso che
ne dobbiamo fare è limitato e il loro utilizzo è molto semplice. Per utilizzare una
FIFO in un task real-time è sufficiente utilizzare i seguenti comandi:
18
Il progetto
Player mette a
disposizione, oltre che
queste librerie di driver e
interfacce, anche
numerosi tool di utilità per
chi sviluppa applicazioni
per la robotica. Tra questi
tool alcuni sono di
notevole interessere ed in
particolare il programma
“player” che è in pratica
un server di rete per il
controllo robotico e
permette quindi anche la
realizzazione di una
piattaforma robotica
distribuita.
19
Il progetto
20
I TASK REALTIME
21
I Task RealTime
Il codice
Invio il trigger:
outb_p(DIO_OUTPUT_PIN_MASK,DIO_LCD_DATA);
rt_sleep(nano2count(15000LL));
outb_p(0x00,DIO_LCD_DATA);
Attendo che il segnale si alzi sulla seconda linea DIO e salvo un timestamp:
22
I Task RealTime
Il codice
L’inizializzazione
23
I Task RealTime
Il modulo RTAI per la gestione dei MOTORI colloquia attraverso quattro porte di
digital I/O (due per motore) con il circuito Wirz per il controllo motori.
Il circuito ha bisogno di due segnali distinti in ingresso per ogni motore,
rappresentanti la direzione del moto e la velocità. Per quanto riguarda la
selezione della direzione sarà necessario alternare il livello del segnale sulla porta
di digital I/O per invertire la direzione. Si noti che però occorre eseguire
l’operazione a motori fermi per non danneggiare il circuito. Per quanto riguarda
invece la modifica di velocità di rotazione dei motori, questa avviene tramite la
generazione di un’onda quadra a frequenza fissa (tra i 100Hz e i 20kHz) e variando
il “duty cycle”, ovverosia il tempo in cui il livello di tensione è alto nel periodo.
E’ stato creato quindi un task con il compito di generare il segnale per i due motori
in base ai dati letti dalla FIFO di input con la procedura rappresentata nel
seguente diagramma.
24
I Task RealTime
V e lo c it à V e lo c it à
M o to re M o to re Si
A B Vel A > 0 A ccendi A
No
Si
Vel B > 0 A ccendi B
A s p e t ta la Si
Vel A > 0 e
p r o s s im a No
Vel B > 0
s c h e d u la z io n e
No
No
Vel B > A
Si
Si A tte n d i il Si A tte n d i il
Vel B > 0 “ D u ty T im e ” Vel A > 0 “ D u ty T im e ”
di B di A
No No
Spegni B Spegni A
A tte n d i il A tte n d i il
A tt e n d i il “ D u ty A tt e n d i il “ D u ty
“ D u ty T im e ” “ D u ty T im e ”
T im e ” d i A T im e ” d i B
di A - B di B - A
Spegni A Spegni B
Il codice
N.B. Il funzionamento del seguente codice non è stato verificato sul robot
25
I Task RealTime
outb_p(inb_p(DIO_MOTOR_DATA)&
0xFB,DIO_MOTOR_DATA);
}
else {
//aspetto e spengo B per primo
if (pwm_duty_cycle_B > 0) {
time =
TASK_PWM_PERIOD*pwm_duty_cycle_B/0x100;
rt_sleep(nano2count(time));
outb_p(inb_p(DIO_MOTOR_DATA)&
0xFB,DIO_MOTOR_DATA);
}
//quindi spengo A
rt_sleep(nano2count(TASK_PWM_PERIOD
- time));
outb_p(inb_p(DIO_MOTOR_DATA)&
0xFE,DIO_MOTOR_DATA);
}
}
rt_task_wait_period();
26
I Task RealTime
Il codice
// PUNTO 1
state=inb_p(PORTB);
nowa=state & DIO_ODOMETRY1_MASK;
nowb=state & DIO_ODOMETRY2_MASK;
// PUNTO 2
tempa = step_odo(&olda,nowa,DIO_ODOMETRY1_MASK);
tempb = step_odo(&oldb,nowb,DIO_ODOMETRY2_MASK);
// PUNTO 3
counta+=(signed int)tempa;
countb-=(signed int)tempb;
dove step_odo() assume come argomenti lo stato passato, lo stato attuale del
segnale e la maschera da usare per poi determinare il verso di rotazione.
Questa operazione viene eseguita secondo il grafico riportato all’inizio del
capitoletto.
27
I DRIVER PLAYER
I driver Player
Player può caricare
dinamicamente delle
estensioni chiamate
“driver” dagli
sviluppatori di player.
Questi driver
permettono sia di
integrare i vari
disposivi del robot
all’interno del
framework player, sia
di associare tra loro altri driver per esporre interfacce di livello più alto.
L’interfaccia di un driver presenta tre metodi principali:
• Setup
• Shutdown
• ProcessMessage
In particolare, i primi due vengono chiamati quando il modulo viene attivato o
disattivato.
Il terzo, invece, viene eseguito ogniqualvolta il driver è pronto per ricevere i
messaggi dagli altri driver a cui è collegato e ci sono dei messaggi in attesa di
essere elaborati. Il lavoro del driver verrà eseguito quindi all’interno di un thread
dove verrà gestito il flusso di informazioni come mostrato nell’immagine in alto.
29
I Driver Player
Srf005driver
er
Questo driver è dedicato a leggere i dati del
sensore a ultrasuoni dalla FIFO e metterli a
disposizione della piattaforma player attraverso
l’interfaccia “sonar”.. Oltre a ciò il driver si
occupa di installare e rimuovere il modulo real-
real
time della gestione del sensore quando
richiesto.. In questo modo è possibile sia
risparmiare capacità di calcolo sia allungare
l’autonomia del robot.
L’interfaccia “sonar” che questo driver espone
gestisce schiere di sensori ad ultrasuoni.
u Essa
prevede che il driver:
30
I Driver Player
31
I Driver Player
system("insmod rt_sonar.o");
system("rmmod rt_sonar.o");
2d120xdriver
Questo driver è dedicato alla lla lettura della FIFO contenente i dati acquisiti dal
d
sensore infrarosso e all’inserimento
mento degli stessi all’interno del sistema di eventi di
Player. L’interfaccia Player
layer per gli array di sensori infrarosso è molto simile a
quella per i sensori ad ultrasuoni.
ultrasuoni In questo caso, però, è necessario fare qualche
elaborazione in più per interpretare i dati letti dai sensori.
In particolare, la funzione che fa corrispondere alla distanza di un oggetto posto
dinanzi al sensore una tensione non è invertibile e quindi sarà necessario adottare
degli accorgimenti per poter ottenere delle letture significative.
Questo driver si occuperà come il precedente driver per il sensore ad ultrasuoni
delle seguenti operazioni:
• Leggere i dati dalla FIFO e trasformali in misure di distanza
• Rispondere alle richieste sulla disposizione dei sensori infrarosso
• Trasmettere
ttere le letture di tensione e di distanza fatte
32
I Driver Player
33
I Driver Player
0.31 0.37 0.43 0.52 0.65 0.73 0.81 0.93 1.05 1.26 1.4 1.55 1.76 2.1 2.34 2.73 2.98 3.3
40 35 30 25 20 18 16 14 12 10 9 8 7 6 5 4 3.5 3
Nel costruttore del driver vengono calcolati i coefficienti angolari delle spezzate.
Una volta determinata la spezzata di appartenenza del punto, questo dato verrà
poi utilizzato per calcolare la distanza effettiva nel seguente modo:
distance = uppermapping[1][c-1]
uppermapp +
m[c]*(irdaValue - uppermapping[0][c-1]);
dove uppermapping è l’array sopra m è l’array dei
’array rappresentante la tabella qua sopra,
coefficienti angolari delle spezzate relative ai punti noti e irdavalue è il valore
della tensione rilevata.
34
I Driver Player
Driver MotoriDriver
Moto
Il driver motori ha lo scopo sia di comandare
l’azionamento dei motori sia di leggere le informazioni degli odometri per fornire
una stima della posizione del robot.
L’interfaccia player che questo driver implementa è la “position2d”.
I compiti principali
incipali di questo driver saranno di:
1. Leggere i dati odometrici dal modulo RTAI per i motori tramite la FIFO.
2. Fornire una geometria del robot, cioè la sua forma.
3. Regolare tramite la FIFO la velocità dei motori per ottenere velocità assiali
as
richieste.
4. Fornire la posizione stimata del robot sul piano.
Questo
uesto driver è stata realizzato solo in parte e quindi non sarà qui discusso.
Lo script di configurazione
Per utilizzaree il nostro robot all’interno del programma player sarà necessario
creare un script di configurazione che associa
associa al robot una serie di driver che ne
rappresentano le funzionalità e le relative configurazioni.
Nelel nostro caso dovremo definire tre driver: uno per l’array di sensori ad
ultrasuoni, uno per l’array di sensori ad infrarosso e, infine, uno per l’odometria e
il comando motori.. Il terzo driver, però, purtroppo non è stato completato per
mancanza dell’hardware.
35
I Driver Player
#imhotep.cfg
driver
(
name "2d120xdriver"
plugin "lib2d120xdriver"
provides ["ir:0"]
fifo "/dev/rtf/1"
)
driver
(
name "srf005driver"
plugin "libsrf005driver"
provides ["sonar:0"]
fifo "/dev/rtf/0"
)
36
CONCLUSIONI
Risultati raggiunti
Nell’ambito di questo progetto, si è riuscito a ricompilare il kernel del sistema
operativo TS-Linux con le estensioni real-time. E’ stato inoltre cross-compilato il
framework Player e le librerie richieste. Player, quindi, è ora eseguibile sulla
piattaforma ARM.
Si son realizzati i moduli per la lettura in real-time dei sensori e per il comando dei
motori. Sono stati sviluppati pure i driver Player che fanno uso di questi ultimi per
integrare la nostra piattaforma robotica nell’architettura di Player. Unica
eccezione per il driver Player per il controllo motori che non è stato terminato per
mancanza dell’hardware necessario.
Grazie a questi risultati, è ora possibile scrivere una logica di controllo
indipendente dalla piattaforma robotica e utilizzabile con questo robot.
Prospettive di sviluppo
Lo sviluppo di driver di alto-livello, l’analisi e la progettazione di logiche
decisionali, possono considerarsi l’evoluzione naturale di questo lavoro.
Tra questi una delle vie più dirette che può essere intrapresa sul robot è
l’integrazione dei driver wavefront per aggiungere al robot la capacità di
pianificare percorsi a lungo raggio e quindi dargli la capacità di navigazione in un
ambiente complesso. In tale ottica, sarà necessario provvedere a fornire al driver
un’informazione rispetto alla posizione del robot e una di navigazione locale, che
permetta di evitare collisioni e programmare lo spostamento tra punti vicini.
Per far ciò sono già disponibili dei driver, e in particolare:
37
Conclusioni
1. Il driver VHF che serve per dare al robot capacità di navigazione locale
secondo l’algoritmo Vector Field Histogram Plus di Ulrich e Borenstein.
Questo permette al robot di evitare gli ostacoli muovendosi su un
percorso programmato (waypoints)
2. Il driver AMCL che è un implementazione dell’algoritmo di localizzazione
adattiva monte-carlo e che serve a localizzare la posizione del robot
all’interno di una mappa fornita a priori. La localizzazione avviene a
partire dai dati dei sensori laser o sonar.
Per soddisfare i requisiti dei driver sarebbe sicuramente necessaria l’integrazione
di più sensori ad ultrasuoni sulla piattaforma. Un altro cambiamento essenziale è
costituito dalla modifica del modulo real-time in modo che provveda alla lettura di
più sensori contemporaneamente, senza dover creare un task ed occupare una
FIFO per ognuno dei sensori. Inoltre l’implementazione corrente del driver AMCL
funziona solamente con scanner laser. Sarebbe consigliabile prendere in esame la
possibilità di modificare quest’ultimo in modo che supporti anche le letture di
sensori ad ultrasuoni. Questo anche alla luce dei costi elevati che gli scanner laser
possono raggiungere.
38
APPENDICI
Redboot
Accesso a redboot
E’ possibile accedere a redboot tramite l’interruzione dell’esecuzione automatica
dello script di avvio tramite terminale seriale inviando una sequenza di escape
(CTRL-C)
In alternativa, qualora sia noto l’indirizzo IP della scheda ARM, l’accesso può
essere effettuato connettendosi alla porta 9000 tramite protocollo telnet via
interfaccia ethernet. Il tempo a disposizione per connettersi a RedBoot tramite
ethernet è una finestra di pochi istanti che si apre dopo l’accensione del sistema.
fis list
Per cancellare una partizione si usa il comando:
39
Appendici
fconfig –l
Per modificare la configurazione corrente:
fconfig
In particolare per fare il boot da flash si userà il seguente script:
40
Appendici
/etc/rc.d/init.d/portmap start
/etc/rc.d/init.d/nfs start
Nel caso in cui il servizio sia già attivo occorre semplicemente eseguire il seguente
comando per fare in modo che il file /etc/exports venga riletto e che si aggiornino
le tabelle interne di appoggio al servizio NFS:
exportfs –a
Una configurazione ottimale per un file-system può essere:
/home/damiano/armroot
192.168.0.0/255.255.255.0(rw,no_root_squas
h,insecure_locks)
Si deve poi ricordare di modificare il file /etc/fstab della partizione “ARM” in
modo appropriato, aggiungendo
41
Appendici
Yaffs File-System
Il driver Yaffs per la gestione del file-system su flash durante il boot di default
troverà 3 partizioni. La prima contenente il bootroom, la seconda il file-system del
sistema e la terza contenente il kernel del sistema operativo e il redboot
Più o meno il log di avvio del kernel si presenterà così:
eraseall /dev/mtd/1
oppure
mount /dev/mtdblock/1 /mnt
cd /mnt
rm –fr
42
Appendici
shutdown -r now
43
RINGRAZIAMENTI
Vorrei ringraziare, in primis, i miei genitori che mi han accompagnato con una
pazienza senza limite fino a questo traguardo. Senza di voi non sarei arrivato fino
a qui.
Ringrazio il mio relatore, il prof. Massimiliano Nolich, che è stato sempre
disponibilissimo nei miei confronti , aiutandomi ogni qualvolta possibile e
dandomi la più piena libertà nell’organizzare e sviluppare il progetto.
Un grazie anche a tutti i frequentatori della mailing-list del progetto Player-Stage,
e in particolare al signor Paul Osmialowski, per l’aiuto e la disponibilità che mi han
dato e l’entusiasmo con cui mi han sempre risposto.
Ringrazio anche l’amico e collega, Lorenzo Dal Col per il supporto che mi ha dato
nella compilazione del kernel RTAI e Roberto Furlani per la l’aiuto nella revisione
della tesi.
45
BIBLIOGRAFIA
Articoli e manuali:
• La guida completa C++ - Herbert Schildt. – 2nd Edition - McGraw-Hill, 1999
• Building Embedded Linux Sistem - Karim Yaghmour - 2nd Edition –
O’Reilly, 2008
• Getting started with ts-linux – Technologic Systems, 2006
• Linux for ARM on TS-7000 User's Guide – Technologic Systems, 2006
• TS-7250 Hardware Manual – Technologic Systems, 2006
• TS ARM Linux Developer's Manual – Technologic Systems, 2004
Documentazione tecnica:
• SRF05 - Ultra-Sonic Ranger
http://www.robot-electronics.co.uk/htm/srf05tech.htm
• Sharp - GP2D120X
http://www.sharpsma.com/Page.aspx/americas/en/part/GP2D120/
• Low Current Motor Driver
https://www.zagrosrobotics.com/files/wirz203.pdf
• Agilent Technologies – Optical Encoders
http://www.zagrosrobotics.com/files/heds55xx.pdf
• Cirrus Logic EP9302
http://www.cirrus.com/en/products/pro/detail/P1066.html
47
Appendici
48