Talk:Porting su Orocos di alcuni moduli software di Lurch
Dobbiamo sistemare la deadzone per l'esperto del joystick, poi dobbiamo decidere come passare a brian le coppie nome valore per il controllore fuzzy. Potremmo usare un dataflow per questo, invece un insieme di porte per ogni esperto con il quale deve dialogare brian
Contents
Cosa dobbiamo ancora fare
Dopo aver fatto l'esperto del joystick e la parte che si interfaccia con la porta seriale, ora
- dobbiamo fare Brian - bisogna mettere a posto il fatto delle dead zone
ci conviene dividere il lavoro.. per quanto riguarda il real time credo che un po' tutti i componente diventano real time con orocos
(Andrea)
Agenti - BrianExpert
Secondo me, bisogna esplicitare il fatto che un thread debba essere svolto in modo real time.
Bisogna individuare gli agenti da rendere real time.
Sto ripassando il codice relativo a Brian e in particolare la lista di coppie nome-valore in input al controllore fuzzy e la lista con le variabili di uscita.
(Michele)
Deadzone e comunicazione agenti
fatta la classe per la dead zone, ora bisogna solo applicarla;
per Brian ho pensato che lo scambio di messaggi tra i vari agenti si può fare con le porte, cioè
- uso readDataPort per ogni agente da cui arrivano messaggi - uso writeDataProt per ogni agente a cui mandare messaggi
quindi ho creato la classe commandManagerFake per usarla per sperimentare la modifica che riguarda la comunicazione tra command manager e brian. Infatti ora facciamo leggere a brian la velocità del robot solo tramite un metodo, per fare invece una cosa più generale conviene fare anche questo con le porte, magari fare così:
CommandManager task periodico che mette sulla porta (magari bufferizzata) il rho e teta che legge dalla seriale; Brian legge dalla porta quando ne ha bisogno (forse con la porta bufferizzata è più un casino perchè bisogna fare in modo che brian legga dati "recenti" quindi alcuni dati bufferizzati devono essere eliminati.
(Andrea)
Brian Expert
Sto traducendo l'agente BrianExpert secondo lo schema su cui si basa Orocos: configureHook(), startHook(), updateHook() ecc. Ho visto che anche loro avevano fatto qualcosa di simile per ogni agente - funzioni Initialize(), Execute() e EndWork().
Nel loro BrianExpert.cpp ci sono anche molti rifermenti a tipi di messaggi che noi non useremo (ad esempio quelli dei sensori Hokuyo).
Sto cercando di capire il funzionamento della funzione di configurazione addOptions().
Ti mando per mail -una parte di codice relativa ad una prova su Orocos: Brian invia una stringa a MotorExpert come dicevi tu utilizzando le porte -una versione del loro BrianExpert.cpp cui ho aggiunto dei commenti su dove sono definite alcune funzioni e variabili e il loro significato.
Porte ed eventi (comunicazione tra esperti)
Cosa facciamo? Una porta sola in brian e mandiamo i vari messaggi oppure una porta per ogni tipo di agente? Io propenderei per la seconda così si semplifica molto il lavoro di comprendere da chi arriva il messaggio
Ho visto un po gli eventi e stavo pensando che:
- gli agenti che devono inviare dati ad altri agenti possono usare le porte; - quando un agente deve invece reagire a qualcosa che è accaduto possiamo usare gli eventi.
Penso che la maggior parte degli agenti comunichi qualche dato.
(Andrea)