Do Zero ao Autônomo: Dirigindo e Cruzando Linhas Automáticas
Título: Zero a autônomo em FRC Java: Tutorial Completo Passo a Passo 🤖
Sumário
- Introdução
- Pré-requisitos
- Configurando o ambiente de programação
- Codificando as funções de movimentação tele-operada
- Entendendo o funcionamento dos controladores de motor
- Implementando o controle de velocidade dos motores
- Utilizando a estratégia de controle arcade drive
- Configurando e utilizando o joystick
- Calculando a potência de acionamento dos motores
- Testando o código tele-operado
- Criando a função autônoma de cruzamento da linha automática
- Utilizando temporizadores para controle do tempo autônomo
- Testando e ajustando o código autônomo
- Considerações finais
Introdução
Neste tutorial, iremos explorar o desenvolvimento de um código de robô autônomo em FRC Java. Começaremos com conceitos básicos, como o acionamento de um motor, e chegaremos a algoritmos mais avançados de condução autônoma, como PID, perfil de movimento e perseguição pura. Além disso, discutiremos o controle em espaço de estados.
Pré-requisitos
Antes de começar este tutorial, é necessário ter um conhecimento básico de programação e da linguagem Java. Além disso, você precisará configurar um ambiente de programação FRC, incluindo o VSCode e a estação de controle do robô. Também será necessário ter acesso a um robô de treinamento onde você possa testar o seu código.
Configurando o ambiente de programação
Para começar, criaremos um novo projeto de robô usando o template "Timed Skeleton (Advanced)". Esse template é mais fácil de entender e nos permite ter um ponto de partida sólido. Após criar o projeto, organizaremos os arquivos em uma estrutura de pastas e especificaremos o número da sua equipe.
Codificando as funções de movimentação tele-operada
Antes de mergulharmos no código, é importante entender o que acontece no robô quando controlamos um motor. Para controlar um motor, precisamos utilizar um controlador de motor. Nesse código, utilizaremos a classe "Spark" da biblioteca WPI para enviar um sinal PWM para o controlador de motor. Esse sinal define a velocidade desejada para o motor.
Entendendo o funcionamento dos controladores de motor
Ao enviar o sinal PWM, estamos informando ao controlador de motor a velocidade desejada para o motor. Por sua vez, o controlador de motor traduz esse sinal em uma saída de tensão para o motor. Para cada motor utilizado no robô, precisaremos criar uma instância do controlador correspondente e definir a velocidade desejada.
Implementando o controle de velocidade dos motores
Vamos definir a velocidade dos motores na função periódica "tele-op". Nesse exemplo, utilizaremos a velocidade máxima para frente (1), velocidade máxima para trás (-1) e velocidade de parada (0). Como os motores do lado direito estão posicionados de forma oposta aos do lado esquerdo do chassi, precisaremos definir um valor negativo para que eles girem na mesma direção.
Utilizando a estratégia de controle arcade drive
Aqui utilizaremos a estratégia de controle arcade drive, na qual o eixo vertical do joystick é responsável pelo acionamento direto dos motores e o eixo horizontal é responsável pelo controle do movimento de giro. Para isso, precisaremos conectar o joystick à estação de controle do robô e obter os valores dos eixos correspondentes.
Configurando e utilizando o joystick
No código, criaremos um novo objeto do tipo joystick e o vincularemos à porta 0 do joystick físico. Em seguida, durante a função periódica "tele-op", leremos continuamente os valores dos eixos do joystick por meio do comando "getRawAxis".
Calculando a potência de acionamento dos motores
Com os valores desejados de velocidade e curva, precisamos calcular a potência de acionamento para os motores esquerdo e direito do chassi. Utilizando a estratégia arcade drive, a potência do motor esquerdo é calculada somando a velocidade desejada com a curva de controle, enquanto a potência do motor direito é calculada subtraindo a curva da velocidade.
Testando o código tele-operado
Agora que o código de controle tele-operado está pronto, vamos testá-lo no robô. Certifique-se de que o robô esteja ligado e que o código tenha sido implantado com sucesso. Em seguida, verifique se o controle do joystick está funcionando conforme o esperado.
Criando a função autônoma de cruzamento da linha automática
Agora vamos criar o código para a função autônoma de cruzamento da linha automática. O plano é fazer o robô avançar a 60% da velocidade máxima por 3 segundos. Para isso, utilizaremos um temporizador para controlar o tempo decorrido.
Utilizando temporizadores para controle do tempo autônomo
Na função periódica "autonomous", monitoraremos o tempo decorrido desde o início do modo autônomo. Se o tempo for inferior a 3 segundos, definiremos a velocidade dos motores para 60%. Caso contrário, pararemos os motores.
Testando e ajustando o código autônomo
Após escrever o código autônomo, é importante testá-lo e ajustá-lo para garantir que o robô esteja seguindo o caminho esperado. Faça testes repetidos e revise as configurações de tempo e velocidade conforme necessário.
Considerações finais
Parabéns! Agora você tem um código funcional para controlar um robô FRC em modo tele-operado e autônomo. Fique à vontade para explorar outras funcionalidades e métodos de controle para aprimorar o desempenho do robô. Divirta-se programando e boa sorte nas competições FRC!
Recursos: