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 |
|---|---|---|
|
|
Opcional. A direção que devolve 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 Functionsdouble heading( rotationUnits units = degrees );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Unidade de medida:
|
Retorna um valor double que representa a direção atual do sensor nas unidades especificadas.
O valor do cabeçalho está envolvido entre 0 e 359,99 graus. Utilize
rotationpara aceder ao valor de rotação contínua.
// 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 Functionsdouble rotation( rotationUnits units = degrees );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Unidade de rotação:
|
Retorna um valor double que representa a rotação atual nas unidades especificadas.
O valor de rotação é contínuo e não se repete entre 0 e 359,99 graus. Utilize
headingpara aceder ao valor de sentido repetente.
// 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 Functionsvoid setHeading( double value,
rotationUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O valor da direção, em graus, a configurar para o sensor. Este valor pode variar de 0 a 359,99. |
|
|
The heading unit:
|
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 Functionsvoid setRotation( double value,
rotationUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O valor de rotação, em graus, a definir para o sensor. Pode ser um número inteiro ou decimal. |
|
|
Unidade de rotação:
|
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 Functionsvoid calibrate( );
Esta função não aceita qualquer parâmetro.
Return ValuesEsta função não devolve qualquer valor.
NotesO sensor deve permanecer imóvel durante o processo de calibração.
Utilize
isCalibratingpara 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 Functionsvoid resetHeading();
Esta função não recebe qualquer parâmetro.
Return ValuesEsta 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 Functionsvoid resetRotation();
Esta função não recebe qualquer parâmetro.
Return ValuesEsta função não devolve qualquer valor.
isCalibrating#
Retorna se o sensor inercial está a ser calibrado no momento.
Available Functionsbool isCalibrating();
Esta função não recebe qualquer parâmetro.
Return ValuesRetorna 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 Functionsvoid changed( void (* callback)(void) );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
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 |
Esta função não devolve qualquer valor.
ExamplesDefina 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 Functionsbool installed();
Esta função não recebe qualquer parâmetro.
Return ValuesRetorna 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.
double acceleration( axisType axis );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Eixos para medir a aceleração:
|
Devolve um valor do tipo double representando a aceleração ao longo do eixo especificado em G (unidades gravíticas).
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 Functionsdouble gyroRate( axisType axis,
velocityUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Eixos para voltar à taxa giroscópica:
|
|
|
Unidade de taxa giroscópica:
|
Retorna um valor double que representa a velocidade de rotação atual ao longo do eixo especificado nas unidades selecionadas.
// 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 Functionsdouble orientation(
orientationType type,
rotationUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Ângulo de orientação para o retorno:
|
|
|
Unidade de orientação:
|
Retorna um valor double que representa o ângulo de orientação seleccionado nas unidades especificadas.
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 Functionsvoid collision( void (* callback)(axisType, double, double, double) );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
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:
void. |
Esta função não devolve qualquer valor.
ExamplesDefina 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 Functionsvoid setTurnType( turnType dir );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A direção que devolve valores positivos:
|
Esta função não devolve qualquer valor.
NotesEsta definição afecta a forma como
headingerotationreportam valores positivos e negativos.A chamada desta função substitui o valor
direspecificado ao construir o objetoinertial.
getTurnType#
Retorna valores cujo sentido de inversão produz valores positivos.
Available FunctionsturnType getTurnType();
Esta função não recebe qualquer parâmetro.
Return ValuesRetorna um turnType indicando qual a direcção que produz valores positivos:
-
right— Clockwise rotation returns positive values. -
left— Counterclockwise rotation returns positive values.
Este valor é definido durante a construção do objeto inercial
inertialou chamandosetTurnType.