70 enum class FieldSymmetry { MIRROR, ROTATE };
96 std::optional<choreo::Trajectory<choreo::SwerveSample>> traj,
TrajectoryEndCondition end,
bool isMirrored,
bool resetOdom,
97 units::meter_t tolerance = 0.25_m, units::second_t timeWithoutCorrection = 0_s,
98 std::function<
bool()> interruption = [] {
return false; });
106 static void SetPID(WorldAlign::TranslationalPIDF_t x, WorldAlign::TranslationalPIDF_t y, WorldAlign::RotationalPIDF_t rot);
109 class FollowCommand :
public frc2::CommandHelper<frc2::Command, FollowCommand> {
111 FollowCommand(choreo::Trajectory<choreo::SwerveSample> traj,
TrajectoryEndCondition end,
bool isMirrored, units::meter_t tolerance,
112 units::second_t timeWithoutCorrection, std::function<
bool()> interruption)
115 isMirrored{isMirrored},
116 tolerance{tolerance},
117 timeWithoutCorrection{timeWithoutCorrection},
118 interruption{interruption} {}
120 void Initialize()
override;
122 void Execute()
override;
124 bool IsFinished()
override;
127 choreo::Trajectory<choreo::SwerveSample> traj;
130 units::meter_t tolerance;
131 units::second_t timeWithoutCorrection;
132 std::function<bool()> interruption;
136 PIDController<units::meter, units::meters_per_second> yController{{}};
137 PIDController<units::radian, units::radians_per_second> rotController{{}};
145 static AutoSwerveState ConvertChoreoSampleIntoSwerveState(choreo::SwerveSample sample);
152 static AutoSwerveState Interop(units::second_t time, std::vector<AutoSwerveState> traj);
158 static AutoSwerveState FlipSwerveState(AutoSwerveState state, FieldSymmetry sym);
164 static AutoSwerveState MirrorSwerveState(AutoSwerveState state);
166 static bool IsAllianceFlipped();
168 static WorldAlign::TranslationalPIDF_t xPIDF, yPIDF;
169 static WorldAlign::RotationalPIDF_t rotPIDF;
171 static swerve::Swerve* swerve;
173 static Loggable loggable;
static frc2::CommandPtr FollowPath(std::optional< choreo::Trajectory< choreo::SwerveSample > > traj, TrajectoryEndCondition end, bool isMirrored, bool resetOdom, units::meter_t tolerance=0.25_m, units::second_t timeWithoutCorrection=0_s, std::function< bool()> interruption=[] { return false;})
Follows a choreo trajectory.