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]
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 quinta-feira, 1 de novembro de 12
Lógica Nebulosa
4 quinta-feira, 1 de novembro de 12
Lógica Nebulosa
•
Permite criarmos controladores baseados
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.)”
5 quinta-feira, 1 de novembro de 12
Exemplo de uma variável nebulosa
representando a temperatura de um
Funcionamento de um sistema nebuloso
7 quinta-feira, 1 de novembro de 12
Arduino
•
Programação em alto nível
para controlar um robô
9 quinta-feira, 1 de novembro de 12
Arduino
•
Programação em alto nível
para controlar um robô
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 quinta-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
Lógica Nebulosa + Arduino
10 quinta-feira, 1 de novembro de 12
Lógica Nebulosa + Arduino
•
Robô real simples, autônomo, capaz de
desviar de obstáculos (Mariam)
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 quinta-feira, 1 de novembro de 12
Objetivo
12 quinta-feira, 1 de novembro de 12
Objetivo
•
Criar uma biblioteca capaz de levar um
sistema nebuloso para de um
Objetivo
•
Criar uma biblioteca capaz de levar um
sistema nebuloso para de um
microcontrolador, programável em C/C++
•
Biblioteca LabicFuzzyC!
13 quinta-feira, 1 de novembro de 12
FIS - Fuzzy Inference
System
Fuzzy Toolbox (MATLAB)
15 quinta-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 17 quinta-feira, 1 de novembro de 12FIS Parser
19 quinta-feira, 1 de novembro de 12
Integração com o
Arduino
IDE do Arduino
21 quinta-feira, 1 de novembro de 12
Dificuldades
•
Várias configurações de sistemas nebulosos
23 quinta-feira, 1 de novembro de 12
Dificuldades
•
Várias configurações de sistemas nebulosos
Dificuldades
•
Várias configurações de sistemas nebulosos
•
Hardware limitado do Arduino
•
Arduino Uno: 2 KB SRAM
23 quinta-feira, 1 de novembro de 12
Dificuldades
•
Várias configurações de sistemas nebulosos
•
Hardware limitado do Arduino
•
Arduino Uno: 2 KB SRAM
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 quinta-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
25 quinta-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%
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)
26 quinta-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%
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)
26 quinta-feira, 1 de novembro de 12
Resultados
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 quinta-feira, 1 de novembro de 12