Brazo CTE#
Introducción#
La clase arm proporciona control para el brazo de 6 ejes utilizado en la celda de trabajo CTE. En VEX V5 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.
El brazo de 6 ejes no está configurado como un dispositivo en VEXcode V5. Para usarlo en un proyecto VEX V5 C++, cree manualmente un objeto arm en el código con el puerto inteligente al que está conectado el brazo de 6 ejes.
Los ejemplos de esta página utilizan un brazo de 6 ejes construido manualmente 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 |
|---|---|---|
|
|
El puerto inteligente al que está conectado el brazo de 6 ejes, escrito como |
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 V5.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 |
|---|---|---|
|
|
La coordenada x de la posición objetivo en milímetros. |
|
|
La coordenada y de la posición objetivo en milímetros. |
|
|
La coordenada z de la posición objetivo en milímetros. |
|
|
Opcional. |
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, owaitForCompletionse estableció enfalse.
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 |
|---|---|---|
|
|
La distancia para moverse a lo largo del eje x en milímetros. |
|
|
La distancia para moverse a lo largo del eje y en milímetros. |
|
|
La distancia para moverse a lo largo del eje z en milímetros. |
|
|
Opcional. |
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, owaitForCompletionse estableció enfalse.
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 |
|---|---|---|
|
|
El ángulo de guiñada objetivo en grados. |
|
|
Opcional. El ángulo de balanceo objetivo en grados. El valor predeterminado es |
|
|
Opcional. El ángulo de paso objetivo en grados. El valor predeterminado es |
|
|
Opcional. |
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, owaitForCompletionse estableció enfalse.
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 |
|---|---|---|
|
|
El cambio en la guiñada, en grados. |
|
|
Opcional. El cambio de rollo, en grados. El valor predeterminado es |
|
|
Opcional. El cambio de tono, en grados. El valor predeterminado es |
|
|
Opcional. |
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, owaitForCompletionse estableció enfalse.
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 |
|---|---|---|
|
|
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 |
|---|---|---|
|
|
La herramienta unida al brazo de 6 ejes: |
|
|
Opcional. |
Valor de devolución
Devuelve un valor booleano.
true— Se estableció el tipo solicitado.false— El tipo solicitado no se estableció, owaitForCompletionse estableció enfalse.
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 |
|---|---|---|
|
|
|
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 |
|---|---|---|
|
|
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 |
|---|---|---|
|
|
Opcional. |
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 |
|---|---|---|
|
|
El nuevo valor de tiempo de espera. |
|
|
La unidad de tiempo: |
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 Brain screen
Brain.Screen.print("Crash Detected");
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 |
|---|---|---|
|
|
La coordenada x de la posición objetivo en milímetros. |
|
|
La coordenada y de la posición objetivo en milímetros. |
|
|
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 |
|---|---|---|
|
|
La distancia para moverse a lo largo del eje x en milímetros. |
|
|
La distancia para moverse a lo largo del eje y en milímetros. |
|
|
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 |
|---|---|---|
|
|
El ángulo de guiñada objetivo en grados. |
|
|
Opcional. El ángulo de balanceo objetivo en grados. El valor predeterminado es |
|
|
Opcional. El ángulo de paso objetivo en grados. El valor predeterminado es |
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 |
|---|---|---|
|
|
El cambio en la guiñada, en grados. |
|
|
Opcional. El cambio de rollo, en grados. El valor predeterminado es |
|
|
Opcional. El cambio de tono, en grados. El valor predeterminado es |
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 V5.
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 V5.false— El brazo de 6 ejes no está conectado al cerebro V5.
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 |
|---|---|---|
|
|
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() {
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 |
|---|---|---|
|
|
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");
}
int main() {
Arm.crashed(onArmCrashed);
}