-
Notifications
You must be signed in to change notification settings - Fork 0
[Doc BBBlue] BoneScript & Roboticscape
Para a competição da TRUFES a linguagem de programação escolhida foi o JavaScript, devido a sua versatilidade e curva de aprendizado. Para suportar funções do BeagleBone, utiliza-se duas bliblotecas. BoneScript e RoboticsCape.
A biblioteca RoboticsCape será usada para controle de motores e seus respectivos encoders, já a BoneScript será utilizada para GPIO e outras abordagens.
Para baixar essa biblioteca é necessário instalar o npm primeiro, e isso pode ser feito digitando:
sudo apt install npm
Com isso instalado, podemos baixar a biblioteca:
sudo npm install --global bonescript
sudo npm install --global roboticscape
Mas a instalação do RoboticsCape não vai funcionar, porque a versão disponível no GitHub não funciona para o quarto encoder, foi necessário realizar uma alteração na biblioteca.
O BoneScript possui um conjunto de funções uteis e suas delcarações podem ser encontradas no Github da Biblioteca, bem como no ip de suporte do seu BeagleBone, geralmente 192.168.7.2.
var b = require('bonescript');
b.pinMode('P8_19', b.INPUT);
b.digitalRead('P8_19', printStatus);
function printStatus(err,value) {
console.log('value = ' + value);
console.log('err = ' + err);
}rc.initialize()
Essa função inicializa as funções de hardware e retorna um inteiro. Esse número pode ser:
- -2 : O conteúdo presente em PID_FILE não é válido.
- -1 : Existia um programa rodando e não foi possível fecha-lo normalmente, então foi necessário dar um "kill".
- 0 : Nenhum programa estava rodando.
- 1 : Existia um programa rodando e foi possível fecha-lo normalmente.
Essa função é necessária no início do código para utilizar as outras funções aqui presentes.
rc.motor(motor, valor)
É responsável pelo funcionamento dos motores. Recebe como argumento 'motor' e 'valor', porém pode só receber 'valor'. Motor pode receber 1, 2, 3 ou 4, referente ao motor que você está utilizando na função.
Valor pode receber tanto strings quanto números, e eles podem ser:
- "ENABLE", habilita TODOS os motores. Caso você não especifique qual motor quer rodar, após um enable, todos motores vão girar.
- "DISABLE", Desabilita TODOS os motores.
- "FREE_SPIN", Coloca um motor em um estado de aceleração zero permitindo que ele gire livremente.
- "BREAK", Conecta os pares de terminais do motor juntos, o que faz com que o motor lute contra ele mesmo. Isso o torna resistente à rotação.
- Um número de 0 a 1 correspondente à potência do motor, sendo 1 = 100% e 0 = 0%.
rc.encoder(ação, valor)
Essa função é a responsável pelos encoders, porém só três deles, aqueles que são categorizados como EQEP que são os encoder 1 a 3. O quarto encoder é categorizado como PRU, e tem sua função específica.
Ação pode receber 2 valores
- 0, Um é pra leitura e outro pra escrita
- 1, Um é pra leitura e outro pra escrita
Valor varia sua funcionalidade de acordo com a ação escolhida. Caso a ação seja de escrita, valor será escrito naquela posição do encoder. Esse método é geralmente usado pra zerar o encoder.
Caso a ação seja leitura, valor é o encoder no qual será lido o valor do encoder. No caso da leitura, valor so vai de 1 a 3.
Vale ressaltar que quando só é passado 1 argumento pra função, por padrão esse argumento será o numero do encoder e a ação escolhida é a leitura.
var rc = require('roboticscape');
/* Allocate the userspace usage of the robotics cape features */
rc.initialize();
/* Set the state to RUNNING */
rc.state("RUNNING");
/* Exercise the robotics cape hardware */
rc.led("GREEN", true);
rc.on("PAUSE_PRESSED", function() {
console.log("PAUSE pressed");
/* Set the state to EXITING */
rc.state("EXITING");
});
rc.motor("ENABLE");
rc.motor(1, 0.3);
rc.motor(2, 0.3);
rc.motor(3, 0.3);
rc.motor(4, 0.3);
/* Read encoder every second until PAUSE button pressed */
setInterval(function() {
if(rc.state() == "RUNNING") {
var enc1 = rc.encoder(1);
var enc2 = rc.encoder(2);
var enc3 = rc.encoder(3);
var enc4 = rc.encoder(1);
console.log("encoder 1 = " + enc1);
console.log("encoder 2 = " + enc2);
console.log("encoder 3 = " + enc3);
console.log("encoder 4 = " + enc4);
} else {
/* The robotics cape userspace interface is automatically freed on exit */
process.exit();
}
}, 1000);Elogios, Sugestões e Reclamações, entre em contato com o SAC