Introduction à la cinématique et à la classe Chassis Speeds

Qu’est-ce que la cinématique?

La toute nouvelle suite logicielle cinématique contient des classes pour la cinématique et l’odométrie pour des mécanismes avec entraînement différentiel, de type « à embardée » (Swerve) et Mécanum. Les classes cinématiques aident à convertir un objet universel ChassisSpeeds, contenant des vitesses linéaires et angulaires en paramètres utilisables pour chaque type de transmission pré-citées. Dans le cas d’un entraînement différentiel, ce sont les vitesses de roue gauche et droite. Pour un entraînement par embardée, ce sont les paramètres d’angle et de vitesse pour chacune des 4 roues, et pour le Mécanum, ce sont les vitesses pour chacune des roues.

Qu’est-ce que l’odométrie?

L’odométrie consiste à utiliser des capteurs sur le robot pour créer une estimation de la position du robot sur le terrain de jeu. En FRC, ces capteurs sont généralement composés de plusieurs encodeurs (le nombre exact dépend du type d’entraînement) et d’un gyroscope pour mesurer l’angle du robot. Les classes d’odométrie utilisent les classes cinématiques ainsi que les entrées périodiques de l’utilisateur sur les vitesses (et les angles en cas de déviation) pour créer une estimation de l’emplacement du robot sur le terrain.

La classe Chassis Speeds

L’objet ChassisSpeeds est essentiel à la nouvelle suite cinématique et odométrique WPILib. L’objet ChassisSpeeds représente les vitesses d’un châssis de robot. Cette structure a trois composants:

  • vx: La vitesse du robot dans la direction x (avant).

  • vy: La vitesse du robot dans la direction y (latérale). (Les valeurs positives signifient que le robot se déplace vers la gauche).

  • omega: La vitesse angulaire du robot en radians par seconde.

Note

Une transmission non holonomique (c’est-à-dire une transmission qui ne peut pas se déplacer latéralement, ex: un entraînement différentiel) aura une composante vy de zéro en raison de son incapacité à se déplacer latéralement.

Construction d’un objet ChassisSpeeds

Le constructeur de l’objet ChassisSpeeds est très simple, acceptant trois arguments pour vx, vy, et omega. En Java, vx et vy doivent être en mètres par seconde. En C++, la librairie d’unités peut être utilisée pour fournir une vitesse linéaire en utilisant n’importe quelle unité de vitesse linéaire.

// The robot is moving at 3 meters per second forward, 2 meters
// per second to the right, and rotating at half a rotation per
// second counterclockwise.
var speeds = new ChassisSpeeds(3.0, -2.0, Math.PI);

Création d’un objet ChassisSpeeds à partir de vitesses relatives au terrain de jeu

Un objet ChassisSpeeds peut également être créé à partir d’un ensemble de vitesses relatives au terrain lorsque l’angle du robot est connu. L’objet utilise un ensemble de vitesses souhaitées par rapport au terrain (par exemple, vers la station d’alliance opposée, à droite sur le terrain) et calcule et génère un objet ChassisSpeeds qui représente des vitesses relatives au châssis du robot. Ceci est utile pour mettre en œuvre des contrôles orientés sur le terrain pour un robot avec un mécanisme de type « à embardée » ou Mécanum.

La méthode statique ChassisSpeeds.fromFieldRelativeSpeeds (Java) / ChassisSpeeds::FromFieldRelativeSpeeds (C++) peut être utilisée pour générer l’objet ChassisSpeeds à partir de vitesses relatives au terrain. Cette méthode accepte les vx (par rapport au terrain), vy (par rapport au terrain), omega et l’angle du robot.

// The desired field relative speed here is 2 meters per second
// toward the opponent's alliance station wall, and 2 meters per
// second toward the left field boundary. The desired rotation
// is a quarter of a rotation per second counterclockwise. The current
// robot angle is 45 degrees.
ChassisSpeeds speeds = ChassisSpeeds.fromFieldRelativeSpeeds(
  2.0, 2.0, Math.PI / 2.0, Rotation2d.fromDegrees(45.0));

Note

La vitesse angulaire n’est pas explicitement indiquée comme étant « relative au terrain » car la vitesse angulaire est la même que celle mesurée du point de vue du terrain ou du robot.