转变轨迹

可以使用“ relativeTo”和“ transformBy”方法将轨迹从一个坐标系转换为另一个坐标系,并在坐标系内移动。这些方法对于在空间内移动轨迹或在另一个参考系中重新定义已经存在的轨迹很有用。

备注

这些方法都不能改变原始轨迹的形状。

``relativeTo``方法

``relativeTo``方法用于在另一个参考系中重新定义一个已经存在的轨迹。该方法采用一个参数:一个姿势(通过“ Pose2d”对象),该姿势是相对于当前坐标系定义的,代表新坐标系的原点。

例如,可以使用``relativeTo’’方法在坐标系B中重新定义在A坐标系中定义的轨迹,该坐标系的原点在坐标系A中为(2、2、30度)。

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

在上图中,原始轨迹(上面代码中的``aTrajectory``)已在坐标系A中定义,由黑轴表示。相对于原始坐标系位于(2,2)和30°的红色轴代表坐标系B. 在``aTrajectory``上调用``relativeTo`` 将重新定义轨迹中的所有姿势,使其相对于坐标系B(红色轴)。

transformBy 方法

可以使用``transformBy’’方法在坐标系内移动(即平移和旋转)轨迹。此方法有一个参数:一个转换(通过“ Transform2d”对象),该转换将轨迹的当前初始位置映射到同一轨迹的所需初始位置。

例如,您可能想使用``transformBy’’方法将以(2、2、30度)开始的轨迹转换为以(4、4、50度)开始的轨迹。

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

在上图中,以(2,2)和30°开始的原始轨迹显示为蓝色。在应用上面的变换之后,合成轨迹的起始位置在50°处更改为(4,4)。生成的轨迹以橙色显示。