Anais da Mostra Nacional de Robótica - MNR 2019
Ensino Fundamental, Médio e Técnico 001 | Página
UMA METODOLOGIA PARA ROBÔ SEGUIDOR DE LINHA
Vitor dos Santos Silva - 3º ano do Ensino Médio Integrado ao Ensino Técnico em Automação Industrial1
Derek Vieira Silva – 1º ano do Ensino Médio Integrado ao Ensino Técnico em Automação Industrial1
Guilherme Fortunato Miranda – 1º ano do Ensino Médio Integrado ao Ensino Técnico em Automação
Industrial1
Nicolas Gabriel Bomfim Souza Santos – 1º ano do Ensino Médio Integrado ao Ensino Técnico em
Automação Industrial1
Augusto Campos – 1º ano do Ensino Médio Integrado ao Ensino Técnico em Automação Industrial1
Pedro Eduardo dos Santos – 2º ano do Ensino Médio Integrado ao Ensino Técnico em Automação
Industrial1
Tutor: Vera Lúcia da Silva1, Professores Colaboradores: Wagner Roberto Garo Júnior1, Masamori
Kashiwagi1 e Raphael Antônio de Souza1
[email protected],
[email protected],
[email protected],
[email protected] 1
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO - IFSP
Suzano – SP
Categoria: ARTIGO BÁSICO
Resumo: O robô analisado tem como principal objetivo able to program the EV3 brick with the language Java. The
resolver todos os desafios propostos pela Olimpíada Brasileira robot, in its test phase, managed to solve correctly the
de Robótica (OBR). A tarefa hipotética é seguir um caminho proposed challenges for the rooms 1 and 2 from the OBR.
com diversas irregularidades, atravessando redutores
Keywords: Robotics, Java Language, Lego, OBR, Color
(lombadas), partes falhas do percurso (gaps), virar
Sensor, Ultrasonic Sensor.
corretamente nas curvas, desviar de obstáculos, subir rampas, e
finalmente, salvar as vítimas debilitadas por um acidente,
transportando-as à área de resgate, de forma totalmente 1 INTRODUÇÃO
autônoma. Desafios como esses, quando resolvidos Para o desenvolvimento desse trabalho foi utilizado um robô
corretamente, demonstram a crescente capacidade dos robôs de seguidor de linha desenvolvido pelos alunos. O robô seguidor
ajudar os humanos em situações de risco, ou mesmo em de linha “é um projeto bem famoso entre os apaixonados por
situações cotidianas. O robô utiliza-se principalmente de dois robótica” [Candido, 2018] cujo processo de desenvolvimento
sensores de cor e um sensor de distância ultrassônico. É não será descrito com detalhes. Nas seções seguintes serão
desenvolvido com o kit Lego Mindstorms EV3 e programado descritos os métodos utilizados para a resolução das tarefas,
através da plataforma LeJOS, que possibilita a programação do que foram cuidadosamente selecionados e preparados para
bloco EV3 na Linguagem Java. O robô, em sua fase de testes, atingir um bom desempenho, através de múltiplos testes e
conseguiu resolver corretamente todos os desafios propostos experiências com diferentes métodos e lógicas. Os métodos
para as salas 1 e 2 da OBR. aqui descritos foram os que obtiveram os melhores resultados
Palavras Chaves: Robótica, Linguagem Java, Lego, OBR, na fase de teste. A seção 2 apresenta a metodologia utilizada no
Sensor de Cor, Sensor Ultrassônico. trabalho em geral. A seção 3 apresenta o método utilizado para
seguir a linha. A seção 4 apresenta o método utilizado para
Abstract: The robot which was analyzed has as its main fazer curvas. A seção 5 apresenta como é feito o desvio de
purpose solving all the challenges proposed by the Brazilian obstáculos. A seção 6 apresenta como são superados os gaps. A
Olympics of Robotics (OBR). The hypothetical task is to take a seção 7 apresenta como é realizada a rampa. A seção 8
path with many irregularities, coming across speed bumpers apresenta como é identificada a sala 3.
and gaps in the route, turn correctly on curves, dodge
obstacles, go up ramps, and finally, save the impaired victims
2 MATERIAIS E MÉTODO
from an accident, transporting them to the rescue area, in a
completely automatic way. Challenges like these, when O robô utilizado para os testes e, que possibilitou a avaliação
correctly solved, demonstrate the growing capacity of robots to da precisão do método adotado, foi projetado com dois
help the humans in risky situations, or even in the daily life. sensores de cor próximos ao chão, cujo retorno no modo de
The robot mainly uses two color sensors and an ultrasonic refletância era um valor entre 0 e 1 (0 – Nenhuma reflexão, 1 –
distance sensor. It is built with the Lego Mindstorms EV3 kit Reflexão total). No modo de cor, o sensor retornava um valor
and programmed through the interface Lejos, that makes it inteiro que correspondia a uma cor preestabelecida.
Utilizou-se também um sensor de distância ultrassônico, cujo Após definida uma velocidade inicial dos motores, e realizados
valor de retorno era em metros. os procedimentos pré-código (que não serão abordados nesse
artigo), o código entra em um loop constante, no qual o valor
O controlador utilizado foi EV3, que é “muito mais do que um
do PID é calculado, somado à velocidade inicial de um motor,
simples brinquedo. Ele é, na verdade, um kit de iniciação em
e subtraído do outro.
robótica” [Veras, 2014].
No programa, esse ajuste é calculado através da multiplicação
A linguagem de programação utilizada foi Java, que é uma
do erro no instante atual pela constante de proporcionalidade,
linguagem de programação orientada a objetos [Horstmann,
acrescido do somatório dos erros anteriores multiplicado pela
Cornell, 2010]. A orientação a objetos é um recurso muito útil
constante de integração, acrescido da diferença do erro no
que permite que características do robô sejam manipuladas de
instante atual e do erro no instante anterior multiplicada pela
maneira mais prática e eficiente.
constante de derivação, definido pela seguinte fórmula:
Foi utilizada para a programação o IDE Eclipse, que permite o t
desenvolvimento de aplicações Java. No entanto, este ambiente ValorPID=K p e (t )+ K i ∑ e (t )+ K d [ e ( t ) − e ( t −1 ) ]
“também pode ser usado para o desenvolvimento de aplicações 0
utilizando outras linguagens de programação tais como PHP,
C++, etc.” [Vinicius, 2009].
3.1 AS CONSTANTES
3 SEGUIR A LINHA Na fórmula anteriormente citada pode-se perceber a presença
de três valores constantes, K p , K i e K d . Esses
Nessa tarefa, o robô tem como objetivo seguir a linha, que
consiste em uma faixa preta construída com fita isolante, ao valores foram escolhidos de maneira experimental, observando
longo de uma placa branca de MDF. Para isso, são utilizados os a resposta do robô aos seus diferentes valores. No início do
valores lidos pelos sensores, que são manipulados pela técnica experimento, as constantes K i e K d foram definidas
de controle de processos PID (Proporcional Integral como 0, e foram-se associando valores arbitrários à constante
Derivativo), e seu valor após essa manipulação é aplicado K p . O código era executado, e observava-se o
diretamente nos motores. Com essa técnica, o robô é capaz de comportamento do robô com aquele valor definido para
seguir uma linha reta, bem como curvas suaves, conforme K p . Caso o robô estivesse variando muito na linha,
Figura 1.
diminuía-se o valor da constante, e caso estivesse demorando
muito para corrigir-se, aumentava-se o valor. Após encontrado
um valor razoável para K p , associava-se um valor à
K d , e executava-se o mesmo procedimento que foi
utilizado para definir K p , e por fim, fazia-se o mesmo com
Ki .
3.2 AÇÃO ANTI WIND-UP
O valor do PID depende de uma integral (ou somatório), e
portanto, esse termo da equação pode sobrepor-se aos outros,
pois cresce consideravelmente a cada vez que o código é
executado, pois este consiste de uma soma, portanto, é
necessário aplicar medidas para evitar o chamado “Efeito
Wind-Up”.
Figura 1 - Pistas Existem múltiplas medidas que podem ser adotadas para não
ter o desempenho do robô afetado. Uma delas é a de reiniciar o
termo integral a cada n vezes que o código for executado, por
O valor do PID é calculado através da multiplicação do erro no exemplo, reiniciando-a a cada 100 vezes que o PID for
instante atual por um valor constante, acrescido da calculado.
multiplicação da integral do erro do instante inicial até o atual
por um valor constante, acrescido da multiplicação da derivada 3.3 O CÓDIGO
do erro no instante atual por um valor constante. Valor esse
Segue, Figura 2, um exemplo de código do PID para o robô
definido pela seguinte fórmula:
seguidor de linha, utilizando o sensor de cor no modo de
t refletância (pseudocódigo):
d
ValorPID=K p e (t )+ K i∫ e ( τ ) dτ + K d e ( t ) dt
0 dt
Onde K p é a constate de proporcionalidade, (ou ganho),
K i é a constante de integração, K d é a constante de
derivação e e(t) é o valor do erro no instante. O erro é
calculado através da subtração do valor do sensor de cor
esquerdo, no modo de refletância, do sensor de cor direito,
também no modo de refletância.
Anais da Mostra Nacional de Robótica - MNR 2019
Ensino Fundamental, Médio e Técnico
4.1 IDENTIFICAÇÃO DAS CURVAS
As curvas são denotadas de duas maneiras, ou com uma
marcação verde, ou pelo fato de não haver outro caminho para
o robô seguir a linha que não seja virar, conforme Figura 4.
Figura 2 - Código exemplo
Figura 4 - Exemplo de curva
Os valores associados para as constantes podem ser alterados
pelo usuário, bem como o valor da velocidade inicial dos
motores, e a quantidade de vezes que o PID precisa ser
calculado para que o termo integral seja reiniciado.
4.1.1 IDENTIFICAÇÃO DAS CURVAS PELO
ROBÔ
4 CURVAS Levando em consideração que os sensores funcionam no modo
O PID pode ser utilizado para seguir a linha e fazer curvas de refletância, eles são capazes de detectar a linha preta ou a
suaves, porém, curvas de 90° e encruzilhadas precisam de sua marcação verde quando a sua refletância diminui, já que
própria função para serem realizadas. quando segue a linha normal seu foco está majoritariamente na
placa branca, e uma alteração bruta ocorre quando seu foco
A Figura 3 ilustra como um robô deve se comportar em cada muda para uma das fitas.
tipo de curva, indicando os caminhos a serem seguidos.
Ao seguir a linha normalmente, o valor x lido pelo robô deve,
em média, ser maior do que sua leitura quando está sobre uma
curva, pois o branco, mesmo que parcial, reflete melhor do que
o preto ou o verde, portanto, quando a refletância ficar menor
do que uma constante REFLETÂNCIA_PRETO, sabe-se que o
robô está sobre uma situação não convencional. A constante
REFLETÂNCIA_PRETO pode ter valores diferentes para cada
sensor, os quais são encontrados através de testes.
O robô para quando uma situação anômala é identificada, e
ambas as suas velocidades são definidas com o mesmo valor.
Então, caso apenas um dos sensores esteja em situação
anômala, chama-se uma função externa, na qual o modo do
sensor é trocado de refletância para cor.
A cor é lida, e caso seja verde, o robô deve iniciar a curva.
Caso não seja, logo é preto, o robô anda um pouco mais para a
frente e efetua outra leitura. Caso leia verde, deve seguir em
frente (verde após preto). Caso leia branco, deve checar se há
caminho em sua frente, o que pode ser realizado ligando um
dos motores por um tempo determinado, de modo que um dos
sensores fique completamente sobre onde seria a linha e realize
uma leitura. O robô retorna ao seu estado anterior e analisa a
leitura. Caso tenha lido preto, segue em frente, mas caso tenha
lido branco, inicia o procedimento de curva.
4.1.2 BECO SEM SAÍDA
Figura 3 - Curvas (Fonte: OBR 2019) De um mesmo modo, pode ser criada outra função externa para
caso ambos os sensores detectem anomalia. Similarmente, o
modo do sensor é trocado para cor. Efetua-se uma leitura, e
caso essa leitura resulte verde, o robô inicia o procedimento da
volta de 180°, caso seja preto, o robô continua seu caminho.
4.2 PROCEDIMENTOS Uma vez identificado o obstáculo, o robô deve parar, virar
aproximadamente 90º para a direita (pode-se utilizar a esquerda
Após identificada uma curva o robô deve realizar os mediante adaptação), andar para a frente por um tempo (apenas
procedimentos para contorná-la de forma apropriada. o suficiente para quando virar novamente para a esquerda não
estar alinhado com o obstáculo), e então virar para a esquerda,
4.2.1 CURVA 90° andar para frente (o suficiente para passar o obstáculo), virar-se
novamente para a esquerda, andar para frente (de modo que seu
Após identificada a curva o robô deve mover-se para frente o
centro esteja razoavelmente alinhado com a linha), e então
suficiente para que seu centro fique alinhado com a linha para a
virar-se para a direita novamente, de modo que os sensores
qual vai virar. Uma vez alinhado, os motores se ligam em
fiquem aproximadamente em cima da linha, e então executar o
sentidos opostos, por exemplo: Caso esteja virando para a
PID ZERO (Citado na subseção 4.2.3).
direita, o motor direito deve ser ligado no modo reverso, e o
esquerdo no modo normal, para que o robô gire em sentido Os passos para o robô desviar do obstáculo estão ilustrados na
horário. Os motores permanecem ligados até que o sensor do Figura 6 abaixo.
lado para o qual o robô está girando detecte a cor preta, e
então, após um pequeno delay (para que haja tempo de o robô
retirar o sensor de cima da linha e colocá-la entre os sensores),
ele para.
4.2.2 CURVA 180º
Caso seja identificado um Beco Sem Saída, o robô deve ligar
os motores em sentidos reversos, e continuar até que o sensor
do lado para o qual está girando detecte a cor preta, e então há
um delay para que o robô se alinhe, e os motores são parados.
4.2.3 PROCEDIMENTO PID ZERO
Após realizar o procedimento das curvas o robô retorna a ser
controlado pelas ações do PID. Anteriormente foi definida uma
velocidade para o PID, de modo que fosse corrigindo sua
trajetória enquanto se movimentava. Porém, nesse momento é
preciso que ele se encaixe novamente na linha, mas parado
onde está. Portanto, define-se o modo do sensor novamente
como refletância e utiliza-se o controle pelo PID (não o mesmo
de anteriormente, embora possa se utilizar das mesmas
constantes) com a velocidade inicial de ambos os motores
definida como 0, para que ele se ajuste sem de deslocar,
Figura 6 - Desvio de obstáculo
movimentando-se apenas onde se encontra. Após o valor do
erro ficar menor do que um valor especificado pelo usuário (o
que indicaria que o robô está corretamente sobre a linha), o
robô retorna ao seu código principal, para que continue 6 GAPS
seguindo a linha.
Os gaps consistem em uma pequena parte do circuito pela qual
o robô deve seguir reto, sem, no entanto, haver uma linha que o
5 OBSTÁCULOS
guie e explicite isso. Essa parte do desafio simboliza partes do
Há dois tipos de obstáculos, conforme Figura 5, que devem ser caminho em que podem haver possíveis falhas. Gap vem do
levados em conta ao posicionar o sensor de distância inglês e significa “lacuna”.
ultrassônico. O ideal é que o sensor seja colocado o mais baixo
O procedimento para essa parte do desafio é simples. Caso a
o possível, para poder ser utilizado para encontrar as vítimas na
refletância dos sensores seja acima do normal (no caso, uma
sala 3 (que não será abordada nesse artigo) e os obstáculos.
refletância alta, devido à superfície branca), detecta-se que não
há linha preta, portanto o robô deve ter a velocidade de ambos
os motores definidas como iguais e constantes, fazendo com
que o robô ande reto para a frente. Assim que detectado que a
refletância voltou a seu valor normal, o robô volta para o
código principal (PID seguidor de linha).
7 RAMPA
A rampa é uma parte do percurso que possui uma inclinação de
Figura 5 - Obstáculos 10 a 20 graus, e que pode causar dificuldades dependendo da
montagem estrutural do robô. Como o robô utilizado para esse
trabalho não dispunha de acelerômetro para identificar sua
É criada uma variável que armazenará a leitura do sensor, e inclinação, foi utilizado um método alternativo.
definido um limiar de ativação da função de obstáculo (Ex:
3cm), portanto, quando o valor da leitura do sensor atingir um Foi identificado pelo grupo que na rampa não haviam curvas,
valor menor do que o limiar, é iniciada a função de obstáculo. portanto isso podia ser utilizado para detecção da rampa. O
Anais da Mostra Nacional de Robótica - MNR 2019
Ensino Fundamental, Médio e Técnico
robô então possui um sistema de contagem, que mede por Vinicius, Caio. Trabalhando com a IDE Eclipse. 2009. Oficina
quanto tempo não houve nenhuma curva. No circuito normal, da Net. Disponível em:
curvas são muito comuns, e ocorrem com frequência, portanto <https://www.oficinadanet.com.br/artigo/1571/trabalhan
a única situação em que há uma grande linha reta sem curva do_com_a_ide_eclipse>. Acesso em: 23 jul. 2019.
alguma é a rampa.
Quando a contagem passa de um certo valor, sabe-se que o
Observação: O material multimídia deste trabalho encontra-
robô está em uma linha reta há muito tempo, logo essa linha
se disponível em: www.mnr.org.br/mostravirtual.
deve ser a rampa. Vale pontuar, no entanto, que esse sistema
está sujeito a falhas, caso a pista possua poucas curvas.
8 DETECÇÃO DE SALA 3
Após detectar a rampa, o robô segue linha apenas, sem a
possibilidade de encontrar curvas ou obstáculos, portanto essas
funções são desativadas. O robô então segue até uma variação
de refletância ser detectada por ambos os sensores, proveniente
da fita prateada que se encontra no início da sala 3.
Quando a fita é detectada, o robô anda para a frente por um
determinado tempo para que entre na sala 3 por completo, e
assim que termina esse tempo, ele para. Em outro artigo será
abordada a metodologia para resolver os desafios da sala 3.
9 RESULTADOS
Após diversas análises da performance do robô através de
métodos visuais realizadas em laboratório, observou-se que os
métodos apresentados nesse trabalho eram muito efetivos,
apesar de diversas variações às quais o robô estava suscetível.
Revelou-se, no entanto, a necessidade de uma boa calibragem
desses métodos para que o robô responda de uma maneira
adequada.
10 CONCLUSÕES
Com a produção desse trabalho pôde-se concluir que os
desafios propostos pela OBR, embora não sejam resolvidos
facilmente, possuem uma solução tangível aos alunos que
dispuserem de equipamentos adequados.
A robótica móvel apresenta muitos desafios e existirão muitas
soluções para resolvê-los. Este trabalho apresentou uma
metodologia para resolver os desafios da OBR, utilizando
programação orientada a objetos e Linguagem Java, técnicas de
controle PID e a utilização de sensores de cor e refletância.
REFERÊNCIAS BIBLIOGRÁFICAS
Candido, Gradimilo. ROBÔ SEGUIDOR DE LINHA COM
SENSOR INFRAVERMELHO E PWM. 2018. Vida de
Silício. Disponível em:
<https://portal.vidadesilicio.com.br/robo-seguidor-de-
linha-sensor-infravermelho-e-pwm/>. Acesso em: 23
jul. 2019.
Horstmann, C. S.; Cornell, G. Core Java: fundamentos. 8. ed.
São Paulo: Person Prentice Hall, 2010. v. 1
Olimpíada Brasileira de Robótica. Manual de Regras e
Instruções Etapa Regional / Estadual. 2019. Disponível
em:
<http://www.obr.org.br/manuais/OBR2019_MP_Manual
RegionalEstadual.pdf>. Acesso em: 04 jul. 2019.
Veras, Leonardo. LEGO MINDSTORMS EV3. 2014. EXAME.
Disponível em:
<https://exame.abril.com.br/tecnologia/lego-
mindstorms-ev3/>. Acesso em: 23 jul. 2019.