Professional Documents
Culture Documents
FUZZY
CONARDUINO
di DANIELE
DENARO
I I bicchiere pieno o
I vuoto? Il prato al
sole o in ombra?
Usando la logica Booleana, non c' scampo: il bicchiere da
considerarepieno o
da considerare vuoto.
Pieno a meta, or,wero0.5
non contemplato: solo
0 oppure 1. Questo approccio provoca talvolta
rigidit di f unzionamento inaccettabili. Come
nei processia regole (es.
sistemi esperti). Cio nei
ffi
er-errnoftcn
ril- settembre
2012 83
01
02
03
o.a
05
06
07
0B
09
84
Fig. 4 - Regole
di comportamento.
c= (NoTA)=0.2.
Successivamentenegli
'70 e poi '80, la logianni
ca Fuzzy ha cominciato
ad essereutilizzata nel
controllo automatico con
ottimo successo.Successivamente, con la pervasivita dei microProcessorinei prodotti di
consumo, la semplicit
e 1ebuone performance
dei controllori con logica
fuzzy sono state utilizzate in molti prodotti consumer: dalle macchine
fotografiche alle lavatrici.
Ma in realt i controllori
in iogica fuzzy si sono
dimostrati particolarmente importanti anche
in campi complessi
come lo spazio ed il volo
a causadella loro abilit
a gestire sistemi non
Iineari. Non si capisce
F9. 5 - Esecuzone
delle regole.
inFltl = 14
- ELETTB0ilIC
lil ..s
2012
settembre
inFd2 = l0
outnnf = 0.61!2
2
3
4
5
6
7
1
0.8
_ 0.5
5' 0.4
0.2
0
0
outptl = 0 n3
damento sull'approccio
a regole,permetteai
controlli fuzzy di essere
molto potenti nella
gestionedi sisteminon
lineari.
Quello che abbiamo
appenavisto un controller fuzzy in modalit
Mamdani, dal nome del
professoreche lo propose per primo. In realt
il processodi defuzzificazione abbastanza
dispendiosoper un
F9, 7 . Esecuzione
delleregolein modalit"Sugeno"
ELETTF0I{lCn
lil - Settembre
2012
85
Fs. 9
Controller
fuzzy per
sisfemi
dnamici.
F9. 1O - Pendolo
inverso.
microcontroller (calcolo
del baricentro dell'inviluppo risultante). In
questi casi si usa alternativamentel'approccio
Sugeno(dal nome del
professoreche lo propose) che consiste in una
notevole semplificazio-
86
ne computazionaledel
processodi defuzzificazione.Nell'approccio
"Sugeno" l'ou{>ut non
rappresentatoda variabili fuzzy mediante
funzioni di appartenenza, ma dai soli valori di
picco (nel casoprece-
lil
Settembre
2012- ELETIR0]{loe
Fg, 14
Regole per
il controller
del pendolo
inverso,
Se. negativo
e & regativaallae crrtlm
Sea negatiroe dazeo allofeo n60
Sea rcgatirce dapciti\tr albfr outn30
Sea zco e danegatinalbreouta30
Sea zeroedazeroalbraoutzero
Sea zeroe dapositivaallca outp30
Sea poeitirce danegetftadbra o p30
Sea poeitircedazefoallomont0
Sea poeitircedapositivaallaa outpl00
Fig. 15
Rappresentazione
a matrce dei valori
di output.
de
Uz
dsP
$t
d00
!30
&
130
rp
p30
P6o
Prm
m
gl
4ll
2!
Mf3afl-90,0,90);
Oltre a Mf3 (tre vertici), nella libreria, sono
predisposteanche altre
tipologie a 2, 5 e Tvertici. Ma sempre di tipo
oa
-4{l
s
tm
-ltD --lm
'A)
F|g, 78 - Evoluzionedell'angolo.
ELETTRoI{ICn
lI - Settembre
2012
87
i * E s " r p i od u t i l i z z o d e l l a l i b r e r i d p e r c o n t r o J l a r e"
********
(simulatol
?919919.]ll:"'"
i--:i;;:;;-"-;;-;.;;.**..".****".*..";**.*****...**.*..***********r*************/
f l o a t a = 0, d a = 0, a P = 0;
f oat dt=0.01;
void setuP() {
S e r ia l . b e g j f ( 9 6 0 0 ) ;
for (int =0; i<100;i++)
I
ft oat t=(f toat)j*dt:
a = t n vP e n d( ( f I o d t ) f , d t ) ;
da=(a-p);dp=a;
da=da*20;
a=d*l;
f = f u z z Y C o n t r( (i n t ) a ' ( i n t ) d a ) ;
Se r j d I . Pr r t I n ( a ) ;
deldJ(100);
//lrtervallo
d i t e m p o jr z z a z io n e ( s e c )
/ / N u m e r od c i c l i
//
di smulazione
ci dscunodi dt secordl
v o i d I o o p () {
M f 3a f ( - 9 0 , 0 , 9 0 ) ;
out y;
i n t f u z z y C o n t r ( i f at ,j n t d a )
jl
/ / R o u t j n e c h e i m P le m e n t d
/ / P r o c e S s od i i n f e r e n z a
//Reqoe
controller FuzzY
]
**'*********t******/
/*************"****
( s e m p l j f i c a t o d e l p e n d o l oi n v e r s o '
/ / R o u t i r e d e l m o d e l l om a t e m a t i c o
f I o d t I n v P e n d ( f l o a tF , f l o a t d t )
*******************/
F9, 2O
Evoluzione
dell'an'
golo nel
caso del
controllo
con PID
discreto.
Cio :
. antecedente: espressione logica o var\abile fuzzy;
. conseguente: variabile di uscita associata;
. conseguente: valore singleton da attribuirle.
Bisogna, quindi aver definito prima oggetti che lappresntano le variabili di uscita mediante l'uso della
classeOut:
88
lil
2012- ELETTR0ilICn
Settembre
Out y;
Out A;
Jloatyout=y.Defuzzy();
# j n c l u d e < F u z z y .h >
C o n t r o l l o d e l p e n d o l o j n v e r s o c o n l a f L r n z r ' o nFeu z z y C o n t r o l l e r (
/*
f I o a t a = 0 ,d a = 0 ,a p = 0 ;
f l o d t d t = 0 . 0 1i
l nt f=0I
//lrtervdllo
.)
di tempo
r r ' z z a zoj n e ( s e c )
/ /Fuzzy sels
/ / M a t r r ' c ed e j v aI o r i S j n q l e t o n
FuzzyCon
r ot I l e r l ' l f 3 F z C ( a f , m t x , 0 ) ;
v o r ' d s e t u p () {
S e r i a l. b e g j r ( 9 6 0 0 ) ;
for (int i=0; j<100;++)
/ / n u m e r od i c i c l i
f l o d t t = ( f l o d t) j * d t ;
d = l n v P e nd ( ( f I o d t ) f , d t ) ;
d d = (a a p ) ; a p = d i
da=da*20;
di sinrulaziore
/ / c i s c u n od i d t s e c o n d i
//riceve l'dngolo attuale dalla routr'ne
/ / c o n j l m o d e l l o m a t e m d t i c od e l p e n d o l o
/ / c a l c o l d l d v ar i a zj o n e d e l l ' a n g o l c
//applica t)n fattore di scdld dj 20 d dd
//applicd un fdttore di scala dj I al'angolo
f = F z C l. n f e r e n c e ( ( i n t ) a ,( i n t ) d a ) ; / / a p p l r ' c d p r o c e s s od j i n f e r e n z a a l c o n t r o l l e r
f=f*1
Ser r'aI . pr i nt I n ( a ) ;
delay(100);
v o i d l o o p () {
/ / R o u ti r e d e l m o d e l l o m d t e m a t i c o( s e m pil f i c d t o d e l p e n d o l o j n v e r s o .
f l o t I n v P e n d ( f ' l o a Ft , f l o d t d t )
{
I
ELETTRoI{lCn
lil - Settembre
2012
89
I sec
Fig, 23 - Evoluzionedell'angolo nella simulazione
su Arduino Uno-
La libreriaFuzzy
lavoraconnumeriinteriper
Comes dettola libreriaFuzzy
velocizzare
I'elaborazione.
Percui,peresempio,il valoredi verl
espressoin percentuale(0-100).
daiseguenti
elementi:
La libreria composta
. Classic++ che definiscono fuzzyset. Owerole classilogiche
le variabilireali.
in cui sonosuddivise
. ll tipo variable
fuzzy(convaloredi veritin percentuale)
. Funzioni
cheda un valorerealerestituiscono
diappartenenza
fuzzy(conl suogradodi appartenenza
owerodi
unavariabile
verit).
. Overload
deglioperatori&&(And),I | (Or),! (Not)per poterli
allevariabili
fuzzy.
applicare
. ll tioovariabile
di outDut.Conla relativa
funzionedi "defuzzificazione".
. Lafunzionechedefinisce
unaregoladeltipolf Then.
XN2,XN1,V,XP1,XP2.
sti. Nelcasodi lvlfsi set si chamano
Altredefinizioni
di set:
Mf2(XN,XP)
Mf3(XN,XZ,XP)
Mf7(XN3,XN2,XN1,XZ,XP1,XP2,XP3)
i fuzzyset sonodeltipo:
Le classic++ chedefiniscono
l\.4fx(v1,v2,..)
Dovex il numerodi set (2,3,5,7). Perogniset previsto
un
parametro
il verticedeltriangolo.
Infattile
interochedefinisce
parzalmente
funzionidi appartenenza
sonotuttedeitriangoli,
sovraooosti.
rappresenta
Es.: Mf5 mf( 150,-100,0,100,150)
unfuzzysetd5
classi(Fig.24)
rsxNl(x),
rsxN2(x),
lsxz(x),
lsxPl(x),
lsxP2(x)
Questefunzionirestituisconouna variabilefuzzyrappresentata
dallaclasseFvdi libreria.
Lagenericaregola implementata
dallafunzione:
lfThen(espressionelogica,variabileout,valoresingleton)
ilvaloredi veritdell'espressione
logica applicato
Ovvero:
come
i triangolinondevonoessereperforza pesoal valore(intero)
Comesi vedenell'esempio,
singleton
ed il risultato
sommatoallavaisosceli,
ma sarannocomunque
sempreparzialmente
sovrappo- riabiledioutput.Bisogna
aver,quindi,definitoin precedenza
una
(Owiamente
variabile
tramitela classeOutdi libreria.
le variabili
di out possonoesserepidi una)
Es.:
Outy;
lfThen(lsXN1(x1)&&lsXZ(x2),y,!2qi
Allafinedell'elenco
di regole,pertirarele somme,va lanciata
y (ditipoOut)la funzioneDefuzzy0.
sull'oggeuo
Es.:
int youl=y.Defuzzy{);
Fig.24 - Esempiodi definizione di un set di cinque classi.
90
5ettembre
2012- ELEffF0l{lCn
li
(metodo
Questafunzioneapplicala mediapesatadeisingleton
Es.:
Fv a1=af.IsXZ(x1);
Fv a2=af.IsXZ(xZ);
Fv a3=af.IsXP(x3);
Fv a4=a1&& a2 && !a3;
se x1=35,x2= -10,x3= -5
allora il valore
di verit di
a4 (a4.v):
Mf34(w,AN):
Orry;
while(true)
{'
a4.v=67ok
NelListatolmostrato
un esempio di utilizzo
della libreria Fuzzy che
realizzaun controller
per un pendolo inverso,
simulato con ult modello matematicosemplificato, senza attriti. I
programma completo
//&fnioni
//ciclodi i4faanza
//ti ivalsi di ae
If f le n(a,Isxr(a)& &4. IsW(ddb),-I 00);
If f hen(afJs$'@)a &aJst@4 * -60);
ItI'hen(aflsn't(a)& &4. IsJ?(da)*- 30);
fl mt your-y Daftzzy0; //oupttt tiil e
Fig, 25 - Esempio di processo di inferenza
//tufmisceilftzzy set
MfJ e@0,A9Q;
int m*t3ltSl ={H00,AA-40}, /lD{nisce b mdlice
{:40,0,40}, //isinglon
{40,80,t04}};
FtzzyConrolIerl"S3WC(einE, 0);//&ns ceil cont
whilz(true)
{
.-dam wu fumioneestqu clv lomiscee e fu
e=e*kl;&=de*k2;
h:o?rilg
.l=FzC.Infqance(ede);
Fig.26
lo si pu trovare come
sketchincluso nella
libreria con nome: "FuzzyTest1".Nel Listato
2 mostrato invece lo
stessocontroller che
utilizza direttamentela
tunzione FuzzyCont roIler(...)contenutanella
libreria.
Il programma com-
Fig, 27
Mat ce dei valori
singleton passata
al controllei
pleto lo si pu trovare
come sketchincluso
nella libreria con nome:
"FttzzyTeslZ".
E\dE
)c{ xz
)Q
)C.I
-100 -80
-rto
xz
40
,10
)(P
40
80
100
(o per la derivata).
utilizzano
lo
In quantoambeduele grandezze
stesso fuzzyset.
Lutilizzodi questestruttureprevedesolo due fasi:
. La defnizione,con il passaggiodel fuzzyset e della maricedei
singleton.
. l-esecuzioneripetutadellafunzione"lnference'.
un esempiodi utilizzodi un controller
ln Flg.26 rappresentato
per
gli
inPut.
tre
set
fuzzycon
La matricedei singleton la matricedei valoriper classedi errore
comeprobabilmente
(riga)eclassedi variazione
errore(colonna),
pi
nellaFig.27.
appare chiaramente
ll terzoparametronelladefinizionedel controller un moltiplicatore per il funzionamentojncrementale.Se questovalore zero
non vienerestituitonessunafrazionedi azioneincrementalell
utilizzaun float, ma se O non
calcolodelvaloreincrementale
in virgolamobile
vieneeffettuatanessunamoltiplicazione
futilizzo del contributoincrementalepu permettereun eventuale
dellepossibili
a regime,ma introduce
dell'errore
azzeramento
oscillazioni.
Questaljbreriapu essereutilizzatatranquillamentesu hardware
atrotipodi microcontroller.
comequalunque
diversoda Arduino,
lnfatti oesaoochissimoed abbastanzaveloce.Da alcunitest
risultatauna velocitdi circa
O.3mllllsecondl
per un ciclodi inferenza
di9 regolepifunzionedi "defuzzifica(su
zione" ArduinoUno)
Owerocirca30 micrGecondl per regolacon ANDfra due funzioni
di aooartenenza.
La libreriava posizionata(conla sua cartella)nellacartella"lidi sviluppodi Arduinoe contieneancheun
braries"dell'ambiente
paio di esempie il file per I'evidenziazione
delle ke)'r,iord.
-'
ll{ - Settembre
2012
ELETTBoilICF
91