Inercial#

Introdução#

O IQ (2ª geração) Cérebro inclui um sensor inercial integrado. Este sensor mede como o cérebro se está a mover e a rodar.

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.

Esta página utiliza brain_inertial como exemplo de um nome do sensor inercial. Substitua-o pelo nome que configurou, se necessário.

Segue-se uma lista de todos os métodos disponíveis:

Orientação — Leia e controle a direção, a rotação e a calibração do sensor.

  • heading — Devolve a direção para a qual o sensor está a apontar, de 0 a 359,99 graus.

  • rotation — Devolve o quanto o sensor rodou.

  • calibrate — Calibra o sensor inercial.

  • set_heading — Define o rumo actual do sensor inercial para um novo valor de rumo.

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

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

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

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

  • changed — Regista uma função a ser executada quando a direção do sensor inercial muda.

Movimento — Medir a aceleração, a velocidade de rotação e a inclinação.

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

  • gyro_rate — Retorna a velocidade de rotação do sensor no veio seleccionado.

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

Construtores — Inicializa e configura manualmente um sensor inercial.

Orientação#

heading#

A direção indica para onde o sensor está a apontar, medida em graus de 0 a 359,99. O valor heading 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.

Usage:
brain_inertial.heading(units)

Parâmetros

Descrição

units

Opcional. Unidade de direção: DEGREES (padrão) ou TURNS

# Display the heading after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print(brain_inertial.heading())

rotation#

A rotação indica o quanto o sensor rodou, medida em graus. Ao contrário da direção, a rotação pode ultrapassar os 359,99 graus ou diminuir para menos de 0 graus. No início de um projeto, o valor de rotação é definido como 0 graus. O comando rotation devolve a rotação actual do sensor inercial.

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:
brain_inertial.rotation(units)

Parâmetros

Descrição

units

Opcional. Unidade de rotação: DEGREES (padrão) ou TURNS

# Display the rotation value after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print(brain_inertial.rotation())

calibrate#

calibrate calibra o Sensor Inercial. Todas as linhas subsequentes aguardarão a conclusão da calibração antes de serem executadas. A calibração ajuda o sensor a medir as curvas corretamente, medindo e compensando o ruído e a deriva do sensor durante um período especificado. Durante este tempo, o Cérebro deve permanecer completamente imóvel numa superfície estável. Os movimentos durante a calibração podem produzir resultados imprecisos.

O diagrama do cérebro do QI com o ecrã inclinado para a direita, com os eixos x, y e z representados por setas que partem do centro do ecrã e se estendem para fora. Uma seta vermelha com a etiqueta x aponta para a direita, uma seta verde com a etiqueta y estende-se para a frente e uma seta azul com a etiqueta z aponta para baixo.A mesma imagem da anterior, agora com o ecrã do cérebro inclinado para a esquerda e as setas x, y e z a manterem a sua orientação.A mesma imagem da anterior, agora com o ecrã do cérebro virado para cima, como se estivesse plano sobre uma superfície. A orientação x, y, z é a mesma.

O VEX Brain tenta calibrar automaticamente o sensor inercial integrado no início de cada projeto. No entanto, se o robô estiver a ser transportado ou movimentado durante o início do projeto, o sensor poderá não calibrar corretamente ou apresentar uma calibração incorreta.

Usage:
brain_inertial.calibrate()

Parâmetro

Descrição

Este método não tem parâmetros.

# Start calibration
brain_inertial.calibrate()
# Print after calibration
while brain_inertial.is_calibrating():
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Inertial Sensor")
    brain.screen.next_row()
    brain.screen.print("Calibrating")
    wait(50, MSEC)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")

set_heading#

A direção é a direção para a qual o sensor está a apontar, medida em graus de 0 a 359,99. set_heading() 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.

Usage:
brain_inertial.set_heading(value, units)

Parâmetros

Descrição

value

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

units

Opcional. Unidade de direção: DEGREES (padrão) ou TURNS

# Turn the robot around
brain_inertial.set_heading(180)
drivetrain.turn_to_heading(0)

set_rotation#

A rotação indica o quanto o sensor 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. set_rotation() altera a rotação actual do sensor inercial para um novo valor.

Por exemplo, se o sensor tiver dado duas voltas completas para a direita, o seu valor de rotação será de 720 graus. Definir a rotação para 0 graus irá repor este valor de 720 para 0 graus. Assim, o sensor poderá rastrear rotações com base neste novo valor.

Usage:
brain_inertial.set_rotation(value, units)

Parâmetros

Descrição

value

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

units

Opcional. Unidade de rotação: DEGREES (padrão) ou TURNS

# Turn the robot around
brain_inertial.set_rotation(-180)
drivetrain.turn_to_rotation(0)

is_calibrating#

is_calibrating retorna se o sensor inercial está actualmente em processo de calibração.

  • True — O sensor inercial está a calibrar.

  • False — O sensor inercial não está a calibrar.

Usage:
brain_inertial.is_calibrating()

Parâmetro

Descrição

Este método não tem parâmetros.

# Start calibration
brain_inertial.calibrate()
# Print while waiting for calibration
while brain_inertial.is_calibrating():
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Inertial Sensor")
    brain.screen.next_row()
    brain.screen.print("Calibrating")
    wait(50, MSEC)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")

reset_heading#

reset_heading reinicia a direção atual do sensor inercial para 0 graus.

Após a utilização deste método, a direção atual do sensor passa a ser a nova direção de 0 graus.

Usage:
brain_inertial.reset_heading()

Parâmetros

Descrição

Este método não tem parâmetros.

# Turn the robot before and after resetting the heading
drivetrain.turn_to_heading(90, DEGREES)
wait(0.5, SECONDS)
brain_inertial.reset_heading()
drivetrain.turn_to_heading(90, DEGREES)

reset_rotation#

reset_rotation reinicia a rotação atual do sensor inercial para 0 graus.

Após a utilização deste método, o sensor segue as curvas futuras a partir do novo valor de rotação de 0 graus.

Usage:
brain_inertial.reset_rotation()

Parâmetros

Descrição

Este método não tem parâmetros.

# Turn the robot before and after resetting the rotation
drivetrain.turn_to_rotation(-90, DEGREES)
wait(0.5, SECONDS)
brain_inertial.reset_rotation()
drivetrain.turn_to_rotation(-90, DEGREES)

changed#

changed regista uma função a ser chamada quando a direção do sensor inercial muda.

Usage:
brain_inertial.changed(callback, arg)

Parâmetros

Descrição

callback

Uma função que é executada quando a direção do sensor inercial muda.

arg

Opcional. Uma tupla de argumentos a serem passados ​​à função de callback.

def heading_changed():
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_screen()
    brain.screen.print("my heading ")
    brain.screen.next_row()
    brain.screen.print("has changed!")
    wait(0.1, SECONDS)
# Call the function when the inertial heading is changed
wait(1, SECONDS)
drivetrain.turn_for(RIGHT, 90, DEGREES, wait=False)
brain_inertial.changed(heading_changed)
wait(15, MSEC)

Movimento#

acceleration#

A aceleração indica a rapidez com que o sensor está a acelerar ou a desacelerar. O valor acceleration devolve a aceleração do sensor inercial no eixo selecionado, de -4,0 G a 4,0 G, como um número de ponto flutuante.

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. As opções de eixo são XAXIS, YAXISe ZAXIS.

Usage:
brain_inertial.acceleration(axis)

Parâmetros

Descrição

eixo

Eixos para medir a aceleração:

  • XAXIS
  • YAXIS
  • ZAXIS

# Display acceleration after moving
vexcode_brain_precision = 2
drivetrain.set_drive_velocity(100, PERCENT)
brain.screen.print("Resting: ")
brain.screen.next_row()
brain.screen.print(brain_inertial.acceleration(XAXIS))
brain.screen.next_row()
wait(1, SECONDS)
drivetrain.drive_for(FORWARD, 500, MM, wait=False)
wait(0.01, SECONDS)
brain.screen.print("Startup: ")
brain.screen.next_row()
brain.screen.print(brain_inertial.acceleration(XAXIS))

gyro_rate#

A taxa de rotação (gyro rate) indica a velocidade de rotação do sensor inercial. O valor gyro_rate para gyro_rate devolve a velocidade de rotação atual do sensor inercial no eixo selecionado.

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

Usage:
brain_inertial.gyro_rate(axis, units)

Parâmetros

Descrição

axis

Eixo de retorno da taxa giroscópica:

  • XAXIS
  • YAXIS
  • ZAXIS

units

Opcional. Unidade de taxa giroscópica:

  • DPS (padrão) — graus por segundo
  • RPM — rotações por minuto
  • PERCENT

# Display the z-axis gyro rate
drivetrain.turn(RIGHT)
wait(1, SECONDS)
brain.screen.print(brain_inertial.gyro_rate(ZAXIS, RPM))
drivetrain.stop()

orientation#

A orientação é o ângulo atual do sensor inercial num eixo de rotação selecionado. A orientação orientation de rotação, inclinação ou guinada do sensor inercial.

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

Usage:
brain_inertial.orientation(axis, units)

Parâmetros

Descrição

axis

Ângulo de orientação para o retorno:

  • ROLL
  • PITCH
  • YAW

units

Opcional. Unidade de orientação: DEGREES (padrão) ou TURNS

# Display the roll, pitch, and yaw of the Brain as it
# is rotated by hand
while True:
    brain.screen.clear_screen()
    brain.screen.print(brain_inertial.orientation(OrientationType.ROLL))
    brain.screen.next_row()
    brain.screen.print(brain_inertial.orientation(OrientationType.PITCH))
    brain.screen.next_row()
    brain.screen.print(brain_inertial.orientation(OrientationType.YAW))
    brain.screen.next_row()
    brain.screen.set_cursor(1, 1)
    wait(0.1, SECONDS)

Construtores#

Os construtores são utilizados para criar manualmente objetos Inertial , como quando se configura um sensor inercial fora do VEXcode.

Inertial#

Inertial cria um sensor inercial.

Usage:
Inertial(smartport)

Parâmetro

Descrição

smartport

Opcional. Se utilizar o sensor inercial integrado do Brain IQ (2ª geração), não é necessária uma porta inteligente. Se ligar um sensor inercial externo, especifique a porta inteligente à qual o sensor inercial está ligado, escrita como PORTx, em que x é o número da porta.

# Create a new object "brain_inertial" with the
# Inertial class
brain_inertial = Inertial()
left_drive_smart = Motor(Ports.PORT1, 1.0, False)
right_drive_smart = Motor(Ports.PORT6, 1.0, True)

drivetrain = SmartDrive(left_drive_smart, right_drive_smart, brain_inertial, 200)

brain_inertial.set_heading(180)
drivetrain.turn_to_heading(0)