Yörüngeleri Dönüştürmek
Yörüngeler bir koordinat sisteminden diğerine dönüştürülebilir ve bir koordinat sistemi içinde “relativeTo’’ ve “transformBy’’ yöntemleri kullanılarak taşınabilir. Bu yöntemler, uzayda yörüngeleri hareket ettirmek veya başka bir referans çerçevesinde zaten var olan bir yörüngeyi yeniden tanımlamak için kullanışlıdır.
Not
Bu yöntemlerin hiçbiri orijinal yörüngenin şeklini değiştirmez.
“relativeTo’’ Metodu
“relativeTo’’ metodu, başka bir referans çerçevesinde zaten mevcut bir yörüngeyi yeniden tanımlamak için kullanılır. Bu yöntem bir argüman alır: yeni koordinat sisteminin başlangıcını temsil eden mevcut koordinat sistemine göre tanımlanan bir poz (bir ” Pose2d’’ nesnesi aracılığıyla).
Örneğin, A koordinat sisteminde tanımlanan bir yörünge, orijini A koordinat sisteminde (3, 3, 30 derece) olan B koordinat sisteminde relativeTo
yöntemi kullanılarak yeniden tanımlanabilir.
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)
In the diagram above, the original trajectory (aTrajectory
in the code above) has been defined in coordinate system A, represented by the black axes. The red axes, located at (3, 3) and 30° with respect to the original coordinate system, represent coordinate system B. Calling relativeTo
on aTrajectory
will redefine all poses in the trajectory to be relative to coordinate system B (red axes).
transformBy
Metodu
transformBy
metodu, bir koordinat sistemi içindeki bir yörüngeyi hareket ettirmek (yani çevirmek ve döndürmek) için kullanılabilir. Bu yöntem bir argüman alır: yörüngenin mevcut başlangıç konumunu aynı yörüngenin istenen bir başlangıç konumuna eşleyen bir dönüşüm (bir Transform2d
nesnesi aracılığıyla).
Örneğin, transformBy
yöntemini kullanarak (2, 2, 30 derece) ‘de başlayan bir yörüngeyi (4, 4, 50 derece) başlaması için dönüştürmek isteyebilirsiniz.
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)
Yukarıdaki diyagramda, (2, 2) ‘de ve 30 ° ‘de başlayan orijinal yörünge mavi olarak görülebilir. Yukarıdaki dönüşümü uyguladıktan sonra, ortaya çıkan yörüngenin başlangıç konumu 50 ° ‘de (4, 4) olarak değiştirilir. Ortaya çıkan yörünge turuncu renkte görünür.