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)
Coordinate system representation of the trajectory.

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)
Coordinate system plot of a transformed trajectory.

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.