Controlador de Lógica Nebulosa para implementação em robôs inteligentes utilizando Arduino Mário Alberto Cecchi Raduan [UFRJ/PIBIC - Ago. 2011 a Jul. 2012] Orientador: Adriano Joaquim de Oliveira Cruz, PhD 1
Controlador de Lógica Nebulosa para implementação em robôs inteligentes utilizando Arduino Motivação Objetivo FIS - Fuzzy Inference System Do MATLAB para C Integração com Arduino Dificuldades Resultados 2
Motivação 3
Lógica Nebulosa 4
Lógica Nebulosa Permite criarmos controladores baseados nas observações humanas 5
Lógica Nebulosa Permite criarmos controladores baseados nas observações humanas As implementações da lógica difusa permitem que estados indeterminados possam ser tratados por dispositivos de controle. Desse modo, é possível avaliar conceitos nãoquantificáveis. Casos práticos: avaliar a temperatura (quente, morno, médio...), o sentimento de felicidade(radiante, feliz, apático, triste...), a veracidade de um argumento (corretíssimo, correto, contra-argumentativo, incoerente, falso, totalmente errôneo etc.) 5
Exemplo de uma variável nebulosa representando a temperatura de um ambiente 6
Funcionamento de um sistema nebuloso 7
Arduino 8
Arduino Programação em alto nível para controlar um robô 9
Arduino Programação em alto nível para controlar um robô Baixo custo (US$ 30) 9
Arduino Programação em alto nível para controlar um robô Baixo custo (US$ 30) Programas ficam salvos na memória Flash do Arduino 9
Arduino Programação em alto nível para controlar um robô Baixo custo (US$ 30) Programas ficam salvos na memória Flash do Arduino Enorme compatibilidade com sensores, módulos e motores 9
Lógica Nebulosa + Arduino 10
Lógica Nebulosa + Arduino Robô real simples, autônomo, capaz de desviar de obstáculos (Mariam) 10
Lógica Nebulosa + Arduino Robô real simples, autônomo, capaz de desviar de obstáculos (Mariam) Problema: como embarcar um sistema nebuloso em uma plataforma autônoma, como o Arduino? 10
Um dos robôs utilizados no LabIC 11
Objetivo 12
Objetivo Criar uma biblioteca capaz de levar um sistema nebuloso para de um microcontrolador, programável em C/C++ 13
Objetivo Criar uma biblioteca capaz de levar um sistema nebuloso para de um microcontrolador, programável em C/C++ Biblioteca LabicFuzzyC! 13
FIS - Fuzzy Inference System 14
Fuzzy Toolbox (MATLAB) 15
Fuzzy Toolbox (MATLAB) 16
O arquivo.fis [System] Name='caminhao' Type='mamdani' Version=2.0 NumInputs=2 NumOutputs=1 NumRules=35 AndMethod='min' OrMethod='max' ImpMethod='min' AggMethod='max' DefuzzMethod='centroid' [Input1] Name='Posicao_c' Range=[0 100] NumMFs=5 MF1='LE':'trapmf',[0 0 10 35] MF2='LC':'trimf',[30 40 50] MF3='CE':'trimf',[45 50 55] MF4='RC':'trimf',[50 60 70] MF5='RI':'trapmf',[65 90 100 100] [Input2] Name='Angulo_c' Range=[-105 285] NumMFs=7 MF1='RB':'trimf',[-105-45 15] MF2='RU':'trimf',[-15 30 60] MF3='RV':'trimf',[45 67 90] MF4='VE':'trimf',[75 90 105] MF5='LV':'trimf',[90 112 135] MF6='LU':'trimf',[120 150 195] MF7='LB':'trimf',[165 225 285] [Output1] Name='Angulo_v' Range=[-30 30] NumMFs=7 MF1='NB':'trimf',[-30-30 -15] MF2='NM':'trimf',[-25-15 -5] MF3='NS':'trimf',[-10-5 0] MF4='ZE':'trimf',[-5 0 5] MF5='PS':'trimf',[0 5 10] MF6='PM':'trimf',[5 15 25] MF7='PB':'trimf',[15 30 30] [Rules] 1 1, 5 (1) : 1 1 2, 4 (1) : 1 17
Do MATLAB para C 18
FIS Parser 19
Integração com o Arduino 20
IDE do Arduino 21
Dificuldades 22
Dificuldades Várias configurações de sistemas nebulosos 23
Dificuldades Várias configurações de sistemas nebulosos Hardware limitado do Arduino 23
Dificuldades Várias configurações de sistemas nebulosos Hardware limitado do Arduino Arduino Uno: 2 KB SRAM 23
Dificuldades Várias configurações de sistemas nebulosos Hardware limitado do Arduino Arduino Uno: 2 KB SRAM Arduino Mega: 8 KB SRAM 23
Dificuldades Várias configurações de sistemas nebulosos Hardware limitado do Arduino Arduino Uno: 2 KB SRAM Arduino Mega: 8 KB SRAM Repensar tipos das variáveis para economizar uso da RAM 23
Resultados 24
Resultados Resultados com baixíssima margem de erro quando comparados aos do MATLAB Primeira versão da biblioteca feita em C sob medida para um sistema específico Segunda versão totalmente reescrita em C++ para funcionar com qualquer sistema Última versão compilada ocupa pouco mais de 5 KB no Arduino 25
Resultados Sistema Tipo Amostras Desvio padrão Margem de erro caminhao (15 regras) Anfis 390 0,00003 0,00006% * Desvio padrão e margem de erro calculados em relação aos resultados obtidos pela função evalfis() do MATLAB. ** Margem de erro = (desvio padrão)/(intervalo da variável) 26
Resultados Sistema Tipo Amostras Desvio padrão Margem de erro caminhao (15 regras) caminhao (35 regras) Anfis 390 0,00003 0,00006% Mamdani 390 0,723 1,2% robo * Desvio padrão e margem de erro calculados em relação aos resultados obtidos pela função evalfis() do MATLAB. ** Margem de erro = (desvio padrão)/(intervalo da variável) 26
Resultados Sistema Tipo Amostras Desvio padrão Margem de erro caminhao (15 regras) caminhao (35 regras) robo (35 regras) Anfis 390 0,00003 0,00006% Mamdani 390 0,723 1,2% Mamdani 1.170 0,928 1,5% * Desvio padrão e margem de erro calculados em relação aos resultados obtidos pela função evalfis() do MATLAB. ** Margem de erro = (desvio padrão)/(intervalo da variável) 26
Resultados Sistema Tipo Amostras Desvio padrão Margem de erro caminhao (15 regras) caminhao (35 regras) robo (35 regras) manual (200 regras) Anfis 390 0,00003 0,00006% Mamdani 390 0,723 1,2% Mamdani 1.170 0,928 1,5% Mamdani 8.748 0,540 0,9% * Desvio padrão e margem de erro calculados em relação aos resultados obtidos pela função evalfis() do MATLAB. ** Margem de erro = (desvio padrão)/(intervalo da variável) 26
Resultados Open-source e em breve no site do LabIC! 27
Referências John Yen, Reza Langari, Fuzzy Logic: Intelligence, Control and Information, Prentice Hall, 1999, ISBN 0-13525817-0 H. T. Nguyen, E. A. Walker, A First Course in Fuzzy Logic, Chapman & Hall/CRC, 2000 Thimoty Ross, Fuzzy Logic with Engineering Applications, J. Wiley, 3rd Edition, 2010 MOTA, T.C., Análise e Proposta de Controladores para Navegação Autônoma de um Robô Inteligente. 2010. 131p. Dissertação (Mestrado em Informática) Programa de Pós-Graduação em Informática, UFRJ, Rio de Janeiro, RJ, Brasil Site oficial do Arduino - http://arduino.cc 28
Obrigado! Laboratório de Inteligência Computacional Núcleo de Computação Eletrônica - UFRJ www.labic.nce.ufrj.br 29