CONTROLE FUZZY PARA BRAÇO ROBÓTICO UTILIZANDO A ABORDAGEM ADAPTATIVA NEURO-FUZZY (ANFIS) DO MATLAB João Rodolfo Côrtes Pires (PG) Cairo Lúcio Nascimento Júnior (PQ) Divisão de Engenharia Mecânica-Aeronáutica Instituto Tecnológico de Aeronáutica 12228-900-São José dos Campos-SP e-mail: [email protected] Divisão de Engenharia Eletrônica Instituto Tecnológico de Aeronáutica 12228-900-São José dos Campos-SP e-mail: [email protected] RESUMO Em muitos casos a lógica fuzzy tipo Mamdani possibilita o rápido desenvolvimento de um controlador para um sistema físico mesmo se o projetista não dispor de um rigoroso modelo matemático do sistema a ser controlado. Variáveis lingüísticas são então usadas para modelar o conhecimento intuitivo dos operadores do sistema e assim desenvolver regras fuzzy tipo Mamdani que rapidamente produzirão um controle grosseiro. Entretanto, se for desejado um controlador de alto desempenho, os controladores fuzzy tipo Mamdani são difíceis de serem ajustados. Uma alternativa é o desenvolvimento de controladores fuzzy tipo Sugeno. Porém controladores desse tipo são de difícil ajuste manual visto que a topologia usada por este estilo de lógica fuzzy favorece o modelamento matemático em prejuízo da utilização do conhecimento intuitivo. Este artigo propõe a combinação do uso destes dois tipos de controladores fuzzy usando a estrutura de controle conhecida por feedbackerror-learning. Nesta estrutura um controlador fuzzy tipo Mamdani é rapidamente ajustado para implementar um controlador feedback estável mas de baixo desempenho. Então os parâmetros de um controlador fuzzy tipo Sugeno, funcionando como controlador feedforward, são ajustados por uma rotina de treinamento para sistemas neuro-fuzzy do software MATLAB (ANFIS – Adaptive NeuroFuzzy Inference System). As simulações computacionais desta abordagem mostraram que para um braço robótico foi possível o rápido desenvolvimento de um sistema de controle com desempenho superior ao obtido quando apenas um dos dois tipos de controladores foi usado. ABSTRACT In many cases, by using the Mamdani-style fuzzy logic, a designer can rapidly develop a controller for a physical system even if a rigorous mathematical model of the system is not available. Linguistic variables and Mamdani-style fuzzy logic are then used to model the intuitive knowledge about the system, which was acquired by the operators through their everyday experience with the real-world system. In this way a rough controller can be rapidly obtained. However, if a high-performance controller is desired, experience has shown that it will be difficult to fine tune the Mamdani-style fuzzy controller manually or by using a training algoritthm. A possible alternative is to develop a Sugenostyle fuzzy controller which are hard to be adjusted manually since their topology favours mathematical modelling instead of the expression of intuitive knowledge. Sugeno-style fuzzy controller can be adjusted automatically by a training algorithm but it may be difficult to initialize the parameters of such a controller to obtain a stable learning process. This article proposes to combine the Mandani and Sugeno fuzzy controllers using the control structure known as Feedback-ErrorLearning. Initially, only the Mandani-style fuzzy controller is used as the feedback controller and is rapidly tuned which to produce a rough stable controller. Then a Sugeno-style controller is used as a feedforward controller and is tuned by a neuro-fuzzy training algorithm available in the software package MATLAB (ANFIS - Adaptive Neuro-Fuzzy Inference System). Computer simulations of a highly non-linear robotic arm demonstrate that by using the proposed approach, when the two types of fuzzy controllers are used simultaneously, one could more rapidly develop a better controller than using either one of these two types of fuzzy controllers. 1. INTRODUÇAO Um sistema de controle tem como função fornecer respostas a uma determinada entrada de acordo com sua função de transferência. Para muitos sistemas esta função apresenta grande complexidade o que dificulta o controle através dos procedimentos convencionais. Nestes caso os controladores fuzzy podem ser aplicados com bons resultados. Os controladores fuzzy permitem que expressões linguísticas sejam usadas, e dessa maneira de maneira simples o conhecimento intuitivo dos operadores humanos pode ser codificado e usado, mesmo se os sistemas forem complexos e nãolineares. 2. LÓGICA FUZZY A lógica fuzzy (também chamada de lógica nebulosa) permite o tratamento de expressões que envolvam grandezas de forma não exata. Esta forma de mensurar as grandezas é muito parecida com o comportamento dos seres humanos, por isso sendo um bom modelo para emular o nosso comportamento. A lógica nebulosa baseia-se no estudo de operações sobre conjuntos nebulosos (fuzzy sets) e pode ser entendida como uma generalização da lógica clássica (crisp sets) [1], [2]. A lógica clássica pode ser representada pela função indicadora I(.), que assume apenas dois valores, {0,1}, conforme respectivamente o elemento não pertença ou pertença ao conjunto em questão. Desta forma, dado um conjunto A contido num universo X, um elemento x deste universo pode assumir apenas dois estado em relação ao conjunto A, que é representado pela função IA(x): IA(x) = { 1 se x ∈ A, ou 0 se x ∉ A} Portanto podemos definir um conjunto clássico como: A={x ∈ X | IA(x) = 1} No caso da lógica nebulosa 3 casos são possíveis pois o mesmo elemento x ∈ X: 1) pode pertencer integralmente ao conjunto A, 2) pode não pertencer a A, ou 3) pode pertencer parcialmente ao conjunto A. O fato de um elemento pertencer parcialmente a um conjunto faz com que tenhamos de trocar a função indicadora I(.) = {0,1} por uma função pertinência µ (.) = [0,1], ou seja, o grau de pertinência de um elemento a um conjunto é um número real no intervalo fechado [0,1] ao invés de apenas os dois valores extremos do intervalo como no caso da lógica clássica. Deste modo passamos a definir um conjunto fuzzy como: A={x ∈ X | µ A(x) = ξ , 0 ≤ ξ ≤ 1}. Assim como no caso de conjuntos clássicos podem ser definidas operações como união e intersecção de conjuntos nebulosos. Entretanto para conjuntos nebulosos temos: A ∪ Ac ≠ X A ∩ Ac ≠ φ onde Ac indica o complemento do conjunto A, X indica o conjunto universo e φ indica o conjunto vazio. 3. CONTROLADOR NEBULOSO Um controlador nebuloso é basicamente um processo de inferência em conjunto nebulosos. Podemos dividi-lo em três partes principais: a fuzzificação; a máquina de inferência nebulosa; e a defuzzificação; O processo de fuzzificação consiste em obter a partir de uma variável numérica x ∈ X, o seu grau de pertinência aos conjuntos Ai contidos no universo X (figura 1). Figura 1 - Graus de pertinência de x aos conjuntos Ai. O processo de inferência nebulosa realiza as operações com conjuntos nebulosos. Neste artigo foram usadas as seguintes definições para os operadores A ∪ B, A ∩ B, ¬ A: A ∪ B = max( µ A, µ B) A ∩ B = min( µ A, µ B) ¬A = 1 – µ A Para a operação implica ( ⇒ ) adotou-se a definição onde o valor da função pertinência obtida do conjunto resultante do primeiro termo é transferida para o conjunto do segundo termo. O processo de defuzzificação consiste em obter a partir do valor da função pertinência resultante das diversas regras de inferência um valor numérico de saída. Neste ponto é que temos a diferença entre o controlador do tipo Mamdani e do tipo Sugeno [3], [4], [5]. Nos controladores do tipo Mamdani ao transferirmos o valor da função de pertinência para o conjunto de saída obtemos como resultado uma área para os valores inferiores ao da função pertinência. A união dessas áreas para todas as regras nos dá o conjunto fuzzy de saída, que para passar para o valor numérico usa-se por exemplo a abcissa do centro de gravidade da área obtida. Para o controlador do tipo Sugeno temos como saída uma função polinômio de grau “n” em função das variáveis de entrada. Usualmente adota-se n = 0 ou n = 1, visto que a melhora dos resultados não justifica o aumento da complexidade obtida. O fato da saída do tipo Sugeno ser uma função linear nos parâmetros que devem ser ajustados permite que o método do backpropagation ou um método híbrido de backpropagation e mínimos quadrados seja aplicado para ajustar o controlador tipo Sugeno [5]. Um controlador fuzzy típico normalmente é projetado para se comportar de forma dedutiva, ou seja, inferir conclusões baseado no conhecimento que ele contenha. Outra forma de aplicação destes controladores seria projetá-lo para possuir comportamento indutivo, onde é possível a aprendizagem e generalização através de exemplos particulares provenientes da observação do seu comportamento numa situação dinâmica. 4. EXPERIMENTO A abordagem que utilizamos foi de usar um controlador do tipo Mamdani atuando de forma dedutiva e um controlador do tipo Sugeno de forma indutiva. Para isso foi simulado um sistema de controle do braço robótico com um controlador Mamdani atuando como controlador tipo feedback e um controlador Sugeno atuando como controlador tipo feedforward, de acordo com a estrutura de controle neural conhecida como Feedback-Error-Learning [6]. Tal estrutura é mostrada na figura 2. Figura 2 - Estrutura de controle Feedback-Error-Learning. A idéia central é fazer com que, através da abordagem adaptativa neuro-fuzzy, o controlador Sugeno (que é iniciado de forma tal a ter atuação nula) aprenda a cada sessão de treinamento a reproduzir o torque total aplicado no braço robótico sem o torque bias. Desta maneira, o controlador Sugeno paulatinamente assumirá o controle do braço robótico e a saída do controlador Mamdani irá convergir para valores muito pequenos [6]. As figuras 3 e 4 ilustram o braço robótico e o diagrama de simulação no software MATLAB/SIMULINK. Conforme mostrado no diagrama de simulação (figura 4) a entrada do modelo Sugeno (cujos parâmetros foram armazenados no arquivo bracosug.fis) é a posição de referência e a sua derivada no instante t e a saída é o torque total aplicado ao braço robótico antes da aplicação da adição do valor bias (figuras 2 e 4). O valor bias foi ajustado de forma a ser o valor do torque necessário para manter o braço robótico parado na posição horizontal. Figura 3 - Braço robótico. Figura 4 - Diagrama de simulação em MATLAB/SIMULINK. O sinal de referência da posição que o braço deve estar em função do tempo, é um uma onda senoidal de amplitude +90º a -90º com freqüência de 2 rad/s . este sinal pode ser visto na figura 5. bracoanfis 100 50 0 -50 -100 32 34 36 Tim e (Seconds) 38 40 Figura 5 - Trajetória de referência para o braço robótico. O treinamento do controlador Sugeno foi realizado ao final de cada sessão de simulação, ou seja, durante cada sessão de simulação os parâmetros do controlador Sugeno foram mantidos constantes e os dados de treinamento foram colhidos. Ao final de cada sessão de simulação, o controlador Sugeno foi então treinado com os dados colhidos na sessão de treinamento imediatamente anterior. Na primeira sessão de simulação da estrutura Feedback-Error-Learning (iteração zero) apenas o controlador Mamdani foi usado. Este controlador foi ajustado manualmente de forma tal a produzir para o braço robótico uma trajetória estável. Tal trajetória é mostrada na figura 6. Os parâmetros do controlador Mamdani e os parâmetros iniciais do controlador Sugeno são mostrados no apêndice deste artigo. bracoanfis 150 100 50 0 -50 -100 32 34 36 Tim e (Seconds) 38 40 Figura 6 - Trajetória do braço robótico ao final da primeira sessão de simulação. Ao final da primeira sessão de simulação o valor de referência da posição ( θ ), a derivada do valor de referência ( θ ) e o torque total sem o bias foi armazenado em uma matriz “teta”, considerando os 40 segundos de operação do braço amostrados com intervalo 0,1 s. Desta matriz, foram extraídos os dados referentes aos 2 últimos ciclos do sinal de referência. Os dados referentes ao penúltimo ciclo foram armazenados na variável bracosugTrn enquanto que os dados referentes ao último ciclo foram armazenados na variável bracosugChk. A função ANFISEDIT do software MATLAB 6.0 [5] foi então usada par treinar um sistema neuro-fuzzy tipo Sugeno usando os dados da variável bracosugTrn como dados de treinamento (training data) e os dados da variável bracosugChk como dados de verificação do treinamento (checking data) para evitar o chamado overtraining. Foi utilizada a facilidade da função ANFISEDIT onde o treinamento é realizado até que o mínimo erro sobre o conjunto checking data seja atingido. Este procedimento composto de sessão de simulação e sessão de treinamento foi repetido 12 vezes. Ao final da 12a sessão de treinamento, foi então implementado um aumento de 2% no torque de bias e a estrutura Feedback-Error-Learning foi novamente simulada. A figura 7 mostra a trajetória real do braço após o treinamento do controlador Sugeno por 12 sessões e o ajuste fino no torque de bias. Pode-se observar nesta figura que a trajetória real do braço robótico é muito próxima da trajetória de referência desejada. bracoanfis 100 50 0 -50 -100 32 34 36 Tim e (Seconds) 38 40 Figura 7 - Trajetória real do braço robótico ao final do treinamento e do ajuste fino no torque de bias. A figura 8 mostra a integral do valor absoluto dos torques gerados pelos controladores Mamdani e Sugeno ao final de cada uma das 13 sessões de simulação da estrutura Feedback-ErrorLearning. Note, como reportado em [1] e [6], o efeito do chaveamento entre os controladores feedback (Mamdani) e feedforward (Sugeno) e a consequente redução do erro de trajetória do braço robótico conforme mostrado pela figura 7. Integral de abs(Torque) 20 M amdani Sugeno 15 10 5 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 No da sessão Figura 8 - Integral do valor absoluto dos torques gerados pelos controladores Mamdani e Sugeno ao final de cada sessão de simulação. 6. CONCLUSÃO Podemos perceber que a arquitetura de dois controladores fuzzy , um do tipo Mamdani trabalhando em feedback e o outro do tipo Sugeno trabalhando em feedforward se adequou satisfatoriamente ao ajuste do braço mecânico com um grau de liberdade. Na realidade obtivemos a vantagens dos dois tipos de controladores fuzzy, o primeiro tem a vantagem de ser ajustado rapidamente manualmente, e o segundo tem a vantagem de permitir o ajuste fino através de uma abordagem adaptativa neuro-fuzzy. Uma possível melhoria nessa arquitetura poderia ser testada fazendo com que o controlador Sugeno aprendesse também o torque de bias, não necessitando então de um ajuste final como necessário neste caso. BIBLIOGRAFIA [1] Nascimento Jr., C. L.; Yoneyama, T.; Inteligência Artificial em Controle e Automação, Edgard Blücher, São Paulo, 2000. [2] Shaw,I. S.; Simões,M.G.; Controle e Modelagem Fuzzy, Edgard Blücher, São Paulo, 1999. [3] Jang, J.-S. R.; ANFIS: Adaptive-Network-Based Fuzzy Inference System, IEEE Trans. Systems, Man, and Cybernectics, vol. 23, no. 3, págs. 665-685, May/June 1993. [4] Jang, J.-S. R.; Sun, C.-T.; Neuro-Fuzzy Modeling and Control, Proceedings of the IEEE, vol. 83, no. 3, págs. 378-406, March 1995. [5] The Mathworks Inc.; Fuzzy Logic Toolbox User’s Guide, http://www.mathworks.com/. [6] Rios Neto, Wilson; Nascimento Jr., Cairo L.; Góes, Luiz Carlos S.; “Controle Adaptativo Inverso usando Feedback-Error-Learning”, Anais do XII Congresso Brasileiro de Automática, Vol. I, págs. 351-356, Uberlândia, 14-18 Set. 1998. Apêndice - Dados dos Controladores A.1. Controlador Mamdani: A.1.1. Regras usada no controlador Mamdani: If (erro is neg) and (rate is neg) then (torque is neg) (1) If (erro is pos) and (rate is pos) then (torque is pos) (1) If (erro is pos) and (rate is neg) then (torque is BPC) (1) If (erro is neg) and (rate is pos) then (torque is BPC) (1) If (erro is zero) and (rate is zero) then (torque is BPM) (1) A.1.2. Funções de Pertinência para as entrada e a saída do controlador Mamdani: input 1 "erro" input 2 "derivada do erro" pos 1 D egree of membership zero 0.8 0.6 0.4 0.2 0 -3 de rivad a-t eta -po s it iva derivada-teta-negativa zero derivada-teta-positiva 0.8 0.6 0.4 0.2 0 -2 -1 0 erro 1 2 3 -10 -5 Input 1 0 rate Input 2 output " torque " controlador tipo M amdani 1 D egree of membership D egree of membership 1 neg neg BPC BPM pos 0.8 0.6 0.4 0.2 0 -15 -10 -5 0 torque Output 5 10 15 5 10 A.2.Controlador Sugeno: A.2.1. Regras usadas no controlador Sugeno: If (erro is teta-neg) and (rate is derivada-teta-positiva) then (torque is TGP) (1) If (erro is teta-pos) and (rate is derivada-teta-positiva) then (torque is TPP) (1) If (erro is teta-pequeno) and (rate is derivada-teta-positiva) then (torque is TMP) (1) If (erro is teta-pequeno) and (rate is derivada-teta-negativa) then (torque is TMN) (1) If (erro is teta-neg) and (rate is derivada-teta-negativa) then (torque is TPN) (1) If (erro is teta-pos) and (rate is derivada-teta-negativa) then (torque is TGN) (1) A.2.2. Funções de Pertinência para as entradas do controlador Sugeno antes do processo de aprendizagem: input 1 "referencia" input 2 "derivada da referencia" teta-pequeno teta-pos 1 D egree of membership D egree of membership 1 teta-neg 0.8 0.6 0.4 0.2 derivada-teta-positiva 0.8 0.6 0.4 0.2 0 -3 derivada-teta-negativa 0 -2 -1 0 referência 1 2 3 -1 0 -5 Input 1 0 deriva da-referê nc ia 5 10 Input 2 A.2.3. Funções de Pertinência para as entradas do controlador Sugeno depois do processo de aprendizagem: Input 2 "derivada da referência" Input 1 " referencia" teta-pequeno teta-pos 1 Degree of membership Degree of m embership 1 teta-neg 0.8 0.6 0.4 0.2 derivada-teta-positiva 0.8 0.6 0.4 0.2 0 0 -3 derivada-teta-negativa -2 -1 0 referência 1 2 3 -10 Input 1 -5 0 derivada-referência 5 10 Input 2 A.2.4. Funções de Pertinência para a saída do controlador Sugeno: Todos os parâmetros das funções de pertinência de saída do controlador Sugeno foram inicializados em zero e ao final das 12 sessões de treinamento apresentaram os seguintes valores: TGP = [ TPP = [ TMP = [ TMN = [ TPN = [ TGN = [ 26,8937 -2,4470 3,9341 -4,0166 -86,6385 -4,1739 -20,8633 1,6767 -3,8351 -7,5853 -32,8735 -0,1532 88,3323] -5,0372] 14,9434] -26,0597] -187,6150] 0,5572]