Sensor inercial#

Introducción#

La clase inertial se utiliza para controlar y acceder a los datos de un sensor inercial EXP. EXP puede usar el sensor inercial integrado del sistema o un sensor inercial externo conectado a un puerto inteligente.

Un sensor inercial mide cómo se mueve y gira el robot. El giroscopio mide el giro, como el rumbo, la rotación, la velocidad y la orientación del giroscopio. El acelerómetro mide los cambios en el movimiento, como la aceleración o la desaceleración a lo largo de los ejes x, y y z.

Constructores de clase#

inertial(
    int32_t  index,
    turnType dir = turnType::right );

Destructor de clase#

Destruye el objeto inercial inertial y libera los recursos asociados.

~inertial();

Parámetros#

Parámetro

Tipo

Descripción

index

int32_t

Opcional. El puerto inteligente al que está conectado un sensor inercial externo, escrito como PORTx, donde x es el número de puerto (por ejemplo, PORT1). No incluya este parámetro cuando utilice el sensor de inercia incorporado en el cerebro.

dir

turnType

Opcional. La dirección que devuelve valores positivos:

  • right (predeterminado) — Los giros a la derecha devuelven valores positivos.
  • left — Los giros a la izquierda devuelven valores positivos.

Ejemplos#

// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();

// Use an external Inertial Sensor connected to Port 1.
inertial Inertial1 = inertial(PORT1);

Funciones de los miembros#

La clase inertial incluye las siguientes funciones miembro:

  • heading — Devuelve la dirección en la que mira el sensor.

  • rotation — Devuelve hasta dónde ha girado el sensor.

  • setHeading — Establece el rumbo actual del sensor en un nuevo valor de rumbo.

  • setRotation: establece la rotación actual del sensor en un nuevo valor de rotación.

  • calibrate — Calibra el sensor inercial.

  • resetHeading — Restablece el rumbo actual del sensor a 0 grados.

  • resetRotation — Restablece la rotación actual del sensor a 0 grados.

  • isCalibrating — Devuelve si el sensor inercial se está calibrando actualmente.

  • changed — Registra una función que se llamará cuando cambie el encabezado.

  • installed — Devuelve si el sensor inercial está instalado.

  • acceleration: devuelve la rapidez con la que el sensor se acelera o ralentiza en el eje seleccionado.

  • gyroRate — Devuelve la velocidad de rotación del sensor en el eje seleccionado.

  • orientation — Devuelve el ángulo de balanceo, cabeceo o guiñada del sensor de inercia.

  • collision — Registra una función para que se ejecute cuando se detecta una colisión.

  • setTurnType — Establece la dirección de giro que devuelve valores positivos.

  • getTurnType — Devoluciones cuya dirección de giro produce valores positivos.

Antes de llamar a cualquier función miembro inertial , se debe crear una instancia inertial , como se muestra a continuación:

/* This constructor is required when using VS Code.
Inertial Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();

heading#

Devuelve el rumbo actual del sensor inercial.

Un rumbo es la dirección hacia la que mira el sensor, medida en grados de 0 a 359,99. Si el sensor gira más de 359,99 grados, el rumbo vuelve a 0 grados.

Available Functions
double heading( rotationUnits units = degrees );

Parameters

Parámetro

Tipo

Descripción

units

rotationUnits

La unidad de rumbo:

  • deg / degrees (predeterminado) — grados
  • turns / rev — revoluciones

Return Values

Devuelve un double que representa el rumbo actual del sensor en las unidades especificadas.

Notes
  • El valor del encabezado se ajusta entre 0 y 359,99 grados. Utilice rotation para acceder al valor de rotación continua.

Examples
// Turn, then show the current heading
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.heading(degrees));

rotation#

Devuelve la rotación actual del sensor inercial.

La rotación es cuánto ha girado el sensor. A diferencia del rumbo, la rotación puede aumentar más de 359,99 grados o disminuir por debajo de 0 grados. Por ejemplo, hacer dos giros completos a la derecha devuelve una rotación de 720 grados. Girar una vuelta completa a la izquierda desde 0 grados devuelve una rotación de -360 grados.

Available Functions
double rotation( rotationUnits units = degrees );

Parameters

Parámetro

Tipo

Descripción

units

rotationUnits

La unidad de rotación:

  • deg / degrees (predeterminado) — grados
  • turns / rev — revoluciones

Return Values

Devuelve un double que representa la rotación actual en las unidades especificadas.

Notes
  • El valor de rotación es continuo y no se envuelve entre 0 y 359,99 grados. Utilice heading para acceder al valor de encabezado ajustado.

Examples
// Turn, then show the current rotation
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.rotation(degrees));

setHeading#

Un rumbo es la dirección hacia la que mira el sensor, medida en grados de 0 a 359,99. Esta función cambia el rumbo actual del sensor inercial a un nuevo valor de rumbo.

Por ejemplo, si el sensor ha girado hacia la derecha, establecer el rumbo en 0 grados hace que esa posición orientada hacia la derecha sea de los nuevos 0 grados. Luego, el sensor puede rastrear otros encabezados en función de esa nueva dirección.

Available Functions
void setHeading( double value, rotationUnits units );

Parameters

Parámetro

Tipo

Descripción

value

double

El valor de rumbo, en grados, a establecer para el sensor. Este puede ser un valor de 0 a 359,99.

units

rotationUnits

La unidad de rumbo:

  • deg / degrees — grados
  • turns / rev — revoluciones

Return Values

Esta función no devuelve un valor.

Examples
// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);

setRotation#

La rotación es cuánto ha girado el sensor, medida en grados. A diferencia del rumbo, la rotación puede aumentar más de 359,99 grados o disminuir por debajo de 0 grados. Al comienzo de un proyecto, el valor de rotación se establece en 0 grados. Esta función cambia la rotación actual del sensor inercial a un nuevo valor.

Por ejemplo, si el sensor ha realizado dos giros completos a la derecha, su valor de rotación será de 720 grados. Ajustar la rotación a 0 grados restablecerá esa rotación de 720 a 0 grados. Luego, el sensor puede rastrear las rotaciones en función de ese nuevo valor.

Available Functions
void setRotation( double value, rotationUnits units );

Parameters

Parámetro

Tipo

Descripción

value

double

El valor de rotación, en grados, a establecer para el sensor. Esto puede ser un número entero o un decimal.

units

rotationUnits

La unidad de rotación:

  • deg / degrees — grados
  • turns / rev — revoluciones

Return Values

Esta función no devuelve un valor.

Examples
// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);

calibrate#

Calibra el sensor inercial.

La calibración ayuda al sensor a medir los giros correctamente. Mantenga el sensor quieto durante la calibración. Si el sensor se mueve durante la calibración, es posible que los valores de rumbo, rotación, velocidad de giro y orientación no se midan correctamente.

Available Functions
void calibrate( );

Parameters

Esta función no acepta ningún parámetro.

Return Values

Esta función no devuelve un valor.

Notes
  • El sensor debe permanecer estacionario mientras la calibración está en curso.

  • Utilice isCalibrating para determinar cuándo se ha completado la calibración.

resetHeading#

Restablece el rumbo actual del sensor de inercia a 0 grados.

Después de utilizar esta función, la dirección actual del sensor se convierte en el nuevo rumbo de 0 grados.

Available Functions
void resetHeading();

Parameters

Esta función no toma ningún parámetro.

Return Values

Esta función no devuelve un valor.

resetRotation#

Restablece la rotación actual del sensor de inercia a 0 grados.

Después de usar esta función, el sensor rastrea los giros futuros desde el nuevo valor de rotación de 0 grados.

Available Functions
void resetRotation();

Parameters

Esta función no toma ningún parámetro.

Return Values

Esta función no devuelve un valor.

isCalibrating#

Devuelve si el sensor inercial se está calibrando actualmente.

Available Functions
bool isCalibrating();

Parameters

Esta función no toma ningún parámetro.

Return Values

Devuelve un booleano que indica si el sensor inercial se está calibrando:

  • true — The sensor is currently calibrating.
  • false — The sensor is not currently calibrating.

changed#

Registra una función de devolución de llamada que se ejecuta cuando cambia el valor de encabezado del sensor inercial.

Available Functions
void changed( void (* callback)(void) );

Parameters

Parámetro

Tipo

Descripción

callback

void (*)(void)

Un puntero a una función que se llamará cuando cambie el valor del encabezado. La función no debe tomar parámetros y devolver void.

Return Values

Esta función no devuelve un valor.

Examples

Defina la función de devolución de llamada (fuera de int main())

// Called when the inertial sensor's heading value changes
void onHeadingChanged() {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Heading: %.2f", myInertial.heading());
}

Registrar la devolución de llamada dentro de int main()

/* vexcodeInit() is only required when using VEXcode.
Remove vexcodeInit() if compiling in VS Code. */
int main() {

  // Turn the robot by hand briefly
  // to change the robot's heading
  myInertial.changed(onHeadingChanged);
}

installed#

Devuelve si el sensor de inercia está instalado y conectado.

Available Functions
bool installed();

Parameters

Esta función no toma ningún parámetro.

Return Values

Devuelve un booleano que indica si el sensor inercial está instalado y conectado:

  • true — The sensor is connected and responding.
  • false — The sensor is not connected or not detected.

acceleration#

La aceleración es la rapidez con la que el sensor se acelera o ralentiza. Esta función devuelve la aceleración del sensor inercial en el eje seleccionado, de -4,0 G a 4,0 G.

Una G es una unidad utilizada para medir la aceleración. 1 G se refiere a la aceleración que sientes por la gravedad mientras estás sentado quieto. El valor puede ser positivo o negativo dependiendo de la dirección de aceleración en el eje seleccionado.

Available Functions
double acceleration( axisType axis );

Parameters

Parámetro

Tipo

Descripción

axis

axisType

El eje para medir la aceleración en:

  • xaxis
  • yaxis
  • zaxis

Return Values

Devuelve un double que representa la aceleración a lo largo del eje especificado en G (unidades gravitacionales).

Notes
  • Los valores de aceleración se informan en unidades de G G.

gyroRate#

La velocidad del giroscopio es la velocidad a la que gira el sensor inercial. Esta función devuelve la velocidad de rotación actual del sensor inercial en el eje seleccionado.

El valor puede ser positivo o negativo dependiendo de la dirección en la que gire el sensor en ese eje.

Available Functions
double gyroRate( axisType axis, velocityUnits units );

Parameters

Parámetro

Tipo

Descripción

axis

axisType

El eje para devolver la velocidad del giroscopio desde:

  • xaxis
  • yaxis
  • zaxis

units

velocityUnits

La unidad de velocidad del giroscopio:

  • dps — grados por segundo
  • rpm — revoluciones por minuto

Return Values

Devuelve un double que representa la velocidad de rotación actual a lo largo del eje especificado en las unidades seleccionadas.

Examples
// Display the rate of change of rotation while turning in dps
Drivetrain.turn(right);
wait(1, seconds);

Brain.Screen.print(myInertial.gyroRate(zaxis, dps));

Drivetrain.stop();

orientation#

La orientación es el ángulo actual del sensor inercial en un eje seleccionado. Esta función devuelve la orientación del Sensor Inercial, de -180.00 a 180.00 grados.

El eje x, y o z seleccionado corresponde a uno de los ejes de orientación del sensor.

Available Functions
double orientation(
  axisType      axis,
  rotationUnits units );

Parameters

Parámetro

Tipo

Descripción

axis

axisType

El eje para el que se devuelve la orientación:

  • xaxis
  • yaxis
  • zaxis

units

rotationUnits

La unidad de rotación:

  • deg / degrees — grados
  • turns / rev — revoluciones

Return Values

Devuelve un double que representa el ángulo de orientación seleccionado en las unidades especificadas.

Examples
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1,1);
  // Show the Inertial Sensor's orientation value
  // for roll in degrees
  double orient = myInertial.orientation(xaxis, deg);
  Brain.Screen.print("%f", orient);
  wait(0.1, seconds);
}

collision#

Registra una función de devolución de llamada que se ejecuta cuando el sensor inercial detecta un impacto o colisión repentina.

Available Functions
void collision( void (* callback)(axisType, double, double, double) );

Parameters

Parámetro

Tipo

Descripción

callback

void (*)(axisType, double, double, double)

Un puntero a una función que se llamará cuando se detecte una colisión. La función de devolución de llamada debe aceptar los siguientes parámetros

  • axisType axisType — El eje en el que se detectó la colisión. Valores de
  • aceleración en el momento del impacto, en orden:
    • double — Aceleración a lo largo del eje x (en G).
    • double — Aceleración a lo largo del eje y (en G).
    • double — Aceleración a lo largo del eje z (en G).
La función debe devolver void.

Return Values

Esta función no devuelve un valor.

Examples

Defina la función de devolución de llamada (fuera de int main())

// Called when the Inertial Sensor detects a collision
void onCollision(axisType axis, double x, double y, double z) {
  Brain.Screen.print("Collision detected!");
}

Registrar la devolución de llamada dentro de int main()

/* vexcodeInit() is only required when using VEXcode.
Remove vexcodeInit() if compiling in VS Code. */
int main() {

  // Firmly move the robot by hand briefly to simulate
  // a collision and call the onCollision function
  myInertial.collision(onCollision);
}

setTurnType#

Conjuntos cuya dirección de giro devuelve valores positivos.

Available Functions
void setTurnType( turnType dir );

Parameters

Parámetro

Tipo

Descripción

dir

turnType

La dirección que devuelve valores positivos:

  • right
  • left

Return Values

Esta función no devuelve un valor.

Notes

getTurnType#

Los retornos cuya dirección de giro produce valores positivos.

Available Functions
turnType getTurnType();

Parameters

Esta función no toma ningún parámetro.

Return Values

Devuelve un turnType indica qué dirección produce valores positivos:

  • right — Clockwise rotation returns positive values.
  • left — Counterclockwise rotation returns positive values.
Notes