Sensor inercial#

Introdução#

A classe inercial inertial é utilizada para controlar e aceder aos dados do sensor inercial integrado do cérebro IQ (2ª geração). Este sensor mede como o cérebro está a mover-se e a girar.

O sensor inercial utiliza duas partes para desempenhar esta função. O giroscópio mede a rotação, como a direção, a rotação, a taxa de rotação e a orientação. O acelerómetro mede as mudanças de movimento, como a aceleração ou a desaceleração ao longo dos eixos x, y e z.

Construtores de Classes#

inertial(
  turnType dir = turnType::right );

Destrutor de classes#

Destrói o objeto inercial inertial recursos associados.

~inertial();

Parâmetros#

Parâmetro

Tipo

Descrição

dir

turnType

Opcional. A direção que devolve valores positivos:

  • right (padrão) — As viragens à direita devolvem valores positivos.
  • left — As viragens à esquerda devolvem valores positivos.

Exemplos#

// Create the inertial instance
inertial myInertial = inertial(
    right);     // dir

Funções de membro#

A classe inertial inclui as seguintes funções membro:

  • heading — Retorna a direcção para a qual o sensor está a apontar.

  • rotation — Devolve o quanto o sensor rodou.

  • setHeading — Define a direção atual do sensor para um novo valor de direção.

  • setRotation — Define a rotação actual do sensor para um novo valor de rotação.

  • calibrate — Calibra o sensor inercial.

  • resetHeading — Repõe a direção atual do sensor para 0 graus.

  • resetRotation — Repõe a rotação actual do sensor para 0 graus.

  • isCalibrating — Retorna se o sensor inercial está actualmente a calibrar.

  • changed — Regista uma função de chamada de retorno que é executada quando o cabeçalho é alterado.

  • installed — Retorna se o sensor inercial está instalado.

  • acceleration — Devolve a rapidez com que o sensor está a acelerar ou a desacelerar no eixo selecionado.

  • gyroRate — Devolve a velocidade de rotação do sensor no veio seleccionado.

  • orientation — Devolve o ângulo de rotação, inclinação ou guinada do sensor inercial.

  • collision — Regista uma função de chamada de retorno que é executada quando é detectada uma colisão.

  • setTurnType — Define qual a direção da curva que devolve valores de direção positivos.

  • getTurnType — Retorna qual o sentido da curva que produz valores positivos.

Antes de chamar qualquer função membro inertial , deve ser criada uma instância inertial , como se mostra abaixo:

/* This constructor is required when using VS Code.
Inertial Sensor configuration is generated automatically
in VEXcode with the IQ (2nd gen) Brain. Replace the values
as needed. */

// Create the inertial instance
inertial myInertial = inertial();

heading#

A direção indicada pelo sensor é para onde está a apontar, medida em graus de 0 a 359,99. Esta função devolve a direção atual do sensor.

A direção inicial é de 0 graus. Se o sensor rodar para além dos 359,99 graus, a direção volta a 0 graus.

Available Functions
double heading( rotationUnits units = degrees );

Parameters

Parâmetro

Tipo

Descrição

units

rotationUnits

Unidade de medida:

  • deg / degrees (padrão) — graus
  • turns / rev — rotações

Return Values

Retorna um valor double que representa a direção atual do sensor nas unidades especificadas.

Notes
  • O valor do cabeçalho está envolvido entre 0 e 359,99 graus. Utilize rotation para aceder ao valor de rotação contínua.

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

rotation#

Retorna a rotação atual do sensor inercial.

A rotação indica o quanto o sensor rodou. Ao contrário da direção, a rotação pode aumentar para além dos 359,99 graus ou diminuir abaixo dos 0 graus. Por exemplo, duas voltas completas para a direita resultam numa rotação de 720 graus. Uma volta completa para a esquerda a partir dos 0 graus resulta numa rotação de -360 graus.

Available Functions
double rotation( rotationUnits units = degrees );

Parameters

Parâmetro

Tipo

Descrição

units

rotationUnits

Unidade de rotação:

  • deg / degrees (padrão) — graus
  • turns / rev — rotações

Return Values

Retorna um valor double que representa a rotação atual nas unidades especificadas.

Notes
  • O valor de rotação é contínuo e não se repete entre 0 e 359,99 graus. Utilize heading para aceder ao valor de sentido repetente.

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

setHeading#

A direção é a direção para a qual o sensor está a apontar, medida em graus de 0 a 359,99. Esta função altera a direção atual do sensor inercial para um novo valor de direção.

Por exemplo, se o sensor rodou para a direita, definir a direção para 0 graus faz com que esta posição virada para a direita se torne os novos 0 graus. Assim, o sensor pode seguir outras direções com base nessa nova direção.

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

Parameters

Parâmetro

Tipo

Descrição

value

double

O valor da direção, em graus, a configurar para o sensor. Este valor pode variar de 0 a 359,99.

units

rotationUnits

The heading unit:

  • deg / degrees — degrees
  • turns / rev — revolutions

Return Values

Esta função não devolve qualquer valor.

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

setRotation#

Define a rotação atual do sensor inercial para um valor especificado.

A rotação indica o quanto o sensor rodou. Ao contrário da direção, a rotação pode aumentar para além dos 359,99 graus ou diminuir para menos de 0 graus.

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

Parameters

Parâmetro

Tipo

Descrição

value

double

O valor de rotação, em graus, a definir para o sensor. Pode ser um número inteiro ou decimal.

units

rotationUnits

Unidade de rotação:

  • deg / degrees — graus
  • turns / rev — rotações

Return Values

Esta função não devolve qualquer valor.

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

calibrate#

Calibra o sensor inercial.

A calibração ajuda o sensor a medir as curvas corretamente. Mantenha o sensor imóvel durante a calibração. Se o sensor se mover durante a calibração, os valores de direção, rotação, velocidade giroscópica e orientação podem não ser medidos corretamente.

Available Functions
void calibrate( );

Parameters

Esta função não aceita qualquer parâmetro.

Return Values

Esta função não devolve qualquer valor.

Notes
  • O sensor deve permanecer imóvel durante o processo de calibração.

  • Utilize isCalibrating para determinar quando a calibração foi concluída.

resetHeading#

Repõe a direção atual do sensor inercial para 0 graus.

Após a utilização desta função, a direção atual do sensor passa a ser a nova direção de 0 graus.

Available Functions
void resetHeading();

Parameters

Esta função não recebe qualquer parâmetro.

Return Values

Esta função não devolve qualquer valor.

resetRotation#

Repõe a rotação atual do sensor inercial para 0 graus.

Após a utilização desta função, o sensor acompanha as rotações futuras a partir do novo valor de rotação de 0 graus.

Available Functions
void resetRotation();

Parameters

Esta função não recebe qualquer parâmetro.

Return Values

Esta função não devolve qualquer valor.

isCalibrating#

Retorna se o sensor inercial está a ser calibrado no momento.

Available Functions
bool isCalibrating();

Parameters

Esta função não recebe qualquer parâmetro.

Return Values

Retorna um valor booleano indicando se o sensor inercial está a ser calibrado:

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

changed#

Regista uma função de retorno de chamada que é executada quando o valor de direção do sensor inercial é alterado.

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

Parameters

Parâmetro

Tipo

Descrição

callback

void (*)(void)

Um ponteiro para uma função que será chamada quando o valor do cabeçalho mudar. A função não deve receber parâmetros e devolver void

Return Values

Esta função não devolve qualquer valor.

Examples

Defina a função de callback (fora de int main())

// Display the heading 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());
}

Registe o callback dentro de int main()

int main() {
  // Run onHeadingChanged when the Inertial Sensor's heading value changes.
  myInertial.changed(onHeadingChanged);
}

installed#

Retorna se o sensor inercial está instalado e ligado.

Available Functions
bool installed();

Parameters

Esta função não recebe qualquer parâmetro.

Return Values

Retorna um valor booleano indicando se o sensor inercial está instalado e ligado:

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

acceleration#

A aceleração indica a rapidez com que o sensor acelera ou desacelera. Esta função devolve a aceleração do sensor inercial no veio selecionado, de -4,0 G a 4,0 G.

A unidade G representa aproximadamente a aceleração que sente devido à gravidade quando está parado. O valor pode ser positivo ou negativo, dependendo do sentido da aceleração no eixo selecionado.

Available Functions
double acceleration( axisType axis );

Parameters

Parâmetro

Tipo

Descrição

axis

axisType

Eixos para medir a aceleração:

  • xaxis
  • yaxis
  • zaxis

Return Values

Devolve um valor do tipo double representando a aceleração ao longo do eixo especificado em G (unidades gravíticas).

Notes
  • Os valores de aceleração são reportados em unidades de G.

gyroRate#

A taxa giroscópica indica a velocidade de rotação do sensor inercial. Esta função devolve a velocidade de rotação atual do sensor inercial no veio selecionado.

O valor pode ser positivo ou negativo, dependendo da direção em que o sensor está a rodar nesse eixo.

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

Parameters

Parâmetro

Tipo

Descrição

axis

axisType

Eixos para voltar à taxa giroscópica:

  • xaxis
  • yaxis
  • zaxis

units

velocityUnits

Unidade de taxa giroscópica:

  • dps — graus por segundo
  • rpm — rotações por minuto

Return Values

Retorna um valor double que representa a velocidade de rotação atual ao longo do eixo especificado nas unidades selecionadas.

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#

A orientação é o ângulo atual do sensor inercial num eixo de rotação selecionado. Esta função devolve a orientação atual do sensor inercial ao eixo especificado.

Os termos “roll”, “pitch” e “yaw” descrevem diferentes formas pelas quais o sensor pode inclinar ou rodar.

Available Functions
double orientation(
  orientationType type,
  rotationUnits   units );

Parameters

Parâmetro

Tipo

Descrição

type

orientationType

Ângulo de orientação para o retorno:

  • pitch
  • roll
  • yaw

units

rotationUnits

Unidade de orientação:

  • deg / degrees — graus
  • turns / rev — rotações

Return Values

Retorna um valor double que representa o ângulo de orientação seleccionado nas 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(roll, deg);
  Brain.Screen.print("%f", orient);
  wait(0.1, seconds);
}

collision#

Regista uma função de retorno de chamada que é executada quando o sensor inercial deteta um impacto ou colisão repentina.

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

Parameters

Parâmetro

Tipo

Descrição

callback

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

Um ponteiro para uma função que será chamada quando for detectada uma colisão. A função de retorno de chamada deve aceitar os seguintes parâmetros:

  • axisType — O eixo no qual foi detetada a colisão.
  • Valores de aceleração no momento do impacto, por ordem:
    • double — Aceleração ao longo do eixo x (em G).
    • double — Aceleração ao longo do eixo dos y (em G).
    • double — Aceleração ao longo do eixo z (em G).
A função deve retornar void.

Return Values

Esta função não devolve qualquer valor.

Examples

Defina a função de callback (fora de int main())

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

Registe o callback dentro de int main()

int main() {
  // Run onCollision when the Inertial Sensor detects a collision.
  myInertial.collision(onCollision);
}

setTurnType#

Os conjuntos que invertem a direção devolvem valores positivos.

Available Functions
void setTurnType( turnType dir );

Parameters

Parâmetro

Tipo

Descrição

dir

turnType

A direção que devolve valores positivos:

  • right
  • left

Return Values

Esta função não devolve qualquer valor.

Notes

getTurnType#

Retorna valores cujo sentido de inversão produz valores positivos.

Available Functions
turnType getTurnType();

Parameters

Esta função não recebe qualquer parâmetro.

Return Values

Retorna um turnType indicando qual a direcção que produz valores positivos:

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