8#include <choreo/trajectory/SwerveSample.h>
9#include <choreo/trajectory/Trajectory.h>
11#include <frc/apriltag/AprilTagFieldLayout.h>
12#include <frc/controller/ProfiledPIDController.h>
13#include <frc/geometry/Pose2d.h>
14#include <frc/geometry/Rotation2d.h>
15#include <frc/kinematics/ChassisSpeeds.h>
16#include <frc/kinematics/SwerveModuleState.h>
17#include <frc2/command/Command.h>
18#include <frc2/command/CommandHelper.h>
19#include <frc2/command/CommandPtr.h>
20#include <frc2/command/Commands.h>
21#include <frc2/command/FunctionalCommand.h>
22#include <frc2/command/SequentialCommandGroup.h>
23#include <units/acceleration.h>
24#include <units/time.h>
26#include "valkyrie/Loggable.h"
27#include "valkyrie/WorldAlign.h"
28#include "valkyrie/controllers/BaseController.h"
29#include "valkyrie/controllers/PIDController.h"
30#include "valkyrie/controllers/PIDF.h"
31#include "valkyrie/drivetrain/swerve/Requests.h"
39 units::meters_per_second_squared_t ax;
40 units::meters_per_second_squared_t ay;
41 units::radians_per_second_squared_t alpha;
48 units::second_t timestamp;
50 frc::ChassisSpeeds speeds;
60 std::function<void(frc::Pose2d)> resetOdom;
62 std::function<frc::Pose2d()> poseGetter;
63 std::function<std::vector<frc::SwerveModuleState>()> swerveStatesGetter;
64 units::meter_t wheelRadius;
65 frc::DCMotor driveMotor;
67 frc::AprilTagField field = frc::AprilTagField::kDefaultField;
82 enum class FieldSymmetry { MIRROR, ROTATE };
107 static frc2::CommandPtr
FollowPath(std::optional<choreo::Trajectory<choreo::SwerveSample>> traj,
108 std::optional<TrajectoryEndCondition> end, std::optional<units::meter_t> tol,
109 std::optional<std::function<
bool()>> inter,
bool isMirrored,
bool resetOdom);
116 static void SetPID(WorldAlign::TranslationalPIDF_t x, WorldAlign::TranslationalPIDF_t y, WorldAlign::RotationalPIDF_t rot);
124 static AutoSwerveState ConvertChoreoSampleIntoSwerveState(choreo::SwerveSample sample);
131 static AutoSwerveState Interop(units::second_t time, std::vector<AutoSwerveState> traj);
139 static frc2::CommandPtr GetFollowCommand(std::optional<choreo::Trajectory<choreo::SwerveSample>> traj,
TrajectoryEndCondition end,
140 std::optional<units::meter_t> tol, std::optional<std::function<
bool()>> interruption,
155 static bool IsAllianceFlipped();
160 static std::unique_ptr<PIDController<units::meter, units::meters_per_second>> xController;
161 static std::unique_ptr<PIDController<units::meter, units::meters_per_second>> yController;
165 static std::unique_ptr<PIDController<units::radian, units::radians_per_second>> rotController;
169 static frc::Timer timer;
171 static std::optional<Config> config;
173 static std::optional<frc::AprilTagFieldLayout> field;
Base helper for publishing and subscribing values to NetworkTables.
Definition Loggable.h:218
static frc2::CommandPtr FollowPath(std::optional< choreo::Trajectory< choreo::SwerveSample > > traj, std::optional< TrajectoryEndCondition > end, std::optional< units::meter_t > tol, std::optional< std::function< bool()> > inter, bool isMirrored, bool resetOdom)
Follows a choreo trajectory.
TrajectoryFollower()=delete
The default constructor where everything is initialized to zero.
TrajectoryEndCondition
Enum to represent the how the trajectory determines that it is finished: time or position.
Definition TrajectoryFollower.h:80
static void SetPID(WorldAlign::TranslationalPIDF_t x, WorldAlign::TranslationalPIDF_t y, WorldAlign::RotationalPIDF_t rot)
Sets a new PIDF config.
static void Register(Config config)
Defines the essential functions for the trajectory follower.
A struct to represent the acceleration swerve state.
Definition TrajectoryFollower.h:38
A struct to represent a swerve state in auto.
Definition TrajectoryFollower.h:47
Definition TrajectoryFollower.h:59
Request structure for commanding a swerve drivetrain using chassis speeds.
Definition Requests.h:49