Programming A Robot!
Vamos aprender a programar um robot através da programação de um mecanismo de robot! O mecanismo que vamos programar é uma parte do robô que utilizamos para apanhar e retirar as peças do jogo. Na fotografia abaixo, há uma fotografia do mecanismo (para onde apontam as setas amarelas) a apanhar uma bola vermelha.
Agora que já sabe o que é o mecanismo e qual o seu aspeto, vamos começar a programá-lo!
Nota: Se ainda não leu sobre Programação baseada em comandos e não está muito familiarizado com os conceitos básicos de Java, deve voltar atrás e aprender esses dois conceitos antes de continuar. Quando estiver familiarizado com os conceitos básicos de Java e tiver uma compreensão da Programação baseada em comandos, poderá continuar lendo!
Obtenção do código
The code can be found here. Para colocar o código no VSCode, pode descarregá-lo, abrir o VS Code, ir para selecionar a pasta e abrir a pasta que descarregou, como mostra a fotografia.
Programação do subsistema
Agora vamos programar o mecanismo, que tem um motor que gira no sentido horário para receber a peça do jogo e no sentido anti-horário para retirá-la, se necessário.
No subsistema, temos de fazer o seguinte
Definir os controladores dos motores
Criar métodos para cada ação que o mecanismo tem de realizar.
Para começar a programar o subsistema, clique na pasta do subsistema e clique no ficheiro chamado "intake.java".
O robô utiliza um controlador de motor que se chama TalonSRX. Neste momento, o robot não sabe isto. Por isso, precisamos de dizer ao robô que tem um controlador de motor TalonSRX. Fazemo-lo adicionando a seguinte linha de código na linha 14:
public WPI_TalonSRX intakearm = new WPI_TalonSRX(Constants.INTAKEARM);
O seu código deve ser semelhante ao da fotografia abaixo.
Para explicar o significado desta linha:
public significa que pode ser utilizado em qualquer parte do código
WPI_TalonSRX é o nome da biblioteca, pode ver que importamos a biblioteca na linha 7
Intakearm é o nome que estamos a dar à variável
= significa que está a ser definido como igual a algo
new é apenas uma parte da configuração
WPI_TalonSRX é o nome da biblioteca
(Constants.INTAKEARM); significa que a ID do controlador do motor pode ser encontrada no ficheiro Constants.java sob a variável INTAKEARM.
Terá uma linha vermelha sob a palavra INTAKEARM porque ainda não criámos essa variável. Voltaremos a este assunto mais tarde, por isso pode deixá-lo estar por agora.
Nota: Adicionar bibliotecas
Quando escreves código para o teu robot, tens de importar as bibliotecas e outros ficheiros que estás a utilizar. Não o fazes aqui porque já os importámos para ti. Mas para referência futura, existem duas formas de importar as bibliotecas e ficheiros
#1: Ao escrever o nome, pode clicar (ou premir enter) quando o nome da biblioteca estiver realçado a azul
#2: Depois de escrever a linha de código, pode voltar atrás e importar a biblioteca. Para isso, coloque o cursor sobre a linha de código, seleccione Quick Fix... (Ctrl+.) e depois clique em Import 'WPI_TalonSRX' (com.ctre.phoenix.motorcontrol.can).
Adding the subsystem: Continued
Em seguida, temos de criar métodos para cada ação que o mecanismo tem de realizar.
O mecanismo precisa de rodar no sentido contrário ao dos ponteiros do relógio para receber a peça do jogo.Assim, vamos criar um método que define o controlador do motor para girar no sentido horário.
Faremos isso escrevendo o seguinte código na linha 18
public void intakeIn(){
intakearm.set(-1);
}
Deve ter o aspeto da fotografia abaixo
Para explicar o significado do código:
public significa que o método pode ser utilizado em qualquer parte do código.
void significa que não utiliza a palavra-chave return, pelo que não está a devolver nada
intakeIn é o nome que estamos a dar ao método.
intakearm.set(-1) significa que estamos a pegar no controlador do motor intakearm e a definir a velocidade do motor para -1. Isto fá-lo rodar no sentido contrário ao dos ponteiros do relógio à velocidade máxima.
Por último, precisamos de escrever código para fazer parar a entrada. Sem este código, o motor continuará a girar sem parar. Vamos chamar a este método intakeStop. Também definiremos a velocidade como 0, porque 0 significa que o motor não está a girar.
O código seguinte será colocado sob o método intakeOut() na linha 26.
public void intakeStop(){
intakearm.set(0);
}
Deve ter o aspeto da fotografia abaixo
Agora precisamos de adicionar o ID do controlador do motor em Constants.java. Para o fazer, vamos ao ficheiro Constant.java.
Depois de abrir o ficheiro. Podemos adicionar o ID do controlador do motor. Vamos adicionar o ID utilizando a seguinte linha de código:
public static final int INTAKE= 12;
O código deve ser parecido com a imagem abaixo
Para explicar o que o código faz, cria uma variável que não pode ser alterada e é definida como 12. Também não é possível voltar atrás e tentar definir INTAKE com um valor diferente num ficheiro diferente, porque é definitivo.
Estamos a defini-lo como 12 porque definimos o controlador do motor como 12 quando o configurámos. Agora podemos passar à programação dos comandos!