Controle NeuroFuzzy
Guilherme Rutzen Leonardo Adams Roni Rigoni {guirutzen,leonardoadams,ronirigoni}@gmail.com
1) Introdução
Em robótica móvel, robótica industrial, máquinas-ferramenta, elevadores e muitos outros sistemas elétricos utiliza-se motores de corrente contínua. Muitas vezes faz-se necessário que tais motores possam atuar como servo-motores de velocidade, para a odometria de robôs móveis, por exemplo.
Através de um experimento prático, este trabalho trata do desenvolvimento e análise de um controlador fuzzy, para realizar o controle de velocidade de um motor de corrente contínua, do qual a velocidade é medida a partir de um encoder óptico incremental.
Neste trabalho também é analisada a influência dos parâmetros fuzzy, que modelam as funções de pertinência, na resposta do sistema.
Finalmente é proposta uma rede neural com o intuito de ajustar estes parâmetros
fuzzy, tornando possível especificarmos as
características desejadas da resposta e obtermos assim os respectivos parâmetros
fuzzy.
2) Objetivo
O objetivo principal deste trabalho é testar a aplicabilidade de um controlador
fuzzy em um sistema de resposta rápida e que
apresenta não linearidades. Neste projeto em questão será tratado o problema de se realizar o controle de velocidade de um motor de corrente contínua.
Também objetiva-se analisar uma proposta de melhoria no ajuste do
controlador fuzzy, que normalmente é feito de uma forma empírica. Esta proposta é uma combinação de lógica fuzzy e redes neurais,
comumente chamado de controlador
NeuroFuzzy.
3) Plataforma de testes
Para que pudéssemos aplicar o controlador fuzzy a um sistema real, desenvolvemos uma plataforma de hardware e software que nos permitisse realizar os ensaios.
Na Figura 1 podemos ver um esquema funcional da plataforma.
Figura 1 - Esquemático da Plataforma
Ressalva-se que o sistema que queremos controlar é o motor DC, o sistema de medição é composto pelos blocos “encoder” e “Tratamento de sinal”, a atuação é realizada pelo bloco identificado como “Ponte H”, e o
controlador é implementado no
microcontrolador, representado pelo bloco “Arduino”. Em seguida explicaremos cada subsistema que compõe esta plataforma.
3.1) Sistema de Medição
O bloco “Encoder” é composto por um sensor infra-vermelho (fixo à estrutura do motor) e um disco graduado (solidário ao eixo do motor). Este é responsável por medir a velocidade do motor, à medida que gera pulsos toda vez que o sensor infra-vermelho passa de uma região escura para uma região clara do disco.
Uma amplificação, filtragem e
digitalização deste sinal é feito pelo bloco “Tratamento de Sinal”, sendo que o sinal resultante já pode ser enviado para uma porta de interrupção externa do microcontrolador Arduino.
3.2) Atuação
A atuação é realizada de maneira simples, valendo-se de um circuito integrado (L298) que contém duas pontes-H, que consistem em
drivers de acionamento bidirecional de
motores de corrente contínua.
A alimentação do motor provém de uma fonte regulada de 8V, e a variação de velocidade é realizada utilizando-se PWM (Pulse Width Modulation) gerado pelo microcontrolador Arduino.
3.3) Controle
O dispositivo responsável por realizar a função de controle é o “Arduino”. Arduino é um projeto open-hardware e open-software,
que tem como objetivo tornar o
desenvolvimento de projetos com
microcontroladores mais simples e rápidos. Neste projeto o Arduino é utilizado para realizar o controle do motor, ou seja, a lei de controle deve ser gravada em ROM, e o controle é executado diretamente pelo dispositivo. Esta configuração enfatiza a aplicação deste sistema para o controle de velocidade em sistemas embarcados.
Portanto cabe ao Arduino ler e interpretar os sinais vindos do sistema de medição, gerar a ação de controle e atuar sobre o sistema via
PWM, na ponte-H. Também utiliza-se o
Arduino para enviar os valores de cada medição e ação de controle para o computador, para que se torne possível visualizar os resultados graficamente.
3.4) O Sistema
Como foi citado, o sistema a ser controlado é um motor de corrente contínua, cuja velocidade máxima é aproximadamente 300 rad/s.
Para simularmos uma perturbação de carga foi introduzido um mecanismo que, quando em contado com o disco, aumenta o atrito deste, gerando uma perturbação aproximadamente em degrau. A Figura 2 mostra o sistema a ser controlado, assim como o mecanismo de pertubação.
Figura 2 - Motor DC com mecanismo de perturbação
4) Levantamento das características
do motor
Antes da escolha da técnica de controle que será utilizada, faz-se necessário o levantamento do comportamento dinâmico do motor. Foram aplicadas entradas na forma de degrau no motor ao longo da faixa de operação onde o mesmo será aplicado. Na
entradas. Em verde são mostrados os degraus aplicados na referência e em vermelhor a resposta obtida do motor.
Figura 3 - Levantamento das características do motor Observa-se a não-linearidade presente na resposta do sistema, tanto em relação ao ganho como em relação à constante de tempo.
5) Técnicas de Controle
Com base no comportamento do motor, foi escolhida a téncnica de controle adequada. As técnicas de controle disponíveis, mais utilizadas, são as seguintes.
Controle linear, num ponto de operação: este controle é limitado pois permite o controle somente em torno de ponto de operação.
Gain Scheduling: necessidade do inverso
dos ganhos. Necessita de interpolação nos pontos não considerados no cálculo dos ganhos.
Controle não-linear clássico: exige conhecimento do modelo.
Controle Fuzzy: parâmetros são
escolhidos de forma empirica
6) Controle Fuzzy
Com base nas opções de controladores e no comportamento do sistema, foi escolhido o Controle Fuzzy para realizar o controle de velocidade do motor da plataforma. A escolha foi realizada devido as vantagens que o mesmo oferece.
Vantagens:
Não necessita de modelo: não existe o problema da planta ser mal modelada e por causa disso afetar o desempenho do controle
Robusto: principal vantagem em relação aos outros. O controle é baseado em regras e na lógica fuzzy e muito adequado para sistemas não-lineares, sendo este o caso
Desvantagens:
Implementação volumosa: como o
controle será implementado no
microcontralador Arduino, a
implementação do controle fuzzy exige bastante memória. No caso, foi ocupado grande parte da memória disponível
Desempenho: como os parâmetros do controlador são ajustados de forma empírica, é bastante complicado ajustar o controle para que o mesmo siga uma determinada especificação
6.1) A Lógica Fuzzy
Grande parte dos problemas que lidamos atualmente são solucionados utilizando-se a lógica binária. Nesta lógica, só são aceitas duas condições: verdadeiro ou falso. Porém, existem alguns problemas em que esta lógica não é suficiente. Existem muitos problemas com imperfeições, onde existem infinitos graus de incerteza. A Lógica Fuzzy (Nebulosa), com base na teoria dos Conjutos Fuzzy, tem-se mostrada adequada para tratar este tipo de problema.
A Lógica Fuzzy consiste em aproximar a decisão computacional da decisão humana, tornando as máquinas mais capacitadas a seu trabalho. Isto é feito de forma que a decisão de uma máquina não se resuma apenas a um “sim” ou um “não”, mas também tenha decisões abstratas. Do tipo “um pouco mais”, “muito mais” entre outras variáveis que
representam as decisões humanas. A lógica
fuzzy pode ser vista como uma forma de
realizar uma interface com processos analógicos, que permite o tratamento gradual de sinais contínuos até sinais discretos, manipulados por máquinas digitais.
6.2) Controlador Fuzzy
Os controladores fuzzy baseiam-se na Lógica Fuzzy. Não é preciso conhecer muita matemática ou controle em profundidade para desenvolver uma aplicação em controle. Conttrolador Fuzzy (ou Nebuloso) tratam igualmente sistemas lineares e não lineares, além de não necessitarem a modelagem matemática do precesso a ser controlado. Isto tem sido, sem dúvida, o grande atrativo dos controladores fuzzy.
O projeto conceitual dos controladores
fuzzy é bastante simples. Estes controladores
consistem de um estágio de entrada (“fuzzificação”), um estágio de processamento (“inteligência”) e um estágio de sáida (“defuzzificação ”).
O estágio de entrada mapeia medições de sensores e outras entradas para funções de pertinência apropriadas. O estágio de processamento invoca as regras apropriadas e gera os resultados para cada uma, e depois combina os resultados de cada regra. O estágio de saída converte o resultado da combinação em um valor de saída preciso para o controle.
6.3) Variáveis Fuzzy
Uma variável linguística é uma vasial que assume palavras ou sentenças como valores. O conjunto de valores que ela pode assumir é dito “conjunto de termos”. Cada valor no conjunto de termos é uma “variável fuzzy” definida sobre a “variável base”. A “variável base” define o universo do discurso para
todas as variáveis fuzzy no conjunto de termos.
6.3.1) Definindo variáveis fuzzy para o problema de controle de velocidade do motor:
Foram definidas 3 “variáveis base” para o controle do motor: erro, derivada do erro e saída. As “variáveis fuzzy” escolhidas forma: LN (grande negativo), SN (pequeno negativo), ZE (zero), SP (pequeno positivo), LP (grande positivo).
Assim, tem-se:
ERRO = {LN, SN, ZE, SP, LP}
DERIVADA DO ERRO = {LN, SN, ZE, SP, LP}
SAÍDA = {LN, SN, ZE, SP, LP} 6.4) Fuzzificação
As variáveis de entrada de um sistema de controle fuzzy são geralemente mapeadas para o sistema por meio de funções de pertinência. O precesso de conversão de valores de entrada precisos para valores fuzzy é conhecido por “fuzzificação”.
O formato de função de pertinência mais comum é o triangular, sendo que o número e localização das curvas desempenham papel crítico.
No controle do motor de velocidade foram utilizadas curvas tringulares como função de pertinência para as variáveis fuzzy, conforme a Figura 4.
Os parâmetros P1, P2, P3 e P4 são utilizados para definir as regiões de mapeamento. Ao variar estes parâmetros, altera-se a largura da base do triângulo, ou seja, a abrangência das variáveis fuzzy.
O mapeamento das variáveis de entrada, erro e derivada do erro, são feitas conforme a
Tabela 1.
Tabela 1
Para mostrar como a função de
pertinência foi implementada no
microcontrolador, é mostrado um pedaço do código abaixo: if( e[n] <= -p1 ) erro = -1; else if( e[n] < -p2 ) erro = -0.75; else if( e[n] < -p3 ) erro = -0.5; else if( e[n] < -p4 ) erro = -0.25; ... 6.5) Regras
O estágio de processamento é baseado em uma coleção de regras lógicas da forma “se-então” . Sistemas de controle fuzzy tipicamente possuem dezenas de regras.
Dados os “mapeamentos” das variáveis de entrada para as funções de pertinência e valores verdade, um microcontrolador pode então pode tomar decisões sobre a ação a ser tomada baseado neste conjunto de regras. Operadores fuzzy que aparecem comumente em regras são “e”, “ou” e “não”.
Algumas regras definidas para o controle de velocidade do motor, e implementadas no microcontrolador, podem ser conferidas abaixo:
// Regra 1: Se e=LP entao saida=LP mi[0] = min(mi_e[LP],mi_de[LP]); // Regra 2: Se e=LN entao saida=LN mi[1] = min(mi_e[LN],mi_de[LN]);
// Regra 3: Se e=ZE e de=ZE entao saida=ZE mi[2] = min(mi_e[ZE],mi_de[ZE]);
// Regra 4: Se e=ZE e de=SN entao saida=SN mi[3] = min(mi_e[SN],mi_de[SN]);
// Regra 5: Se e=ZE e de=SP entao saida=SP mi[4] = min(mi_e[SP],mi_de[SP]);
…
A criação das regras foram baseadas no estado do erro e da derivada do erro. No gráfico da Figura 5 é representada a função erro, calcula fazendo-se:
motor vel referência
Y .
Desta forma, se a velocidade do motor for menor que a referência, teremos um erro positivo. Caso contrário o erro será negativo.
Figura 5 - Sinal do erro
O gráfico da Figura 6, representa a função derivada do erro. Neste caso, a derivada do erro será negativa se a mesma decresce com o passar do tempo, e positiva se ela cresce com o passar do tempo.
Figura 6 - Sinal da derivada do erro
Assim, a partir da função do erro e da derivada do erro, criam-se as regras. Elas são criadas levando em consideração se o erro, no momento, é positivo ou negativo e se a derivada, no instante, está crescendo ou decresendo.
Isto é feito através das variáveis fuzzy de entrada (LN, SN, ZE, SP, LP) que indicam a ação que o controle deverá tomar.
6.6) Defuzzificação
Há diferentes maneiras de se definir o resultado de uma regra, mas uma das mais comuns e mais simples é por meio do método de inferência “max-min”, a qual passa os valores verdade gerados pelas premissas à função de pertinência de saída.
Os resultados de todas as regras que foram disparadas são “defuzzificados” para valores exatos por meio de um dentro os vários métodos. O método da “centróide” é bastante popular, no qual o centro de massa do resultado provê o valor exato.
No caso do controle de velocidade do motor foram justamente utilizados o método de inferência “max-min” e o método do “centróide”. A equação utilizada para o cálculo exato da saída é mostrada abaixo:
6.7) Resultados do controle fuzzy
No gráfico da Figura 7 pode ser observado os resultados obtidos com o controle fuzzy implementado. A resposta ao degrau obtida com o controle fuzzy foi bastante satisfatória, com pouca oscilação e com rápida estabilização. Na Figura 7 tamém pode ser observado a ação de controle.
Figura 7 - Saída e sinal de controle
Outra experimentação realizada foi a aplicação de uma perturbação para ver se o controle ia rejeitá-la. Como pode ser visto no gráfico da Figura 8, a perturbação foi rejeitada pelo controlador. Também no gráfico da
Figura 8 é mostrada ação de controle.
Figura 8 - Saída e controle para um perturbação em 3s
6.8) Influência da variação dos parâmetros Para analisar a influência dos parâmetros
fuzzy na resposta do sistema, foram realizadas
duas experimentações com parâmetros fuzzy diferentes.
N i N i i i saida i n u 1 1 ) ( ) ( ) ( ) ( No gráfico da Figura 9, observa-se a resposta do sistema para a primeira configuração. Nesta configuração os parâmetros adotados foram: P1 = 50, P2 = 30,
P3 = 12, P4 = 04.
Figura 9
No gráfico da Figura 10 pode ser observado a resposta do sistema para a segunda configuração. Nesta configuração os parâmetros adotados foram os seguintes:
P1 = 25, P2 = 20, P3 = 12, P4 = 04.
Figura 10
Assim pode concluir-se que os valores dos parâmetros P1, P2, P3 e P4 possuem bastante influência na resposta do sistema.
7) Controlador NeuroFuzzy
Para resolver o problema de definição dos parâmetros do controlador fuzzy, é proposta uma rede neural para determiná-los. A seguir é descrito a estrutura da rede neural, a definição de suas entradas, a coleta, pré-processamento e normalização dos dados, bem como o treinamento e execução da rede.
7.1) Estrutura da Rede Neural
A rede neural proposta é composta de 3 camadas. A primeira, camada de entrada, recebe três diferentes entradas. Essas entradas correspondem a: referência do sistema de controle, tempo de subida e erro quadrático.
A camada escondida possui cinco neurônios e a camada de saída quatro, que correspondem aos quatro parâmetros do controlador fuzzy que se quer determinar.
Todas as funções de ativação são funções sigmoidais e todos os neurônios estão ligados através de sinapses a todos os neurônios da camada anterior e posterior.
A estrutura da rede neural proposta é ilustrada na Figura 11.
Figura 11
As entradas da rede foram definidas da seguinte forma:
Referência: informa o ponto de operação do sistema. É importante devido às características não-lineares intrínsecas do modelo.
Tempo de subida: relacionado ao aspecto de velocidade de resposta do controle.
Erro quadrático: relacionado à resposta oscilatórias. Quanto maior a oscilação da resposta, maior será o erro quadrático. É importante salientar a característica correlacionada entre o tempo de subida e o erro quadrático. Enquanto que o tempo
informa características de rapidez de resposta, quanto mais rápido o sistema, maior será a oscilação da resposta, portanto, maior será o erro quadrático. Essas duas características estão relacionadas devido as características do sistema.
O tempo de subida é a medida de tempo que o sistema leva para chegar próximo do ponto de operação (numa faixa de ±5% do degrau em torno da referência). O erro quadrático é o quadrado do erro associado a resposta, após o sistema ter atingido a faixa em torno da referência.
A Figura 12 ilustra o cálculo desses parâmetros.
Figura 12 - Erro quadrático e tempo de subida 7.2) Coleta de Dados
Assim que a rede neural está definida, é necessário coletar os dados para o treinamento da rede.
A coleta de dados do sistema foi feita de
forma automatizada. Foram geradas
referências e parâmetros do controlador fuzzy de forma randômica a cada 5 segundos. A resposta do sistema foi gravada em um arquivo, a cada tempo de amostragem, por alguns minutos. Foram coletados mais de 300.000 pontos.
7.3) Pré-Processamento
Depois da coleta de dados do sistema, é
necessário uma etapa para
pré-processamento e posterior normalização dos dados.
O pré-processamento corresponde a varrer todo o arquivo de dados, e transformar isso em dados úteis para a rede neural. Esses dados são as entradas (referência, tempo de subida e erro quadrático) e as saídas (parâmetros fuzzy).
Assim que os dados estão dispostos de forma organizada para a rede neural, é necessário fazer a normalização destes.
A Figura 13 ilustra todo o processo de pré-processamento e normalização dos dados coletados.
Figura 13
7.4) Treinamento
Agora a rede neural deve ser treinada. Foi utilizada a ferramenta open-source Joone Editor para implementar a rede apresentada.
A Figura 14 ilustra a rede montada com o auxílio da ferramenta.
Figura 14 - Interface da API Joone
Características para o treinamento da rede:
110 exemplos
50.000 épocas
Taxa de aprendizado: 0.8
Momento: 0.3
As características do treinamento foram determinadas a partir de várias tentativas, bem como a determinação do número de neurônios na camada intermediária. A configuração mais satisfatória foi a apresentada.
8) Resultados
Para executar a rede, foi feito mais um ensaio para a validação dos resultados provindos da rede.
Os dados de entrada da rede foram os seguintes:
Especificações 1:
Ref. Inicial = 0 rad/s
Ref. Final = 190 rad/s
Ts = 0.8s
2
erro → pequeno
Especificações 2:
Ref. Inicial = 190 rad/s
Ref. Final = 240 rad/s
Ts = 0.6s
2
erro → pequeno
Figura 15 - Resultado do controle NeuroFuzzy
Os erros quadráticos foram classificados como “pequenos” tomando-se como base os resultados da simulação, e não foram apresentados numericamente pois não trariam muito significado ao leitor.
Como visto na Figura 15, o resultado do
controle NeuroFuzzy atendeu às
especificações com uma margem de erro aceitável.
Em relação às especificações (em termos percentuais) os erros dos resultados obtidos foram: Para as especificações 1: Desvio de Ts = 9.2% Desvio do 2 erro = 11.3% Para as especificações 2: Desvio de Ts = 6.7% Desvio do 2 erro = 10.1%
9) Conclusão
Como visto na seção 8, os erros relativos às especificações se mostraram plausíveis, o que justifica a utilização de uma rede neural para melhor estimar os parâmetros fuzzy.
Pensando na viabilidade desta proposta, concluímos que o melhor seria utilizar a rede neural off-line, ou seja, utilizá-la para estimar os parâmetros de um número N de
referências desejadas, e guardar estes resultados em um arquivo, a ser consultado em tempo de execução pelo controlador
fuzzy.
A solução apresentada neste trabalho mostra que a parametrização de controles
fuzzy pode ser menos empírica e custosa,
levando-se em conta a mão de obra do engenheiro de controle.
Neste trabalho também pudemos
comprocar a robustez do controle fuzzy, pois desejávamos trabalhar em uma ampla região de atuação do motor, o que acentua suas características não lineares, e mesmo assim o controlador correspondeu às nossas espectativas.
Por fim, considerando que todo o sistema, desde a atuação, medição, controle e interface para visualização dos resultados foi um projeto desenvolvido pelos membros do grupo, e considerando os resultados obtidos, podemos concluir que o projeto se mostrou muito gratificante para todos os integrantes do grupo.
10) Referências
Camponogara E., Introdução à Inteligência
Computacional, 2006.
Russel S., Norvig P., Artificial Intelligence - A
Modern Approach, 2003. http://www.arduino.cc
http://sourceforge.net/projects/joone/ http://www.din.uem.br/ia/controle/fuz_prin. htm