Porting su Orocos di alcuni moduli software di Lurch
Porting su Orocos di alcuni moduli software di Lurch
| |
Short Description: | Lo scopo del progetto è di provare a implementare alcuni moduli del software installato nell'hardware della carrozzina Lurch attraverso Orocos Real-Time Toolkit. |
Coordinator: | MatteoMatteucci (matteo.matteucci@polimi.it) |
Tutor: | SimoneCeriani (ceriani@elet.polimi.it) |
Collaborator: | |
Students: | Andrea Romanoni (andrea.romanoni@polimi.it), MichelePellegrini (michelejuventus@libero.it) |
Research Area: | Robotics |
Research Topic: | |
Status: | Inactivewarning.png"Inactive" is not in the list of possible values (Active, Closed) for this property. |
Level: | Ms |
Type: | Course |
Questa è una breve relazione esplicativa riguardo il progetto per il corso Laboratorio Software. Il progetto consiste nell’utilizzo degli strumenti forniti da Orocos per tradurre il software della carrozzella lurch.
Nel laboratorio di intelligenza artificiale del politecnico di Milano si lavora da diversi anni sullo sviluppo di una carrozzina robot per persone diversamente abili, chiamata amichevolmente “lurch”. Questa si interfaccia sia con l’utente principalmente tramite un joystick, sia con l’ambiente circostante attraverso dei sensori di vario genere. La carrozzina è dotata di un sistema Linux sul quale viene eseguito il software sviluppato al fine di fornire le funzionalità di evitamento ostacoli e navigazione in ambienti chiusi, in modalità manuale automatica.
Il sistema è progettato in un’ottica di scalabilità, attraverso la programmazione ad agenti. Ogni agente rappresenta un’entit` concettuale differente e dialoga con gli altri attraverso lo scambio di messaggi con un pattern publish subscribe. Per esempio, esiste un agente che si occupa di trattare gli input provenienti dal joystick e che arrivano dalla porta seriale; traduce questi input in modo da renderli comprensibili agli altri agenti che ne sono interessati e permette di inviare dei comandi per muovere le ruote della carrozzina più o meno velocemente.
Nell’attuale implementazione del software sono presenti alcuni problemi che hanno fatto pensare alla possibilità di sfruttare alcuni strumenti esistenti per riuscire a concentrare maggiormente l’attenzione sugli aspetti funzionali rispetto ai dettagli implementativi. Il problema principale da affrontare è rendere real-time il sistema che ancora non lo è. Il software Orocos (Open RObot Control Software) offre validi stumenti per implementare il controllo del robot in un ambiente real-time e per superare alcuni problemi di concorrenza tra thread. Infatti, Orocos dispone di un package che astrae il sistema operativo sottostante e offre un’interfaccia con diverse primitive relative, ad esempio, a mutexes, semaphores e threads. Quest’ultime si rilevano indispensabili nell’ambito di un sistema basato sulla programmazione concorrente, qual è appunto quello in esame. E’ inoltre possibile definire le priorità da assegnare ai diversi thread e adottare alcune tipologie di scheduler. Nel nostro caso, priviligeremo uno scheduler basato su una politica real time, proprio per superare l’attuale difetto del sistema dovuto all’esistenza di task il cui completamento non sempre avviene entro una deadline prefissata.
Orocos è un progetto open source che permette di sviluppare un software per il controllo di robot che sia modulare, ben documentato e utilizzabile sia in ambiente real time che non. La modularit` deriva dal fatto che il controllo del robot viene controllato attraverso i componenti. Questi ultimi sono parti di software che modellano entità concettuali differenti che dialogano e interagiscono attraverso mezzi forniti da Orocos come Port, Data Flow, Command, Method e Event, i quali permettono di risolvere problemi di concorrenza e di comunicazione tra thread. Port e Data Flow realizzano le comunicazioni tre task differenti, mentre sia Command sia Method definiscono una chiamata a funzione, ma con alcune differenze significative. In particolare, Command rappresenta una funzione eseguibile in modo asincrono rispetto al chiamante e nel contesto dell’agente che riceve il comando; al contrario, Method offre la possibilità di eseguire una chiamata a funzione in modo sincrono e nel contesto delchiamante. Infine, esiste un supporto per la gestione degli eventi: è consentito aggiungere un evento all’interfaccia di un task, il quale potrà successivamente essere emesso, determinando la reazione da parte di altri agenti interessati ad esso, tramite le cosiddette funzioni di callback. In conclusione, tutti questi elementi si riveleranno utili per sviluppare un sistema che rispecchi quello esistente basato su un’architettura publish subscribe.
La documentazione è un altro aspetto a cui prestare attenzione dato che il software di questa carrozzina viene utilizzato da molte persone; Orocos aiu- ta in questo compito perché per come è stato implementato, ogni parte del componente deve essere accompagnata da una stringa di descrizione. Una chia- ra documentazione consentir` di facilitare il mantenimento e lo sviluppo del software stesso, in considerazione del fatto che il nostro progetto di traduzione potrà essere continuato da altri programmatori, intenzionati ad aggiungere nuovi moduli a quelli gi` esistenti.
Risulta chiaro quindi come nella nostra applicazione possiamo utilizzare i componenti Orocos per implementare gli agenti che prima dialogavano tra loro attraverso il pattern publish subscribe. In particolare il nostro compito è quello di scrivere attraverso Orocos gli agenti joystick, brian e odo. Il primo si occupa della comunicazione del software con l’interfaccia seriale dalla quale arrivano in input i segnali di comando del joystick e in output i comandi da inviare alla carrozzina. L’agente brian, dotato di un controllore fuzzy, ` il fulcro del software della carrozzina perchè si occupa di elaborare i dati ricevuti dai sensori esterni e dal joystick per poi inviare i comandi opportuni. Infine l’agente odo si prende a carico gli aspetti legati all’odometria del robot, utili per prendere decisioni di path planning da parte di brian.