Braço CTE#
Introdução#
A classe arm fornece controlo para o Braço de 6 Eixos utilizado na Célula de Trabalho CTE. No VEX V5 C++, o Braço de 6 Eixos pode mover um efetor final para posições no espaço tridimensional, rodar o efetor final, verificar se os movimentos são possíveis e controlar ferramentas acopladas, como a Ferramenta de Recolha Magnética ou a Ferramenta de Suporte de Canetas.
O braço de 6 eixos não está configurado como dispositivo no VEXcode V5. Para o utilizar num projeto VEX V5 C++, crie manualmente um objeto arm no código com a porta inteligente à qual o braço de 6 eixos está ligado.
Os exemplos nesta página utilizam um braço de 6 eixos construído manualmente, denominado Braço Arm.
Construtores#
arm#
O comando arm cria um objeto de braço de 6 eixos.
Função disponível
arm(int32_t index);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A Smart Port à qual está ligado o braço de 6 eixos, escrita como |
Exemplo
// Create a 6-Axis Arm named Arm on Port 1
arm Arm = arm(PORT1);
Destruidor#
~arm#
~arm destrói o objeto arm e liberta os recursos associados.
Função disponível
~arm();
Funções de membro#
A classe arm inclui as seguintes funções membro:
Ações — Mova o braço de 6 eixos para as posições ou orientações pretendidas.
moveTo— Move o efetor final para uma coordenada x, y e z especificada.moveInc— Move o efetor final por uma distância especificada a partir da sua posição atual.moveEndEffectorTo— Roda o efetor final para uma orientação de guinada, rotação e inclinação especificada.moveEndEffectorInc— Roda o efetor final por uma quantidade especificada de guinada, rotação e inclinação.
Mutadores — Configure os movimentos, as ferramentas e os ajustes de controlo.
setSpeed— Define a velocidade de movimento utilizada pelo braço de 6 eixos.setEndEffectorType— Define o tipo de efetor final ligado ao braço de 6 eixos.setEndEffectorMagnet— Activa ou desactiva a Ferramenta de Recolha Magnética.setPenOffset— Define o deslocamento do eixo z utilizado com a ferramenta de suporte de caneta.setControlStop— Activa ou desactiva a paragem de controlo para o braço de 6 eixos.setTimeout— Define o tempo limite utilizado pelas funções de movimento do braço de 6 eixos.
Getters — Devolvem o estado do movimento, a posição, a orientação e os valores de ligação.
isDone— Retorna se o braço de 6 eixos terminou de se mover.isCrashed— Retorna se o braço de 6 eixos colidiu durante o movimento.getX— Retorna a posição x actual do efetor final.getY— Retorna a posição y actual do efetor final.getZ— Retorna a posição z actual do efetor final.getYaw— Retorna o yaw actual do efetor final.getRoll— Retorna o roll atual do efetor final.getPitch— Retorna o tom atual do efetor final.canArmReachTo— Retorna se o braço de 6 eixos pode atingir uma posição especificada.canArmReachInc— Retorna se o braço de 6 eixos se pode mover uma distância especificada.canEndEffectorReachTo— Retorna se o efetor final pode atingir uma orientação especificada.canEndEffectorReachInc— Retorna se o efetor final pode rodar por uma quantidade especificada.isConnected— Retorna se o braço de 6 eixos está ligado ao cérebro V5.timestamp— Retorna o timestamp do último pacote de estado recebido do braço de 6 eixos.installed— Retorna se o braço de 6 eixos está ligado.
Callbacks — Executam funções quando ocorrem eventos de ativação do mecanismo de disparo.
controlStopped— Regista uma função a ser executada quando a paragem de controlo está activada.crashed— Regista uma função para ser executada quando é detectada uma falha.
Ações#
moveTo#
O comando moveTo move o braço de 6 eixos para uma coordenada x, y e z especificada.
As coordenadas x, y e z descrevem a posição do efetor final no espaço tridimensional. Utilize canArmReachTo antes desta função se a posição alvo puder estar fora do espaço de trabalho alcançável do Braço de 6 Eixos.
Função disponível
bool moveTo(
double x,
double y,
double z,
bool waitForCompletion = true
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A coordenada x da posição do alvo em milímetros. |
|
|
A coordenada y da posição do alvo em milímetros. |
|
|
A coordenada z da posição do alvo em milímetros. |
|
|
Opcional. |
Valor de Retorno
Retorna um valor booleano.
true— O braço de 6 eixos atingiu a posição alvo.false— O braço de 6 eixos não atingiu a posição alvo, ouwaitForCompletionfoi definido comofalse.
Exemplos
// Move the 6-Axis Arm to (200, 0, 100)
Arm.moveTo(200, 0, 100);
// Start moving, then print the y-position while the arm moves
Arm.moveTo(-100, 200, 100, false);
while (!Arm.isDone()) {
Brain.Screen.print(Arm.getY());
Brain.Screen.newLine();
wait(0.25, seconds);
}
moveInc#
O comando moveInc move o braço de 6 eixos por uma distância especificada a partir da sua posição actual ao longo dos eixos x, y e z.
Utilize esta função para se mover em relação ao local onde o efetor final está agora. Utilize canArmReachInc antes desta função se o movimento puder colocar o Braço de 6 Eixos fora do seu espaço de trabalho alcançável.
Função disponível
bool moveInc(
double x,
double y,
double z,
bool waitForCompletion = true
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A distância a percorrer ao longo do eixo x, em milímetros. |
|
|
A distância a percorrer ao longo do eixo dos y, em milímetros. |
|
|
A distância a percorrer ao longo do eixo z, em milímetros. |
|
|
Opcional. |
Valor de Retorno
Retorna um valor booleano.
true— O braço de 6 eixos atingiu a posição solicitada.false— O braço de 6 eixos não atingiu a posição solicitada, ouwaitForCompletionfoi definido comofalse.
Exemplo
// Move the 6-Axis Arm 100 millimeters along the y-axis
Arm.moveInc(0, 100, 0);
moveEndEffectorTo#
moveEndEffectorTo roda o efetor final do braço de 6 eixos para uma orientação específica de guinada, rotação e inclinação.
A orientação descreve como o efetor final é rodado. yaw roda em torno do eixo z, roll roda em torno do eixo x e pitch roda em torno do eixo y.
Função disponível
bool moveEndEffectorTo(
double yaw,
double roll = 0,
double pitch = 0,
bool waitForCompletion = true
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O ângulo de guinada alvo em graus. |
|
|
Opcional. O ângulo de inclinação alvo em graus. O predefinido é |
|
|
Opcional. O ângulo de inclinação alvo em graus. O predefinido é |
|
|
Opcional. |
Valor de Retorno
Retorna um valor booleano.
true— O efetor final atingiu a orientação desejada.false— O efetor final não atingiu a orientação alvo, ouwaitForCompletionfoi definido comofalse.
Exemplo
// Rotate the end effector to 90 degrees of roll
Arm.moveEndEffectorTo(0, 90, 0);
moveEndEffectorInc#
O comando moveEndEffectorInc roda o efetor final do braço de 6 eixos numa quantidade especificada de guinada, rotação e inclinação a partir da sua orientação atual.
Utilize esta função para rodar em relação à guinada, rotação ou inclinação atual do efetor final.
Função disponível
bool moveEndEffectorInc(
double yaw,
double roll = 0,
double pitch = 0,
bool waitForCompletion = true
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A variação do ângulo de guinada, em graus. |
|
|
Opcional. A mudança de rotação, em graus. O predefinido é |
|
|
Opcional. A mudança de tom, em graus. O predefinido é |
|
|
Opcional. |
Valor de Retorno
Retorna um valor booleano.
true— O efetor final atingiu a orientação solicitada.false— O efetor final não atingiu a orientação solicitada, ouwaitForCompletionfoi definido comofalse.
Exemplo
// Rotate the end effector -50 degrees in pitch
Arm.moveEndEffectorInc(0, 0, -50);
Mutantes#
setSpeed#
setSpeed define a velocidade de movimento utilizada pelo braço de 6 eixos.
Função disponível
void setSpeed(uint32_t speed);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A velocidade a que o braço de 6 eixos se deve mover, em milímetros por segundo. |
Valor de Retorno
Esta função não devolve qualquer valor.
Exemplo
// Set the 6-Axis Arm movement speed
Arm.setSpeed(100);
setEndEffectorType#
setEndEffectorType define o tipo de efetor final ligado ao braço de 6 eixos.
Quando o tipo de atuador final é alterado, o braço de 6 eixos ajusta automaticamente o seu deslocamento em z para corresponder à ferramenta selecionada.
Função disponível
bool setEndEffectorType(
endEffectorType type,
bool waitForCompletion = true
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A ferramenta acoplada ao braço de 6 eixos: |
|
|
Opcional. |
Valor de Retorno
Retorna um valor booleano.
true— O tipo solicitado foi definido.false— O tipo solicitado não foi definido ouwaitForCompletionfoi definido comofalse.
Exemplo
// Set the end effector type to the Magnet Pickup Tool
Arm.setEndEffectorType(magnet);
setEndEffectorMagnet#
setEndEffectorMagnet ativa ou desativa a ferramenta de recolha magnética.
Função disponível
void setEndEffectorMagnet(bool enabled);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
|
Valor de Retorno
Esta função não devolve qualquer valor.
Exemplo
// Pick up objects and then drop them
Arm.setEndEffectorType(magnet);
Arm.setEndEffectorMagnet(true);
wait(2, seconds);
Arm.setEndEffectorMagnet(false);
setPenOffset#
setPenOffset define o deslocamento do eixo z utilizado quando a ferramenta de suporte da caneta está ligada ao braço de 6 eixos.
Defina o tipo de atuador final para pen antes de utilizar esta função. Se a Ferramenta Suporte de Caneta não estiver selecionada, esta função não terá qualquer efeito.
O deslocamento da caneta é a distância entre a parte superior do suporte da caneta e a ponta do marcador para quadro branco. Um valor z positivo desloca a caneta para cima a partir do ponto de montagem do suporte.
Função disponível
void setPenOffset(double zOffset);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O valor de deslocamento da caneta em milímetros. |
Valor de Retorno
Esta função não devolve qualquer valor.
Exemplo
// Set the end effector type to the Pen Holder Tool and set the pen offset
Arm.setEndEffectorType(pen);
Arm.setPenOffset(25);
setControlStop#
setControlStop activa ou desactiva a paragem de controlo para o braço de 6 eixos.
Quando o controlo de paragem é ativado, o braço de 6 eixos interrompe imediatamente o movimento e impede movimentos lineares ou articulares adicionais.
Função disponível
void setControlStop(bool state = true);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Opcional. |
Valor de Retorno
Esta função não devolve qualquer valor.
Exemplo
// Stop the 6-Axis Arm and prevent further movement
Arm.setControlStop();
setTimeout#
setTimeout define o valor de tempo limite utilizado ao mover o braço de 6 eixos.
Se uma ação não for concluída antes de ser atingido o tempo limite, o projeto continua para a linha de código seguinte.
Função disponível
void setTimeout(
int32_t timeout,
timeUnits units
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O novo valor de tempo limite. |
|
|
A unidade de tempo: |
Valor de Retorno
Esta função não devolve qualquer valor.
Exemplo
// Set the 6-Axis Arm timeout to 2 seconds
Arm.setTimeout(2, sec);
Getters#
isDone#
isDone retorna se o braço de 6 eixos tiver terminado de se mover.
Esta função é útil após uma função de movimento ser chamada com waitForCompletion definido para false.
Função disponível
bool isDone();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Retorna um valor booleano.
true— O braço de 6 eixos terminou de se mover.false— O braço de 6 eixos ainda se move.
Exemplo
// Display the 6-Axis Arm's y-position while it moves
Arm.moveTo(-100, 200, 100, false);
while (!Arm.isDone()) {
Brain.Screen.print(Arm.getY());
Brain.Screen.newLine();
wait(0.25, seconds);
}
isCrashed#
isCrashed retorna se o braço de 6 eixos colidiu durante o movimento.
Quando é detetada uma colisão, o braço de 6 eixos interrompe o movimento do motor e pode parecer ficar inerte. Isto reduz a tensão e ajuda a proteger os motores contra danos acidentais.
Função disponível
bool isCrashed();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Retorna um valor booleano.
true— O braço de 6 eixos sofreu uma avaria.false— O braço de 6 eixos não sofreu qualquer colisão.
Exemplo
// Quickly move to a new location
Arm.setSpeed(100);
Arm.moveTo(-40, 250, 40, false);
// While moving, check for a crash
while (true) {
if (Arm.isCrashed()) {
// Indicate a crash with the Brain screen
Brain.Screen.print("Crash Detected");
break;
}
wait(5, msec);
}
getX#
getX devolve a posição x atual do efetor final em milímetros.
Utilize esta função para ler onde o efetor final se encontra atualmente ao longo do eixo x.
Função disponível
float getX();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Devolve um valor float float que representa a posição x do efetor final em milímetros.
Exemplo
// Print the current x position of the 6-Axis Arm
Brain.Screen.print(Arm.getX());
getY#
getY devolve a posição y atual do efetor final em milímetros.
Utilize esta função para ler onde o efetor final se encontra atualmente ao longo do eixo y.
Função disponível
float getY();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Devolve um valor float entre float representando a posição y do efetor final em milímetros.
Exemplo
// Print the current y position of the 6-Axis Arm
Brain.Screen.print(Arm.getY());
getZ#
getZ devolve a posição z atual do efetor final em milímetros.
Utilize esta função para ler onde o efetor final se encontra atualmente ao longo do eixo z.
Função disponível
float getZ();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Devolve um valor float float que representa a posição z do efetor final em milímetros.
Exemplo
// Print the current z position of the 6-Axis Arm
Brain.Screen.print(Arm.getZ());
getYaw#
getYaw devolve o ângulo de guinada atual do efetor final em graus.
Função disponível
float getYaw();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Retorna um valor float float que representa o ângulo de guinada atual do efetor final em graus.
Exemplo
// Print the current yaw of the end effector
Brain.Screen.print(Arm.getYaw());
getRoll#
getRoll devolve a rotação atual do efetor final em graus.
Função disponível
float getRoll();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Retorna um valor float entre float representando a rotação atual do efetor final em graus.
Exemplo
// Print the current roll of the end effector
Brain.Screen.print(Arm.getRoll());
getPitch#
getPitch devolve a inclinação atual do efetor final em graus.
Função disponível
float getPitch();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Retorna um valor float float que representa a inclinação atual do efetor final em graus.
Exemplo
// Print the current pitch of the end effector
Brain.Screen.print(Arm.getPitch());
canArmReachTo#
O valor canArmReachTo indica se o braço de 6 eixos pode mover o efetor final para uma coordenada x, y e z especificada.
Utilize esta função para verificar uma posição alvo antes de utilizar moveTo.
Função disponível
bool canArmReachTo(
double x,
double y,
double z
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A coordenada x da posição do alvo em milímetros. |
|
|
A coordenada y da posição do alvo em milímetros. |
|
|
A coordenada z da posição do alvo em milímetros. |
Valor de Retorno
Retorna um valor booleano.
true— O braço de 6 eixos consegue alcançar a posição solicitada.false— O braço de 6 eixos não consegue alcançar a posição solicitada.
Exemplo
// Move the 6-Axis Arm to (100, -20, 50) if it can reach
if (Arm.canArmReachTo(100, -20, 50)) {
Arm.moveTo(100, -20, 50);
}
canArmReachInc#
canArmReachInc retorna se o braço de 6 eixos pode mover o efetor final por uma distância x, y e z especificada a partir da sua posição atual.
Utilize esta função para verificar um movimento relativo antes de utilizar moveInc.
Função disponível
bool canArmReachInc(
double x,
double y,
double z
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A distância a percorrer ao longo do eixo x, em milímetros. |
|
|
A distância a percorrer ao longo do eixo dos y, em milímetros. |
|
|
A distância a percorrer ao longo do eixo z, em milímetros. |
Valor de Retorno
Retorna um valor booleano.
true— O braço de 6 eixos pode fazer o movimento solicitado.false— O braço de 6 eixos não consegue executar o movimento solicitado.
Exemplo
// Increment the 6-Axis Arm 100 mm along the x-axis if possible
if (Arm.canArmReachInc(100, 0, 0)) {
Arm.moveInc(100, 0, 0);
}
canEndEffectorReachTo#
O valor canEndEffectorReachTo indica se o efetor final pode rodar para uma orientação de guinada, rotação e inclinação especificada.
Utilize esta função para verificar uma orientação alvo antes de utilizar moveEndEffectorTo.
Função disponível
bool canEndEffectorReachTo(
double yaw,
double roll = 0,
double pitch = 0
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O ângulo de guinada alvo em graus. |
|
|
Opcional. O ângulo de inclinação alvo em graus. O predefinido é |
|
|
Opcional. O ângulo de inclinação alvo em graus. O predefinido é |
Valor de Retorno
Retorna um valor booleano.
true— O efetor final pode alcançar a orientação solicitada.false— O efetor final não consegue alcançar a orientação solicitada.
Exemplo
// Rotate the end effector to 90 degrees of roll if possible
if (Arm.canEndEffectorReachTo(0, 90, 0)) {
Arm.moveEndEffectorTo(0, 90, 0);
}
canEndEffectorReachInc#
canEndEffectorReachInc retorna se o efetor final pode rodar por uma quantidade especificada de guinada, rotação e inclinação a partir da sua orientação atual.
Utilize esta função para verificar um movimento de orientação relativa antes de utilizar moveEndEffectorInc.
Função disponível
bool canEndEffectorReachInc(
double yaw,
double roll = 0,
double pitch = 0
);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A variação do ângulo de guinada, em graus. |
|
|
Opcional. A mudança de rotação, em graus. O predefinido é |
|
|
Opcional. A mudança de tom, em graus. O predefinido é |
Valor de Retorno
Retorna um valor booleano.
true— O efetor final pode fazer a rotação solicitada.false— O efetor final não consegue efetuar a rotação solicitada.
Exemplo
// Increment the end effector by 10 degrees of pitch if possible
if (Arm.canEndEffectorReachInc(0, 0, 10)) {
Arm.moveEndEffectorInc(0, 0, 10);
}
isConnected#
isConnected retorna se o braço de 6 eixos estiver ligado ao cérebro V5.
Esta é uma função de compatibilidade que devolve o mesmo valor que installed.
Função disponível
bool isConnected();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Retorna um valor booleano.
true— O braço de 6 eixos está ligado ao cérebro V5.false— O braço de 6 eixos não está ligado ao cérebro V5.
Exemplo
// Print whether the 6-Axis Arm is connected
Brain.Screen.print(Arm.isConnected());
timestamp#
O timestamp timestamp estado recebido do braço de 6 eixos.
Função disponível
uint32_t timestamp();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Retorna o carimbo de data/hora do último pacote de estado como um uint32_t em milissegundos.
installed#
installed retorna se o braço de 6 eixos estiver ligado.
Função disponível
bool installed();
Parâmetros
Esta função não tem parâmetros.
Valor de Retorno
Retorna um valor booleano.
true— O braço de 6 eixos está ligado.false— O braço de 6 eixos não está ligado.
Retornos de chamada#
controlStopped#
controlStopped regista uma função que é executada quando a paragem de controlo está activada.
Função disponível
void controlStopped(void (* callback)(void));
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Uma função que é executada quando a paragem de controlo está ativada. |
Valor de Retorno
Esta função não devolve qualquer valor.
Exemplo
// Called when the 6-Axis Arm is control stopped
void onControlStopped() {
Brain.Screen.print("Arm control stopped");
}
int main() {
Arm.controlStopped(onControlStopped);
}
crashed#
crashed regista uma função que é executada quando o braço de 6 eixos colide durante o movimento.
Quando é detetada uma colisão, o braço de 6 eixos interrompe o movimento do motor e pode parecer ficar inerte. Isto reduz a tensão e ajuda a proteger os motores contra danos acidentais.
Função disponível
void crashed(void (* callback)(void));
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Uma função que é executada quando o braço de 6 eixos sofre uma colisão durante o movimento. |
Valor de Retorno
Esta função não devolve qualquer valor.
Exemplo
// Called when the 6-Axis Arm crashes while moving
void onArmCrashed() {
Brain.Screen.print("Crash detected");
}
int main() {
Arm.crashed(onArmCrashed);
}