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