La transformation des trajectoires

Les trajectoires peuvent être transformées d’un système de coordonnées à un autre et déplacées dans un système de coordonnées à l’aide des méthodes relativeTo et transformBy. Ces méthodes sont utiles pour déplacer des trajectoires dans l’espace ou redéfinir une trajectoire déjà existante dans un autre cadre de référence.

Note

Aucune de ces méthodes ne modifie la forme de la trajectoire d’origine.

La méthode relativeTo

La méthode relativeTo permet de redéfinir une trajectoire déjà existante dans un autre référentiel. Cette méthode prend un argument: une pose, (via un objet Pose2d) qui est définie par rapport au système de coordonnées courant, qui représente l’origine du nouveau système de coordonnées.

Par exemple, une trajectoire définie dans le système de coordonnées A peut être redéfinie dans le système de coordonnées B, dont l’origine est à (3, 3, 30 degrés) dans le système de coordonnées A, en utilisant la méthode relativeTo.

Pose2d bOrigin = new Pose2d(3, 3, Rotation2d.fromDegrees(30));
Trajectory bTrajectory = aTrajectory.relativeTo(bOrigin);
frc::Pose2d bOrigin{3_m, 3_m, frc::Rotation2d(30_deg)};
frc::Trajectory bTrajectory = aTrajectory.RelativeTo(bOrigin);
from wpimath.geometry import Pose2d, Rotation2d

bOrigin = Pose2d(3, 3, Rotation2d.fromDegrees(30))
bTrajectory = aTrajectory.relativeTo(bOrigin)
Représentation du système de coordonnées de la trajectoire.

Dans le diagramme ci-dessus, la trajectoire originale (aTrajectory dans le code ci-dessus) a été définie dans le système de coordonnées A, représenté par les axes noirs. Les axes rouges, situés à (3, 3) et 30° par rapport au système de coordonnées d’origine, représentent le système de coordonnées B. Appeler relativeTo sur aTrajectory redéfinira toutes les poses de la trajectoire pour être par rapport au système de coordonnées B (axes rouges).

La méthode transformBy

La méthode transformBy peut être utilisée pour déplacer (c’est-à-dire traduire et faire pivoter) une trajectoire dans un système de coordonnées. Cette méthode prend un seul argument: soit une transformation (via un objet Transform2d) qui mappe la position initiale actuelle de la trajectoire à une position initiale souhaitée de la même trajectoire.

Par exemple, on peut vouloir transformer une trajectoire qui commence à (2, 2, 30 degrés) pour la faire commencer à (4, 4, 50 degrés) en utilisant la méthode transformBy.

Transform2d transform = new Pose2d(4, 4, Rotation2d.fromDegrees(50)).minus(trajectory.getInitialPose());
Trajectory newTrajectory = trajectory.transformBy(transform);
frc::Transform2d transform = Pose2d(4_m, 4_m, Rotation2d(50_deg)) - trajectory.InitialPose();
frc::Trajectory newTrajectory = trajectory.TransformBy(transform);
from wpimath.geometry import Pose2d, Rotation2d

transform = Pose2d(4, 4, Rotation2d.fromDegrees(50)) - trajectory.initialPose()
newTrajectory = trajectory.transformBy(transform)
Tracé du système de coordonnées d’une trajectoire transformée.

Dans le diagramme ci-dessus, la trajectoire d’origine, qui commence à (2, 2) et à 30 ° est visible en bleu. Après avoir appliqué la transformation ci-dessus, l’emplacement de départ de la trajectoire résultante est changé en (4, 4) à 50 °. La trajectoire résultante est visible en orange.