Questo progetto consiste principalmente in una simulazione di un parcheggio, in particolare di una serie di luci che indicano il percorso per arrivare dall'entrata al posteggio più vicino all'uscita e viceversa.
Il comando make sim
esegue il programma parking_simulation.py
che fa
partire la simulazione visuale del parcheggio. Il programma si controlla
con i seguenti tasti:
q
termina l'esecuzione del programma,s
aggiunge un sensore (posto per parcheggiare),c
aggiunge una macchina,p
parcheggia una macchina in un posto a caso (libero) seguendo le indicazioni delle luci che si sono accese, una volta parcheggiata l'auto si crea un percorso per i pedoni che arriva all'uscita,u
"sparcheggia" una macchina a caso (parcheggiata) seguendo le indicazioni delle luci che si sono accese,x
fa partire o arresta la modalità "automatica",b
salva lo stato del sistema (posizioni di sensori e macchine),r
ripristina lo stato dal file di cui sopra (parking.state
),l
mostra delle informazioni sullo stato del sistema.
Il mouse ci permette di modificare i sensori e le macchine aggiunti
- Premendo il tasto sinistro e trascinando il mouse possiamo muovere l'oggetto in una nuova posizione
- Premendo il tasto destro su un oggetto lo eliminiamo
Durante il funzionamento, il programma (se eseguito con l'opzione -v
come da makefile) fa il logging di vari eventi. Si ottiene
$ python parking_simulation.py -v
SocketServer running on port 6520
root : DEBUG Adding sensor n. 0 at (100, 100)
root : DEBUG Adding sensor n. 1 at (100, 150)
root : DEBUG Adding sensor n. 2 at (100, 200)
root : DEBUG Adding sensor n. 3 at (100, 250)
root : DEBUG Adding sensor n. 4 at (100, 300)
root : DEBUG Adding car n. 0 at (500, 100)
root : DEBUG Adding car n. 1 at (500, 150)
root : DEBUG Adding car n. 2 at (500, 200)
root : DEBUG Adding car n. 3 at (500, 250)
root : DEBUG Car 0 arrived at sensor 2
root : DEBUG Car 1 arrived at sensor 3
root : DEBUG Car 2 arrived at sensor 1
root : DEBUG Car 3 arrived at sensor 0
root : DEBUG Car 2 left sensor 1
root : DEBUG Car 2 arrived at sensor 4
root : DEBUG Car 1 left sensor 3
root : DEBUG Car 0 left sensor 2
root : DEBUG Car 2 left sensor 4
Il programma di simulazione include un semplice server TCP
che apre
una socket su localhost e su una porta random (il port number
viene scritto ogni volta nel file port.txt
così i client lo possono
leggere).
Al momento ci sono due semplicissimi client:
socket_client.py
si connette alla simulazione e ad intervalli di un secondo (di solito) apre una connessione, "legge" lo stato dei sensori e stampa una riga con delleX
per i sensori occupati degli underscore per quelli liberi. Si ottiene quindi un log del tipo:
$ python socket_client.py
X X _ X _
X X _ X X
X X X _ X
_ X _ _ X
_ _ _ _ X
X _ _ _ _
socket_client_cli.py
è simile al precedente ma invece che andare in automatico, apre una CLI (command line interface) da cui si possono dare dei comandi, ossia inviare delle richieste. Al momento l'unica richiesta possibile èstate
che fornisce la stesso informazione disocket_client
.