Buscar

Slides Controlador Lógica Nebulosa Implementação Robôs Inteligentes Utilizando Arduino Mário Raduan Labic UFRJ

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

Continue navegando