Escolar Documentos
Profissional Documentos
Cultura Documentos
Montes Claros - MG
2018
Warley Cândido Peixoto Júnior
Montes Claros - MG
2018
FUNDAÇÃO EDUCACIONAL DE MONTES CLAROS
Faculdade de Ciência e Tecnologia de Montes Claros
Banca Examinadora
Agradeço primeiramente a Deus pela oportunidade de chegar até aqui, pelo sustento e por
conceder-me a sabedoria e o entendimento necessários para trilhar essa longa jornada.
Aos meus pais Warley Peixoto e Joelma Gomes e ao meu irmão Gustavo Gomes pelo amor
incondicional e por não medirem esforços para que este sonho se tornasse possível.
À minha namorada Iêssa Lino pela motivação e incentivo em meio às situações mais
adversas vividas durante o curso.
Ao meu orientador Yuri Adan pela disponibilidade e orientação, elementos essenciais para
a concretização do presente projeto.
Aos familiares, amigos, professores e àqueles que contribuíram de forma direta ou indireta,
meus sinceros agradecimentos.
“E não vos conformeis com este mundo, mas transformai-vos pela renovação da vossa mente,
para que experimenteis qual seja a boa, agradável e perfeita vontade de Deus”
(Bíblia Sagrada, Romanos 12:2)
RESUMO
O presente projeto tem por objetivo criar um algoritmo utilizando o controlador fuzzy capaz de
gerar rotas autônomas. Para alcançá-lo, foi utilizado um software de simulação V-REP juntamente
com o Matlab para a modelagem do controlador fuzzy. O método de pesquisa utilizado tem
caráter descritivo e explicativo, contendo metodologia experimental e análises quantitativas. No
desenvolvimento deste projeto foram utilizados dois softwares: um para a simulação e outro
para a modelagem do controlador. Posteriormente, foi implementado o protótipo responsável
pela validação do algoritmo criado e simulado. Para a criação desse, lançou-se mão de Arduino,
Raspberry e sensores ultrassônicos. Todos os itens citados foram montados em estrutura com
dois motores DC e uma roda universal. Os objetivos propostos foram alcançados, demonstrando
assim a eficiência do algoritmo e a autonomia nas tomadas de decisões, aplicando assim as
técnicas de controle utilizando a ferramenta fuzzy.
The present project aims to create an algorithm using the fuzzy controlator capable of generating
autonomous routes. To achieve this, a V-REP simulation software was used along with Matlab to
model the fuzzy controller. The research method used is descriptive and explanatory, containing
experimental methodology and quantitative analyzes. In the development of this project two
software were used: one for the simulation and another for the modeling of the controller.
Subsequently, the prototype responsible for validation of the created and simulated algorithm
was implemented. For the creation of this, Arduino, Raspberry and ultrasonic sensors were used.
All the mentioned items were mounted in structure with two DC motors and a universal wheel.
The proposed objectives were achieved, demonstrating the efficiency of the algorithm and the
autonomy in decision making, applying the control techniques using the fuzzy tool.
CI Circuito Integrado
C-o-A Centro-da-Área
C-o-M Centro-dos-Máximo
GB Giga Byte
mA Miliampere
M-o-M Média-do-Máximo
INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
CAPÍTULO 1 REVISÃO DA LITERATURA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.1 Redes neurais artificiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.1.1 Neurônios biológicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2 Algoritmos genéticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3 Fuzzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.1 Configuração básica de um controlador fuzzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.1.1 Funções de pertinência fuzzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.1.2 Funções de interface de fuzzificação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.1.3 Base de conhecimento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.1.4 Lógica de tomada de decisões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.1.5 Funções da interface de defuzzificação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.1.6 Defuzzificação Centro-da-Área (C-o-A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.1.7 Defuzzificação Centro-do-Máximo (C-o-M). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.1.8 Defuzzificação Média-do-Máximo (M-o-M) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4 Neuro-fuzzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5 Otimização com colônia de formigas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6 Sistemas de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6.1 Malha aberta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.6.2 Malha fechada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.7 Circuitos elétricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.8 Microcontroladores e microprocessadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.9 Software V-REP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.9.1 Remote API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.10 Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.11 Elementos sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
CAPÍTULO 2 MATERIAIS E MÉTODOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1 Simulação do ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2 Modelagem do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3 Protótipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.4 Sistema embarcado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.4.1 Raspberry Pi 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.4.2 Arduino UNO R3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.5 Ponte H L298N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.6 Elementos sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
CAPÍTULO 3 RESULTADOS, ANÁLISE E DISCUSSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1 Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.1 Dimensionamento do robô . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.1.2 Dimensionamento dos sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.3 Simulações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.4 Resultados das simulações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.1.4.1 Cenário 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.1.4.2 Cenário 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.1.4.3 Cenário 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.2 Protótipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.2.1 Resultados do Protótipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.2.1.1 Pista 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.2.1.2 Pista 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
APÊNDICE A – ALGORITMO CONEXÃO V-REP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
APÊNDICE B – FUZZY LOGIC DESIGNER - GAUSSMF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
APÊNDICE C – FUZZY LOGIC DESIGNER - GAUSS2MF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
13
INTRODUÇÃO
Redes Neurais Artificiais (RNAs) são sistemas paralelos distribuídos, compostos por
unidade de processamento simples (nodos) que calculam determinadas funções matemáticas
(normalmente não-lineares). Tais unidades são dispostas em uma ou mais camadas, sendo
interligadas por um grande número de conexões, geralmente unidirecionais. Na maioria dos
modelos, estas conexões estão associadas a pesos que armazenam o conhecimento representado
no modelo e servem para ponderar a entrada recebida por cada neurônio da rede. O funcionamento
destas redes é inspirado em uma estrutura física concebida pela natureza: o cérebro humano
(BRAGA; CARVALHO; LUDERMIR, 2000).
Braga, Carvalho e Ludermir (2000) afirmam ainda que as RNAs devem passar por uma
fase de aprendizagem com um conjunto de exemplos apresentados para a rede. A partir desses
exemplos, a rede extrai automaticamente as características básicas para representar a informação
fornecida. A capacidade de “aprender” diante de exemplos e de “generalizar” a informação é o
atrativo principal da solução dos problemas através de RNAs. A generalização, está relacionada
à capacidade da rede em aprender através dos exemplos e, subsequentemente, dar respostas
coerentes aos dados não conhecidos.
A capacidade de adaptação dos neurônios garante que o robô tome decisões distintas e
autônomas de modo que o objetivo final seja alcançado ou que ele consiga definir qual rota tomar
diante do obstáculo encontrado ao longo do trajeto.
Um algoritmo é qualquer procedimento computacional bem definido que toma algum valor
ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída.
Concluindo, um algoritmo é uma sequência de etapas computacionais que transformam a entrada
na saída (CORMEN et al., 2012).
Os algoritmos genéticos são um ramo de algoritmos evolucionários e como tal, podem ser
definidos como uma técnica de busca baseada numa metáfora do processo biológico de evolução
natural.
Nos algoritmos genéticos, populações de indivíduos são criadas e submetidas aos opera-
dores genéticos: seleção, recombinação (crossover) e mutação. Estes operadores utilizam uma
caracterização de qualidade de cada indivíduo como uma solução do problema em questão
chamada de avaliação, gerando um processo de evolução natural destes indivíduos que, eventual-
mente, deverá gerar um indivíduo que caracterizará uma boa solução para o problema (LINDEN,
2006).
1.3 Fuzzy
A lógica fuzzy (também conhecida como lógica nebulosa e em alguns casos por teoria de
possibilidades) é uma forma ousada de manuseio de informações imprecisas. “A lógica fuzzy
provê um método de traduzir expressões verbais, vagas, imprecisas e qualitativas, comuns na
comunicação humana em valores numéricos.” (SIMÕES; SHAW, 1999). Essa tradução abre
portas para a conversão da linguagem humana em uma forma compreensível para o computador.
Os sistemas fuzzy são relativamente fáceis de entender e aplicar na prática, não é necessário
de um conhecimento matemático tão complexo como parece no primeiro contato com a lógica.
Todavia, o projetista do controlador fuzzy necessita de uma vasta compreensão de como as
imprecisões e incertezas ocorrem em processos e plantas industriais e como elas afetam as apli-
cações usuais da teoria de controle moderno, criando possibilidades à verificação da relevância e
confiabilidade dos resultados alcançados através da aplicação da teoria da lógica fuzzy (SIMÕES;
SHAW, 1999).
A lógica fuzzy pode também ser agregada aos sistemas de redes neurais citados na sessão
1.1, os chamados sistemas neuro-fuzzy, que aumentam a capacidade de aprendizado através da
16
A figura 2 mostra dois exemplos de pertinência, onde o eixo vertical representa o intervalo
[0,1] e o eixo horizontal o universo do discurso. É possível perceber que onde a função de
pertinência se anula há coincidência com o eixo horizontal (SIMÕES; SHAW, 1999). As funções
de pertinência apresentadas na imagem são: triangular, e trapezoidal, respectivamente, plotadas
sob o mesmo universo do discurso de uma variável física.
Simões e Shaw (1999) ressalta ainda que a quantidade de funções em um universo de
discurso e seu formato são escolhidos com base na experiência, na dinâmica do processo a
ser controlado. Quanto maior o número de conjuntos, maior a precisão. Porém, a demanda
computacional aumenta de acordo com a inserção de novos conjuntos. Outros formatos além
dos apresentados na imagem podem ser inseridos no conjunto, temos funções do tipo: cos²(x),
gaussiana, sigmoide e spline cúbico (S-shape) (SIMÕES; SHAW, 1999).
De acordo com Simões e Shaw (1999), os valores discretos (não-fuzzy) das variáveis de
entrada geralmente são originários de sensores das grandezas físicas ou de dispositivos de entrada
computadorizada. A interface de fuzzificação usa funções de pertinência contidas na base de
conhecimento, convertendo os sinais de entrada em um intervalo [0,1].
Por exemplo, Parede, Gomes e Horta (2011) afirmam que o padrão de comunicação 4-20
miliampere (mA) é largamente utilizado como forma de transmitir uma informação do processo
para um elemento de controle ou registro. Ao inserir um controlador fuzzy, ele converte esse
padrão de comunicação de 4-20 mA para um intervalo de [0,1]. Ao final, ocorre a transformação
onde os números convertidos nas etapas anteriores retornam ao padrão utilizado na entrada.
∑︀𝑁
𝑢𝑖 𝜇𝑂𝑈 𝑇 (𝑢𝑖 )
𝑢* = ∑︀𝑖=1
𝑁
(1)
𝑖=1 𝜇𝑂𝑈 𝑇 (𝑢𝑖 )
Onde 𝜇𝑂𝑈 𝑇 (𝑢𝑖 ) é o termo de saída fuzzy composto pela união de todas as contribuições de regras.
Por exemplo, um sistema fuzzy controla a vazão de um processo através da posição de uma
válvula proporcional.
19
A entrada do sistema fuzzy varia de 0 a 200 litros por segundo. A saída é a posição de uma
válvula normalmente fechada (0 a 100%). Os conjuntos fuzzy de entrada e saída são representados
pela imagem. Se for aplicado o método de defuzzificação centro-da-área serão obtidos resultados
mais precisos, porém a dificuldade do cálculo é elevada.
𝑀1 𝜇1 + 𝑀2 𝜇2
𝑆= (2)
𝜇1 + 𝜇2
Pode-se perceber que a equação do método (C-o-A) é extremamente semelhante à do
método (C-o-M), exceto pelo fato de que enquanto a equação do método (C-o-A) utiliza as áreas
de cada função de pertinência, a equação do método (C-o-M) usa apenas seus máximos. Os
resultados dos dois métodos são levemente diferentes. Pode-se observar essa ligeira diferença
nas figuras 5 e 6, onde foram usados os métodos (C-o-A) e (C-o-M) respectivamente (SIMÕES;
SHAW, 1999).
𝑀1 + 𝑀2
𝑆= (3)
2
21
Ao observar os resultados dos três valores de vazão da figura 6, verifica-se que tal método
apresenta grande diferença nos valores de saída em relação aos métodos citados anteriormente.
Entretanto, há uma grande vantagem computacional por apresentar uma equação simples de ser
calculada.
1.4 Neuro-fuzzy
A tabela 1 exibe uma comparação entre os sistemas fuzzy e redes neurais, indicando que
a combinação das características de lógica fuzzy e redes neurais trazem soluções de controle
inteligentes e possíveis soluções para as rotas autônomas (SIMÕES; SHAW, 1999).
22
Otimização com Colônia de Formigas, mais conhecida na literatura por sua forma na
língua inglesa “Ant Colony Optimization” (ACO), corresponde a uma classe de algoritmos que
geram soluções para um problema de otimização através de um mecanismo construído a partir
do componente da solução a ser adicionado em cada passo. A ideia central dessa meta-heurística
consiste em simular o processo de acúmulo e evaporação do ferormônio excretado pelas formigas
reais (SILVA, 2003).
Apesar de o sistema demonstrado possuir apenas uma entrada e uma saída em sua forma
mais simples, demonstrar-se-ão ao longo do desenvolvimento do projeto, sistemas com realimen-
tações e incrementos de outros blocos que promovem melhorias dos mesmos.
Na figura 7 foi representado um sistema de controle com a forma mais simples. Nesta seção
e na seção seguinte serão apresentados dois tipos de configurações dos sistemas de controle. É
possível considerar essas configurações como sendo a arquitetura interna do sistema total.
Para total entendimento de um sistema em malha aberta, iremos considerar o diagrama de
blocos de um sistema em malha aberta genérico. Ele é começado com um subsistema chamado
transdutor de entrada, o qual converte a forma de entrada em uma a ser utilizada pelo controlador.
Transdutores são dispositivos que convertem grandezas físicas em grandezas elétricas (DORF;
SVOBODA, 2008). O controlador, então, aciona um processo ou planta. Perturbações são
mostradas adicionados a saída do controlador que ao final são acrescentados na soma algébrica.
A entrada pode ser chamada, algumas vezes, de referência, enquanto a saída, variável controlada.
Para exemplificar esse sistema de controle, a planta pode ser uma caldeira, no qual a variável de
saída é a temperatura.
Os sistemas de malha aberta não possuem correção para perturbações e são comandados
apenas pela entrada. Nise (2013) exemplifica os sistemas de malha aberta utilizando uma
torradeira, onde só é possível verificar a variável controlada (saída) a partir da visualização da
24
cor da torrada. O dispositivo não mede a cor da torrada, nem efetua correções quanto ao tipo de
pão ou o formato do mesmo.
Ao comparar o sistema em malha aberta com o sistema em malha fechada, verifica-se que
foi adicionado um transdutor de saída ou sensor no diagrama de blocos. A primeira junção de
soma adiciona o sinal de entrada ao sinal de saída, que chega através da malha de realimentação,
ao caminho de retorno da saída para a junção soma. O sinal de saída é subtraído ao sinal de
entrada, sendo o resultado chamado de sinal de atuação ou erro (NISE, 2013). O valor do sinal
de atuação é igual à diferença real entre a entrada e a saída.
Os sistemas em malha fechada conseguem reagir melhor às perturbações quando compa-
rados aos sistemas em malha aberta, pois com a realimentação é possível comparar o sinal de
entrada com o efeito da perturbação e, caso exista alguma diferença entre as duas respostas, o
atuador faz a correção na planta a fim de eliminar tais diferenças.
A partir dessas duas definições depreende-se que, para alcançar um circuito elétrico com
componentes eletrônicos, é necessário simular em um modelo matemático de maneira a observar
o comportamento aproximado daquele circuito.
Como podemos observar na figura 10 a API é face de um serviço Web, que escuta e
responde às solicitações do cliente diretamente (MASSE, 2012).
27
1.10 Arduino
Margolis (2012) diz que o Arduino é uma família de microcontroladores de pequeno porte,
que possui um ambiente de criação de software, facilitando a criação de programas que podem
interagir com o mundo físico. Tais componentes podem ser sensores que recebem estímulos
do ambiente físico e os convertem em sinais de entrada enviados ao microcontrolador que,
em seguida, leem essas informações e as interpretam. Baseado nas informações recebidas, o
microcontrolador toma decisões e atua no processo de acordo com a modelagem do sistema.
Os sensores são a interface perceptiva entre robôs e seus ambientes (NORVIG; RUSSELL,
2013). Diversos tipos de sensores estão disponíveis para coleta de um processo de produção
e utilização no controle por realimentação (feedback). Segundo Groover (2011), um sensor é
um transdutor ou dispositivo que converte um estímulo físico ou uma variável de interesse, por
exemplo, temperatura, pressão ou deslocamento, em uma forma mais conveniente, em geral um
sinal elétrico como a voltagem que tem como objetivo medir o estímulo.
Na robótica os sensores são utilizados em grande escala, pois um robô sem sensor é
simplesmente uma máquina, ou seja, é necessário que este possua sensores que percebam o
28
mundo ao seu redor, podendo reagir a determinados estímulos externos. Os sensores têm por
objetivo auxiliar o robô na execução de tarefas ajudando-o a determinar os parâmetros do
ambiente que o cerca (ROSÁRIO, 2005).
29
Este capítulo tem como objetivo a apresentação dos materiais e métodos que foram
necessários para a construção do algoritmo, bem como os tipos de pesquisa essenciais para a
realização dos acontecimentos.
Como houve a simulação de um ambiente com obstáculos onde o robô deveria tomar
decisões autônomas para alcançar o objetivo, foram necessárias técnicas de controle e modelagem
do sistema para obter-se o resultado desejado. Para auxílio das simulações e modelagem utilizou-
se softwares como o MatLab, desenvolvido pela empresa MathWorks® com matriz situada na
cidade de Natick, Massachusetts nos Estados Unidos. Esse software possui ferramentas como
a de simulação fuzzy, onde foram inseridos os valores de pertinências, as regras e o método
utilizado para calcular os valores de saída.
2.3 Protótipo
Para a construção do protótipo foram utilizados Chassi 2WD Robô, onde encontram-se os
sensores juntamente com os sistemas embarcados: Raspberry Pi 3 e arduino uno R3. A imagem
a seguir demonstra o chassi do robô empregado nos testes de rotas alternativas.
31
O Chassi é composto de acrílico revestido por uma película adesiva para proteção contra
arranhados. Ambos os motores DC possuem caixa de redução (1:48) e são conectados indepen-
dentemente em cada roda, sobrando assim uma roda boba (universal) para dar sustentação. Possui
ainda dois discos de encoder acoplado nas rodas para medir a rotação, oferecendo possibilidades
à realização de testes de velocidade.
O sistema embarcado é de grande importância, visto que constitui parte do circuito ele-
trônico que, através de microcircuitos, estabelece a lógica de controle, ou seja, nele aplica-se
diretamente o algoritmo que representa o controlador. O sistema embarcado usado foi a Raspberry
Pi 3 objetivando rodar o algoritmo alimentado com os dados coletados pelos sensores, tomando
assim as decisões necessárias e enviando-os diretamente ao arduino uno R3 responsável pela
leitura e controle da velocidade dos motores, assim como o envio de tais dados por intermédio
da comunicação USB serial.
2.4.1 Raspberry Pi 3
A figura 15 exibe a Raspberry Pi 3 Model B+, uma placa constituída por um processador
com clock de 1.2GHz capaz de executar diversas distribuições Linux como o Raspbian que foram
empregadas nesse projeto. Além disso, a placa possui 1GB de memória RAM, adaptador para
cartão microSD e saída para áudio e vídeo.
32
TABELA 2
Especificações da Raspberry Pi 3
Especificação Dados
Chip Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit
Modelo Raspberry Pi 3 Model B+
Tensão de operação 5V, 2.5A
GPIO 40
Portas USB 4 USB 2.0
Memoria RAM 1GB LPDDR2 SDRAM
Clock 1.2 GHz
Conector Ethernet 100 Base Ethernet
Saída HDMI 1
Saída de Áudio 1
Saída de Display (DSI) 1
Saída de Câmera (CSI) 1
Dimensões 85 x 56 x 17mm
Fonte: (RASPBERRYPI, 2018)
A figura 16 mostra o arduino uno R3, uma placa composta por um microcontrolador Atmel,
circuitos de entrada/saída, que pode ser facilmente conectada à um computador e programada
via IDE (Integrated Development Environment, ou Ambiente de Desenvolvimento Integrado)
33
utilizando uma linguagem baseada em C/C++, sem a necessidade de equipamentos extras além
de um cabo USB.
Este Driver Motor Ponte H é baseado no chip L298N, construído para controlar cargas
indutivas como: relés, solenoides, motores DC e motores de passo. Com este Driver é possível
controlar independentemente a velocidade e rotação de dois motores DC ou um motor de passo
(FILIPEFLOP, 2018).
35
TABELA 4
Especificações da Ponte H L298N
Especificação Dados
Tensão de operação 4 35V
Chip ST L298N
Corrente de operação máxima 2A por canal ou 4A máxima
Tensão lógica 5v
Corrente lógica 0 36mA
Limites de Temperatura -20 a +135°C
Potência Máxima 25W
Dimensões 43mm x 43mm x 27mm
Fonte: FilipeFlop (2018)
Os sensores foram de grande importância para o projeto, haja vista que são os olhos do
robô. De acordo com Rosário (2005), os sensores têm o objetivo de auxiliar o robô na execução
de tarefas ajudando-o a determinar os parâmetros do ambiente que o cerca.
36
𝑇 *𝑉
𝐷= (4)
2
Onde D é a distância, T = tempo echo em nível alto e V = velocidade do som (340m/s).
37
TABELA 5
Especificações do Sensor ultrassônico HC-SR04
Especificação Dados
Tensão de operação 5V
Corrente de operação 15mA
Frequência de trabalho 40Hz
Distância mínima 2cm
Distância máxima 4m
Ângulo de trabalho 15º
Dimensões 45mmx20mmx15mm
Fonte: ElecFreaks
3.1 Desenvolvimento
O presente projeto foi iniciado a partir da ideia de criar um algoritmo capaz de tomar
decisões autônomas gerando rotas alternativas de modo que o objetivo de chegar ao final do
percurso fosse alcançado. O fluxograma de processo mostrado abaixo ilustra o comportamento
do robô para tomadas de decisões em relação ao percurso.
FIGURA 22 – Cenário 1
Fonte: O Autor
FIGURA 23 – Cenário 2
Fonte: O Autor
40
FIGURA 24 – Cenário 3
Fonte: O Autor
O software V-REP possui um grande acervo de robôs para serem utilizados em testes no
simulador, dentre eles, manipuladores robóticos, drones, veículos, humanoides, hexapod.
41
Para os testes de simulação nos cenários, utilizou-se um robô móvel conhecido como
pioneer p3dx. Esse robô se assemelha ao robô utilizado no protótipo, possuindo dois motores DC,
que podem ser controlados independentes e uma roda universal, dezesseis sensores ultrassônicos
sendo que oito desses sensores estão localizados na parte de trás do robô e os demais, na frente.
De acordo com Robotics (2018) o sensor de proximidade do tipo cone permite melhor e
mais precisa modelagem da maioria dos sensores de proximidade. Os sensores de proximidade
operam de maneira geometricamente exata visto que realizam o cálculo da distância entre o seu
ponto de detecção e o objeto detectável. É possível observar na figura 27 que as configurações
do sensor foram baseadas na figura 26 que mostra perfeitamente as opções que foram utilizadas
e o que impactaria na área cônica.
Por padrão, permaneceram as configurações de Inside gap, Radius, Face count, Subdivisi-
ons e Subdivisions far, mantendo as semelhanças em relação ao sensor ultrassônico do modelo
HC-SR04.
3.1.3 Simulações
Após a criação dos cenários, o posicionamento dos sensores e à escolha do robô, deu-se
inicio as simulações. Para que fossem possíveis as simulações era necessário realizar a comu-
nicação entre o software V-REP e o software Matlab. Tal comunicação é feita pela utilização
das API’s fornecidas pelos desenvolvedores do V-REP, remoteApiProto.m, remApi.m e remote-
Api.dll. A conexão foi estabelecida pelo localhost do Windows utilizando a porta 19999. A seguir,
apresenta-se o código padrão disponibilizado pelos desenvolvedores do V-REP para estabelecer
a comunicação entre o Matlab e o software simulador.
4 vrep.simxFinish(-1);
5 %Inicia a conexao com o endereco de IP e a porta(estes sao valores
padroes)
6 clientID = vrep.simxStart(’127.0.0.1’,19999,true,true,5000,5);
7 %Confirmando a conexao
8 if (clientID>-1)
9 disp(’Connected to remote API server’);
Na figura acima tem-se a estrutura do controlador fuzzy utilizado para os testes no simulador,
seguida de inserção no protótipo para validação da funcionalidade. Os blocos “distância-frente”,
“distância-esquerda” e “distância-direita”, estão implementados com as funções de pertinência
input(entrada) responsáveis pelo processamento dos sensores que alimentarão as regras com os
valores e, logo após, o controle e o envio da resposta do controle para os blocos de saída. Os
blocos “velocidade-esquerda” e “velocidade-direita” são aqueles responsáveis pelas pertinências
do tipo output(saída). Neles foram utilizadas constantes com valores pré definidos segundo as
regras.
44
aumentarem sua velocidade. A partir disso, foram definidas faixas de valores onde o controlador
fuzzy pudesse trabalhar de acordo com as entradas.
A fórmula utilizada pelo Matlab para se obter a curva do gaussmf e do gauss2mf é dada
abaixo:
(
− 𝑥−𝑒2 )
𝑓 (𝑥; 𝜎, 𝑐) = 𝑒 2𝜎 2 (5)
A função gauss2mf é uma combinação de dois desses dois parâmetros. A primeira função,
especificada por sig1 e c1, determina a forma da curva mais à esquerda. A segunda função
especificada por sig2 e c2 determina a forma da curva mais à direita. Sempre que c1 < c2, a
função gauss2mf atinge um valor máximo de um. Caso contrário, o valor máximo é menor que
um (MATHWORKS, 2018).
46
3.1.4.1 Cenário 1
O primeiro teste foi realizado no cenário mais simples, utilizado apenas para calibração
das posições do sensores ultrassônicos, testes de conexão entre o simulador e o MatLab e ajustes
no controlador fuzzy.
3.1.4.2 Cenário 2
Na figura 36 é possível perceber que a variação ao longo do trajeto foi mais suave do que a
resposta do gráfico da figura 34, onde a variação dos motores foi bem alta.
3.1.4.3 Cenário 3
A cor magenta representa a trajetória do robô enquanto a cor verde representa a trajetória
da pessoa que saiu da posição superior direita. Não obstante, a cor azul representa o trajeto feito
pela pessoa posicionada no canto inferior esquerdo. É possível perceber, no inicio da trajetória
do robô, o desvio feito por este visando sair do deslocamento da pessoa posicionada no canto
inferior esquerdo. Ao final do trajeto, o robô efetuou um desvio do deslocamento de outra pessoa
que apresenta o percurso demonstrado em verde, curvando levemente para a esquerda.
A mesma situação que ocorreu no cenário 2 com a função de pertinência gauss2mf, pode
ser encontrada no cenário 3. A função gauss2mf reduziu as curvas bruscas geradas pela função
gaussmf.
Por fim, é possível analisar a figura anterior e perceber o comportamento dos motores ao
longo da trajetória. Nos três pontos onde ocorreu desvio dos obstáculos, a função de pertinência
do tipo gauss2mf se manteve com as variações dos motores mais amenas em relação ao desvio
no teste feito com a função de pertinência do tipo gaussmf.
3.2 Protótipo
Após todos os testes e simulações nos cenários com o auxílio do software V-REP e Matlab,
foi construído o protótipo para aplicação do controlador fuzzy. Na figura 41 é possível visualizar
o protótipo construído. Para a construção, utilizaram-se quatro sensores ultrassônicos: três à
frente e um atrás conforme a modelagem do sistema fuzzy e simulações no software V-REP. De
acordo com os resultados coletados pelas simulações, foi escolhido como função de pertinência
o gauss2mf por apresentar melhores resultados.
FIGURA 41 – Protótipo
Fonte: Construido pelo autor
O Arduino é o responsável por receber os dados dos sensores e enviar, por meio da USB
serial, à Raspberry. Esta irá processar os dados e retorná-los ao Arduino, que fará o acionamento
dos motores conforme o comando da Raspberry.
Em seguida confeccionou-se a pista para testes com o robô. A primeira pista pode ser
visualizada na figura abaixo. Esta é semelhante ao cenário 1 construído na figura 32 da simulação.
Este cenário foi necessário para os ajustes dos sensores.
FIGURA 43 – Pista 1
Fonte: Construído pelo autor
54
FIGURA 44 – Pista 2
Fonte: Construído pelo autor
A comunicação entre a Raspberry e o Arduino foi dada pela USB serial. A placa res-
ponsável para o processamento do controlador fuzzy foi a Raspberry juntamente à biblioteca
scikit-fuzzy. Na biblioteca scikit-fuzzy aplicou-se a mesma configuração do controlador fuzzy
utilizado no Matlab.
Serão apresentados os dados obtidos pelo testes realizados com o protótipo. Para obter a
comparação com os testes de simulação utilizou-se a função de pertinência do tipo gauss2mf. Os
gráficos serão gerados a partir da coleta de dados do console presente no python.
3.2.1.1 Pista 1
O gráfico acima mostra o resultado satisfatório na pista sem obstáculos. O robô manteve-se
centralizado conforme simulado no software. No início do percurso, houve uma variação nos
motores. Nesse momento, o robô estava centralizando na pista, pois, no inicio, eles estavam
deslocados.
3.2.1.2 Pista 2
É possível observar com facilidade os três pontos onde o robô simulado e o protótipo
encontraram o obstáculo e efetuaram o desvio. A figura (a) retrata o gráfico gerado a partir da
simulação entre os tempos 20 e 40 segundos onde surge o primeiro obstáculo, entre 55 e 80
segundos o segundo e, finalmente, entre 110 e 130 segundos o último obstáculo, não sendo
diferente na figura (b). Ambas diferem no tamanho da pista utilizada para o teste com o protótipo,
57
reduzindo assim o tempo do encontro com cada um dos obstáculos. Porém, o gráfico segue uma
variação bem próxima àquele simulado no software V-REP, mostrando assim a qualidade em se
utilizar o controlador fuzzy juntamente à função de pertinência gauss2mf.
58
CONSIDERAÇÕES FINAIS
A partir das análises e discussões apresentadas ao longo do presente trabalho, foi possível
perceber que o controlador fuzzy constitui-se uma alternativa excelente e extremamente viável
para dotar o robô móvel e da simulação de autonomia, não havendo a necessidade de lançar
mão de mapa para auxílio em sua orientação e, utilizando-se de poucas regras linguísticas,
foi possível a realização de diferentes configurações de percurso apresentando constantemente
ótimos resultados, haja vista a superação dos obstáculos de maneira eficiente e eficaz mesmo
diante dos obstáculos móveis.
Percebe-se ainda que os resultados demonstrados pela simulação estiveram bem próximos
aos resultados extraídos do protótipo, garantindo a confiabilidade do sistema proposto. Além
disso, o protótipo mostrou-se bastante confiável visto que, mesmo havendo perda da comunicação
com o computador, manteve-se desempenhando sua função devido à localização do algoritmo
em seu interior. A utilização do simulador previamente à aplicação do protótipo permitiu um
menor número de aparições de falhas na montagem do sistema final, visto que todos os testes
foram realizados possibilitando o estabelecimento de previsões.
A utilização de saídas funções de pertinência do tipo constante garantiu melhor mobilidade
do protótipo ao longo das pistas culminando em maior segurança nos testes, porém houve uma
limitação da velocidade máxima. Sendo assim, àqueles sistemas que necessitem de velocidades
maiores torna-se necessária a modificação das constantes segundo a experiência do processo em
questão.
Conclui-se, portanto, que o algoritmo mostra-se apto à criação de rotas autônomas, tendo
em vista sua efetividade e oferta de respostas precisas nas tomadas de decisões. Para a realização
de projetos futuros, há a possibilidade de implementação de outros controladores de modo que,
posteriormente, seja estabelecido o critério comparativo ao presente controlador.
59
REFERÊNCIAS
CORMEN, T. H. et al. Introdução aos algoritmos. 3. ed. São Paulo: Elsevier, 2012.
DORF, R. C.; SVOBODA, J. A. Introdução aos circuitos elétricos. Rio de Janeiro: LTC,
2008.
DURAN, J. E. R. Biofísica: conceitos e aplicações. 2. ed. São Paulo: Pearson Prentice Hall,
2011. ISBN 978-85-7605-928-8.
LUGER, G. F. Inteligência Artificial. 6. ed. São Paulo: Pearson Education do Brasil, 2013.
ISBN 9788581435503.
MASSE, M. REST API Design Rulebook. United States of America: O’Reilly Media, 2012.
NILSSON, J. W.; RIEDEL, S. A. Circuitos Elétricos. 8. ed. São Paulo: Pearson Prentice Hall,
2008.
NISE, N. S. Engenharia de Sistemas de Controle. 3. ed. Rio de Janeiro: LTC, 2013. ISBN
9788521621355.
NORVIG, P.; RUSSELL, S. Inteligência artificial. 3. ed. Rio de Janeiro: Elsevier, 2013.
SIMõES, M. G.; SHAW, I. S. Controle e Modelagem Fuzzy. 2. ed. São Paulo: Edgard Blucher,
1999. ISBN 8521204167.
7 %Start connection with IP address and port (these are default values)
8 clientID = vrep.simxStart(’127.0.0.1’,19999,true,true,5000,5);
9
10 %Confirmando a conexao
11 if (clientID>-1)
12 disp(’Connected to remote API server’);
13 %Criacao da handle para o acesso aos sensores ultrassonicos
14 uSensorHandles = zeros(16,1);
15
52 fuzzy_DistanciaFrente = mean([uSensorVals(4,3),uSensorVals
(5,3)]);
53
54 fuzzy_DistanciaEsquerda = uSensorVals(2,3);
55 fuzzy_DistanciaDireita = uSensorVals(7,3);
56
61 vrep.simxPauseCommunication(clientID,1);
63
69 end
70 %Se as interacoes acabarem seta o valor da velocidade para 0
71 velocidadeEsquerda = vrep.simxSetJointTargetVelocity(clientID,
motorEsquerda, 0, vrep.simx_opmode_streaming);
72 velocidadeDireita = vrep.simxSetJointTargetVelocity(clientID,
motorDireita,0, vrep.simx_opmode_streaming);
73
1 [System]
2 Name=’flc_gauss_r4’
3 Type=’sugeno’
4 Version=2.0
5 NumInputs=3
6 NumOutputs=2
7 NumRules=16
8 AndMethod=’prod’
9 OrMethod=’probor’
10 ImpMethod=’prod’
11 AggMethod=’sum’
12 DefuzzMethod=’mom’
13 [Input1]
14 Name=’DISTANCIA-FRENTE’
15 Range=[0 1]
16 NumMFs=3
17 MF1=’Perto’:’gaussmf’,[0.1475 0.1397]
18 MF2=’Longe’:’gaussmf’,[0.149 0.8526]
19 MF3=’Medio’:’gaussmf’,[0.12 0.5046]
20 [Input2]
21 Name=’DISTANCIA-ESQUERDA’
22 Range=[0 1]
23 NumMFs=3
24 MF1=’Perto’:’gaussmf’,[0.1475 0.1397]
25 MF2=’Longe’:’gaussmf’,[0.149 0.8526]
26 MF3=’Medio’:’gaussmf’,[0.12 0.5046]
27 [Input3]
28 Name=’DISTANCIA-DIREITA’
29 Range=[0 1]
30 NumMFs=3
31 MF1=’Perto’:’gaussmf’,[0.1475 0.1397]
32 MF2=’Longe’:’gaussmf’,[0.149 0.8526]
33 MF3=’Medio’:’gaussmf’,[0.12 0.5046]
34 [Output1]
35 Name=’VELOCIDADE-ESQUERDA’
36 Range=[0 1]
37 NumMFs=4
38 MF1=’REVERSO’:’constant’,[-0.5]
65
39 MF2=’NORMAL’:’constant’,[0.4]
40 MF3=’RAPIDO’:’constant’,[1]
41 MF4=’DEVAGAR’:’constant’,[0.2]
42 [Output2]
43 Name=’VELOCIDADE-DIREITA’
44 Range=[0 1]
45 NumMFs=4
46 MF1=’REVERSO’:’constant’,[-0.5]
47 MF2=’NORMAL’:’constant’,[0.4]
48 MF3=’RAPIDO’:’constant’,[1]
49 MF4=’DEVAGAR’:’constant’,[0.2]
50 [Rules]
51 1 1 1, 1 2 (1) : 1
52 1 1 2, 3 4 (1) : 1
53 3 3 2, 2 4 (1) : 1
54 3 1 2, 3 4 (1) : 1
55 3 3 3, 4 4 (1) : 1
56 3 1 3, 3 4 (1) : 1
57 2 2 2, 3 3 (1) : 1
58 1 3 2, 4 3 (1) : 1
59 1 1 0, 4 3 (1) : 1
60 0 1 0, 3 4 (1) : 1
61 3 3 1, 2 1 (1) : 1
62 3 2 1, 4 3 (1) : 1
63 1 3 1, 3 4 (1) : 1
64 1 0 1, 4 2 (1) : 1
65 0 0 1, 1 2 (1) : 1
66 1 0 0, 1 2 (1) : 1;
66
1 [System]
2 Name=’flc_gauss2mf_r4’
3 Type=’sugeno’
4 Version=2.0
5 NumInputs=3
6 NumOutputs=2
7 NumRules=16
8 AndMethod=’prod’
9 OrMethod=’probor’
10 ImpMethod=’prod’
11 AggMethod=’sum’
12 DefuzzMethod=’mom’
13 [Input1]
14 Name=’DISTANCIA-FRENTE’
15 Range=[0 1]
16 NumMFs=3
17 MF1=’Perto’:’gauss2mf’,[0.1475 0.1397]
18 MF2=’Longe’:’gauss2mf’,[0.149 0.8526]
19 MF3=’Medio’:’gauss2mf’,[0.12 0.5046]
20 [Input2]
21 Name=’DISTANCIA-ESQUERDA’
22 Range=[0 1]
23 NumMFs=3
24 MF1=’Perto’:’gauss2mf’,[0.1475 0.1397]
25 MF2=’Longe’:’gauss2mf’,[0.149 0.8526]
26 MF3=’Medio’:’gauss2mf’,[0.12 0.5046]
27 [Input3]
28 Name=’DISTANCIA-DIREITA’
29 Range=[0 1]
30 NumMFs=3
31 MF1=’Perto’:’gauss2mf’,[0.1475 0.1397]
32 MF2=’Longe’:’gauss2mf’,[0.149 0.8526]
33 MF3=’Medio’:’gauss2mf’,[0.12 0.5046]
34 [Output1]
35 Name=’VELOCIDADE-ESQUERDA’
36 Range=[0 1]
37 NumMFs=4
38 MF1=’REVERSO’:’constant’,[-0.5]
67
39 MF2=’NORMAL’:’constant’,[0.4]
40 MF3=’RAPIDO’:’constant’,[1]
41 MF4=’DEVAGAR’:’constant’,[0.2]
42 [Output2]
43 Name=’VELOCIDADE-DIREITA’
44 Range=[0 1]
45 NumMFs=4
46 MF1=’REVERSO’:’constant’,[-0.5]
47 MF2=’NORMAL’:’constant’,[0.4]
48 MF3=’RAPIDO’:’constant’,[1]
49 MF4=’DEVAGAR’:’constant’,[0.2]
50 [Rules]
51 1 1 1, 1 2 (1) : 1
52 1 1 2, 3 4 (1) : 1
53 3 3 2, 2 4 (1) : 1
54 3 1 2, 3 4 (1) : 1
55 3 3 3, 4 4 (1) : 1
56 3 1 3, 3 4 (1) : 1
57 2 2 2, 3 3 (1) : 1
58 1 3 2, 4 3 (1) : 1
59 1 1 0, 4 3 (1) : 1
60 0 1 0, 3 4 (1) : 1
61 3 3 1, 2 1 (1) : 1
62 3 2 1, 4 3 (1) : 1
63 1 3 1, 3 4 (1) : 1
64 1 0 1, 4 2 (1) : 1
65 0 0 1, 1 2 (1) : 1
66 1 0 0, 1 2 (1) : 1;