Inercial#
Introdução#
O robô de programação VEX AIM possui um sensor inercial integrado. Este sensor mede como o robô se move e gira.
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, o ângulo de guinada, o rolamento, a inclinação e a taxa de rotação do robô. O acelerómetro mede as mudanças de movimento, como aceleração, desaceleração ou paragem repentina durante uma colisão.
Os métodos inerciais podem ser utilizados para rastrear curvas, medir aceleração, detetar colisões, repor valores de direção ou rotação e calibrar o sensor.
Segue-se uma lista de todos os métodos:
Orientação — Obtenha e reponha a direção para a qual o robô está virado, a rodar ou a inclinar.
get_rotation— Retorna o quanto o robô rodou.get_heading— Devolve a direção para a qual o robô está virado, de 0 a 359,99 graus.get_yaw— Devolve o ângulo de guinada do robô.get_roll— Devolve o ângulo de rotação do robô.get_pitch— Devolve o ângulo de inclinação do robô.reset_rotation— Repõe a rotação atual do robô para 0 graus.reset_heading— Repõe a direção atual do robô a 0 graus.set_heading— Define a direção atual do robô para um novo valor de direção.
Crash — Detetar colisões.
crashed— Regista uma função para ser executada quando é detectada uma falha.set_crash_sensitivity— Define o quão sensível é a deteção de colisões aos impactos.
Movimento — Medir a aceleração e a velocidade de rotação.
get_acceleration— Retorna a rapidez com que o robô está a acelerar ou a desacelerar no eixo selecionado.get_turn_rate— Retorna a velocidade de rotação do robô no eixo selecionado.
Calibração — Gerir a calibração do sensor.
calibrate— Calibra o sensor inercial.is_calibrating— Retorna se o sensor inercial está actualmente a calibrar.
Orientação#
get_rotation#
A rotação indica o quanto o robô rodou, medida em graus. Ao contrário da direção, a rotação pode aumentar para além dos 359,99 graus ou diminuir abaixo dos 0 graus. No início de um projeto, o valor de rotação é definido como 0 graus. get_rotation devolve a rotação actual do robô como um número de ponto flutuante.
Virar para a direita aumenta a rotação, e virar para a esquerda diminui a rotação. 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.
Usage:
robot.inertial.get_rotation()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# Display the robot's rotation as it rotates
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
wait(50, MSEC)
get_heading#
A direção é a direção para a qual o robô está virado, medida em graus de 0 a 359,99. get_heading devolve a direção atual do robô como um número de ponto flutuante.
A direção inicial é de 0 graus. Se o robô rodar para além dos 359,99 graus, a direção volta a 0 graus.
Usage:
robot.inertial.get_heading()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# Turn right until the heading reaches 90 degrees
robot.turn(RIGHT)
while robot.inertial.get_heading() < 90:
wait(50, MSEC)
robot.stop_all_movement()
# Display the robot's heading as it is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Heading: {robot.inertial.get_heading()} degrees")
wait(50, MSEC)
get_yaw#
Yaw descreve a rotação do robô para a esquerda ou para a direita em torno do seu eixo vertical. get_yaw devolve o ângulo de guinada do robô no intervalo de -180,00 a 180,00 graus como um número de ponto flutuante.
A imagem abaixo utiliza setas para mostrar o sentido da rotação positiva para o eixo de guinada (yaw).
Usage:
robot.inertial.get_yaw()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# Display the robot's yaw angle as it is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_yaw())
wait(50, MSEC)
get_roll#
A função roll descreve a inclinação do robô de um lado para o outro. get_roll devolve o ângulo de rotação do robô no intervalo de -180,00 a 180,00 graus, como um valor float.
A imagem abaixo utiliza setas para mostrar o sentido da rotação positiva para o rolamento.
Usage:
robot.inertial.get_roll()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# Display the robot's roll angle as it is tilted by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_roll())
wait(50, MSEC)
get_pitch#
O parâmetro pitch descreve a inclinação do robô para a frente ou para trás. get_pitch devolve o ângulo de inclinação do robô no intervalo de -90,00 a 90,00 graus, como um valor float.
A imagem abaixo utiliza setas para mostrar o sentido da rotação positiva para o tom (pitch).
Usage:
robot.inertial.get_pitch()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# Display the robot's pitch angle as it is tilted by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_pitch())
wait(50, MSEC)
reset_rotation#
reset_rotation reinicia a rotação atual do robô para 0 graus.
Após a utilização deste método, o robô segue as curvas futuras a partir do novo valor de rotação de 0 graus.
Usage:
robot.inertial.reset_rotation()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# Reset the robot's rotation if it exceeds 180 degrees
while True:
if robot.inertial.get_rotation() >= 180:
robot.inertial.reset_rotation()
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
wait(50, MSEC)
reset_heading#
reset_heading reinicia a direção atual do robô para 0 graus.
Após a utilização deste método, a direção atual do robô passa a ser a nova direção de 0 graus.
Usage:
robot.inertial.reset_heading()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# Turn the robot around using a new 90 degree heading
robot.turn_to(90)
wait(1, SECONDS)
robot.inertial.reset_heading()
robot.turn_to(90)
set_heading#
A direção é a direção para a qual o robô está virado, medida em graus de 0 a 359,99. O comando set_heading altera a direção atual do robô para um novo valor de direção.
Por exemplo, se o robô se virou para a direita, definir a direção para 0 graus faz com que essa posição virada para a direita se torne os novos 0 graus. Assim, o robô pode seguir outras direções com base nesta nova orientação.
Usage:
robot.inertial.set_heading(heading)
Parâmetros |
Descrição |
|---|---|
|
O valor da direção, em graus, a definir para o robô. Este valor pode variar de 0 a 359,99. |
# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)
Queda#
crashed#
crashed regista uma função a ser chamada quando o robô deteta um impacto ou colisão súbita.
Utilização:
robot.inertial.crashed(callback, arg)
Parâmetros |
Descrição |
|---|---|
|
Uma função que está previamente definida para ser executada quando é detectada uma colisão. |
|
Opcional. Uma tupla contendo argumentos para passar para a função de callback. Consulte Utilizar funções com parâmetros para obter mais informações. |
# Define what happens when a crash occurs
def crash_detected():
# Stop all movement and indicate a crash occurred
robot.screen.print("Crash detected")
robot.stop_all_movement()
robot.inertial.crashed(crash_detected)
# Drive forward until crash
robot.move_at(0, 100)
set_crash_sensitivity#
O parâmetro set_crash_sensitivity ajusta a quantidade de aceleração súbita necessária para que o robô detete uma colisão.
Usage:
robot.inertial.set_crash_sensitivity(sensitivity)
Parâmetros |
Descrição |
|---|---|
|
Sensibilidade ao impacto:
|
def crashed_callback():
robot.stop_all_movement()
robot.sound.play(CRASH)
# system event handlers
robot.inertial.crashed(crashed_callback)
# add 15ms delay to make sure events are registered correctly.
wait(15, MSEC)
# Detect a crash at a slow velocity.
robot.set_move_velocity(35, PERCENT)
robot.inertial.set_crash_sensitivity(HIGH)
robot.move_at(0)
Movimento#
get_acceleration#
A aceleração indica a rapidez com que o robô está a acelerar ou a desacelerar. get_acceleration devolve a aceleração do robô no eixo seleccionado, de -4,00 G a 4,00 G, como um valor float.
G é uma unidade utilizada para medir a aceleração. 1 G é aproximadamente a aceleração que sente da gravidade enquanto está parado.
O valor pode ser positivo ou negativo, dependendo do sentido da aceleração no eixo selecionado. No AIM, as opções de eixo são nomeadas de acordo com as direções no robô: FORWARD, RIGHTWARDe DOWNWARD.

Utilização:
robot.inertial.get_acceleration(type)
Parâmetros |
Descrição |
|---|---|
|
Eixos para medir a aceleração:
|
# Display the acceleration as the robot begins to move
robot.screen.set_cursor(4,1)
sitting_accel = robot.inertial.get_acceleration(RIGHTWARD)
robot.screen.print(f"Resting: {sitting_accel:.2f}")
wait(0.5, SECONDS)
robot.screen.next_row()
robot.move_at(90, 100)
wait(0.1, SECONDS)
robot.screen.print(f"Startup: {robot.inertial.get_acceleration(RIGHTWARD):.2f}")
get_turn_rate#
A taxa de rotação é a velocidade com que o robô está a rodar. get_turn_rate devolve a taxa de rotação do robô em graus por segundo \(dps\) como um número de ponto flutuante, de -1000,00 a 1000,00 dps.
O valor pode ser positivo ou negativo, dependendo da direção de rotação do robô no eixo selecionado. A imagem abaixo utiliza setas para mostrar o sentido de rotação positivo para a inclinação (roll), rotação (pitch) e guinada (yaw).

Usage:
robot.inertial.get_turn_rate(axis)
Parâmetros |
Descrição |
|---|---|
|
Qual a orientação a devolver:
|
# Display the gyro rate as the robot is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_turn_rate(YAW))
wait(50, MSEC)
Calibração#
A calibração ajuda o sensor inercial a medir as curvas corretamente, medindo e compensando o ruído e a deriva do sensor durante um período de 2 segundos. Durante este tempo, o robô deve permanecer completamente imóvel sobre uma superfície estável. Os movimentos durante a calibração podem produzir resultados imprecisos.
Os robôs VEX tentam calibrar-se automaticamente ao arrancar, aguardando até que não detetem mais movimento. No entanto, se o robô estiver a ser transportado ou movimentado durante o arranque, o sensor poderá não calibrar corretamente ou apresentar uma calibração incorreta.
Se o seu projeto depende muito de uma direção precisa, ou se precisa de curvas consistentes e repetíveis, chamar calibrate no início do seu código pode ajudar. É uma boa prática exibir uma mensagem como “Calibrando…” no ecrã do robô durante a calibração e, em seguida, atualizá-la para “Calibração concluída” para o lembrar (e a qualquer outra pessoa que esteja a utilizar o robô) que deve permanecer imóvel durante esse período.
calibrate#
calibrate calibra o giroscópio. A calibração ajuda o sensor inercial a medir as curvas corretamente, medindo e compensando o ruído e a deriva do sensor durante um período de 2 segundos. Durante este tempo, o robô deve permanecer completamente imóvel sobre uma superfície estável. Os movimentos durante a calibração podem produzir resultados imprecisos.
Os robôs VEX tentam calibrar-se automaticamente ao arrancar, aguardando até que não detetem mais movimento. No entanto, se o robô estiver a ser transportado ou movimentado durante o arranque, o sensor poderá não calibrar corretamente ou apresentar uma calibração incorreta.
Usage:
robot.inertial.calibrate()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# Calibrate the gyro before moving
robot.inertial.calibrate()
robot.screen.show_emoji(THINKING)
wait(2, SECONDS)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)
is_calibrating#
is_calibrating devolve um valor booleano indicando se o sensor inercial está a ser calibrado.
True— O sensor inercial está a calibrar.False— O sensor inercial não está a calibrar.
Usage:
robot.inertial.is_calibrating()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# Move after the calibration is completed
robot.inertial.calibrate()
while robot.inertial.is_calibrating():
robot.screen.show_emoji(THINKING)
wait(50, MSEC)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)