mBot seguidor de linha alimentado por XOD

No artigo anterior, aprendemos como usar um controlador PID no ambiente de programação visual XOD. Além disso, transformamos a plataforma mBot da Makeblock em um robô seguidor de mão simples. Se você quiser relembrar o tópico ou não sabe nada sobre o que é um controlador PID, aconselho a ler o primeiro artigo da série.

Neste artigo, continuamos a experiência do controlador PID. Vamos usar a plataforma mBot da Makeblock como fizemos antes. A próxima tarefa mais desafiadora para nós é criar um robô seguidor de linha. Para tornar isso possível, devemos estender os recursos do mBot. Adicionamos um sensor “Me Line Follower”. Como este sensor é feito pelo mesmo fabricante, ele se encaixa perfeitamente em nosso robô e é ideal para nossa tarefa.

Existe uma biblioteca XOD para repetir os exemplos descritos. Confira a visão geral no site do XOD e adicione-o ao seu projeto XOD clicando em Arquivo → Adicionar biblioteca no menu e digitando gabbapeople / mbot-lib . A biblioteca melhorou desde o último lançamento, então, se você já a tem, certifique-se de adicioná-la novamente para obter a versão mais recente.

Dê uma olhada em nosso mBot aprimorado.

Fazendo patch

Vamos começar a programação do robô lendo os valores de entrada do sensor de linha. O primeiro nó a ser colocado no patch é mbot-line-sensor

Este nó se comunica com o sensor por meio dos pinos de entrada S1 e S2 . Ele possui dois pinos de saída L e R de acordo com o sensor infravermelho esquerdo e direito na placa. O valor real em um pino de saída significa que há uma cor branca ou brilhante na frente do sensor infravermelho. Por sua vez, o valor falso significa que a cor é preta ou escura.

“Me Line Follower” tem uma etiqueta azul. Fisicamente, nós o conectamos a uma adequada “porta 1” em azul na placa controladora. No programa, colocamos um nó correspondente rj25-port1-blue no patch e criamos os links necessários.

Quais são os possíveis estados do sensor de linha? Olhe o esboço.

No entanto, é melhor usar sensores analógicos em vez de digitais. Ao mesmo tempo, uma matriz de sensor de seguidor de linha é melhor do que alguns LEDs de infravermelho, mas não há problema em usar este sensor em nosso exemplo.

Para um controlador PID, uma entrada deve ser uma única variável, enquanto o mbot-line-sensor gera algumas. Para resolver este problema, adicionamos o nó subtract . Este nó faz uma subtração de duas variáveis ​​booleanas e produz um número.

Desta forma, o nó subtract pode gerar os valores:

A entrada está pronta e é hora de vinculá-la ao pid-controller .

Usamos essas quatro situações para formar o conceito de “erro” para o controlador PID. A situação em que o valor de entrada é 0 e ambos os LEDs IR estão alinhados é ideal para nós. É por isso que devemos configurar o pino TARG para 0.

Mas este patch em sua forma pode funcionar corretamente apenas com a segunda e terceira situações. Quando mBot perder completamente a linha, o valor de entrada para o nó pid-controller também será 0. Para este caso, temos que introduzir uma condição especial.

Colocamos três nós adicionais e , if-else e multiply para o patch e fazemos links como mostrado na imagem abaixo. Dê uma olhada.

O nó e cria uma condição para a situação 4. O nó if-else é usado para definir um coeficiente do fator de amplificação. Atribua o pino T a um valor de 25 e o pino F a um valor de 1. Finalmente, o nó multiply multiplica a saída do pid-controller pelo coeficiente e passa adiante.

Se não for a situação 4, o coeficiente é 1 e a saída do pid-controller permanece inalterada. Se for, o coeficiente é 25 e a produção aumenta significativamente.

O valor no pino F mostra a rapidez com que o mBot gira em torno da linha. Escolhemos o valor 25 empiricamente. Ajuste-o em seu projeto para descobrir o que funciona melhor para você.

Agora, a segunda, a terceira e a quarta situações são descritas, e apenas a primeira permanece intacta. Para corrigir isso, precisamos colocar o único nó nem e vinculá-lo conforme mostrado na imagem abaixo.

Na primeira situação, os valores dos pinos L e R são falsos e o mBot avança. Não há erro. Vinculamos o nó nor com o pino RST do nó pid-controller para esperar por um novo desvio de entrada.

O último passo para fazer o patch é passar o valor multiplicado para os motores. Colocamos três nós mbot-motors , subtrair e adicionar ao patch. Além disso, configuramos uma constante para armazenar o valor da velocidade base do mBot e fazer links. O patch concluído é mostrado abaixo.

O nó mbot-motors controla os motores. Um valor positivo faz a roda se mover para trás, enquanto o negativo faz com que ela se mova para frente. O nó constante SPD armazena a velocidade básica do mBot. Ele varia de -1 a 0 e nós o configuramos para -0,8. Os nós subtract e add calculam a velocidade do motor pela saída do pid-controller multiplicada e pela constante de configuração. O patch está pronto para testes. Agora é hora de ajustar o controlador PID.

Controlador PID

Como você deve se lembrar, um controlador PID ajusta a saída operando três fatores. Eles são proporcionais, integrais e derivados. Deixar todos os coeficientes iguais a zero faz o mbot vagar sem qualquer comportamento. Como fizemos nos exemplos anteriores, precisamos escolher os valores dos coeficientes experimentalmente.

Fator Kp

Vamos colocar o valor 3 no pino Kp , deixar os outros coeficientes iguais a 0 e fazer o upload do patch. Para testar o comportamento do robô, fazemos uma pequena peça de esteira no chão.

Como você pode ver, com este coeficiente de oscilação é muito alto. mBot está tentando seguir a linha, mas se contorce e finalmente sai da pista. Vamos definir o coeficiente de 0,1 Kp .

Agora, quando o robô perde a linha, ele retorna muito longo. Isso ocorre porque o erro tem muito pouco efeito na mudança de velocidade do motor. Por tentativa e erro, selecionamos um valor adequado 0,7.

Dê uma olhada na explicação gráfica do comportamento do mBot. Mostra como o valor Kp muda o movimento do robô.

Fator Kd

Ajustando o coeficiente Kp , tornamos o movimento mais suave. No entanto, ainda assim, o robô não consegue terminar a pista. Aparentemente, a segunda curva em seu caminho é muito íngreme, e o nó pid-controller reage lentamente. Para resolver este problema, devemos definir um coeficiente Kd diferente de zero.

Na primeira vez, colocamos o valor 3 do Kd . Descobriu-se que o valor 3 está longe do correto. Fazemos muitos testes para encontrar o valor adequado. Escolhemos o valor 1 como o melhor.

O mBot termina a pista. Dê uma olhada no esboço abaixo. Aumentando o valor de Kd , aumentamos o período de tempo para o robô ficar online e reduzimos o período de tempo para retornar à linha em caso de perda.

Fator Ki

Os coeficientes Kp e Kd selecionados são bastante adequados para nosso robô. Mas e quanto ao Ki ?

Na verdade, não precisamos configurá-lo. Para um robô seguidor de linha, o Ki pode ser útil em casos muito particulares.

Por exemplo. A trilha no chão é infinitamente reta. O robô se move estritamente ao longo da linha, mas há um pequeno desacordo na fabricação dos motores. Depois de um período considerável, esse pequeno problema se transformará em uma contração muscular descontrolada. O fator Ki elimina esses problemas.

Tentaremos usar o Ki de uma forma muito incomum.

Quando o robô está fora da linha, a entrada para o pid-controller é 0. Se o Ki for 0, o valor multiplicado para os motores é 0 também (25 * 0 = 0).

O problema é que o robô não se move em condições ideais. Os sensores infravermelhos sempre tocam em partes ruins da linha do trilho ou interferem em manchas escuras no chão. Então, enquanto o robô está fora da linha, a entrada do pid-controller não é constantemente 0. Ao adicionar o Ki , nos livramos do valor multiplicado por zero. O coeficiente 25 no pino T do nó if-else faz o robô girar muito rápido se perder a linha. Para o teste, colocamos o valor 2 Ki .

<”Conclusão

Fizemos um robô seguidor de linha legal com um programa XOD simples. Graças ao controlador PID, foi tão fácil.

Certifique-se de seguir novos artigos porque faremos novos projetos instrutivos!