Transformando trayectorias
Las trayectorias se pueden transformar de un sistema de coordenadas a otro y moverse dentro de un sistema de coordenadas usando los métodos relativeTo
y transformBy
. Estos métodos son útiles para mover trayectorias dentro del espacio o re definir una trayectoria ya existente en otro marco de referencia.
Nota
Ninguno de estos métodos cambia la forma de la trayectoria original.
El metodo relativeTo
El método relativeTo
es usado para redefinir una trayectoria ya existente en otro marco de referencia. Este método toma un argumento: pose, (objeto dirigido a Pose2d
) que es definido respecto al sistema de coordenadas actual , que representa el origen de un nuevo sistema de coordenadas.
Por ejemplo, una trayectoria definida en el sistema de coordenadas A se puede redefinir en el sistema de coordenadas B, cuyo origen está en (3, 3, 30 grados) en el sistema de coordenadas A, utilizando el método 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)
En el diagrama de arriba, la trayectoria original (aTrajectory
en el código de arriba) se ha definido en el sistema de coordenadas A, representado por los ejes negros. Los ejes rojos, ubicados en (3, 3) y 30 ° con respecto al sistema de coordenadas original, representan el sistema de coordenadas B. Llamar a relativeTo
en aTrajectory
redefinirá todas las poses en la trayectoria para que sean relativas a sistema de coordenadas B (ejes rojos).
El método transformBy
El método transformBy
se puede utilizar para mover (es decir, trasladar y rotar) una trayectoria dentro de un sistema de coordenadas. Este método toma un argumento: una transformación (a través de un objeto Transform2d
) que mapea la posición inicial actual de la trayectoria a una posición inicial deseada de la misma trayectoria.
Por ejemplo, uno puede querer transformar una trayectoria que comienza en (2, 2, 30 grados) para que comience en (4, 4, 50 grados) usando el método 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)
En el diagrama de arriba, la trayectoria original, que comienza en (2, 2) y en 30 °, es visible en azul. Después de aplicar la transformación anterior, la ubicación inicial de la trayectoria resultante se cambia a (4, 4) a 50 °. La trayectoria resultante es visible en naranja.