Baixe o app para aproveitar ainda mais
Prévia do material em texto
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 1quinta-feira, 1 de novembro de 12 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 2quinta-feira, 1 de novembro de 12 Motivação 3quinta-feira, 1 de novembro de 12 Lógica Nebulosa 4quinta-feira, 1 de novembro de 12 Lógica Nebulosa • Permite criarmos controladores baseados nas observações humanas 5quinta-feira, 1 de novembro de 12 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ão- quantificá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.)” 5quinta-feira, 1 de novembro de 12 Exemplo de uma variável nebulosa representando a temperatura de um ambiente 6quinta-feira, 1 de novembro de 12 Funcionamento de um sistema nebuloso 7quinta-feira, 1 de novembro de 12 Arduino 8quinta-feira, 1 de novembro de 12 Arduino • Programação em alto nível para controlar um robô 9quinta-feira, 1 de novembro de 12 Arduino • Programação em alto nível para controlar um robô • Baixo custo (US$ 30) 9quinta-feira, 1 de novembro de 12 Arduino • Programação em alto nível para controlar um robô • Baixo custo (US$ 30) • Programas ficam salvos na memória Flash do Arduino 9quinta-feira, 1 de novembro de 12 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 9quinta-feira, 1 de novembro de 12 Lógica Nebulosa + Arduino 10quinta-feira, 1 de novembro de 12 Lógica Nebulosa + Arduino • Robô real simples, autônomo, capaz de desviar de obstáculos (Mariam) 10quinta-feira, 1 de novembro de 12 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? 10quinta-feira, 1 de novembro de 12 Um dos robôs utilizados no LabIC 11quinta-feira, 1 de novembro de 12 Objetivo 12quinta-feira, 1 de novembro de 12 Objetivo • Criar uma biblioteca capaz de levar um sistema nebuloso para de um microcontrolador, programável em C/C++ 13quinta-feira, 1 de novembro de 12 Objetivo • Criar uma biblioteca capaz de levar um sistema nebuloso para de um microcontrolador, programável em C/C++ • Biblioteca LabicFuzzyC! 13quinta-feira, 1 de novembro de 12 FIS - Fuzzy Inference System 14quinta-feira, 1 de novembro de 12 Fuzzy Toolbox (MATLAB) 15quinta-feira, 1 de novembro de 12 Fuzzy Toolbox (MATLAB) 16quinta-feira, 1 de novembro de 12 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 17quinta-feira, 1 de novembro de 12 Do MATLAB para C 18quinta-feira, 1 de novembro de 12 FIS Parser 19quinta-feira, 1 de novembro de 12 Integração com o Arduino 20quinta-feira, 1 de novembro de 12 IDE do Arduino 21quinta-feira, 1 de novembro de 12 Dificuldades 22quinta-feira, 1 de novembro de 12 Dificuldades • Várias configurações de sistemas nebulosos 23quinta-feira, 1 de novembro de 12 Dificuldades • Várias configurações de sistemas nebulosos • Hardware limitado do Arduino 23quinta-feira, 1 de novembro de 12 Dificuldades • Várias configurações de sistemas nebulosos • Hardware limitado do Arduino • Arduino Uno: 2 KB SRAM 23quinta-feira, 1 de novembro de 12 Dificuldades • Várias configurações de sistemas nebulosos • Hardware limitado do Arduino • Arduino Uno: 2 KB SRAM • Arduino Mega: 8 KB SRAM 23quinta-feira, 1 de novembro de 12 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 23quinta-feira, 1 de novembro de 12 Resultados 24quinta-feira, 1 de novembro de 12 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 25quinta-feira, 1 de novembro de 12 Resultados Sistema Tipo Amostras Desvio padrão Margem de erro caminhao (15 regras) Anfis 390 0,00003 0,00006% caminhao (35 regras) Mamdani 390 0,723 1,2% robo (35 regras) Mamdani 1.170 0,928 1,5% manual (200 regras) 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) 26quinta-feira, 1 de novembro de 12 Resultados Sistema Tipo Amostras Desvio padrão Margem de erro caminhao (15 regras) Anfis 390 0,00003 0,00006% caminhao (35 regras) Mamdani 390 0,723 1,2% robo (35 regras) Mamdani 1.170 0,928 1,5% manual (200 regras) 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) 26quinta-feira, 1 de novembro de 12 Resultados Sistema Tipo Amostras Desvio padrão Margem de erro caminhao (15 regras) Anfis 390 0,00003 0,00006% caminhao (35 regras) Mamdani 390 0,723 1,2% robo (35 regras) Mamdani 1.170 0,928 1,5% manual (200 regras) 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) 26quinta-feira, 1 de novembro de 12 Resultados Sistema Tipo Amostras Desvio padrão Margem de erro caminhao (15 regras) Anfis 390 0,00003 0,00006% caminhao (35 regras) Mamdani 390 0,723 1,2% robo (35 regras) Mamdani 1.170 0,928 1,5% manual (200 regras) Mamdani 8.748 0,540 0,9% * Desvio padrão e margem de erro calculados em relação aos resultados obtidos pela funçãoevalfis() do MATLAB. ** Margem de erro = (desvio padrão)/(intervalo da variável) 26quinta-feira, 1 de novembro de 12 Resultados • Open-source e em breve no site do LabIC! 27quinta-feira, 1 de novembro de 12 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 28quinta-feira, 1 de novembro de 12 Obrigado! Laboratório de Inteligência Computacional Núcleo de Computação Eletrônica - UFRJ www.labic.nce.ufrj.br 29quinta-feira, 1 de novembro de 12
Compartilhar