Inertiel#

Introduction#

Le robot de codage VEX AIM est équipé d’un capteur inertiel intégré. Ce capteur mesure les mouvements et les virages du robot.

Le capteur inertiel utilise deux éléments pour cela. Le gyroscope mesure les mouvements de rotation, tels que le cap, la rotation, le lacet, le roulis, le tangage et la vitesse de rotation du robot. L’accéléromètre mesure les changements de mouvement, comme les accélérations, les ralentissements ou les arrêts brusques lors d’une collision.

Les méthodes inertielles peuvent être utilisées pour suivre les virages, mesurer l’accélération, détecter les collisions, réinitialiser les valeurs de cap ou de rotation et calibrer le capteur.

Vous trouverez ci-dessous la liste de toutes les méthodes :

Orientation — Déterminez et réinitialisez la façon dont le robot est orienté, tourne ou s’incline.

  • get_rotation — Renvoie la distance parcourue par le robot.

  • get_heading — Renvoie la direction vers laquelle le robot est orienté, de 0 à 359,99 degrés.

  • get_yaw — Renvoie l’angle de lacet du robot.

  • get_roll — Renvoie l’angle de roulis du robot.

  • get_pitch — Renvoie l’angle de tangage du robot.

  • reset_rotation — Réinitialise la rotation actuelle du robot à 0 degré.

  • reset_heading — Réinitialise le cap actuel du robot à 0 degré.

  • set_heading — Définit le cap actuel du robot sur une nouvelle valeur de cap.

Crash — Détecter les collisions.

  • crashed — Enregistre une fonction à exécuter lorsqu’un plantage est détecté.

  • set_crash_sensitivity — Définit la sensibilité de la détection des collisions aux impacts.

Mouvement — Mesurer l’accélération et la vitesse de rotation.

  • get_acceleration — Renvoie la vitesse à laquelle le robot accélère ou ralentit sur l’axe sélectionné.

  • get_turn_rate — Renvoie la vitesse de rotation du robot sur l’axe sélectionné.

Étalonnage — Gérer l’étalonnage des capteurs.

  • calibrate — Calibre le capteur inertiel.

  • is_calibrating — Renvoie si le capteur inertiel est actuellement en cours d’étalonnage.

Orientation#

get_rotation#

La rotation correspond à l’angle de rotation du robot, mesuré en degrés. Contrairement au cap, la rotation peut dépasser 359,99 degrés ou être inférieure à 0 degré. Au début d’un projet, la valeur de rotation est fixée à 0 degré. get_rotation get_rotation renvoie la rotation actuelle du robot sous forme de nombre flottant.

Tourner à droite augmente la rotation, et tourner à gauche la diminue. Par exemple, deux tours complets à droite correspondent à une rotation de 720 degrés. Un tour complet à gauche, à partir de 0 degré, correspond à une rotation de -360 degrés.

Usage:
robot.inertial.get_rotation()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# 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#

Le cap est la direction vers laquelle le robot est orienté, mesurée en degrés de 0 à 359,99. get_heading renvoie le cap actuel du robot sous forme de nombre flottant.

Le cap initial est de 0 degré. Si le robot effectue une rotation supérieure à 359,99 degrés, le cap revient à 0 degré.

Usage:
robot.inertial.get_heading()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# 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#

Le lacet décrit la rotation du robot à gauche ou à droite autour de son axe vertical. get_yaw get_yaw renvoie l’angle de lacet du robot, compris entre -180,00 et 180,00 degrés, sous forme de nombre flottant.

L’image ci-dessous utilise des flèches pour indiquer le sens de rotation positif du lacet.

Un robot de codage VEX AIM avec une flèche bleue pointant vers le bas depuis le centre du robot. Autour de cette flèche bleue, une flèche noire incurvée pointe dans le sens horaire, indiquant le sens positif du lacet.

Usage:
robot.inertial.get_yaw()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# 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#

Roll décrit l’inclinaison latérale du robot. get_roll get_roll renvoie l’angle de roulis du robot, compris entre -180,00 et 180,00 degrés, sous forme de nombre flottant.

L’image ci-dessous utilise des flèches pour indiquer le sens de rotation positif du roulis.

Un robot de codage VEX AIM, avec une flèche verte pointant vers l'avant, au centre du capteur de vision IA. Autour de cette flèche verte, une flèche noire s'incurve dans le sens antihoraire, indiquant le sens positif du roulis.

Usage:
robot.inertial.get_roll()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# 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#

L’inclinaison décrit l’inclinaison du robot vers l’avant ou vers l’arrière. get_pitch get_pitch` renvoie l’angle d’inclinaison du robot, compris entre -90,00 et 90,00 degrés, sous forme de nombre flottant.

L’image ci-dessous utilise des flèches pour indiquer le sens de rotation positif du tangage.

Un robot de codage VEX AIM avec une flèche rouge pointant sur le côté, sous le logo VEX. Autour de cette flèche rouge, une flèche noire s'incurve dans le sens antihoraire, indiquant le sens positif du tangage.

Usage:
robot.inertial.get_pitch()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# 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 réinitialise la rotation actuelle du robot à 0 degré.

Une fois cette méthode utilisée, le robot suit les virages futurs à partir de la nouvelle valeur de rotation de 0 degré.

Usage:
robot.inertial.reset_rotation()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# 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 réinitialise le cap actuel du robot à 0 degré.

Après utilisation de cette méthode, la direction actuelle du robot devient le nouveau cap à 0 degré.

Usage:
robot.inertial.reset_heading()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# 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#

Le cap est la direction vers laquelle le robot est orienté, mesurée en degrés de 0 à 359,99. set_heading modifie le cap actuel du robot vers une nouvelle valeur de cap.

Par exemple, si le robot s’est tourné vers la droite, le fait de régler son cap à 0 degré fait de cette position (face à la droite) le nouveau point de référence (0 degré). Le robot peut alors suivre d’autres caps en fonction de cette nouvelle direction.

Usage:
robot.inertial.set_heading(heading)

Paramètres

Description

heading

Valeur du cap, en degrés, à définir pour le robot. Cette valeur peut être comprise entre 0 et 359,99.

# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)

Accident#

crashed#

crashed enregistre une fonction à appeler lorsque le robot détecte un impact soudain ou une collision.

Usage:

robot.inertial.crashed(callback, arg)

Paramètres

Description

callback

Une fonction qui a été préalablement définie pour s’exécuter lorsqu’une collision est détectée.

arg

Facultatif. Un tuple contenant les arguments à transmettre à la fonction de rappel. Voir Utilisation des fonctions avec paramètres pour plus d’informations.

# 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#

set_crash_sensitivity ajuste la quantité d’accélération soudaine nécessaire pour que le robot détecte une collision.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Paramètres

Description

sensitivity

Sensibilité aux chocs :

  • HIGH — Sensibilité maximale ; détecte les impacts faibles et se déclenche à 1 G.
  • NORMAL — Sensibilité par défaut ; détecte les impacts modérés et se déclenche à 1,5 G.
  • LOW — Sensibilité minimale ; détecte les impacts forts et se déclenche à 2 G.

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)

Mouvement#

get_acceleration#

L’accélération correspond à la vitesse à laquelle le robot accélère ou ralentit. get_acceleration renvoie l’accélération du robot sur l’axe sélectionné, de -4,00 G à 4,00 G, sous forme de nombre flottant.

G est une unité de mesure de l’accélération. 1 G correspond approximativement à l’accélération due à la gravité que l’on ressent en position assise immobile.

La valeur peut être positive ou négative selon la direction de l’accélération sur l’axe sélectionné. Sur AIM, les options d’axe sont nommées d’après les directions sur le robot : FORWARD, RIGHTWARDet DOWNWARD.

Un robot de codage VEX AIM avec des flèches directionnelles partant du centre du robot. Une flèche verte indiquant l'avant part de l'avant du robot, une flèche bleue indiquant le bas part du bas du robot et une flèche rouge indiquant la droite part du côté du robot, sous le logo VEX.

Usage:

robot.inertial.get_acceleration(type)

Paramètres

Description

type

Axe de mesure de l’accélération :

  • DOWNWARD — Mesure l’accélération verticale du robot.
  • FORWARD — Mesure l’accélération longitudinale du robot.
  • RIGHTWARD — Mesure l’accélération latérale du robot.

# 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#

La vitesse de rotation correspond à la vitesse de rotation du robot. get_turn_rate get_turn_rate` renvoie la vitesse de rotation du robot en degrés par seconde \(dps\) sous forme de nombre flottant, compris entre -1000,00 et 1000,00 dps.

La valeur peut être positive ou négative selon le sens de rotation du robot autour de l’axe sélectionné. L’image ci-dessous utilise des flèches pour indiquer le sens de rotation positif pour le roulis, le tangage et le lacet.

Un robot de codage VEX AIM avec des flèches directionnelles partant du centre du robot. Une flèche verte, intitulée « Rotation », part de l'avant du robot et est entourée d'une flèche noire incurvée pointant dans le sens antihoraire. Une flèche bleue, intitulée « Layout », part du dessous du robot et est entourée d'une flèche noire incurvée pointant dans le sens horaire. Enfin, une flèche rouge, intitulée « Tangage », part du côté du robot, sous le logo VEX, et est entourée d'une flèche noire incurvée pointant dans le sens antihoraire.

Usage:
robot.inertial.get_turn_rate(axis)

Paramètres

Description

axis

Quelle orientation choisir :

  • YAW
  • ROLL
  • PITCH
# 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)

Étalonnage#

L’étalonnage permet au capteur inertiel de mesurer correctement les virages en mesurant et en compensant le bruit et la dérive du capteur sur une période de 2 secondes. Pendant ce temps, le robot doit rester parfaitement immobile sur une surface stable. Tout mouvement durant l’étalonnage peut fausser les résultats.

Les robots VEX tentent de s’auto-calibrer automatiquement au démarrage, en attendant de détecter l’absence de mouvement. Toutefois, si le robot est transporté ou déplacé pendant le démarrage, le capteur risque de ne pas se calibrer correctement ou de fournir un étalonnage incorrect.

Si votre projet nécessite un cap précis ou des virages réguliers et répétables, l’appel à calibrate en début de code peut s’avérer utile. Il est recommandé d’afficher un message tel que « Calibrage… » sur l’écran du robot pendant le calibrage, puis de le mettre à jour avec « Calibrage terminé » une fois celui-ci terminé, afin de vous rappeler (ainsi qu’à toute autre personne utilisant le robot) que celui-ci doit rester immobile durant cette opération.

calibrate#

La commande calibrate calibre le gyroscope. L’étalonnage permet au capteur inertiel de mesurer correctement les virages en mesurant et en compensant le bruit et la dérive du capteur sur une période de 2 secondes. Pendant ce temps, le robot doit rester parfaitement immobile sur une surface stable. Tout mouvement pendant l’étalonnage peut entraîner des résultats inexacts.

Les robots VEX tentent de s’auto-calibrer automatiquement au démarrage, en attendant de détecter l’absence de mouvement. Toutefois, si le robot est transporté ou déplacé pendant le démarrage, le capteur risque de ne pas se calibrer correctement ou de fournir un étalonnage incorrect.

Usage:
robot.inertial.calibrate()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# 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 renvoie une valeur booléenne indiquant si le capteur inertiel est en cours d’étalonnage.

  • True — Le capteur inertiel est en cours d’étalonnage.

  • False — Le capteur inertiel n’est pas en cours d’étalonnage.

Usage:
robot.inertial.is_calibrating()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# 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)