tutorial - toolbox fuzzy matlab

Upload: arthur-schuler-da-igreja

Post on 06-Jul-2015

589 views

Category:

Documents


0 download

TRANSCRIPT

TUTORIAL TOOLBOX FUZZY MATLAB 1 JANELA PRINCIPAL DO MATLAB

A janela de exibio do Matlab possui 3 grandes reas: Workspace, Command History e Command Window. O layout bsico pode ser visto na Figura (1).

Figura 1 Janela principal do Matlab.

Workspace Lista de variveis utilizadas no programa atual; Command History Histrico de comandos executados previamente; Command Window Janela onde o usurio digita as aes as serem executadas; 2 TOOLBOX LGICA FUZZY

O primeiro passo abrir a toolbox de lgica Fuzzy no Matlab. Isso feito na lgica Command Window: >> fuzzy Assim que digitado o comando, aberta a janela inicial da toolbox de lgica Fuzzy.

ARTHUR SCHULER DA IGREJA

Pgina 1

Figura (2) Janela principal da toolbox de lgica Fuzzy.

Nesta tela so exibidas as variveis de entrada e sada do controlador Fuzzy, o controlador Fuzzy em si e a parametrizao de cada um dos elementos. 2.1 INICIANDO O PROJETO DE UM CONTROLADOR BSICO

Para a construo do controlador bsico ser utilizado o exemplo do consumo de combustvel em um automvel. Sero utilizadas 2 variveis de entrada: Acelerao e Inclinao do terreno. A sada do controlador ser o consumo de combustvel. Primeiramente ser parametrizada a varivel de entrada Acelerao. Para isso, o passo inicial selecionar a varivel input 1. Para trocar o nome da varivel, clica-se na caixa Name que est com o texto input 1 e escreve-se o nome aceleracao. Feito isso, deve-se clicar 2 vezes no bloco de entrada aceleracao para que seja feita a edio das funes de pertinncia dessa varivel. A caixa de configurao aberta pode ser vista na Figura (3):

Figura (3) Configurao da varivel de entrada aceleracao.

ARTHUR SCHULER DA IGREJA

Pgina 2

A primeira configurao a ser feita a alterao do nome dos conjutos difusos para a varivel lingstica aceleracao que inicialmente esto como mf1, mf2 e mf3. Para isso, basta clicar em cima do nome do nome do conjunto e alterar seu nome no campo Name. Para a varivel lingstica aceleracao usaremos os conjuntos: baixa, mdia e alta. A segunda configurao a ser feita definir o range da varivel, ou seja, o intervalo do menor valor que a varivel pode assumir at o maior valor que a varivel pode assumir. Para o exemplo, o valor da acelerao ser expresso em RPM do motor para tornar o exerccio didtico. A terceira alterao escolher a forma mais indicada para expressar cada um dos conjuntos difusos. Para isso, seleciona-se o conjunto, e no campo Type escolhida uma das formas mais comuns para conjuntos difusos. Recomendase escolher a forma triangular, trapezoidal ou gaussiana para facilitar a compreenso inicial. Na varivel aceleracao ser utilizada uma forma triangular para o conjunto baixa, uma forma trapezoidal para o conjunto media e uma forma triangular para o conjunto alta. Por fim, deve-se configurar os parmetros de cada conjunto difuso atravs do campo Params. Essa varivel indica por exemplo para uma forma triangular, o ponto de incio do conjunto, o ponto de mximo do tringulo e o fim do tringulo. O ajuste dos valores do conjunto tambm pode ser feita de forma interativa usando o mouse e arrastando cada vrtice da forma escolhida at que a mesma atinja a forma desejada.

Figura (4) Varivel de entrada aceleracao depois de configurada.

Fechando-se a janela de configurao da varivel lingstica aceleracao a tela inicial do controlador exibida novamente. Deve-se agora adicionar maisARTHUR SCHULER DA IGREJA Pgina 3

uma varivel de entrada para o controlador, para que isso seja feito deve-se entrar no menu Edit, opo Add variable e selecionar a opo Input. Desta forma surge uma nova varivel de entrada chamada temporariamente de input 2. Essa varivel ser a varivel lingstica terreno que ir representar o grau de inclinao do terreno onde o veculo est transitando. Esta varivel deve ser configurada da mesma forma que foi configurada a varivel aceleracao, com range de [-30 30] para representar a inclinao de -30 at 30 e nome dos conjuntos difusos: declive, plano e aclive. Para editar o nome de uma nova varivel adicionada, deve clicar no menu Edit, opo FIS properties e realizar as mudanas necessrias.

Figura (5) Varivel de entrada terreno depois de configurada.

Deve-se agora configurar a varivel de sada, mudando seu nome para consumo e atribuindo um range de [1 10] que representar quantos litros so gastos para percorrer a distncia de 10 km. A configurao da varivel de sada segue o procedimento adotado para as variveis de entrada.

Figura (6) Varivel de sada consumo depois de configurada.

ARTHUR SCHULER DA IGREJA

Pgina 4

Por fim, as regras do controlador devem ser ajustadas. As regras determinaro o comportamento bsico do controlador difuso e devem ser parametrizadas por um especialista no processo. Para realizar a configurao, seleciona-se o menu Edit, opo Rules.... Neste menu so exibidas as variveis de entrada e a varivel de sada. A relao feita selecionando um conjunto da varivel lingstica aceleracao como baixa por exemplo, um conjunto da varivel terreno como declive por exemplo e selecionando o conjunto desejado para a sada consumo com esta combinao. Para o exemplo foi selecionada o conjunto baixo. Isso representa a seguinte afirmao: SE acelerao BAIXA E terreno DECLIVE, ENTO consumo BAIXO Para que a regra seja adicionada, clica-se na opo Add rule. Caso algum erro tenha sido cometido, pode-se configurar novamente a regra e selecionar a opo Change rule e caso a regra deva ser excluda, seleciona-se a opo Delete rule.

Figura (7) Regras para o controlador depois de configuradas.

Fechando o menu de configurao de regras a tela inicial volta a ser exibida. Selecionando-se o menu View, opo Surface exibida a superfcie formada pela relao entre as regras do controlador difuso. Essa superfcie representa a relao entre as regras e a sada do controlador.

ARTHUR SCHULER DA IGREJA

Pgina 5

Figura (8) Superfcie formada pelas regras do controlador difuso.

Na tela inicial, selecionando-se o menu View, opo Rules pode-se simular o funcionamento do controlador difuso.

Figura (9) Simulador do funcionamento do controlador difuso.

Nesta tela, caso o usurio mova o mouse para a direita ou esquerda com a barra vermelha de cada varivel de entrada, possvel visualizar o comportamento da sada do controlador. Cada linha representa o funcionamento de uma das regras atribudas ao controlador. Caso o conjunto esteja amarelo, significa que na condio configurada para as variveis de entrada, aquela regra est produzindo uma sada. Caso o conjunto estejaARTHUR SCHULER DA IGREJA Pgina 6

branco, significa que a regra no est produzindo resultado na sada. Para o exemplo acima as regras ativas so: 1,2,3,4,5 e 6. O resultado de cada uma das regras pode ser visto na ltima coluna em azul, e o resultado final do controlador dado pelo valor da varivel consumo, no caso o valor 4.92. Resumindo: Caso o carro esteja com 1890 RPM e em um terreno com -9 de inclinao, seu consumo ser de 4.92 litros de combustvel para cada 10 km rodados. 2.2 SALVANDO O CONTROLADOR DIFUSO

Para que o controlador seja salvo e possa ser utilizado atravs da Command Window do Matlab, deve-se entrar no menu File, opo Export, To File... e atribuir um nome para o arquivo, para o exemplo foi atribudo o nome CONSUMO.fis. Esse arquivo ser salvo na pasta padro do Matlab e contm toda a configurao realizada para o controlador proposto. 3 UTILIZANDO O CONTROLADOR DIFUSO FORA DA TOOLBOX

Para que o controlador criado seja utilizado, deve-se importar as configuraes presentes no arquivo CONSUMO.fis para o Workspace do Matlab. Isso feito com o comando: >> CONSUMO = readfis('CONSUMO'); Dessa forma foi criada uma estrutura presente no Workspace com todas as caractersticas do controlador CONSUMO.fis. Para simular o funcionamento do controlador, basta atribuir valores para as variveis lingsticas de entrada e o resultado calculado: >> evalfis([1890 -9],CONSUMO) ans = 4.9106 Para o exemplo, foram atribudos os valores 1890 para a varivel lingstica 1 (aceleracao) e -9 para a varivel lingustica 2 (terreno) e o resultado obtido 4.9106, ou seja, o mesmo valor obtido durante os testes na toolbox. Essa abordagem especialmente til visto que possibilita que o usurio faa o projeto de um controlador difuso e o utilize da mesma forma que qualquer outro controlador. 3.1 ESTRUTURA DO CONTROLADOR DIFUSO NO MATLAB

Uma vez importado o controlador difuso para o Workspace do Matlab, possvel ter acesso a toda a sua estrutura e alter-la caso necessrio.

ARTHUR SCHULER DA IGREJA

Pgina 7

A estrutura bsica do controlador pode ser vista na Figura (10).

Figura (10) Estrutura do controlador difuso no Matlab.

Pode-se observar como o controlador difuso foi importado clicando-se 2 vezes na estrutura de nome CONSUMO na rea do Workspace. A janela Array Editor deve aparecer com as informaes referentes ao controlador conforme visto na Figura (11).

Figura (11) Array Editor do controlador difuso.

A estrutura tem subdivises chamadas de campos. Cada campo corresponde a uma propriedade do controlador, como por exemplo: a propriedade name (nome) contm a informao CONSUMO. J o campo type contm a informao mamdani que a forma de inferncia escolhida para o controlador.

ARTHUR SCHULER DA IGREJA

Pgina 8

3.2 ACESSANDO CAMPOS DO CONTROLADOR DIFUSO DIFU Para que um campo de uma estrutura seja acessado, deve deve-se primeiramente digitar no Command Window o nome da estrutura, seguido de ponto e logo aps o nome do campo desejado. Por exemplo, para acessar o campo defuzzMethod: >> CONSUMO.defuzzMethod Method Com este comando aparecer na tela a informao centroid que a forma escolhida para fazer a defuzzificao do controlador. Conforme visto na Figura (10), dentro da estrutura bsica do controlador (FIS), existem outras estruturas, cada uma responsvel por uma funo especfica do controlador. Resumindo, dentro da estrutura CONSUMO, estrutura existem campos que por sua vez so outras estruturas. 3.3 ACESSANDO E ALTERANDO PARMETROS DO CONTROLADOR O exemplo a seguir demonstra como alterar o limite superior do conjunto baixa da entrada aceleracao. Inicialmente o valor encontra-se em 2800 encontra se conforme visto na Figura (12).

Figura (12) Limite superior da funo de pertinncia baixa. baixa

Dentro da estrutura principal, existe o campo input que tambm uma estrutura. Dentro do campo input, existem 2 posies, representando as 2 entradas disponveis no controlador. Para acessar a primeira entrada, deve deve-se atribuir o ndice 1 para linha e 1 para coluna:

ARTHUR SCHULER DA IGREJA

Pgina 9

>> CONSUMO.input(1,1) O resultado obtido na tela : name: 'aceleracao' range: [0 7000] mf: [1x3 struct] Onde: name o nome da entrada, range o vetor que especifica o menor e o maior valor possvel para esta entrada e mf uma estrutura com 3 posies, onde esto especificados os limites de cada funo de pertinncia da entrada aceleracao. Para acessar o conjunto baixa, deve-se especificar o ndice 1 para linha e 1 para coluna: >> CONSUMO.input(1,1).mf(1,1) O resultado obtido : name: 'baixa' type: 'trimf' params: [-2800 0 2800] Onde: name o nome do primeiro conjunto da entrada aceleracao, type o formato escolhido para este conjunto, para este exemplo o formato especificado um tringulo e por fim existe o vetor params que especifica os limites do conjunto. Para acessar o limite superior deve-se acessar a estrutura params e dentro da estrutura params especificar o ndice 1 para linha e 3 para coluna: >> CONSUMO.input(1,1).mf(1,1).params(1,3) O resultado obtido : 2800 Este valor representa o limite superior do tringulo da funo de pertinncia do conjunto baixa da entrada aceleracao do controlador difuso CONSUMO. Para alterar este valor basta atribuir um valor qualquer utilizando-se o sinal de igualdade, por exemplo: >> CONSUMO.input(1,1).mf(1,1).params(1,3)=2500;

ARTHUR SCHULER DA IGREJA

Pgina 10

3.4 IMPORTANDO CONTROLADORES DIFUSOS NA TOOLBOX Esta tcnica representa o caminho inverso do proposto at o momento, ou seja, ao invs de construir o controlador difuso na toolbox e acessar suas propriedades no Workspace do Matlab, importa-se um controlador difuso do importa se Workspace para a Toolbox. O exemplo ser feito com a prpria alterao realizada no limite superior o da funo de pertinncia baixa. Conforme visto o valor foi alterado de 2800 para 2500. Inicialmente abre-se a toolbox de lgica Fuzzy novamente com o se comando: >> fuzzy se Em seguida, abre-se o menu File, opo Import, opo From Workspace.... Surge a seguinte janela:

Figura (13) Janela de seleo do controlador difuso a ser importado importado.

Nesta janela deve ser especificado qual controlador deseja-se importar, deseja se visto que vrios controladores podem estar sendo editados ao mesmo tempo no Workspace. No campo deve-se digitar CONSUMO por exemplo. O deve se controlador CONSUMO ento importado, e abrindo-se a entrada aceleracao abrindo se com duplo clique no cone amarelo do canto superior esquerdo da tela superior possvel verificar que a alterao feita pelo Workspace foi efetivada.

Figura (14) Controlador difuso importado com alterao.

ARTHUR SCHULER DA IGREJA

Pgina 11

4 4.1

UTILIZANDO A PORTA SERIAL NO MATLAB CRIANDO UM OBJETO PORTA SERIAL

Um poderoso recurso disponvel no Matlab o acesso porta serial RS232 do computador. Atravs dessa porta o usurio pode ter acesso a placas de aquisio de dados, atuadores, sensores diversos que possuam esse tipo de interface, sistemas embarcados, dentre outros. O acesso bastante simples, sendo que o primeiro passo a criao do objeto que controlar a porta serial do computador: s = serial('COM1'); Neste momento, possvel visualizar no Workspace do Matlab o objeto s que controla a porta serial COM 1 do computador. Para visualizar a estrutura bsica do objeto criado, digita-se: >> s Neste momento aparece no Command Window: Serial Port Object : Serial-COM1Communication Settings Port: BaudRate: Terminator: COM1 9600 'LF'

Communication State Status: RecordStatus: Read/Write State TransferStatus: BytesAvailable: ValuesReceived: ValuesSent: 0 idle 0 0 closed off

Vrias informaes so demonstradas como o nmero da porta (Port), a velocidade de comunicao (BaudRate), se a porta est aberta ou fechada (Status), etc.

ARTHUR SCHULER DA IGREJA

Pgina 12

Para obter a lista completa de propriedades da porta serial, pode pode-se clicar 2 vezes no objeto s abre-se ento a janela Inspector: serial port onde , se pode-se inclusive alterar os valores. se

Figura (15) Lista de atributos da porta serial. (15

4.2

ALTERANDO PROPRIEDADES DA PORTA SERIAL

Para que alguma propriedade da porta serial seja alterada, usa usa-se o mesmo raciocnio utilizado nas alteraes do controlador difuso, por exemplo: alterao do campo BaudRate do valor 9600 para o valor 57600: >> s.BaudRate=57600 Outra forma de alterar uma propriedade durante a criao do objeto porta serial, separa-se a propriedade e o valor que se deseja por vrgula. O se nome do campo deve estar entre aspas: >> s = serial('COM2','BaudRate',57600) 4.3 UTILIZANDO A PORTA SERIAL A porta serial funciona por seo, ou seja, um aplicativo abre a porta serial, utiliza a porta e encerra a seo. Durante esse perodo caso algum outro za aplicativo tentar abrir uma seo ter o acesso negado. Para abrir a porta serial criada deve-se utilizar o seguinte comando: deve se >> fopen(s)

ARTHUR SCHULER DA IGREJA

Pgina 13

Dessa forma o objeto s (porta serial) teve sua seo aberta e est pronto para ser utilizado. Para que seja feita a leitura dos dados presentes na porta serial utilizase o comando: >> leitura=fscanf(s) Dessa forma a varivel leitura recebe os valores presentes na porta serial. Vale lembrar que os dados lidos esto na forma de texto, visto que o Matlab l as informaes baseado na tabela ASCII. Caso os valores presentes sejam nmeros e seja necessrio realizar operaes matemticas com este contedo, deve-se realizar a converso de texto para nmeros utilizando o seguinte comando: >> variavel=str2num(variavel) Caso deseje-se escrever algum contedo na porta serial, utiliza-se o seguinte comando: >>fprintf(s,variavel) Neste momento o contedo presente na varivel de nome variavel escrito na porta serial correspondente ao objeto s. Ao fim do uso da porta serial, necessrio que a mesma tenha sua seo encerrada, para isso utiliza-se o comando para fechamento da porta serial: >> fclose(s)

ARTHUR SCHULER DA IGREJA

Pgina 14