Brazo CTE#

Introducción#

La clase arm proporciona control para el brazo de 6 ejes utilizado en la celda de trabajo CTE. En VEX EXP C++, el brazo de 6 ejes puede mover un efector final a posiciones en el espacio tridimensional, rotar el efector final, comprobar si los movimientos son posibles y controlar herramientas acopladas, como la herramienta de recogida magnética o la herramienta de soporte para bolígrafos.

Los ejemplos de esta página utilizan un brazo de 6 ejes configurado llamado Arm.

Constructores#

arm#

arm crea un objeto de brazo de 6 ejes.

Función disponible

arm(int32_t index);

Parámetro

Tipo

Descripción

index

int32_t

El puerto inteligente al que está conectado el brazo de 6 ejes, escrito como PORTx, donde x es el número de puerto. Por ejemplo, PORT1.

Ejemplo

// Create a 6-Axis Arm named Arm on Port 1
arm Arm = arm(PORT1);

Destructor#

~arm#

~arm destruye el objeto arm y libera los recursos asociados.

Función disponible

~arm();

Funciones de los miembros#

La clase arm incluye las siguientes funciones miembro:

Acciones: mueva el brazo de 6 ejes a posiciones u orientaciones.

  • moveTo — Mueve el efector final a una coordenada x, y y z especificada.

  • moveInc — Mueve el efector final una distancia específica de su posición actual.

  • moveEndEffectorTo — Gira el efector final a una orientación de guiñada, balanceo y cabeceo especificada.

  • moveEndEffectorInc — Gira el efector final una cantidad específica de guiñada, balanceo y cabeceo.

Mutadores: configure el movimiento, las herramientas y los ajustes de control.

  • setSpeed — Establece la velocidad de movimiento utilizada por el brazo de 6 ejes.

  • setEndEffectorType — Establece el tipo de efector final conectado al brazo de 6 ejes.

  • setEndEffectorMagnet — Activa o desactiva la herramienta de recogida de imanes.

  • setPenOffset — Establece el desplazamiento del eje z utilizado con la herramienta Portaplumas.

  • setControlStop — Activa o desactiva la parada de control para el brazo de 6 ejes.

  • setTimeout: establece el tiempo de espera utilizado por las funciones de movimiento del brazo de 6 ejes.

Getters: devuelve el estado de movimiento, la posición, la orientación y los valores de conexión.

  • isDone — Devuelve si el brazo de 6 ejes ha terminado de moverse.

  • isCrashed — Devuelve si el brazo de 6 ejes se ha estrellado mientras se movía.

  • getX — Devuelve la posición x actual del efector final.

  • getY — Devuelve la posición y actual del efector final.

  • getZ — Devuelve la posición z actual del efector final.

  • getYaw — Devuelve la guiñada actual del efector final.

  • getRoll — Devuelve el rollo actual del efector final.

  • getPitch — Devuelve el tono actual del efector final.

  • canArmReachTo — Devuelve si el brazo de 6 ejes puede alcanzar una posición especificada.

  • canArmReachInc — Devuelve si el brazo de 6 ejes puede moverse una distancia especificada.

  • canEndEffectorReachTo — Devuelve si el efector final puede alcanzar una orientación específica.

  • canEndEffectorReachInc — Devuelve si el efector final puede girar una cantidad específica.

  • isConnected — Devuelve si el brazo de 6 ejes está conectado al cerebro EXP.

  • timestamp: devuelve la marca de tiempo del último paquete de estado recibido del brazo de 6 ejes.

  • installed — Devuelve si el brazo de 6 ejes está conectado.

Devoluciones de llamada: ejecuta funciones cuando ocurren eventos ARM.

  • controlStopped — Registra una función para ejecutarse cuando la parada de control está habilitada.

  • crashed — Registra una función para que se ejecute cuando se detecta un bloqueo.

Acciones#

moveTo#

moveTo mueve el brazo de 6 ejes a las coordenadas x, y y z especificadas.

Las coordenadas x, y y z describen la posición del efector final en el espacio tridimensional. Use canArmReachTocanArmReachTo antes de esta función si la posición objetivo puede estar fuera del espacio de trabajo accesible del brazo de 6 ejes.

Función disponible

bool moveTo(
  double x,
  double y,
  double z,
  bool   waitForCompletion = true
);

Parámetro

Tipo

Descripción

x

double

La coordenada x de la posición objetivo en milímetros.

y

double

La coordenada y de la posición objetivo en milímetros.

z

double

La coordenada z de la posición objetivo en milímetros.

waitForCompletion

bool

Opcional. true (predeterminado) espera hasta que se complete el movimiento antes de continuar. false inicia el movimiento e inmediatamente continúa a la siguiente línea de código.

Valor de devolución

Devuelve un valor booleano.

  • true — El brazo de 6 ejes alcanzó la posición objetivo.

  • false — El brazo de 6 ejes no alcanzó la posición objetivo, o waitForCompletion se estableció en false.

Ejemplos

// 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#

moveInc mueve el brazo de 6 ejes a una distancia específica de su posición actual a lo largo de los ejes x, y y z.

Utilice esta función para moverse con respecto a donde está ahora el efector final. Use canArmReachInccanArmReachInc antes de esta función si el movimiento puede colocar el brazo de 6 ejes fuera de su espacio de trabajo accesible.

Función disponible

bool moveInc(
  double x,
  double y,
  double z,
  bool   waitForCompletion = true
);

Parámetro

Tipo

Descripción

x

double

La distancia para moverse a lo largo del eje x en milímetros.

y

double

La distancia para moverse a lo largo del eje y en milímetros.

z

double

La distancia para moverse a lo largo del eje z en milímetros.

waitForCompletion

bool

Opcional. true (predeterminado) espera hasta que se complete el movimiento antes de continuar. false inicia el movimiento e inmediatamente continúa a la siguiente línea de código.

Valor de devolución

Devuelve un valor booleano.

  • true — El brazo de 6 ejes alcanzó la posición solicitada.

  • false — El brazo de 6 ejes no alcanzó la posición solicitada, o waitForCompletion se estableció en false.

Ejemplo

// Move the 6-Axis Arm 100 millimeters along the y-axis
Arm.moveInc(0, 100, 0);

moveEndEffectorTo#

moveEndEffectorTo girar el efector final del brazo de 6 ejes a una orientación de guiñada, balanceo e inclinación especificada.

La orientación describe cómo se gira el efector final. La yaw gira alrededor del eje z, el roll gira alrededor del eje x y el pitch gira alrededor del eje y.

Función disponible

bool moveEndEffectorTo(
  double yaw,
  double roll = 0,
  double pitch = 0,
  bool   waitForCompletion = true
);

Parámetro

Tipo

Descripción

yaw

double

El ángulo de guiñada objetivo en grados.

roll

double

Opcional. El ángulo de balanceo objetivo en grados. El valor predeterminado es 0.

pitch

double

Opcional. El ángulo de paso objetivo en grados. El valor predeterminado es 0.

waitForCompletion

bool

Opcional. true (predeterminado) espera hasta que se complete el movimiento antes de continuar. false inicia el movimiento e inmediatamente continúa a la siguiente línea de código.

Valor de devolución

Devuelve un valor booleano.

  • true — El efector final alcanzó la orientación objetivo.

  • false — El efector final no alcanzó la orientación objetivo, o waitForCompletion se estableció en false.

Ejemplo

// Rotate the end effector to 90 degrees of roll
Arm.moveEndEffectorTo(0, 90, 0);

moveEndEffectorInc#

moveEndEffectorInc gira el efector final del brazo de 6 ejes en una cantidad especificada de guiñada, balanceo e inclinación desde su orientación actual.

Utilice esta función para girar en relación con la guiñada, el balanceo o el cabeceo actuales del efector final.

Función disponible

bool moveEndEffectorInc(
  double yaw,
  double roll = 0,
  double pitch = 0,
  bool   waitForCompletion = true
);

Parámetro

Tipo

Descripción

yaw

double

El cambio en la guiñada, en grados.

roll

double

Opcional. El cambio de rollo, en grados. El valor predeterminado es 0.

pitch

double

Opcional. El cambio de tono, en grados. El valor predeterminado es 0.

waitForCompletion

bool

Opcional. true (predeterminado) espera hasta que se complete el movimiento antes de continuar. false inicia el movimiento e inmediatamente continúa a la siguiente línea de código.

Valor de devolución

Devuelve un valor booleano.

  • true — El efector final alcanzó la orientación solicitada.

  • false — El efector final no alcanzó la orientación solicitada, o waitForCompletion se estableció en false.

Ejemplo

// Rotate the end effector -50 degrees in pitch
Arm.moveEndEffectorInc(0, 0, -50);

Mutadores#

setSpeed#

setSpeed establece la velocidad de movimiento utilizada por el brazo de 6 ejes.

Función disponible

void setSpeed(uint32_t speed);

Parámetro

Tipo

Descripción

speed

uint32_t

La velocidad a la que debe moverse el brazo de 6 ejes, en milímetros por segundo.

Valor de devolución

Esta función no devuelve un valor.

Ejemplo

// Set the 6-Axis Arm movement speed
Arm.setSpeed(100);

setEndEffectorType#

setEndEffectorType establece el tipo de efector final conectado al brazo de 6 ejes.

Cuando se cambia el tipo de efector final, el brazo de 6 ejes ajusta automáticamente su desplazamiento z para que coincida con la herramienta seleccionada.

Función disponible

bool setEndEffectorType(
  endEffectorType type,
  bool            waitForCompletion = true
);

Parámetro

Tipo

Descripción

type

endEffectorType

La herramienta unida al brazo de 6 ejes: magnet (herramienta de recogida de imanes) o pen (herramienta de soporte de lápiz).

waitForCompletion

bool

Opcional. true (predeterminado) espera hasta que se complete el cambio antes de continuar. false inicia el cambio e inmediatamente continúa a la siguiente línea de código.

Valor de devolución

Devuelve un valor booleano.

  • true — Se estableció el tipo solicitado.

  • false — El tipo solicitado no se estableció, o waitForCompletion se estableció en false.

Ejemplo

// Set the end effector type to the Magnet Pickup Tool
Arm.setEndEffectorType(magnet);

setEndEffectorMagnet#

setEndEffectorMagnet habilita o deshabilita la herramienta de recogida de imanes.

Función disponible

void setEndEffectorMagnet(bool enabled);

Parámetro

Tipo

Descripción

enabled

bool

true permite que el imán recoja y sostenga objetos. false desactiva el imán y deja caer cualquier objeto retenido.

Valor de devolución

Esta función no devuelve un valor.

Ejemplo

// Pick up objects and then drop them
Arm.setEndEffectorType(magnet);
Arm.setEndEffectorMagnet(true);
wait(2, seconds);
Arm.setEndEffectorMagnet(false);

setPenOffset#

setPenOffset establece el desplazamiento del eje z utilizado cuando la herramienta Portaplumas está conectada al brazo de 6 ejes.

Establezca el tipo de efector final en pen antes de usar esta función. Si la herramienta Portaplumas no está seleccionada, esta función no tiene efecto.

El desplazamiento de la pluma es la distancia desde la parte superior de la herramienta de soporte de pluma hasta la punta del marcador de borrado en seco. Un valor z positivo mueve el desplazamiento hacia arriba desde el punto de montaje de la herramienta.

Función disponible

void setPenOffset(double zOffset);

Parámetro

Tipo

Descripción

zOffset

double

El valor de desplazamiento de la pluma en milímetros.

Valor de devolución

Esta función no devuelve un valor.

Ejemplo

// Set the end effector type to the Pen Holder Tool and set the pen offset
Arm.setEndEffectorType(pen);
Arm.setPenOffset(25);

setControlStop#

setControlStop habilita o deshabilita la parada de control para el brazo de 6 ejes.

Cuando la parada de control está habilitada, el brazo de 6 ejes detiene inmediatamente el movimiento y evita más movimientos lineales o articulares.

Función disponible

void setControlStop(bool state = true);

Parámetro

Tipo

Descripción

state

bool

Opcional. true (predeterminado) habilita la parada de control y evita movimientos lineales o articulares adicionales. false deshabilita la parada de control.

Valor de devolución

Esta función no devuelve un valor.

Ejemplo

// Stop the 6-Axis Arm and prevent further movement
Arm.setControlStop();

setTimeout#

setTimeout establece el valor de tiempo de espera utilizado al mover el brazo de 6 ejes.

Si un movimiento no termina antes de que se alcance el tiempo de espera, el proyecto continúa a la siguiente línea de código.

Función disponible

void setTimeout(
  int32_t   timeout,
  timeUnits units
);

Parámetro

Tipo

Descripción

timeout

int32_t

El nuevo valor de tiempo de espera.

units

timeUnits

La unidad de tiempo: sec (segundos) o msec (milisegundos).

Valor de devolución

Esta función no devuelve un valor.

Ejemplo

// Set the 6-Axis Arm timeout to 2 seconds
Arm.setTimeout(2, sec);

Getters#

isDone#

isDone devuelve si el brazo de 6 ejes ha terminado de moverse.

Esta función es útil después de llamar a una función de movimiento waitForCompletion establecido en false.

Función disponible

bool isDone();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un valor booleano.

  • true — El brazo de 6 ejes ha terminado de moverse.

  • false — El brazo de 6 ejes todavía se está moviendo.

Ejemplo

// 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 devuelve si el brazo de 6 ejes se ha estrellado mientras se movía.

Cuando se detecta un choque, el brazo de 6 ejes detiene el movimiento del motor y puede parecer que se debilita. Esto reduce la tensión y ayuda a proteger los motores de daños accidentales.

Función disponible

bool isCrashed();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un valor booleano.

  • true — El brazo de 6 ejes se ha estrellado.

  • false — El brazo de 6 ejes no se ha estrellado.

Ejemplo

// 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 Signal Tower and Brain screen
    Brain.Screen.print("Crash Detected");
    SignalTower6.setColor(signaltower::green, signaltower::off);
    SignalTower6.setColor(signaltower::red, signaltower::on);
    break;
  }

  wait(5, msec);
}

getX#

getX devuelve la posición x actual del efector final en milímetros.

Utilice esta función para leer dónde se encuentra actualmente el efector final a lo largo del eje x.

Función disponible

float getX();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un float que representa la posición x del efector final en milímetros.

Ejemplo

// Print the current x position of the 6-Axis Arm
Brain.Screen.print(Arm.getX());

getY#

getY devuelve la posición y actual del efector final en milímetros.

Utilice esta función para leer dónde se encuentra actualmente el efector final a lo largo del eje y.

Función disponible

float getY();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un float que representa la posición y del efector final en milímetros.

Ejemplo

// Print the current y position of the 6-Axis Arm
Brain.Screen.print(Arm.getY());

getZ#

getZ devuelve la posición z actual del efector final en milímetros.

Utilice esta función para leer dónde se encuentra actualmente el efector final a lo largo del eje z.

Función disponible

float getZ();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un float que representa la posición z del efector final en milímetros.

Ejemplo

// Print the current z position of the 6-Axis Arm
Brain.Screen.print(Arm.getZ());

getYaw#

getYaw devuelve la guiñada actual del efector final en grados.

Función disponible

float getYaw();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un float que representa la guiñada actual del efector final en grados.

Ejemplo

// Print the current yaw of the end effector
Brain.Screen.print(Arm.getYaw());

getRoll#

getRoll devuelve el rollo actual del efector final en grados.

Función disponible

float getRoll();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un float que representa el rollo actual del efector final en grados.

Ejemplo

// Print the current roll of the end effector
Brain.Screen.print(Arm.getRoll());

getPitch#

getPitch devuelve el tono actual del efector final en grados.

Función disponible

float getPitch();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un float que representa el paso actual del efector final en grados.

Ejemplo

// Print the current pitch of the end effector
Brain.Screen.print(Arm.getPitch());

canArmReachTo#

canArmReachTo devuelve si el brazo de 6 ejes puede mover el efector final a una coordenada x, y y z especificada.

Utilice esta función para verificar una posición objetivo antes de usar moveTo.

Función disponible

bool canArmReachTo(
  double x,
  double y,
  double z
);

Parámetro

Tipo

Descripción

x

double

La coordenada x de la posición objetivo en milímetros.

y

double

La coordenada y de la posición objetivo en milímetros.

z

double

La coordenada z de la posición objetivo en milímetros.

Valor de devolución

Devuelve un valor booleano.

  • true — El brazo de 6 ejes puede alcanzar la posición solicitada.

  • false — El brazo de 6 ejes no puede alcanzar la posición solicitada.

Ejemplo

// 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 devuelve si el brazo de 6 ejes puede mover el efector final una distancia x, y y z especificada desde su posición actual.

Utilice esta función para comprobar un movimiento relativo antes de usar moveInc.

Función disponible

bool canArmReachInc(
  double x,
  double y,
  double z
);

Parámetro

Tipo

Descripción

x

double

La distancia para moverse a lo largo del eje x en milímetros.

y

double

La distancia para moverse a lo largo del eje y en milímetros.

z

double

La distancia para moverse a lo largo del eje z en milímetros.

Valor de devolución

Devuelve un valor booleano.

  • true — El brazo de 6 ejes puede realizar el movimiento solicitado.

  • false — El brazo de 6 ejes no puede realizar el movimiento solicitado.

Ejemplo

// 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#

canEndEffectorReachTo devuelve si el efector final puede girar a una orientación de guiñada, balanceo e inclinación especificada.

Utilice esta función para comprobar la orientación del objetivo antes de usar moveEndEffectorTo.

Función disponible

bool canEndEffectorReachTo(
  double yaw,
  double roll = 0,
  double pitch = 0
);

Parámetro

Tipo

Descripción

yaw

double

El ángulo de guiñada objetivo en grados.

roll

double

Opcional. El ángulo de balanceo objetivo en grados. El valor predeterminado es 0.

pitch

double

Opcional. El ángulo de paso objetivo en grados. El valor predeterminado es 0.

Valor de devolución

Devuelve un valor booleano.

  • true — El efector final puede alcanzar la orientación solicitada.

  • false — El efector final no puede alcanzar la orientación solicitada.

Ejemplo

// Rotate the end effector to 90 degrees of roll if possible
if (Arm.canEndEffectorReachTo(0, 90, 0)) {
  Arm.moveEndEffectorTo(0, 90, 0);
}

canEndEffectorReachInc#

canEndEffectorReachInc devuelve si el efector final puede girar una cantidad específica de guiñada, balanceo e inclinación desde su orientación actual.

Utilice esta función para comprobar un movimiento de orientación relativa antes de usar moveEndEffectorInc.

Función disponible

bool canEndEffectorReachInc(
  double yaw,
  double roll = 0,
  double pitch = 0
);

Parámetro

Tipo

Descripción

yaw

double

El cambio en la guiñada, en grados.

roll

double

Opcional. El cambio de rollo, en grados. El valor predeterminado es 0.

pitch

double

Opcional. El cambio de tono, en grados. El valor predeterminado es 0.

Valor de devolución

Devuelve un valor booleano.

  • true — El efector final puede hacer la rotación solicitada.

  • false — El efector final no puede realizar la rotación solicitada.

Ejemplo

// Increment the end effector by 10 degrees of pitch if possible
if (Arm.canEndEffectorReachInc(0, 0, 10)) {
  Arm.moveEndEffectorInc(0, 0, 10);
}

isConnected#

isConnected devuelve si el brazo de 6 ejes está conectado al cerebro EXP.

Esta es una función de compatibilidad que devuelve el mismo valor que installed.

Función disponible

bool isConnected();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un valor booleano.

  • true — El brazo de 6 ejes está conectado al cerebro EXP.

  • false — El brazo de 6 ejes no está conectado al cerebro EXP.

Ejemplo

// Print whether the 6-Axis Arm is connected
Brain.Screen.print(Arm.isConnected());

timestamp#

timestamp devuelve la marca de tiempo del último paquete de estado recibido del brazo de 6 ejes.

Función disponible

uint32_t timestamp();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve la marca de tiempo del último paquete de estado como uint32_t en milisegundos.

installed#

installed devuelve si el brazo de 6 ejes está conectado.

Función disponible

bool installed();

Parámetros

Esta función no tiene parámetros.

Valor de devolución

Devuelve un valor booleano.

  • true — El brazo de 6 ejes está conectado.

  • false — El brazo de 6 ejes no está conectado.

Devoluciones de llamada#

controlStopped#

controlStopped registra una función que se ejecuta cuando la parada de control está habilitada.

Función disponible

void controlStopped(void (* callback)(void));

Parámetro

Tipo

Descripción

callback

void (*)(void)

Una función que se ejecuta cuando la parada de control está habilitada.

Valor de devolución

Esta función no devuelve un valor.

Ejemplo

// Called when the 6-Axis Arm is control stopped
void onControlStopped() {
  Brain.Screen.print("Arm control stopped");
}

int main() {
  vexcodeInit();

  Arm.controlStopped(onControlStopped);
}

crashed#

crashed registra una función que se ejecuta cuando el brazo de 6 ejes se ha estrellado mientras se movía.

Cuando se detecta un choque, el brazo de 6 ejes detiene el movimiento del motor y puede parecer que se debilita. Esto reduce la tensión y ayuda a proteger los motores de daños accidentales.

Función disponible

void crashed(void (* callback)(void));

Parámetro

Tipo

Descripción

callback

void (*)(void)

Una función que se ejecuta cuando el brazo de 6 ejes se ha estrellado mientras se movía.

Valor de devolución

Esta función no devuelve un valor.

Ejemplo

// Called when the 6-Axis Arm crashes while moving
void onArmCrashed() {
  Brain.Screen.print("Crash detected");
  SignalTower6.setColor(signaltower::green, signaltower::off);
  SignalTower6.setColor(signaltower::red, signaltower::on);
}

int main() {
  vexcodeInit();

  Arm.crashed(onArmCrashed);
}