Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Faça seu robô Arduino ir direto por uma distância especificada ou torcer para um ângulo especificado usando a biblioteca PreciseMovement Arduino.
O robô precisa de um lançador de bola rolante ou equivalente para minimizar o atrito durante a torção.
www.pololu.com/product/954
Você pode dizer ao robô para avançar para uma distância especificada ou torcer para um ângulo especificado. O programa determina sua posição usando o cálculo morto. Uma vez que as estimativas de posição dependem apenas da velocidade da roda, o deslizamento induzirá a erros consideráveis. O projetista do robô deve ter cuidado para minimizar o risco de escorregamento.
Isso foi testado para funcionar com o robô SnappyXO.
Etapa 1: Alteração do local do tutorial
O tutorial foi movido para a página abaixo. Este tutorial não é mais mantido.
sites.google.com/stonybrook.edu/premo
Etapa 2: construir o robô de unidade diferencial SnappyXO
A biblioteca PreciseMovement que usaremos é compatível apenas com robôs de acionamento diferencial. Você pode optar por usar outros robôs com tração nas duas rodas.
Etapa 3: conectar os eletrônicos
Para o codificador óptico SnappyXO padrão:
D0 (saída do codificador) -> Arduino Digital Pin
VCC -> Arduino 5V
GND -> GND
Motor e Arduino Power:
A fonte de alimentação do motor deve ser adequada para os motores que você usa. Para o kit SnappyXO, baterias 4AA são usadas para alimentação do motor e bateria de 9 V para alimentação do Arduino. Certifique-se de que todos eles tenham um GND comum.
Etapa 4: instalar a biblioteca PreciseMovement Arduino
Download:
github.com/jaean123/PreciseMovement-library/releases
Como instalar a Biblioteca Arduino:
wiki.seeedstudio.com/How_to_install_Arduino_Library/
Etapa 5: Código
Código Arduino:
create.arduino.cc/editor/whileloop/7a35299d-4e73-409d-9f39-2c517b3000d5/preview
Esses parâmetros requerem ajuste. Outros parâmetros rotulados como recomendados no código podem ser ajustados para melhor desempenho.
- Verifique e defina os pinos do motor em PINOS ARDUINO.
-
Defina LENGTH e RADIUS.
- LENGTH é a distância da roda esquerda à roda direita.
- RADIUS é o raio da roda.
-
Defina PULSES_PER_REV, que é o número de pulsos que o codificador gera para uma rotação da roda.
- Observe que isso é diferente do número de pulsos que o codificador gera para uma revolução do eixo do motor, a menos que os codificadores estejam conectados para ler diretamente do eixo da roda.
- PULSES_PER_REV = (pulsos por uma revolução do eixo do motor) x (relação de engrenagem)
-
Defina STOP_LENGTH se você ver que o robô está ultrapassando o limite após o movimento para frente.
O robô irá parar assim que a posição estimada estiver STOP_LENGTH de distância do alvo. Assim, STOP_LENGTH, é a distância aproximada necessária para o robô parar
-
Parâmetros PID
KP_FW: Este é o componente proporcional do movimento para frente. Aumente isso até que o robô vá direto. Se você não conseguir fazer o ajuste correto, então provavelmente o hardware está com defeito. (por exemplo, desalinhamento da roda, etc)
KP_TW: Este é o componente proporcional do movimento de torção PID. Simplesmente comece a partir de um valor baixo e aumente até que a velocidade de torção, ou a velocidade angular do robô durante a torção, seja rápida o suficiente, mas não cause overshoot. Para fazer observações, você pode fazer com que o robô alterne de 0 a 90 e vice-versa, inserindo o seguinte na função de loop
Coloque isso em loop para sintonizar KP_FW:
mover.forward (99999);
Coloque isso em loop para alternar de 0 a 90 para sintonizar KP_TW:
mover.twist (90); // Twist 90 CW
atraso (2000);
mover.twist (-90) // Twist 90 CCW
atraso (2000);
Observe que, para realmente torcer a velocidade angular em TARGET_TWIST_OMEGA, o KI_TW também precisa ser ajustado, pois um controlador proporcional nunca se estabelecerá no alvo exato. No entanto, não é necessário girar exatamente nessa velocidade angular. A velocidade angular só precisa ser lenta o suficiente.
Etapa 6: como funciona
Se você está curioso para saber como funciona, continue lendo.
O movimento para a frente é mantido em linha reta usando o algoritmo de perseguição puro em um caminho em linha reta. Mais sobre a perseguição pura:
O controlador PID de torção tenta manter a velocidade angular de torção em TARGET_TWIST_OMEGA. Observe que essa velocidade angular é a velocidade angular de todo o robô, não das rodas. Apenas um controlador PID é usado e a saída é a velocidade de gravação PWM dos motores esquerdo e direito. O cálculo morto é feito para calcular o ângulo. Assim que o ângulo atinge o limite de erro, o robô para.