RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf ·...

86
Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Aplicadas Colegiado de Engenharia de Computação Robô Seguidor de Linha com Aprendizado por Reforço Wisley José Alves TRABALHO DE CONCLUSÃO DE CURSO ORIENTAÇÃO: Victor Costa da Silva Campos Julho, 2018 João Monlevade/MG

Transcript of RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf ·...

Page 1: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

Universidade Federal de Ouro PretoInstituto de Ciências Exatas e AplicadasColegiado de Engenharia de Computação

Robô Seguidor de Linha comAprendizado por Reforço

Wisley José Alves

TRABALHO DECONCLUSÃO DE CURSO

ORIENTAÇÃO:Victor Costa da Silva Campos

Julho, 2018João Monlevade/MG

Page 2: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 3: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

Wisley José Alves

Robô Seguidor de Linha com Aprendizado porReforço

Orientador: Victor Costa da Silva CamposCoorientador: Harlei Miguel de Arruda Leite

Monografia apresentada ao curso de Engenharia deComputação do Departamento de Computação e Sis-temas da Universidade Federal de Ouro Preto comorequisito parcial para obtenção do grau de Bacharelem Engenharia de Computação

Universidade Federal de Ouro PretoJoão MonlevadeJulho de 2018

Page 4: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

A Deus que me concedeu saúde e sabedoria para arealização desse trabalho e ao meu irmão quesempre sonho que fossemos engenheiros.

Page 5: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

Agradecimentos

Agradeço primeiramente a Deus que deu o dom da vida e a virtude da sabedoriapara estar aqui nesse momento. Também agradeço aos meus pais que sempre tiveramao meu lado e me motivaram a cada dia mais vencer todas as dificuldades da vida, aomeu irmão Elder (in memorian) que foi quem sempre me ajudou desde criança a buscaro conhecimento, se hoje eu realizo um sonho essa vitória também é dele, pois mesmodistante sempre permanecerá ao meu lado. Também agradeço ao restante da minha famíliaque sempre lutaram ao meu lado e me deram todo apoio para que conseguisse chegar atéaqui, um muito obrigado também aos meus amigos, em especial aos da minha sala, ondesofremos juntos cada etapa nesse período acadêmico. Agradeço ao Núcleo de Robótica pelaoportunidade de fazer parte dessa equipe, e pelo grande aprendizado que obtive fazendoparte dessa equipe, sem eles esse projeto não seria realizado. E um agradecimento ao meusamigos da república Kuringa por todo aprendizado e convívio nos dia bons e nos diasdifíceis, pois com a distância da família, vocês foram e sempre serão minha família, umgrande abraço a todos. No mais um muito obrigado a todos que contribuíram pelo meucrescimento, que Deus abençoe todos vocês grandemente.

Page 6: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 7: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

“Não há força que possa destruirA quem Deus escolheu para vencer.(Trecho do Poema de Carlos Aires)

Page 8: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 9: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

ResumoEste é um projeto de implementação de um robô seguidor de linha que faz uso deaprendizado por reforço, realizando o aprendizado para o controle da sua velocidade paracompletar o percurso do circuito. O robô utiliza sensores TCR5000 que realizam a leiturado ambiente, um microcontrolador Atmega328P integrado a uma placa Arduino modeloNano que recebe os valores de leitura dos sensores, realiza os cálculos necessários e enviasinais PWM para a ponte H, aqui a utilizada é L293D, que recebe esses sinais realizaseus cálculos lógicos e envia sinais aos motores, que irão locomover o robô de acordo comos sinais recebidos. Este projeto utiliza uma implementação do Q-Lerning que é um dosalgoritmos de aprendizado por reforço.

Palavras-chaves: Aprendizado por reforço. Seguidor de Linha. Microcontrolador.

Page 10: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 11: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

AbstractThis is an implementation project of a line follower robot that uses reinforcement learning,performing the learning to control its speed to complete the course of the circuit. How touse the TCR5000 radiation that reads the environment, an Atmega328P microcontrollerintegrated with an Arduino board is what searches for the read values of the sensors,performs the calculations and sends the PWM signals to the H bridge, here used is L293D,that receive the signals makes their calculations logical and putter signal to engines,that would locomover the robert basis with the incoming signals. The project uses animplementation of Q-Lerning which is one of the reinforcement learning algorithms.

Key-words: Reinforcement Learning. Line Follower. Microcontroller.

Page 12: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 13: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

Lista de ilustrações

Figura 1 – Labirinto proposto para execução do aprendizado . . . . . . . . . . . . 26Figura 2 – Labirinto proposto no estado s(1,2) . . . . . . . . . . . . . . . . . . . . 28Figura 3 – Labirinto proposto no estado s(4,2) . . . . . . . . . . . . . . . . . . . . 29Figura 4 – Labirinto proposto no estado s(5,2) . . . . . . . . . . . . . . . . . . . . 30Figura 5 – Teste Labirinto proposto no estado s(5,2) . . . . . . . . . . . . . . . . . 30Figura 6 – Resultados dos Algoritmos e Pontos de Saturação dos Algoritmos . . . 33Figura 7 – Pontos de Saturação dos Algoritmos . . . . . . . . . . . . . . . . . . . 34Figura 8 – Arduino Nano ATmega 328 . . . . . . . . . . . . . . . . . . . . . . . . 36Figura 9 – Esquena de funciomanento do Fototransistor . . . . . . . . . . . . . . . 37Figura 10 – Sensor de infravermelho TCRT 5000 . . . . . . . . . . . . . . . . . . . 38Figura 11 – Principio de funcionamento da Ponte H . . . . . . . . . . . . . . . . . . 38Figura 12 – Ponte H L293D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Figura 13 – Motor DC com Escovas . . . . . . . . . . . . . . . . . . . . . . . . . . 39Figura 14 – Redução 1:10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Figura 15 – Esquematico da Protoboard . . . . . . . . . . . . . . . . . . . . . . . . 40Figura 16 – PCI do Seguidor de Linha . . . . . . . . . . . . . . . . . . . . . . . . . 41Figura 17 – Interface do Fritzing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Figura 18 – IDE do Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Figura 19 – Duty Cicle PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Figura 20 – Seguidor de linha na protoboard . . . . . . . . . . . . . . . . . . . . . . 45Figura 21 – Posição dos Sensores no Seguidor de Linha . . . . . . . . . . . . . . . . 46Figura 22 – Ligação de um Sensor, imagem produzida pelo Fritzing . . . . . . . . . 47Figura 23 – layout da PCI, imagem produzida pelo Fritzing . . . . . . . . . . . . . 48Figura 24 – Demostração dos Estados . . . . . . . . . . . . . . . . . . . . . . . . . 49Figura 25 – Pista de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Figura 26 – Comparação dos Algoritmos com o Algoritmo convencional . . . . . . . 53

Page 14: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 15: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

Lista de tabelas

Tabela 1 – Funções das Portas do Arduino . . . . . . . . . . . . . . . . . . . . . . 37Tabela 2 – Funções das Portas da Ponte H . . . . . . . . . . . . . . . . . . . . . . 46Tabela 3 – Ações do Seguidor de Linha . . . . . . . . . . . . . . . . . . . . . . . . 49Tabela 4 – Recompensa por velocidade . . . . . . . . . . . . . . . . . . . . . . . . 51

Page 16: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 17: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

Lista de abreviaturas e siglas

PWM Pulse-Width Modulation

DC Direct Current

IDE Integrated Development Environment

PCI Placa de Circuito Impresso

PCB Printed Circuit Board

Page 18: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 19: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

Lista de símbolos

α Letra grega minúscula alfa

β Letra grega minúscula beta

γ Letra grega minúscula gama

Page 20: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 21: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

Sumário

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.2 Estrutura do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2 APRENDIZADO POR REFORÇO . . . . . . . . . . . . . . . . . . . 252.1 Algoritmos de Aprendizado por Reforço . . . . . . . . . . . . . . . . . 252.1.1 SARSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.1.2 Q-Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.1.3 R-Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.1.4 Resultado do Problema do Labirinto . . . . . . . . . . . . . . . . . . . . . 32

3 SEGUIDOR DE LINHA . . . . . . . . . . . . . . . . . . . . . . . . . 353.1 Modelagem do Robô . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.1.1 Descrição do Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.1.1.1 Microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.1.1.2 Sensor Óptico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.1.1.3 Ponte H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

3.1.1.4 Motor DC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3.1.1.5 Protoboard e PCI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.1.2 Descrição dos Softwares . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.1.2.1 Fritzing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

3.1.2.2 IDE Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

3.2 PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4 DESENVOLVIMENTO . . . . . . . . . . . . . . . . . . . . . . . . . 454.1 Montagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454.2 Algortimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.2.1 Algoritmo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.2.2 Algoritmo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.3 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

5 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . 55

REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Page 22: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

ANEXOS 59

ANEXO A – BIBLIOTECA ARDUINO . . . . . . . . . . . . . . . . 61A.1 SLacoes.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61A.2 SLacoes.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62A.3 KEYWORD.txt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

ANEXO B – ALGORITMO 1 . . . . . . . . . . . . . . . . . . . . . 67

ANEXO C – ALGORITMO 2 . . . . . . . . . . . . . . . . . . . . . 75

ANEXO D – DATASHEET L293D . . . . . . . . . . . . . . . . . . 83

ANEXO E – DATASHEET TCRT 5000 . . . . . . . . . . . . . . . . 85

Page 23: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

21

1 Introdução

Nos últimos anos a robótica vêm tomando parte essencial na vida das pessoas eestá inserida em todas as áreas. Cada dia mais a substituição de tarefas antes executadaspelo homem, passam a ser realizadas por robôs, sejam para realizar tarefas simples oucomplexas. Os robôs estão presentes na indústrias para a realização de tarefas como a dedeslocar ou soldar uma peça muito pesada, nos hospitais para a realização de cirurgiasextremamente precisas, nas forças militares pode-se ver robôs sendo usados para procurade sobreviventes a atentados ou desastres naturais, sendo utilizados também para desativarbombas ou carregar materiais perigosos. Nos dias de hoje já se pode ver os robôs atédentro das casas das pessoas seja para realizar tarefas de limpeza ou para o entretenimentodas mesmas (SECCHI, 2018).

A Robótica pode ser dividida em dois grupos: fixa e móvel, os robôs fixos possuema base fixa e normalmente são representadas pelos manipuladores robóticos, como braçosrobóticos nas indústrias, hospitais e dentre outros. Já os robôs móveis possuem a basemóvel e fazem o uso de sensores e atuadores para se deslocar dentro de um ambiente.Esse tipo de robôs são os utilizados para as competições, como os robôs de combate e osseguidores de linha que são o foco deste trabalho.

Seguidores de Linha são bastante semelhantes aos carros de corrida, cujo objetivoé completar um circuito qualquer dentro do menor tempo possível. Para isso o robô devese movimentar de forma autônoma, fazendo a leitura da pista demarcada, através de seussensores e se movimentar através dos motores . O percurso pelo qual o robô deve andaré composto por uma linha branca em um fundo preto, segundo as regras da competição(ROBOCORE, 2016), e ainda seguindo essas regras não existe limitações em relação aouso de peças (as únicas limitações impostas são em relação as dimensões do seguidor delinha).

1.1 ObjetivoA ideia desse trabalho surgiu após a participação da Equipe de Robótica (LocoBots)

- Equipe do Núcleo de Robotica da Universidade Federal de Ouro Preto do Campus JoãoMonlevade - na competição Winter Challenge realizada em 2015, equipe em que o autordesse texto e seu orientador faziam parte. Na competição, foram observadas as dificuldadesde se aplicar um algoritmo convencional e que a maioria dos competidores utilizavam algumtipo de algoritmo que conseguisse ter algum ganho de desempenho dos robôs. Dessa forma,um dos objetivos deste trabalho é que o robô desenvolvido apresente alguma melhora emrelação ao algoritmo utilizado na competição. A ideia inicial era que o seguidor de linha

Page 24: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

22 Capítulo 1. Introdução

armazenasse o aprendizado realizado e fosse capaz de utilizá-lo posteriormente, sem anecessidade de realizar o aprendizado novamente.

O desenvolvimento é focado em um sistema de recompensas e punições, conhecidocomo aprendizado por reforço, no qual o comportamento do agente (robô) é recompensadoou punido de forma que ela aprenda a tomar as melhores escolhas para completar umcircuito no menor tempo possível.

1.2 Estrutura do trabalhoA estrutura desse trabalho está da seguinte forma:

No capítulo 2 são apresentados alguns metódos de Aprendizado por Reforço e algunsalgoritmos bastantes utilizados para esse meio de Apredizado, além de uma explicaçãode como cada um funciona. O capítulo 3 descreve do que se trata um seguidor de linha edescreve sobre algumas das peças utilizadas para o desenvolvimento esse tipo de robô, alémde descrever os softwares utilizados e o funcionamento do controle PWM. No capítulo 4 sãodescritos os processos utilizados para o desenvolvimento do robô utilizado nesse trabalho,as implementações dos algoritmos utilzados no projeto e o problemas encontrados parao desenvolvimento. E no capitulo 5 as considerações finais e as sugestões para trabalhosfuturos.

Page 25: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

23

2 Aprendizado por Reforço

O aprendizado por reforço (Reinforcement Learning) é uma classe de algoritmosde aprendizado de máquina, na qual o agente aprende a se comportar em um ambiente,recebendo uma recompensa para cada ação e o agente busca maximizar essas recompensas(WIERING; OTTERLO, 2012). O aprendizado por reforço possui três classes de métodosbásicos para resolução de problemas: O método de Programação Dinâmica (DynamicProgramming), método de Monte Carlo e o aprendizado Diferença Temporal(Temporal-difference). Cada classe de método possui suas vantagens e desvantagens, a ProgramaçãoDinâmica (DP) é matematicamente bem definida, porém precisa de modelo de ambientecompleto e preciso; a classe de métodos de Monte Carlo possui conceitos simples e nãoexige um modelo de ambiente, entretanto não é adequada para incrementos computacionaispasso a passo; a classe Diferença Temporal (TD) não exige um modelo de ambiente e étotalmente incremental, mas seu uso pode ser muito complexo (SUTTON; BARTO, 1998).

A classe de métodos de Diferença Temporal, que recebe esse nome devido ao fato dea atualização da regra de aprendizado ser baseada em uma diferenciação, será a classe demétodos utilizada para implementação desse trabalho. Tal escolha é feita tendo em vistaas vantagens computacionais destes métodos, o fato de não precisarem de um modelo doambiente e por possuírem diferentes algoritmos para a aplicação do aprendizado por reforçoem robôs, como SARSA (TAVAKOLI; DERHAMI; KAMALINEJAD, 2015), Q-learning(FARIA; ROMERO, 1999) e R-learning (FARIA; ROMERO, 2002).

Os algoritmos de aprendizado por reforço tem como característica a utilização deuma forma de recompensa ou punição para o agente dependendo da ação tomada e estadoque essa ação o leva. Cada algoritmo possui sua próprias propriedades para definir comoas ações serão reforçadas ou punidas, mas tem como característica base o fato de que todaação executada pelo agente que o leve para um estado satisfatório é recompensada, ou seja,reforçada e que toda ação que leve a um estado diferente do desejado é punida, fazendocom que em uma futura busca pela melhor ação o agente normalmente prefira as açõesque possuem um maior valor de recompensa.

2.1 Algoritmos de Aprendizado por ReforçoEm busca de um melhor entendimento do funcionamento dos algoritmos de apren-

dizado por reforço, este trabalho faz uso de um problema de labirinto, em que o agentedeve ser capaz de encontrar a saída do labirinto com o menor número de passos. Noproblema em questão, o labirinto é mapeado para uma matriz, cujas posições representamos estados (st) do agente e as ações (at) podem ser resumidas em quatro ações diferentes,

Page 26: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

24 Capítulo 2. Aprendizado por Reforço

Fonte: Autoria do Autor

Figura 1 – Labirinto proposto para execução do aprendizado

definidas como: ESQUERDA, DIREITA, ACIMA e ABAIXO. Considera-se que o estadoinicial está na célula da linha um e coluna um (1,1), e que o estado final desejado está nalinha quatro e coluna três (4,3), conforme apresentado na Figura 1. Na Figura 1, o estadoinicial está representado em vermelho, o estado final em rosa, e as paredes do labirinto sãorepresentadas pelas células destacadas em preto. Os algoritmos de aprendizado por reforçofazem uso de uma função valor e cada algoritmo define uma forma diferente de se calcularessa função. Essa função é responsável por encontrar uma política ótima de busca, ou apolítica de busca mais próxima da ótima, visando maximizar a soma das recompensas. Aresolução desse problema será apresentada no decorrer da apresentação dos algoritmos deaprendizado por reforço a seguir.

2.1.1 SARSA

O SARSA é um dos algoritmos de aprendizado por reforço da classe de métodosde Diferença Temporal, cuja função de valor (Q) é dada pela seguinte regra:

Q(st, at)← Q(st, at) + α[rt+1 + γQ(st+1, at+1)−Q(st, at)] (2.1)

Em que rt+1 é o valor de recompensa que o próximo estado (st+1) produz, γ é o fatorde desconto e α a taxa de aprendizado, no entanto γ também pode ser interpretadocomo uma taxa de gratificação, ou a probabilidade de ir para o próximo estado (FARIA;ROMERO, 1999). A atualização da regra é feita após a transição de um estado (st)não terminal para outro estado (st+1) não terminal , caso st+1 for estado terminal entãoQ(st+1, at+1) é definido como zero. Esta regra usa todos os elementos do quíntuplo de

Page 27: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

2.1. Algoritmos de Aprendizado por Reforço 25

eventos (st, at, rt+1, st+1, at+1) que dão o nome do algoritmo (State, Action, Reward, State,Action). O Algoritmo genérico do SARSA é definido da seguinte forma:

Algoritmo 1: SARSA (SUTTON; BARTO, 1998)1 início2 Inicializa Q(s, a);3 repita4 Inicializa s;5 Escolha a apartir de s usando a política derivada de Q;6 repita7 Escolher a′ apartir de s′ usando a política derivada de Q;8 Q(s, a)← Q(s, a) + α[r + γQ(s′, a′)−Q(s, a)];9 s← s′; a← a′;

10 até Para cada Passo do Episódio,até que s seja terminal;11 até Para cada Episódio;12 fim

Afim de compreender melhor o funcionamento do SARSA e dos algoritmos deaprendizado em geral, o problema proposto anteriormente (Figura 1) será utilizado. Emtal problema é considerado um Episódio quando o agente atinge o estado final, e cadamovimentação pelo labirinto é conhecido como passo. Considere que, para o problemaproposto, o agente receberá uma recompensa no valor de 1000 caso ele atinja o estadofinal, caso contrário ele receberá uma punição no valor de 0. Para a implementação doSARSA, considere que α é 0,5 e γ igual a 0,7, para esse problema específico. No inicio daresolução do problema o agente parte do estado inicial (s1,1) e decide realizar a ação de irpara a direita (Figura 2), segundo os parâmetros definidos anteriormente, o agente serápunido pelo fato de que tal ação não o levou ao estado final. Dessa forma, a ação receberáo valor de 0, ou seja, o valor de Q(s1,1, DIREITA) = 0. Pode-se notar que, até que oagente atinja o penúltimo passo, todas as ações escolhidas receberão uma punição pornão atingirem o estado final. Considerando que o agente tenha realizado todos os passospossíveis até atingir o penúltimo passo (Figura 3) e que ele decida executar a ação de semover para a direita. Ao executar esta ação, o agente receberá uma recompensa de 1000,logo Q(s4,2, DIREITA) = 500, representando um reforço de 500 para a ação de se moverpara a direita a partir do estado s4,2.

No próximo Episódio, considere a situação representada na Figura 4, em que oagente realizou todos os passos até chegar próximo ao estado s4,2. Neste caso, o agenteresolva se mover para cima a partir de s5,2. Porém para atualização do valor da funçãoQ(s5,2, ACIMA) o algoritmo tem que escolher o valor para Q(s4,2, a

′), tendo em vistas 3

Page 28: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

26 Capítulo 2. Aprendizado por Reforço

Fonte: Autoria do Autor

Figura 2 – Labirinto proposto no estado s(1,2)

possibilidades:

a′ =

ABAIXO = 0

ESQUERDA = 0

DIREITA = 500

Sabendo que o SARSA não é totalmente guloso, qualquer uma das ações pode ser escolhida,mas levando em consideração o melhor caso, o algoritmo escolhe a ação DIREITA. Talescolha atualiza o valor da função Q(s5,2, ACIMA) nas seguintes condições:

Q(s5,2, ACIMA)← Q(s5,2, ACIMA) + α[r + γQ(s4,2, DIREITA)−Q(s5,2, ACIMA)](2.2)

Q(s5,2, ACIMA)← 0 + 0, 5[0 + 0, 7(500)− 0] (2.3)

Q(s5,2, ACIMA) = 175 (2.4)

E ao alcançar o estado s4,2, estado que será atualizado, ou seja, sendo reforçadonovamente. Tal atualização receberá o valor:

Page 29: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

2.1. Algoritmos de Aprendizado por Reforço 27

Q(s4,2, DIREITA)← Q(s4,2, DIREITA) + α[r + γQ(s4,3, a′)−Q(s4,2, DIREITA)

(2.5)

Q(s4,2, DIREITA)← 500 + 0, 5[1000 + 0, 7(0)− 500] (2.6)

Q(s4,2, DIREITA)← 500 + 0, 5[1000− 500] (2.7)

Q(s4,2, DIREITA)← 500 + 250 (2.8)

Q(s4,2, DIREITA) = 750 (2.9)

O valor de Q(s4,3, a′) é igual a 1000 na equação 2.5 por se tratar do estado final.

Fonte: Autoria do Autor

Figura 3 – Labirinto proposto no estado s(4,2)

2.1.2 Q-Learning

Q-learning é outro algoritmo da classe de métodos de Diferença Temporal. SegundoSutton e Barto (1998) o Q-learning apresenta uma função ação-valor Q, que se aproximaa função Q* que é a função valor-ação ideal, que facilitou em muito a análise do algoritmo.Em contra-partida, segundo Faria e Romero (1999), o Q-learning é mais lento na escolha dapróxima ação por sempre considerar a melhor próxima ação e não uma ação parcialmentealeatória como no SARSA. A função valor-ação do Q-Learning é dada pela seguintefórmula:

Q(st, at)← Q(st, at) + α[rt+1 + γmaxat+1

Q(st+1, at+1)−Q(st, at)] (2.10)

e o algoritmo generico para o Q-learning é descrito conforme o algoritmo 2.

Page 30: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

28 Capítulo 2. Aprendizado por Reforço

Fonte: Autoria do Autor

Figura 4 – Labirinto proposto no estado s(5,2)

Fonte: Autoria do Autor

Figura 5 – Teste Labirinto proposto no estado s(5,2)

2.1.3 R-Learning

R-Learning também pertence a classe de algoritmos de Diferença Temporal, masdiferente dos algoritmos descritos anteriormente, ele faz uso de uma recompensa média,ao invés de usar a diferença da recompensa imediata com um fator de desconto (γ), comisso pode-se dizer que esse método maximiniza a recompensa média a cada passo (FARIA;ROMERO, 1999).

Sabendo que ρ é conhecida como a recompensa média, α e β constantes chamadas

Page 31: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

2.1. Algoritmos de Aprendizado por Reforço 29

Algoritmo 2: Q-Learning (SUTTON; BARTO, 1998)1 início2 Inicializa Q(s, a);3 repita4 Inicializa s;5 Escolha a apartir de s usando a política derivada de Q;6 repita7 Escolher a′ apartir de s′ usando a política derivada de Q;8 Q(s, a)← Q(s, a) + α[r + γmaxa′ Q(s′, a′)−Q(s, a)];9 s← s′; a← a′;

10 até Para cada Passo do Episódio,até que s seja terminal;11 até Para cada Episódio;12 fim

de tamanho do passo (SUTTON; BARTO, 1998), a função valor-ação desse método deaprendizado é dada pelas seguinte regra (FARIA; ROMERO, 1999) :

R(s, a)← R(s, a) + α[r − ρ+ maxa′

R(s′, a′)−R(s, a)] (2.11)

Já a recompensa média é descrita pela equação (2.12), onde esse valor de remcom-pensa média so é atualizado quando o valor de R(s, a) = maxa R(s, a) (FARIA; ROMERO,1999):

ρ← (1− β)ρ+ β[r + maxa′

R(s′, a′)−R(s, a)] (2.12)

Para melhor entendimento dessa atualização do valor da recompensa média, usandocomo exemplo a Figura 4, suponha que o valor-ação dos estados sejam os seguintes:

R(s(5,2), a) =

a = ACIMA← 1000

a = ESQUERDA← 300

a = DIREITA← 800

E imaginando que o agente tenha escolhido a ação ACIMA, pode-se concluir que nesse casoR(s(5,2), a) = maxa R(s(5,2), a) então o valor da recompensa média será atualizado seguindoa regra descrita anteriormente. O R-learning é dado pelo algoritmo 3 e ressaltando quepara resolução do problema do labirinto, α = 0, 5 e β = 0, 01, parâmentros nos quaisforam ajustados com base em tentativa e erro, afim de obter um melhor resultado doalgoritmo.Tal estratégia de tentativa e erro foi utilizada para a escolha dos valores pois,utilizando o β = 0, 7, valor utilizado para γ nos demais algoritmos, o R-Learning entrouem loop infinito.

Page 32: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

30 Capítulo 2. Aprendizado por Reforço

Algoritmo 3: R-Learning (FARIA; ROMERO, 1999)1 início2 Inicializa ρ e R(s, a);3 repita4 Inicializa s;5 s← Estado Atual;6 Escolha a apartir de s usando a política derivada de R;7 Execute a ação a;8 Observe os valores de s′ e r;9 R(s, a)← R(s, a) + α[r − ρ+ maxa′ R(s′, a′)−R(s, a)];

10 se R(s, a) = maxa′ Q(s′, a′) então11 ρ← (1− β)ρ+ β[r + maxa′ R(s′, a′)−R(s, a)];12 fim13 até Para Sempre;14 fim

2.1.4 Resultado do Problema do Labirinto

Os algoritmos descritos anteriormente foram executados para resolver o problemado labirinto proposto acima. A condição de parada dos algoritmos para este problemafoi um número definido de Episódios, até que os algoritmos pudessem atingir a políticaótima de resolução nesse caso. O número de Episódios foi defenido através de tentativa eerro, até que se obtivesse um número de episódios que alcançasse a política ótima (foramutilizados 120 episódios). Na Figura 6a, é possível ver a variação das respostas obtidaspor cada algoritmo em cada número de episódios. Já as figuras 6b e 7 são um zoom dográfico da figura 6a, em que é possivél verificar o ponto de saturação dos algoritmos ondeos mesmos conseguem atingir sua política ótima.

Na execução do algoritmo SARSA para solucionar o problema em questão nota-seque foram necessarios cerca de 80 epsódios para que o algoritmo consiga atingir a políticaótima que é composta por 25 passos do ponto de partida até o ponto final, conforme podeser visualizado na Figura 6b.

O Q-Learning se comparado ao SARSA se desmontrou um algoritmo mais lentopara encontrar a politíca ótima, caracteristica que demostra que nem sempre a escolhapela proxima melhor ação levará a resultados satisfátorios. Observando no gráfico da figura7a, nota-se que o Q-Learning gastou 98 epsódios para atingir os 25 passos desejados.

Page 33: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

2.1. Algoritmos de Aprendizado por Reforço 31

Fonte: Autoria do Autor

(a) Resultados

(b) Zoom SARSA

Figura 6 – Resultados dos Algoritmos e Pontos de Saturação dos Algoritmos

Page 34: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

32 Capítulo 2. Aprendizado por Reforço

Fonte: Autoria do Autor

(a) Zoom Q-Learning

(b) Zoom R-Learning

Figura 7 – Pontos de Saturação dos Algoritmos

Page 35: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

33

3 Seguidor de Linha

Os seguidores de linha são robôs movéis que devem ser operados de maneiratotalmente autônoma. Esta categoria de robôs, é utilizada em competições de robóticaonde o objetivo da categoria é completar o percurso no menor tempo possível.

Um dos objetivos deste trabalho é desenvolver um robô seguidor de linha queconsiga completar o percurso da competição de robótica Winter Challenge organizadapela RoboCore normalmente realizada na cidade de São Caetano do Sul - SP no InstitutoMauá de Tecnologia, que recebe competidores de diversos partes do país e do mundo. Nessacompetição os robôs devem atender algumas regras, como (ROBOCORE, 2016):

• Operação: como todo robô seguidor de linha eles devem funcionar de maneiraautônoma, sem nenhuma comunicação externa por fio ou rádio.

• Dimensões: Os robores que irão competir poderão ter no máximo dimensões de250mm de comprimento, 250mm de largura e 200mm de altura.

3.1 Modelagem do RobôComo o objetivo aqui é a utilização de aprendizado por reforço em robôs seguidores

de linha, torna-se necessário o desenvolvimento desse robô para que o mesmo possa utilizaros algoritmos em questão. Para a criação desse robô são necessários diversos itens para aconstrução. Este trabalho faz uso dos seguintes materiais:

• Microcontrolador: Responsavél por ler as entradas do ambiente, analisá-las, realizaros cálculos, se necessário, conforme a característica de cada algoritmo aplicados aocontrolador e retornar uma saída.

• Sensor Óptico: É o dispositivo que realiza a leitura do ambiente e repassa as infor-mações de leitura para o microcontrolador.

• Ponte H: Recebem o sinal de saída do microcontrolador e acionam os motores deacordo com o sinal de saída e também é responsavél pela alimentação externa dosmesmos.

• Motores DC: Executam as ações de movimentação do seguidor de linha, seguindo asinstruções da ponte H.

• Baterias: Necessárias para alimentar o microcontrolador e os motores através daponte H.

Page 36: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

34 Capítulo 3. Seguidor de Linha

Além dos itens descritos acima, ainda são necessários outros itens para a composiçãobásica do seguidor de linha como: rodas para a movimentação do mesmo, uma carcaça parao sustentar os demais itens, além de uma placa de circuito impresso ou uma protoboard,na qual irão ser feitas as comunicações do itens.

3.1.1 Descrição do Hardware

Nesta sessão serão descritas com mais detalhes as descrições e a forma de utilizaçãodos itens. Buscando um maior compreendimento do funcionamento geral do robô e oporquê da utilização de cada peça.

3.1.1.1 Microcontrolador

O microcontrolador é o responsavél por receber as leituras do ambiente por meiodos sensores ópticos e, após a leitura do ambiente, analisar cada valor e tratá-los de acordocom cada algoritmo. Em seguida,deve enviar um sinal de saída, para a execução da açãocorrespondente. O microcontrolador utilizado para esse projeto é o ATmega 328, presenteno Arduino Nano (Figura 8).

O microcontrolador ATmega 328 dispoem de 8 pinos analógicos de I/O e 22 pinosdigitais de I/O. As funcionalidades de alguns, para esse projeto, são descritas a seguir(Tabela 1). Além dos pinos de I/O é importante saber que o Arduino Nano possui umaTensão de operação de 5 volts, uma tensão de entrada que pode ser de 7 - 12 volts e ospinos de de I/O podem trabalhar com uma corrente DC de 400 mA. (ARDUINO, 2016a)

Fonte: Arduino (2016a)

Figura 8 – Arduino Nano ATmega 328

Page 37: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

3.1. Modelagem do Robô 35

Fonte: Arduino (2016a)

Porta FunçãoD13 Utilizado para SDcard (SCK)3V3 Pino de saída de tensão de 3,3 voltsA0 Utilizado para leitura do SensorA1 Utilizado para leitura do SensorA2 Utilizado para leitura do SensorA3 Utilizado para leitura do Sensor5V Pino de saída de tensão de 5 voltsGND Alimentção de referênciaVIN Alimentação do microcontroladorD12 Utilizado para SDcard (MISO)D11 Utilizado para SDcard (MOSI)D10 Utilizado para SDcard (CS)D9 (PWM) utilizado para Ponte HD7 Utilizado ligar e desligar LEDD6 (PWM) Utilizado para Ponte HD5 (PWM) Utilizado para Ponte HD3 (PWM) Utilizado para Ponte H

Tabela 1 – Funções das Portas do Arduino

3.1.1.2 Sensor Óptico

O Sensor óptico reflexivo com transitor de saída, é um dispositivo que é compostopor um diodo emissor de infravermelho e um fototransitor. O princípio de funcionamentodestes sensor é bastante simples: o diodo emite uma luz infravermelha sobre a surperficie,dependendo da distância ou da cor da superfície, uma certa quantidade de fótons serárefletida de volta. Tais fótons são captados pelo fototransistor e geram uma corrente nocoletor, que corresponde a uma tensão entre coletor e emissor, que por sua vez será lidacomo um valor de entrada analógica no microcontrolador (como ilustrado na Figura 9).

Fonte: VISHAY (2009)

Figura 9 – Esquena de funciomanento do Fototransistor

Page 38: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

36 Capítulo 3. Seguidor de Linha

Fonte: UsinaInfo (2016)

Figura 10 – Sensor de infravermelho TCRT 5000

O TCRT 5000 (figura 10) é o sensor escolhido para esse projeto por se tratar de umsensor de baixo custo e com uma resposta bem satisfatória (o sensor pode ser utilizado comprecisão entre 0,2 e 2,5 mm). Como o objetivo dos sensores nesse caso é realizar a leiturada pista e diferenciar preto do branco é definido um limite no valor de leitura para queseja feita essa separação, onde os valores de leitura abaixo desse limite são consideradosbranco e os valores acima preto.

Fonte: Patsko (2006)

Figura 11 – Principio de funcionamento da Ponte H

3.1.1.3 Ponte H

A ponte H recebe sinais vindos do microcontrolador, correspondentes ao sentido evelocidade com que os motores devem ser acionados. A ponte H, é um circuito de muitaimportância para sistemas automatizados e principalmente quando se trata de acionamentode motores DC (PATSKO, 2006). A ponte H, além de definir, o sentido e velocidadedos motores, também tem a função de alimenta-lós com uma fonte externa, visto que osmicrocontroladores em geral não possuem tensão e corrente necessária para acionar osmotores. As ponte H são compostas basicamente por 2 pares de chaves, sendo cada parligado a uma extremidade do motor e o mesmo centralizado. Para o acionamento do motorbasta acionar um par de chaves opostas diagonalmente fazendo com que a corrente fluapelo motor fazendo-o girar, caso seja necessário inverter a rotação do motor, basta desligaro par de chaves acionados e acionar os pares inversos,que irão fazer com que a corrente

Page 39: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

3.1. Modelagem do Robô 37

flua pelo motor no sentido inverso, essa demostração pode ser visualizada na figura 11. Aponte H utilizada nesse sistema é a L293D

Fonte: Robotics (2016)

Figura 12 – Ponte H L293D

3.1.1.4 Motor DC

O Seguidor de linha precisa se movimentar pelo circuito e são os motores osresponsavéis por da esse movimento. Sabendo que existem diferentes tipos de motoresDC (Direct Current), os mais utilizados são os que utilizam escova (Figura 13). Ondeum conjunto de bobinas giram devido a uma corrente, porém o sentido dessa corrente éinvertido a cada meia volta pelas escovas, fazendo com que o motor continue em movimento(BRAGA, 2016b).

Fonte: Braga (2016b)

Figura 13 – Motor DC com Escovas

Como os motores DC possuem uma rotação muito alta e um torque muito baixo,eles não teriam muita utilidade se tratanto de projetos robóticos, por não possuirem forçasuficiente para movimentar um robô. No entanto para que se consiga aumentar o torquedo motor e diminuir a velocidade é empregado o uso das caixas de redução. Suponha queum motor sem redução tenha força de movimentar um robô de 10 quilogramas, utilizandoum conjunto de redução com fator 1:10 (Figura 14), o motor será capaz de movimentar

Page 40: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

38 Capítulo 3. Seguidor de Linha

um peso 10 vezes maior, porém com um velocidade menor na mesma proporção (BRAGA,2016c).

Fonte: Braga (2016c)

Figura 14 – Redução 1:10

3.1.1.5 Protoboard e PCI

Outro item muito importante para o desenvovimento do robô é a protoboard oumatriz de contato, composta de diversos barramentos paralelos (figura 15). Ela realizaas conexões dos equipamentos sem a necessidade de solda, sendo muito utilizada para amontagem de protótipos.

Fonte: Oakley (2013)

Figura 15 – Esquematico da Protoboard

Outro item que pode ser utilizado para realizar essas conexões são as PCI (Placade Circuito Impresso) ou também conhecidas como PCB (Printed Circuit Board). Neste

Page 41: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

3.1. Modelagem do Robô 39

caso existe anecessidade de se soldar os equipamentos utilizados, porém problemas comointerferências nas conexões podem ser reduzidos. A figura 16 é a PCI desenvolvida paraeste projeto.

Fonte: Autoria do Autor

Figura 16 – PCI do Seguidor de Linha

3.1.2 Descrição dos Softwares

Nesta seção são descritos os dois softwares utilizados: um para a criação do esboçoda PCI e o outro para o desenvolvimento dos algoritmos utilizados no projeto.

3.1.2.1 Fritzing

O Fritzing é um software de código aberto, que auxilia de forma criativa o desen-volvimento de circuitos eletrônicos podendo ser utilizado por qualquer tipo de usuário. Osoftware dispõe de vários componentes para simular e desenvolver uma PCI. No software épossível montar circuitos simulados na protoboard, tranformá-los em um circuito para serimpresso em um PCI, além disso é possível colar códigos da placa Arduino e simulá-los nopróprio Fritzing.

Na Figura 17 demostra o layout do Fritzing, onde se pode visualizar algunscomponetes disponivéis no software, como resistores, capacitores, transistores dentre outroscomponentes eletrônicos para a construção do esboço da placa de circuito impresso.

3.1.2.2 IDE Arduino

A IDE (Integrated Development Environment) do Arduino - ou Ambiente deDesenvolvimento Integrado - é o software utilizado para o desenvolvimento de algoritmospara a placa do Arduino. É basicamente um editor de texto no qual é possível desenvolveros algoritmos, compilá-los e tranferi-los para placa, através de uma conexão via USB. O

Page 42: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

40 Capítulo 3. Seguidor de Linha

Fonte: Autoria do Autor

Figura 17 – Interface do Fritzing

sofware pode ser utilizado para desenvolmento dos algorimos na linguagem de programaçãoC++, porém com algumas particularidades. A versão do software utilizada nesse projetoé a versão 1.8.1 e pode ser utilizada no desenvolvimento para qualquer tipo de placaArduino.

O ambiente de desenvolvimento possui todos os recursos de um editor de texto,como copiar, colar, também possui uma aréa no qual são exibida mensagens de erro ou desucesso, sobre a compilação ou envio do algoritmo para a placa (Figura 18).

3.2 PWM

Essa seção contará com uma breve descriçado do funcionamento do PWM, de usoessencial no controle dos motores DC. Levando em consideração que a velocidade dosmotores é dada pela tensão aplicada sobre eles (BRAGA, 2016a), se faz necessário algumrecurso que consiga realizar a variação da tensão sobre os motores. Um recurso bastanteutilizado em sistemas robôticos é o PWM (Pulse Width Modulation)- ou Modulação porLargura de Pulso - que é um recurso onde se obtém sinais analógicos através de circuitosdigitais (ARDUINO, 2016b), fazendo com que o sinal digital alterne entre ligado (HIGH- 1 ) e desligado (LOW - 0 ) durante o tempo de passagem do sinal digital, tempo essedenomimado de largura de pulso e a variação entre ligado e desligado dentro da largura

Page 43: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

3.2. PWM 41

Fonte: Autoria do Autor

Figura 18 – IDE do Arduino

de pulso é conhecido como Duty Cicle - ou Ciclo de trabalho - ( Figura 19 ).

Fonte: Arduino (2016b)

Figura 19 – Duty Cicle PWM

Para a maior parte das aplicação de motores DC utilizando arduino, o valor médioda tensão sobre os motores é mais importante do que o valor instantâneo. Dessa forma,utilizando uma tensão de alimentação de 5 volts, e um duty cycle de 50%, teremos umcomportamento no motor semelhante ao caso em que ele é alimentado com 2,5 volts.

Page 44: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 45: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

43

4 Desenvolvimento

Neste capítulo serão descritos como foram feitos o processo de desenvolvimento dorobô, a construção do circuito, como também o desenvolvimento dos algoritmos, além dedescrever as dificuldades encontradas para o desenvolvimento de cada etapa e se possívelcomo foram resolvidos os problemas encontrados no processo de desenvolvimento. A basede sustentação dos equipamentos é uma carcaça de brinquedo, um carrinho de controleremoto sucateado, cujas as rodas também foram utilizadas.

Fonte: Autoria do Autor

Figura 20 – Seguidor de linha na protoboard

4.1 MontagemIncialmente, a montagem dos equipamentos do robô foram realizadas em uma

protoboard, conforme a figura 20, devido à facilidade de realizar a montagem e a flexibilidadede remontar o circuito caso fosse necessário.

Para realização da montagem do circuito vale a pena ressaltar as portas utilizadasno microcontrolador, conforme ja descrito na Tabela 1 e ligação correta da ponte H pararealizar o controle dos motores, seguindo as informações da Tabela 2. As portas 1 e 9são ligadas diretamente a saida de 5 volts do microcontrolador, para que os canais queacionam os motores fiquem ativos. Usando o Motor 1 como exemplo, caso o sinal de saídada ponte H seja na porta 3, esse sinal irá fazer com que o motor gire em um sentido coma velocidade definida pelo sinal PWM recebido do microcontrolador na porta 2. Caso o

Page 46: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

44 Capítulo 4. Desenvolvimento

Fonte: Instruments (2016)

Porta Nome Função1 1,2 EN Ativa os canais 1 e 2 da Ponte H2 1A Sinal de entrada (Porta D5 do Microcontrolador)3 1Y Sinal de saída (Motor 1)4 GND Alimentação de referência5 GND Alimentação de referência6 2Y Sinal de saída (Motor 1)7 2A Sinal de entrada (Porta D3 do Microcontrolador)8 VCC 2 Alimentação para motores de 4,5 V a 36 V9 3,4 EN Ativa os canais 3 e 4 da Ponte H10 3A Sinal de entrada (Porta D6 do Microcontrolador)11 3Y Sinal de saída (Motor 2)12 GND Alimentação de referência13 GND Alimentação de referência14 4Y Sinal de saída (Motor 2)15 4A Sinal de entrada (Porta D9 do Microcontrolador)16 VCC 1 Alimentação 5V para tradução lógica interna

Tabela 2 – Funções das Portas da Ponte H

motor 1 necessite girar no sentido inverso então o sinal do microcontrolador será enviadona porta 7, acionando o canal 2, ou seja, emitindo sinal de saída na porta 6 da ponte H.

Este seguidor de linha é composto por 4 sensores ópticos, sendo 2 posicionadosna parte central, sensores que tem a finalidade de estar dentro da linha e os outros 2sensores estão posicionados nas bordas do robô, conforme a figura 21. Para ligar umsensor é necessario utilizar uma resistência de 330 Ω, em série com o diodo emissor deinfravermelho e uma resistência de 10k Ω, em série com o fototransistor do sensor. Tanto odiodo, quanto o fototransitor são ligados a saída de tensão de 5 volts do microcontrolador,entretanto o fototransitor também é ligado à porta analógica. Na figura 22 demostra comoa ligação do sensor deve ser feita.

Fonte: Autoria do Autor

Figura 21 – Posição dos Sensores no Seguidor de Linha

Page 47: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

4.1. Montagem 45

Fonte: Autoria do Autor

Figura 22 – Ligação de um Sensor, imagem produzida pelo Fritzing

Após toda a montagem do esquipamento na protoboard foram executados algunstestes no robô afim de verificar a execução dos algoritmos desenvolvidos, algoritmos queserão descritos posteriormente. Durante a execução desses testes, o robô apresentava algunsproblemas, tais como:

• Durante o percurso o seguidor de linha desligava sozinho, problema esse que foiidentificado como um mal contato das conexões que ligavam as baterias.

• Também durante o percurso em alguns momentos um dos motores que deveriamacionar, não acionavam, esse problema também foi identificado como mal contatonas conexões da ponte H com o microcontrolador.

A solução encontrada para buscar eliminar os problemas citados acima, foi odesenvolvimento de um Placa de Circuito Impresso (PCI ). O layout do circuito foidesenvolvido utilizando o Fritzing (figura 23), depois de concluído, o circuito foi impresso emuma placa de fenolite cobreada em uma dimensão de aproximadamente 12x8 centimentros,onde foram submersos ao ácido de percloreto de ferro. As áreas onde não existiam astrilhas foram corrídas pelo ácido e a placa foi perfurada nos locais demarcados.

Após todos os equipamentos devidamente soldados, algumas das trilhas tiveramque ser estanhadas, pois apresentavam falhas, em seguida realizou-se teste para verificaro funcionamento dos equipamentos e após toda a verificação, percebeu-se a melhoracom relação às falhas de mal contato encontradas anteriormente e passou-se para a fasede elaboração dos algoritmos. Uma observação no layout é que no inicio do projeto seimaginava utilizar uma Shield SD, para armazenar os dados aprendidos e quando seiniciasse novamente o ciruito o robô iria utilizar os dados ja armazenados, evitanto o passode aprendizado. Por isso a existência das trilhas para realizar a conexão com a Shield SD,conexões essas que foram realizadas através de uma breve descrição do Arduino (2016c),

Page 48: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

46 Capítulo 4. Desenvolvimento

Fonte: Autoria do Autor

Figura 23 – layout da PCI, imagem produzida pelo Fritzing

porém neste projeto tal Shield não foi utilizada devido as dificuldades para se armazenaros dados no SD e fazer a leitura das informações e aplica-las no robô.

4.2 Algortimos

Esta sessão irá descrever os algoritmos de aprendizado por reforço implementadospara o seguidor de linha, algorimos que foram desenvolvidos utilizando o IDE do Arduino.O primeiro passo para o desenvolvimento do algoritmo de aprendizado no seguidor delinha, foram as definições das ações e estados do robô. Primeiramente foi considerado que orobô utilizaria somente os sensores que ficam por dentro da linha e posteriormente seriamimplementados os demais sensores. Desta forma, considera-se que os valores de leitura dosensor levariam a 4 estados diferentes, conforme a figura 24. Outro detalhe importante naprogramação é o valor de leitura do sensores, considerando que os valores de leitura variamentre 0 e 1023 e que valores mais proximos de zero seriam a leitura da cor branca e valoresmais distantes de zero valores de leitura na cor preta, então é definido um valor entre 0 e1023 como limite entre as cores, nesse projeto o valor é 230, onde todo valor abaixo desselimite é considerado branco e todo valor acima é considerado preto, porém dependendoda luminosidade do ambiente o valor desse limite pode não ser o ideal para execução dosalgortimos, a definição desse limite é por tentativa e erro. Também foi necessário definirquais seriam as ações a serem tomadas pelo seguidor de linha, considerando que o robô sódeveria tomar ações como: Seguir a frente, virar a esquerda, virar a direita e parar. Deforma a se obter um maior número de ações, e considerando que diferentes valores de dutycycles levam a diferentes velocidades do motor, foram considerados os valores de 100%,75%, 65% e 50% para a velocidade do motor. O valor de 50% foi escolhido como mínimoporque o robô não foi capaz de se locomover com valores abaixo deste.

Sabendo de todas as informações descritas acima, a primeira estratégia utilizada,

Page 49: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

4.2. Algortimos 47

Fonte: Autoria do Autor

Figura 24 – Demostração dos Estados

Fonte: Autoria do Autor

Numero Função Velocidade0 Parar 0 %1 Frente 100 %2 Frente 75 %3 Frente 65 %4 Frente 50 %5 Esquerda 100 %6 Esquerda 75 %7 Esquerda 65 %8 Esquerda 50 %9 Direita 100 %10 Direita 75 %11 Direita 65 %12 Direita 50 %

Tabela 3 – Ações do Seguidor de Linha

foi a criação de uma biblioteca para os motores, com a finalidade de produzir um códigomais limpo visualmente, os códigos desenvolvidos para a biblioteca estão disponivéis noanexo A.

A estrutura escolhida para representar a função valor Q(s, a) foi uma matriz 4x13,por esse motivo os algoritmos aqui desenvolvidos são uma implementação do Q-Learning,pelas facilidades de implementar uma busca pela próxima ação usando tal estrutura. Oque difere um algoritmo do outro aqui são as recompensas utilizadas.

Os algoritmos foram divididos em algumas funções, para tornar o código um poucomais limpo e mais ágil de se comprender, além da facilidade na programação. Então parao funcionamento do seguidor de linha as funções aqui utilizadas fora:

• void ExeAcao(int acao): Esta função recebe o numero da ação a ser executada everifica qual ação deverá ser executada conforme a Tabela 3.

Page 50: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

48 Capítulo 4. Desenvolvimento

• int QualEstado(int Esquerda, int Direita): Considerando as leitura dos dois sensoresde linha, esse valores são repassados a esta função que analisa de acordo com o limiteda leitura se o sensor está lendo branco ou preto e verifica qual estado correspondeaos valores lidos pelos sensores (Figura 24).

• int melhorAcao(int estado): Esta é das mais importantes funções em se pensar emaprendizado por reforço, pois é esta função que irá decidir qual é a melhor ação aser tomada de acordo com o valor do estado recebido.

• int recompensa(int estado): Outra função fundamental para o aprendizado por reforçoé o valor de recompensa para a ação tomada, essa função irá variar de acordo com oalgoritmo.

Alguns algoritmos podem utilizar de outras funções além dessas, que posteriormenteserão descritas, juntamente com o algoritmo em questão.

Lembrando que todos os algoritmos desenovolvidos para arduino são compostospor duas funções básicas:

• void setup(): Essa função é executada somente uma vez e é acionada, logo quandoo Arduino inicializa. Aqui são definidos os modos de entrada ou saída dos pinos,tambem é onde as variavéis são definidas. Neste projeto a inicialização da matrizde estado-ação Q é realizado dentro dessa função e o pino 7 é definido como pinode saída para acionamendo de um LED que irá indicar quando o seguidor de linhaexecute alguma ação que tenha como velocidade máxima.

• void loop(): Nesta parte o algoritmo é executado de fato, essa função do Arduinofica sendo executada continuamente até que o mesmo seja desligado.

4.2.1 Algoritmo 1

Esse pode ser considerado o algortimo mais simples, pois sua recompesa é dadasomente pelo valor do estado atingido pela ação. Caso o robô atingisse o estado final apósuma ação, ou seja, quando os dois sensores de linha identificam branco, então essa açãoirá receber uma recompensa no valor de 1000, porém se a ação que o robô tenha tomadolevou-o a qualquer outro estado diferente do estado final, essa ação será punida no valorde −1000, a finalidade dessa punição é buscar que o seguidor repita com menos frequênciaessa ação escolhida.

A função pela melhor escolha nos algoritmos deste projeto, busca otimizar a açõesjá pré-definidas. Por exemplo, se o seguidor de linha, saiu da linha pelo lado esquerdo masnão completamente, ou seja, o sensor esquerdo está na faixa preta e o sensor da direita nabranca, a ação ja pré-definida nesse caso é girar para a direita, com a finalidade de manter

Page 51: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

4.3. Resultados 49

os dois sensores na linha branca, a função da escolha pela melhor ação, irá definir qual amelhor velocidade a ser utilizada nesses casos.

4.2.2 Algoritmo 2

No algoritmo anterior o valor das recompensas depediam somente do estado em queo robô se encontrava, ja nesse algoritmo o valor de recompensa depende da ação tomadaque leve até o estado final. Se ação tomada foi alguma cuja a velocidade dos motores é de100% de duty cicle e o estado que o robô se encontra é o estado final a recompensa paraessa ação será maior que as demais ações com velocidade menor. A tabela 4 demonstra osvalores da recompensas para cada ação.

Fonte: Autoria do Autor

Estado Velocidade da Ação RecompensaFinal (0) (F,D,E) 100 % 1000Final (0) (F,D,E) 75 % 500Final (0) (F,D,E) 65 % 250Final (0) (F,D,E) 50 % 175Outros Independe - 1000

F:Frente, D:Direita, E:Esquerda

Tabela 4 – Recompensa por velocidade

4.3 ResultadosNessa seção são descritos os resultados encontrados na aplicação de cada algortimo.

Como já descrito, o Q-Learning se tornou mais prático para implementação, pois oArduino tem uma capacidade de preocessamento e uma memória pequena, o que dificultaa implementação de estruturas mais complexas, além do fato que quanto mais cálculos oArduino executa, mais tempo ele perde para realizar a leitura dos sensores, um miléssimo desegundo atrasado na leitura, pode levar o robô a perder a direção do circuito completamente,por esses motivos o Q-learning se tornou mais viavél de ser implementado do que o SARSAe o R-learning. Outro detalhe importante de se ressaltar é o fato que os testes dos algoritmosforam executados em uma pista feita em um superficie de madeira com as dimenções de90x160 centimentros, e a pista completa tem aproximadamente 330 centímentros (Figura25).

Além dos algoritmos descritos acima, o algoritmo original foi utilizado para teste,e sua velocidade é constante independente de qual seja o estado.O Algoritmo convencionalverifica em qual estado está o robô, se por exemplo o robô se encontra no estado 3, ou

Page 52: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

50 Capítulo 4. Desenvolvimento

Fonte: Autoria do Autor

Figura 25 – Pista de teste

seja, o sensor da esquerda está lendo preto e o senor da direita branco, o algoritmo iráaplicar a ação de buscar que ele retorne os dois sensores para leitura da linha branca, oque fará com que o robô gire para a direita nesse caso e o robô esteja no estado 4 ele irárealizar a operção de gira para esquerda. Já nos algoritmos desenvolvidos, a velocidadeirá variar com o aprendizado do robô. As figuras a seguir comparam separadamente osAlgoritmo 1 e 2 com o Algoritmo convencional. Para cada algoritmo foi considerado otempo em segundos das 15 primeiras voltas.

Nota-se que os dois algortimos implementados, iniciaram sua volta com um tempomaior que o algortimo convencional (figura 26), pois como os algoritmos buscam ajustaruma velocidade em que o robô mantenha-se na linha, a variação das ações torna o robô maislento. Porém, ja na segunda volta, os algortimos obtém uma melhora, pois já realizaramalgum aprendizado, o que reduz a utilizaçao de ações que podem levar a estados nãosatisfatório. Considerando que o circuito de teste tenha 3,3 metros de extensão e queo tempo médio para completar do algoritmo convencional seja de 5,78 segundos, entãocom esse algoritmo o seguidor de linha atinge um velocidade média de 0,571 m/s, já oalgoritmo 1 tem um tempo médio de 5,71 segundo, com isso uma velocidade média de0,578 m/s e o algoritmo 2 completa o circuito em um tempo médio de 5,81 segundos,ocasionando uma velocidade média de 0.568 m/s. Porém vale lembrar que em diversostestes realizados anteriormente com o algoritmo convenional, o seguidor de linha muitasvezes se perdia, por não conseguir realizar as curvas no circuito, problemas que não foramdetectados nos demais algortimos nos testes realizados.

Page 53: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

4.3. Resultados 51

Fonte: Autoria do Autor

(a) Algortimo 1

(b) Algortimo 2

Figura 26 – Comparação dos Algoritmos com o Algoritmo convencional

Page 54: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 55: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

53

5 Considerações Finais

Nota-se que o seguidor de linha consegue utilizar o aprendizado por reforço, mesmocom a utilização de um microcontrolador simples como o Arduino que possui diversaslimitações como processamento e memória inferior, dificultando um pouco a implementação.O algoritmo 1 leva uma pequena vantagem na velocidade média em comparação com oalgortimo convencional e o algoritmo 2 é mais lento, os resultados não são tão satisfatóriocomo se esperado.

Porém os algoritmos implementados levam uma vantagem ao algoritmo conven-cional.Nos testes realizados o seguidor de linha com o algoritmo convencional acaba seperdendo do circuito algumas vezes nas curvas, por não fazer o controle da velocidadenesse tipo de situação, já os algoritmos implementados, onde raramente eles irão trabalharcom a velocidade máxima nesse casos.

Trabalhos futuros para este projeto podem fazer uso de algum microcontroladorcom maior poder de processamento e mais memória, de modo que poderia se considerarum maior número de estados e ações na modelagem do robô. Também podem ser testadasoutras estratégias de recompensas ou outras estratégias de aprendizado para verificar sehaveriam ganhos de desempenho.

Page 56: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 57: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

55

Referências

ARDUINO. Arduino Nano. <https://store.arduino.cc/usa/arduino-nano>, 2016.Acessado: 10 de Novembro de 2016. Citado 2 vezes nas páginas 36 e 37.

ARDUINO. Arduino PWM. <https://www.arduino.cc/en/Tutorial/PWM>, 2016.Acessado: 11 de Dezembro de 2016. Citado 2 vezes nas páginas 42 e 43.

ARDUINO. SD Library. <https://www.arduino.cc/en/Reference/SD>, 2016. Acessado:10 de Novembro de 2016. Citado na página 47.

BRAGA, N. C. Controle PWM de Motor DC (MEC139). <http://www.newtoncbraga.com.br/index.php/robotica/5534-mec139>, 2016. Acessado: 5 de Setembro de 2016.Citado na página 42.

BRAGA, N. C. Motores DC e caixas de redução (MEC070). <http://www.newtoncbraga.com.br/index.php/robotica/5168-mec070a>, 2016. Acessado: 5 de Setembro de 2016.Citado na página 39.

BRAGA, N. C. Projetos com Caixas de Redução (MEC162). <http://newtoncbraga.com.br/index.php/robotica/9505-projetos-com-caixas-de-reducao-mec162>, 2016. Acessado:10 de Setembro de 2016. Citado na página 40.

FARIA, G.; ROMERO, R. A. F. Explorandoo potencial de algoritmos de aprendizadocom reforço em robôs móveis. In: IV Congresso Brasileiro de Redes Neurais.<https://goo.gl/mczz17>: [s.n.], 1999. p. 237–242. Acessado: 10 de Julho de 2016. Citado6 vezes nas páginas 25, 26, 29, 30, 31 e 32.

FARIA, G.; ROMERO, R. A. F. Navegação de robôs móveis utilizando aprendizado porreforço e lógica fuzzi. In: Sba: Controle e Automação Sociedade Brasileira de Automatica.<http://dx.doi.org/10.1590/S0103-17592002000300002>: [s.n.], 2002. v. 13, n. 3, p.219–230. Acessado: 10 de Julho de 2016. Citado na página 25.

INSTRUMENTS, T. Datasheet L293D. <http://www.ti.com/lit/ds/symlink/l293.pdf>,2016. Acessado: 10 de Julho de 2016. Citado na página 46.

OAKLEY, A. How to Make a Raspberry Pi Lego Robot: Part 2. <hhttp://www.aoakley.com/articles/2013-09-19-raspberry-pi-lego-robot-part2.php>, 2013.Acessado: 10 de Agosto de 2016. Citado na página 40.

PATSKO, L. F. Tutorial Montagem da Ponte H. <http://www.maxwellbohr.com.br/downloads/robotica/mec1000_kdr5000/tutorial_eletronica_-_montagem_de_uma_ponte_h.pdf>, 2006. Acessado: 20 de Agosto de 2016. Citado na página 38.

ROBOCORE. Regras Seguidor de Linha. <https://www.robocore.net/upload/attachments/robocore__regras_seguidor_de_linha_108.pdf>, 2016. Acessado: 10 deAgosto de 2016. Citado 2 vezes nas páginas 23 e 35.

ROBOTICS, D. MOTOR DRIVER L293D. <http://www.eu.diigiit.com/motor-driver-l293d>, 2016. Acessado: 20 de Agosto de 2016. Citado napágina 39.

Page 58: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

56 Referências

SECCHI, H. A. TUma Introdução aos Robôs Móveis. <http://www.obr.org.br/wp-content/uploads/2013/04/Uma_Introducao_aos_Robos_Moveis.pdf>, 2018. Acessado: 15 deMaio de 2016. Citado na página 23.

SUTTON, R. S.; BARTO, A. G. Reinforcement Learning: An Introduction. [S.l.]: TheMIT Press, 1998. Citado 4 vezes nas páginas 25, 27, 29 e 31.

TAVAKOLI, F.; DERHAMI, V.; KAMALINEJAD, A. Control of humanoid robot walkingby fuzzy sarsa learning. In: RSI International Conference on Robotics and Mechatronics(ICROM). <https://ieeexplore.ieee.org/document/7367790/>: [s.n.], 2015. p. 234–239.Acessado: 30 de Agosto de 2016. Citado na página 25.

USINAINFO. TCRT5000 Sensor Reflexivo Infraverme-lho. <https://www.usinainfo.com.br/sensor-de-linha-arduino/sensor-reflexivo-infravermelho-tcrt5000-kit-com-2-unidades-2792.html?search_query=tcrt5000&results=2>, 2016. Acessado: 20 de Julho de 2016. Citado na página 38.

VISHAY. Datasheet TCRT5000. <https://www.vishay.com/docs/83760/tcrt5000.pdf>,2009. Acessado: 10 de Julho de 2016. Citado na página 37.

WIERING, M.; OTTERLO, M. van (Ed.). Reinforcement Learning State-of-the-Art. [S.l.]:Springer-Verlag Berlin Heidelberg, 2012. Citado na página 25.

Page 59: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

Anexos

Page 60: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 61: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

59

ANEXO A – Biblioteca Arduino

A.1 SLacoes.h

1

2 # ifndef SLacoes_h

3 # define SLacoes_h

4

5 # include " Arduino .h"

6

7 class SLacoes

8

9 public :

10 SLacoes (int input1 , int input2 , int input3 , int input4 );

11 void Frente100 (int velocidade );

12 void Direita100 (int velocidade );

13 void Esquerda100 (int velocidade );

14

15 void Frente75 (int velocidade );

16 void Direita75 (int velocidade );

17 void Esquerda75 (int velocidade );

18

19 void Frente65 (int velocidade );

20 void Direita65 (int velocidade );

21 void Esquerda65 (int velocidade );

22

23 void Frente50 (int velocidade );

24 void Direita50 (int velocidade );

25 void Esquerda50 (int velocidade );

26

27 void Para ();

28

29 private :

30 int _input1 ;

31 int _input2 ;

32 int _input3 ;

33 int _input4 ;

34 ;

35

Page 62: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

60 ANEXO A. Biblioteca Arduino

36 #endif

A.2 SLacoes.cpp

1 # include " Arduino .h"

2 # include " SLacoes .h"

3

4 SLacoes :: SLacoes (int input1 , int input2 , int input3 , int input4 )

5 _input1 = input1 ;

6 _input2 = input2 ;

7 _input3 = input3 ;

8 _input4 = input4 ;

9

10

11 // funcoes com velocidade a 100%

12 void SLacoes :: Frente100 (int velocidade )

13

14 analogWrite (_input1 , velocidade ); // High

15 analogWrite (_input2 , LOW);

16

17 analogWrite (_input3 , velocidade ); // High

18 analogWrite (_input4 , LOW);

19

20

21 void SLacoes :: Direita100 (int velocidade )

22

23 analogWrite (_input1 , velocidade );

24 analogWrite (_input2 , LOW);

25

26 analogWrite (_input3 , LOW);

27 analogWrite (_input4 , velocidade ); // High

28

29

30 void SLacoes :: Esquerda100 (int velocidade )

31

32 analogWrite (_input1 , LOW);

33 analogWrite (_input2 , velocidade ); // High

34

35 analogWrite (_input3 , velocidade );

36 analogWrite (_input4 , LOW);

37

38

Page 63: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

A.2. SLacoes.cpp 61

39 // funcoes com velocidade a 75%

40 void SLacoes :: Frente75 (int velocidade )

41 velocidade = velocidade *0.75;

42

43 analogWrite (_input1 , velocidade );

44 analogWrite (_input2 , LOW);

45

46 analogWrite (_input3 , velocidade );

47 analogWrite (_input4 , LOW);

48

49

50 void SLacoes :: Direita75 (int velocidade )

51 velocidade = velocidade *0.75;

52

53 analogWrite (_input1 , velocidade );

54 analogWrite (_input2 , LOW);

55

56 analogWrite (_input3 , LOW);

57 analogWrite (_input4 , velocidade );

58

59

60 void SLacoes :: Esquerda75 (int velocidade )

61 velocidade = velocidade *0.75;

62

63 analogWrite (_input1 , LOW);

64 analogWrite (_input2 , velocidade );

65

66 analogWrite (_input3 , velocidade );

67 analogWrite (_input4 , LOW);

68

69

70 // funcoes com velocidade a 65%

71 void SLacoes :: Frente65 (int velocidade )

72 velocidade = velocidade *0.65;

73

74 analogWrite (_input1 , velocidade );

75 analogWrite (_input2 , LOW);

76

77 analogWrite (_input3 , velocidade );

78 analogWrite (_input4 , LOW);

79

80

Page 64: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

62 ANEXO A. Biblioteca Arduino

81 void SLacoes :: Direita65 (int velocidade )

82 velocidade = velocidade *0.65;

83

84 analogWrite (_input1 , velocidade );

85 analogWrite (_input2 , LOW);

86

87 analogWrite (_input3 , LOW);

88 analogWrite (_input4 , velocidade );

89

90

91 void SLacoes :: Esquerda65 (int velocidade )

92 velocidade = velocidade *0.65;

93

94 analogWrite (_input1 , LOW);

95 analogWrite (_input2 , velocidade );

96

97 analogWrite (_input3 , velocidade );

98 analogWrite (_input4 , LOW);

99

100

101 // funcoes com velocidade a 50%

102 void SLacoes :: Frente50 (int velocidade )

103 velocidade = velocidade *0.5;

104

105 analogWrite (_input1 , velocidade );

106 analogWrite (_input2 , LOW);

107

108 analogWrite (_input3 , velocidade );

109 analogWrite (_input4 , LOW);

110

111

112 void SLacoes :: Direita50 (int velocidade )

113 velocidade = velocidade *0.5;

114

115 analogWrite (_input1 , velocidade );

116 analogWrite (_input2 , LOW);

117

118 analogWrite (_input3 , LOW);

119 analogWrite (_input4 , velocidade );

120

121

122 void SLacoes :: Esquerda50 (int velocidade )

Page 65: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

A.3. KEYWORD.txt 63

123 velocidade = velocidade *0.5;

124

125 analogWrite (_input1 , LOW);

126 analogWrite (_input2 , velocidade );

127

128 analogWrite (_input3 , velocidade );

129 analogWrite (_input4 , LOW);

130

131

132 // para

133 void SLacoes :: Para ()

134

135 analogWrite (_input1 , LOW);

136 analogWrite (_input2 , LOW);

137

138 analogWrite (_input3 , LOW);

139 analogWrite (_input4 , LOW);

140

A.3 KEYWORD.txt1 SLacoes KEYWORD1

2 Frente100 KEYWORD2

3 Direita100 KEYWORD2

4 Esquerda100 KEYWORD2

5 Frente75 KEYWORD2

6 Direita75 KEYWORD2

7 Esquerda75 KEYWORD2

8 Frente65 KEYWORD2

9 Direita65 KEYWORD2

10 Esquerda65 KEYWORD2

11 Frente50 KEYWORD2

12 Direita50 KEYWORD2

13 Esquerda50 KEYWORD2

14 Para KEYWORD2

Page 66: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 67: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

65

ANEXO B – Algoritmo 1

1 # include <SLacoes .h>

2 # include <math.h>

3

4 void ExeAcao (int acao);

5 int QualEstado (int Esquerda , int Direita );

6 int melhorAcao (int estado );

7 int recompensa (int estado );

8

9 // variaveis globais utiliz

10

11 int vel = 255; // velocidade aplicada

12 int lim = 230; // define o limite entre o branco e o preto

13 // abaixo desse valor definimos de branco , acima dele e

considerado

14 // preto.

15

16 // definicao das portas para controle do motor

17

18 SLacoes motores (5 ,3 ,9 ,6); // inclucao das portas para uso dos

motores

19 // SLcartaoSD cartao (sd ,myFile ,10);

20

21 // definicao de portas para os leds

22 int led = 7; // usadado como interface de comunicacao .

23

24 // definicao de portas para os sensores

25 // quanto menor o valor , mais luz infravermelha chega ao sensor

26 int sensorLinhaDir = A2;

27 int sensorLinhaEsq = A1;

28 // int sensorCantoEsq = A0; // Nao Utilizado

29 // int sensorCantoDir = A3; // Nao Utilizado

30 int valorLinhaEsq , valorLinhaDir , valorCantoEsq , valorCantoDir =

0; // variable to store the value coming from the sensor

31

32 // **********************************************

33

34 // ********************************************

35 int states = 4; // numero de estados

Page 68: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

66 ANEXO B. Algoritmo 1

36 int action = 13; // numero de acoes

37 float q [4][13]; // declaracao da estrutura

38 // ******

39 void setup ()

40 Serial .begin (9600) ;

41 pinMode (led , OUTPUT );// led

42 // Inicializa a matriz Q(s,a)

43 for(int i = 0; i < states ; i++)

44 for(int j = 0; j < action ; j++)

45 q[i][j]= 0.0;

46

47

48

49

50 // *****************************************

51 void imprimeQ (float q [4][13])

52 for(int i = 0; i < 4; i++)

53 Serial . println ();

54 for(int j = 0; j < 13; j++)

55 Serial .print(q[i][j]);

56 Serial .print(" ");

57

58

59

60

61 // *************************************

62 int QualEstado (int Esquerda , int Direita ) // recebe os valores

de linha retorna o valor do estado da leitura

63 // E = esquerda D = direita B= branco P= preto

64

65 if( Esquerda > lim && Direita <= lim ) // EP e DB --Estado 2

--

66 return 2;

67

68 else if( Esquerda > lim && Direita > lim ) // EP e DP --

Estado 1--

69 return 1;

70

71 else if( Esquerda <= lim && Direita > lim ) // EB e DP --

Estado 3 --

72 return 3;

73

Page 69: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

67

74 else if( Esquerda <= lim && Direita <= lim ) // EB e DB --

Estado 0 --

75 return 0;

76

77

78 // ******************

79 void ExeAcao (int acao)

80 // Serial .print (" Acao: ");

81 // Serial . println (acao);

82

83 if(acao == 1 )

84 motores . Frente100 (vel);

85 // motores .Para ();

86 digitalWrite (led ,HIGH);

87

88 if(acao == 2 )

89 motores . Frente75 (vel);

90 digitalWrite (led ,LOW);

91 // motores .Para ();

92

93 if(acao == 3 )

94 motores . Frente65 (vel);

95 digitalWrite (led ,LOW);

96 // motores .Para ();

97

98 //*

99 if(acao == 4 )

100 motores . Frente50 (vel);

101 digitalWrite (led ,LOW);

102 // motores .Para ();

103

104 if(acao == 5 )

105 motores . Direita100 (vel);

106 digitalWrite (led ,HIGH);

107 // motores .Para ();

108

109 if(acao == 6 )

110 motores . Direita75 (vel);

111 digitalWrite (led ,LOW);

112 // motores .Para ();

113

114 if(acao == 7 )

Page 70: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

68 ANEXO B. Algoritmo 1

115 motores . Direita65 (vel);

116 digitalWrite (led ,LOW);

117 // motores .Para ();

118

119 if(acao == 8 )

120 motores . Direita50 (vel);

121 digitalWrite (led ,LOW);

122 // motores .Para ();

123

124 if(acao == 9 )

125 motores . Esquerda100 (vel);

126 digitalWrite (led ,HIGH);

127 // motores .Para ();

128

129 if(acao == 10 )

130 motores . Esquerda75 (vel);

131 digitalWrite (led ,LOW);

132 // motores .Para ();

133

134 if(acao == 11 )

135 motores . Esquerda65 (vel);

136 digitalWrite (led ,LOW);

137 // motores .Para ();

138

139 if(acao == 12 )

140 motores . Esquerda50 (vel);

141 digitalWrite (led ,LOW);

142 // motores .Para ();

143

144 //*/

145 if(acao == 0)

146 motores .Para ();

147

148

149 // *******************************************************

150 int melhorAcao (int estado )

151 float maior = 0.0;

152 int pos;

153 if( estado == 0)// buscar melhor acao para esse estado

154 maior = q [0][1];

155 pos = 1;

156 for(int i = 2; i <= 4; i++)//

Page 71: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

69

157 if( maior < q[0][i])

158 maior = q[0][i];

159 pos = i;

160

161 // fim do for

162 return pos;

163 // fim do if estado

164 else if( estado == 1)// buscar melhor acao para esse estado

165 return 0 ;

166 // fim do if estado

167 else if( estado == 2)// buscar melhor acao para esse estado

168 maior = q [2][5];

169 pos = 5;

170 for(int i = 5; i <=8; i++)//

171 if( maior < q[2][i])

172 maior = q[2][i];

173 pos = i;

174

175 // fim do for

176 return pos;

177 // fim do if estado

178 else if( estado == 3)// buscar melhor acao para esse estado

179 maior = q [3][9];

180 pos = 9;

181 for(int i = 9; i <= 12; i++)//

182 if( maior < q[3][i])

183 maior = q[3][i];

184 pos = i;

185

186 // fim do for

187 return pos;

188 // fim do if estado

189

190 // *******************************************************

191 int recompensa (int estado )

192 if( estado == 0)

193 return 1000;

194

195 else

196 return -1000;

197

198

Page 72: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

70 ANEXO B. Algoritmo 1

199 // ********************************************************

200 int statess = 0, actionn = 0, statess2 = 0, actionn2 = 0;

201 float alpha = 0.5, gamma = 0.7;

202 // ***********************************************************

203 void loop () // EPSODIO

204

205 valorLinhaEsq = analogRead ( sensorLinhaEsq );

206 valorLinhaDir = analogRead ( sensorLinhaDir );

207

208 statess = QualEstado ( valorLinhaEsq , valorLinhaDir ); //

Verifica qual estado o robo esta

209 if( statess !=1)// caso leia tudo preto

210 actionn = melhorAcao ( statess );// faz a busca pela melhor

acao apartir desse estado

211

212

213 ExeAcao ( actionn ); // Executa a acao

214

215 do // PASSOS

216 valorLinhaEsq = analogRead ( sensorLinhaEsq );

217 valorLinhaDir = analogRead ( sensorLinhaDir );

218

219 statess2 = QualEstado ( valorLinhaEsq , valorLinhaDir ); //

Verifica qual estado o robo esta

220

221 if( statess2 !=1)

222 actionn2 = melhorAcao ( statess2 );// faz a busca pela melhor

acao apartir desse estado

223

224 int r = recompensa ( statess2 );// calcula a recompensa

225

226 q[ statess ][ actionn ] = q[ statess ][ actionn ] + alpha * ( r + (

gamma*q[ statess2 ][ actionn2 ]) - q[ statess ][ actionn ]); //

atualiza o valor de Q(s,a)

227 statess = statess2 ; // atualiza s

228 actionn = actionn2 ; // atualiza a

229

230 ExeAcao ( actionn ); // executa a acao

231

232

233

234 while( statess != 0); // verifica se e o estado final

Page 73: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

71

235

236 // condicao de parada do epsodio nao utilizada

237

238 // ***************************************************************

Page 74: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 75: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

73

ANEXO C – Algoritmo 2

1 # include <SLacoes .h>

2 # include <math.h>

3

4 void ExeAcao (int acao);

5 int QualEstado (int Esquerda , int Direita );

6 int melhorAcao (int estado );

7 int recompensa (int estado );

8

9 // variaveis globais utiliz

10

11 int vel = 255; // velocidade aplicada

12 int lim = 230; // define o limite entre o branco e o preto

13 // abaixo desse valor definimos de branco , acima dele e

considerado

14 // preto.

15

16 // definicao das portas para controle do motor

17

18 SLacoes motores (5 ,3 ,9 ,6); // inclucao das portas para uso dos

motores

19 // SLcartaoSD cartao (sd ,myFile ,10);

20

21 // definicao de portas para os leds

22 int led = 7; // usadado como interface de comunicacao .

23

24 // definicao de portas para os sensores

25 // quanto menor o valor , mais luz infravermelha chega ao sensor

26 int sensorLinhaDir = A2;

27 int sensorLinhaEsq = A1;

28 // int sensorCantoEsq = A0;

29 // int sensorCantoDir = A3;

30 int valorLinhaEsq , valorLinhaDir , valorCantoEsq , valorCantoDir =

0; // variable to store the value coming from the sensor

31

32 // *****************************************************

33

34 // *****************************************************

35 int states = 4;

Page 76: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

74 ANEXO C. Algoritmo 2

36 int action = 13;

37 float q [4][13];

38 // ******

39 void imprimeQ (float q [4][13])

40 for(int i = 0; i < states ; i++)

41 // Serial . println (i);

42 Serial . println ();

43 for(int j = 0; j < action ; j++)

44 // Serial .print ("q[");

45 // Serial .print(i);

46 // Serial .print ("][") ;

47 // Serial .print(j);

48 // Serial .print ("]=") ;

49 Serial .print(q[i][j]);

50 Serial .print(" ");

51

52

53 Serial . println ();

54 Serial . println ();

55 delay (100);

56

57

58 // *****************************************

59 void setup ()

60 Serial .begin (9600) ;

61 // pinMode (ledCE , INPUT);// botao

62 pinMode (led , OUTPUT );// led

63 randomSeed ( analogRead (7));

64 for(int i = 0; i < states ; i++)

65 for(int j = 0; j < action ; j++)

66 q[i][j]= 0.0;

67

68

69 imprimeQ (q);

70

71 // **************************************

72

73 int QualEstado (int Esquerda , int Direita ) // recebe os valores

de linha retorna o valor do estado da leitura

74 // E = esquerda D = direita B= branco P= preto

75

76 if( Esquerda > lim && Direita <= lim ) // EP e DB --Estado 2

Page 77: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

75

--

77 return 2;

78

79 else if( Esquerda > lim && Direita > lim ) // EP e DP --

Estado 1--

80 return 1;

81

82 else if( Esquerda <= lim && Direita > lim ) // EB e DP --

Estado 3 --

83 return 3;

84

85 else if( Esquerda <= lim && Direita <= lim ) // EB e DB --

Estado 0 --

86 return 0;

87

88

89 // ******************

90 void ExeAcao (int acao)

91 // Serial .print (" Acao: ");

92 // Serial . println (acao);

93

94

95

96 if(acao == 1 )

97 motores . Frente100 (vel);

98 // motores .Para ();

99 digitalWrite (led ,HIGH);

100

101 if(acao == 2 )

102 motores . Frente75 (vel);

103 digitalWrite (led ,LOW);

104 // motores .Para ();

105

106 if(acao == 3 )

107 motores . Frente65 (vel);

108 digitalWrite (led ,LOW);

109 // motores .Para ();

110

111 //*

112 if(acao == 4 )

113 motores . Frente50 (vel);

114 digitalWrite (led ,LOW);

Page 78: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

76 ANEXO C. Algoritmo 2

115 // motores .Para ();

116

117 if(acao == 5 )

118 motores . Direita100 (vel);

119 digitalWrite (led ,HIGH);

120 // motores .Para ();

121

122 if(acao == 6 )

123 motores . Direita75 (vel);

124 digitalWrite (led ,LOW);

125 // motores .Para ();

126

127 if(acao == 7 )

128 motores . Direita65 (vel);

129 digitalWrite (led ,LOW);

130 // motores .Para ();

131

132 if(acao == 8 )

133 motores . Direita50 (vel);

134 digitalWrite (led ,LOW);

135 // motores .Para ();

136

137 if(acao == 9 )

138 motores . Esquerda100 (vel);

139 digitalWrite (led ,HIGH);

140 // motores .Para ();

141

142 if(acao == 10 )

143 motores . Esquerda75 (vel);

144 digitalWrite (led ,LOW);

145 // motores .Para ();

146

147 if(acao == 11 )

148 motores . Esquerda65 (vel);

149 digitalWrite (led ,LOW);

150 // motores .Para ();

151

152 if(acao == 12 )

153 motores . Esquerda50 (vel);

154 digitalWrite (led ,LOW);

155 // motores .Para ();

156

Page 79: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

77

157 //*/

158 if(acao == 0)

159 motores .Para ();

160

161

162 // *******************************************************

163 int melhorAcao (int estado )

164 float maior = 0.0;

165 int pos;

166 if( estado == 0)// buscar melhor acao para esse estado

167 maior = q [0][1];

168 pos = 1;

169 for(int i = 2; i <= 4; i++)//

170 if( maior < q[0][i])

171 maior = q[0][i];

172 pos = i;

173

174 // fim do for

175 return pos;

176 // fim do if estado

177 else if( estado == 1)// buscar melhor acao para esse estado

178 return 0 ;

179 // fim do if estado

180 else if( estado == 2)// buscar melhor acao para esse estado

181 maior = q [2][5];

182 pos = 5;

183 for(int i = 5; i <=8; i++)//

184 if( maior < q[2][i])

185 maior = q[2][i];

186 pos = i;

187

188 // fim do for

189 return pos;

190 // fim do if estado

191 else if( estado == 3)// buscar melhor acao para esse estado

192 maior = q [3][9];

193 pos = 9;

194 for(int i = 9; i <= 12; i++)//

195 if( maior < q[3][i])

196 maior = q[3][i];

197 pos = i;

198

Page 80: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

78 ANEXO C. Algoritmo 2

199 // fim do for

200 return pos;

201 // fim do if estado

202

203 // *******************************************************

204 int recompensa (int estado ,int acao)

205

206 if( estado == 0 && (acao == 1 || acao == 5 || acao == 9 )) //

velocidade 100%

207 return 1000;

208 else if( estado == 0 && (acao == 2 || acao == 6 || acao == 10 )

) // velocidade 75%

209 return 500;

210 else if( estado == 0 && (acao == 3 || acao == 7 || acao == 11 )

) // velocidade 65%

211 return 250;

212 else if( estado == 0 && (acao == 4 || acao == 8 || acao == 12 )

) // velocidade 50%

213 return 175;

214

215 else

216 return -1000;

217

218

219 // ********************************************************

220

221

222

223 // ********************************************************

224 int statess = 0, actionn = 0, statess2 = 0, actionn2 = 0;

225 float alpha = 0.5, gamma = 0.7;

226 int tempo_inicial =0, tempo_atual =0, mtF = 60000 , mtD = 60000 , mtE

= 60000; // tempo

227 // ***********************************************************

228 void loop () // EPSODIO

229

230 valorLinhaEsq = analogRead ( sensorLinhaEsq );

231 valorLinhaDir = analogRead ( sensorLinhaDir );

232

233 statess = QualEstado ( valorLinhaEsq , valorLinhaDir ); //

verifica qual estadoo esta

234

Page 81: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

79

235 if( statess !=1)

236 actionn = melhorAcao ( statess ); // verifica melhor acao

237

238

239 ExeAcao ( actionn ); // EXECUTA ACAO

240

241 do

242 valorLinhaEsq = analogRead ( sensorLinhaEsq );

243 valorLinhaDir = analogRead ( sensorLinhaDir );

244

245 statess2 = QualEstado ( valorLinhaEsq , valorLinhaDir );

246

247 if( statess2 !=1)

248 actionn2 = melhorAcao ( statess2 );

249

250

251 int r = recompensa (statess2 , actionn2 ); // calcula

recompensa

252

253 q[ statess ][ actionn ] = q[ statess ][ actionn ] + alpha * ( r + (

gamma*q[ statess2 ][ actionn2 ]) - q[ statess ][ actionn ]);

254 statess = statess2 ;

255 actionn = actionn2 ;

256

257 ExeAcao ( actionn ); // Executa acao

258

259

260 while( statess != 0 ); // verifica se estado final

261

262 // implementar codigo de parada

263

264

265 // ***************************************************************

Page 82: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação
Page 83: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

81

ANEXO D – DataSheet L293D

Page 84: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

2

1

7

10

9

15

3

6

11

14

1A

1,2EN

2A

3A

3,4EN

4A

1Y

2Y

3Y

4Y

Product

Folder

Sample &Buy

Technical

Documents

Tools &

Software

Support &Community

L293, L293DSLRS008D –SEPTEMBER 1986–REVISED JANUARY 2016

L293x Quadruple Half-H Drivers1 Features 3 Description

The L293 and L293D devices are quadruple high-1• Wide Supply-Voltage Range: 4.5 V to 36 V

current half-H drivers. The L293 is designed to• Separate Input-Logic Supply provide bidirectional drive currents of up to 1 A at• Internal ESD Protection voltages from 4.5 V to 36 V. The L293D is designed

to provide bidirectional drive currents of up to 600-mA• High-Noise-Immunity Inputsat voltages from 4.5 V to 36 V. Both devices are• Output Current 1 A Per Channel (600 mA for designed to drive inductive loads such as relays,L293D) solenoids, DC and bipolar stepping motors, as well as

• Peak Output Current 2 A Per Channel (1.2 A for other high-current/high-voltage loads in positive-L293D) supply applications.

• Output Clamp Diodes for Inductive Transient Each output is a complete totem-pole drive circuit,Suppression (L293D) with a Darlington transistor sink and a pseudo-

Darlington source. Drivers are enabled in pairs, with2 Applications drivers 1 and 2 enabled by 1,2EN and drivers 3 and 4

enabled by 3,4EN.• Stepper Motor DriversThe L293 and L293D are characterized for operation• DC Motor Driversfrom 0°C to 70°C.• Latching Relay Drivers

Device Information(1)

PART NUMBER PACKAGE BODY SIZE (NOM)L293NE PDIP (16) 19.80 mm × 6.35 mmL293DNE PDIP (16) 19.80 mm × 6.35 mm

(1) For all available packages, see the orderable addendum atthe end of the data sheet.

Logic Diagram

1

An IMPORTANT NOTICE at the end of this data sheet addresses availability, warranty, changes, use in safety-critical applications,intellectual property matters and other important disclaimers. PRODUCTION DATA.

Page 85: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

83

ANEXO E – DataSheet TCRT 5000

Page 86: RobôSeguidordeLinhacom AprendizadoporReforço ...victorcosta/pdfs/WISLEY_JOSE_ALVES_TCC.pdf · UniversidadeFederaldeOuroPreto InstitutodeCiênciasExataseAplicadas ColegiadodeEngenhariadeComputação

TCRT5000(L)

Document Number 83760

Rev. 1.6, 04-Sep-06

Vishay Semiconductors

www.vishay.com

1

19156

C

C

A

E

Top view

TCRT5000 TCRT5000L

Reflective Optical Sensor with Transistor Output

DescriptionThe TCRT5000 and TCRT500L are reflective sensorswhich include an infrared emitter and phototransistorin a leaded package which blocks visible light. Thepackage includes two mounting clips. TCRT5000L isthe long lead version.

Features • Package type: Leaded • Detector type: Phototransistor • Dimensions:

L 10.2 mm x W 5.8 mm x H 7.0 mm • Peak operating distance: 2.5 mm • Operating range: 0.2 mm to 15 mm • Typical output current under test: IC = 1 mA • Daylight blocking filter • Emitter wavelength 950 nm • Lead (Pb)-free soldering released • Lead (Pb)-free component in accordance to RoHS

2002/95/EC and WEEE 2002/96/EC

Applications • Position sensor for shaft encoder • Detection of reflective material such as paper, IBM

cards, magnetic tapes etc. • Limit switch for mechanical motions in VCR • General purpose - wherever the space is limited

Order Instructions

Absolute Maximum RatingsTamb = 25 °C, unless otherwise specified

Input (Emitter)

Part Number Remarks Minimum Order Quantity

TCRT5000 3.5 mm lead length 4500 pcs, 50 pcs/tube

TCRT5000L 15 mm lead length 2400 pcs, 48 pcs/tube

Parameter Test condition Symbol Value Unit

Reverse voltage VR 5 V

Forward current IF 60 mA

Forward surge current tp ≤ 10 µs IFSM 3 A

Power dissipation Tamb ≤ 25 °C PV 100 mW

Junction temperature Tj 100 °C

e2