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

index

int32_t

A Smart Port à qual está ligado o braço de 6 eixos, escrita como PORTx, em que x é o número da porta. Por exemplo, PORT1.

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

x

double

A coordenada x da posição do alvo em milímetros.

y

double

A coordenada y da posição do alvo em milímetros.

z

double

A coordenada z da posição do alvo em milímetros.

waitForCompletion

bool

Opcional. true (padrão) aguarda até que o movimento esteja concluído antes de continuar. false inicia o movimento e continua imediatamente para a linha de código seguinte.

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, ou waitForCompletion foi definido como false.

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

x

double

A distância a percorrer ao longo do eixo x, em milímetros.

y

double

A distância a percorrer ao longo do eixo dos y, em milímetros.

z

double

A distância a percorrer ao longo do eixo z, em milímetros.

waitForCompletion

bool

Opcional. true (padrão) aguarda até que o movimento esteja concluído antes de continuar. false inicia o movimento e continua imediatamente para a linha de código seguinte.

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, ou waitForCompletion foi definido como false.

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

yaw

double

O ângulo de guinada alvo em graus.

roll

double

Opcional. O ângulo de inclinação alvo em graus. O predefinido é 0.

pitch

double

Opcional. O ângulo de inclinação alvo em graus. O predefinido é 0.

waitForCompletion

bool

Opcional. true (padrão) aguarda até que o movimento esteja concluído antes de continuar. false inicia o movimento e continua imediatamente para a linha de código seguinte.

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, ou waitForCompletion foi definido como false.

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

yaw

double

A variação do ângulo de guinada, em graus.

roll

double

Opcional. A mudança de rotação, em graus. O predefinido é 0.

pitch

double

Opcional. A mudança de tom, em graus. O predefinido é 0.

waitForCompletion

bool

Opcional. true (padrão) aguarda até que o movimento esteja concluído antes de continuar. false inicia o movimento e continua imediatamente para a linha de código seguinte.

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, ou waitForCompletion foi definido como false.

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

speed

uint32_t

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

type

endEffectorType

A ferramenta acoplada ao braço de 6 eixos: magnet (ferramenta de recolha de íman) ou pen (ferramenta porta-canetas).

waitForCompletion

bool

Opcional. true (padrão) aguarda até que a alteração esteja concluída antes de continuar. false inicia a alteração e continua imediatamente para a linha de código seguinte.

Valor de Retorno

Retorna um valor booleano.

  • true — O tipo solicitado foi definido.

  • false — O tipo solicitado não foi definido ou waitForCompletion foi definido como false.

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

enabled

bool

true permite que o íman apanhe e segure objectos. false desativa o íman e larga qualquer objeto que esteja a ser segurado.

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

zOffset

double

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

state

bool

Opcional. true (padrão) activa a paragem de controlo e impede movimentos lineares ou articulares adicionais. false desativa a paragem de controlo.

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

timeout

int32_t

O novo valor de tempo limite.

units

timeUnits

A unidade de tempo: sec (segundos) ou msec (milissegundos).

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

x

double

A coordenada x da posição do alvo em milímetros.

y

double

A coordenada y da posição do alvo em milímetros.

z

double

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

x

double

A distância a percorrer ao longo do eixo x, em milímetros.

y

double

A distância a percorrer ao longo do eixo dos y, em milímetros.

z

double

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

yaw

double

O ângulo de guinada alvo em graus.

roll

double

Opcional. O ângulo de inclinação alvo em graus. O predefinido é 0.

pitch

double

Opcional. O ângulo de inclinação alvo em graus. O predefinido é 0.

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

yaw

double

A variação do ângulo de guinada, em graus.

roll

double

Opcional. A mudança de rotação, em graus. O predefinido é 0.

pitch

double

Opcional. A mudança de tom, em graus. O predefinido é 0.

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

callback

void (*)(void)

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

callback

void (*)(void)

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);
}