31 std::shared_ptr<ThunderAutoProject> project,
36 explicit operator bool()
const {
return isValid(); }
38 void Initialize()
override;
39 void Execute()
override;
40 void End(
bool interrupted)
override;
41 bool IsFinished()
override;
44 std::unique_ptr<ThunderAutoTrajectory> m_trajectory;
45 std::shared_ptr<ThunderAutoProject> m_project;
50 std::optional<frc::DriverStation::Alliance>
53 enum class ExecutionState {
61 ExecutionState m_executionState = ExecutionState::START_ACTIONS;
63 frc2::CommandPtr m_startActionCommand = frc2::cmd::None();
64 frc2::CommandPtr m_endActionCommand = frc2::cmd::None();
66 struct StopActionCommand {
67 units::second_t stopTime;
68 frc2::CommandPtr command;
71 std::list<StopActionCommand> m_stopActionCommands;
72 using StopIterator =
decltype(m_stopActionCommands)::const_iterator;
73 StopIterator m_nextStop = m_stopActionCommands.end();
75 struct PositionedActionCommand {
76 units::second_t actionTime;
77 frc2::CommandPtr command;
80 std::list<PositionedActionCommand> m_positionedActionCommands;
81 using PositionedActionIterator =
decltype(m_positionedActionCommands)::const_iterator;
82 PositionedActionIterator m_nextAction = m_positionedActionCommands.end();
84 std::list<PositionedActionIterator> m_runningActions;
87 void beginStartAction();
88 void executeStartAction();
89 void endStartAction(
bool interrupted);
91 void beginFollowTrajectory();
92 void resumeFollowTrajectory();
93 void executeFollowTrajectory();
94 void endFollowTrajectory(
bool interrupted);
97 void executeStopped();
98 void endStopped(
bool interrupted);
100 void beginEndAction();
101 void executeEndAction();
102 void endEndAction(
bool interrupted);
105 std::optional<frc::DriverStation::Alliance> alliance,
106 FieldSymmetry fieldSymmetry);
108 static frc::Pose2d flipPoseForAlliance(
const frc::Pose2d& originalPose,
109 std::optional<frc::DriverStation::Alliance> alliance,
110 FieldSymmetry fieldSymmetry,