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

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

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.