FRC Paradigm Shift #1259
Documentation for the 2021 Robot
SwerveControllerCommand2.h
Go to the documentation of this file.
1 // Copyright (c) FIRST and other WPILib contributors.
2 // Open Source Software; you can modify and/or share it under the terms of
3 // the WPILib BSD license file in the root directory of this project.
4 
5 #include <cmath>
6 #include <functional>
7 #include <initializer_list>
8 #include <memory>
9 
10 #include <frc/controller/HolonomicDriveController.h>
11 #include <frc/controller/PIDController.h>
12 #include <frc/controller/ProfiledPIDController.h>
13 #include <frc/geometry/Pose2d.h>
14 #include <frc/kinematics/ChassisSpeeds.h>
15 #include <frc/kinematics/SwerveDriveKinematics.h>
16 #include <frc/kinematics/SwerveModuleState.h>
17 #include <frc/trajectory/Trajectory.h>
18 #include <units/length.h>
19 #include <units/time.h>
20 #include <units/voltage.h>
21 #include <wpi/ArrayRef.h>
22 
23 #include <frc2/command/CommandBase.h>
24 #include <frc2/command/CommandHelper.h>
25 #include <frc2/Timer.h>
26 
27 #pragma once
28 
29 namespace frc2 {
30 
50 template <size_t NumModules>
52  : public CommandHelper<CommandBase, SwerveControllerCommand2<NumModules>> {
53  using voltsecondspermeter =
54  units::compound_unit<units::voltage::volt, units::second,
55  units::inverse<units::meter>>;
57  units::compound_unit<units::voltage::volt, units::squared<units::second>,
58  units::inverse<units::meter>>;
59 
60  public:
88  frc::Trajectory trajectory, std::function<frc::Pose2d()> pose,
89  frc::SwerveDriveKinematics<NumModules> kinematics,
90  frc2::PIDController xController, frc2::PIDController yController,
91  frc::ProfiledPIDController<units::radians> thetaController,
92  std::function<frc::Rotation2d()> desiredRotation,
93  std::function<void(std::array<frc::SwerveModuleState, NumModules>)>
94  output,
95  std::initializer_list<Subsystem*> requirements);
96 
127  frc::Trajectory trajectory, std::function<frc::Pose2d()> pose,
128  frc::SwerveDriveKinematics<NumModules> kinematics,
129  frc2::PIDController xController, frc2::PIDController yController,
130  frc::ProfiledPIDController<units::radians> thetaController,
131  std::function<void(std::array<frc::SwerveModuleState, NumModules>)>
132  output,
133  std::initializer_list<Subsystem*> requirements);
134 
163  frc::Trajectory trajectory, std::function<frc::Pose2d()> pose,
164  frc::SwerveDriveKinematics<NumModules> kinematics,
165  frc2::PIDController xController, frc2::PIDController yController,
166  frc::ProfiledPIDController<units::radians> thetaController,
167  std::function<frc::Rotation2d()> desiredRotation,
168  std::function<void(std::array<frc::SwerveModuleState, NumModules>)>
169  output,
170  wpi::ArrayRef<Subsystem*> requirements = {});
171 
202  frc::Trajectory trajectory, std::function<frc::Pose2d()> pose,
203  frc::SwerveDriveKinematics<NumModules> kinematics,
204  frc2::PIDController xController, frc2::PIDController yController,
205  frc::ProfiledPIDController<units::radians> thetaController,
206  std::function<void(std::array<frc::SwerveModuleState, NumModules>)>
207  output,
208  wpi::ArrayRef<Subsystem*> requirements = {});
209 
210  void Initialize() override;
211 
212  void Execute() override;
213 
214  void End(bool interrupted) override;
215 
216  bool IsFinished() override;
217 
218  private:
219  frc::Trajectory m_trajectory;
220  std::function<frc::Pose2d()> m_pose;
221  frc::SwerveDriveKinematics<NumModules> m_kinematics;
222  frc::HolonomicDriveController m_controller;
223  std::function<void(std::array<frc::SwerveModuleState, NumModules>)>
225 
226  std::function<frc::Rotation2d()> m_desiredRotation;
227 
228  frc2::Timer m_timer;
229  units::second_t m_prevTime;
230  frc::Rotation2d m_finalRotation;
231 };
232 } // namespace frc2
233 
units::compound_unit< units::voltage::volt, units::squared< units::second >, units::inverse< units::meter >> voltsecondssquaredpermeter
frc::HolonomicDriveController m_controller
units::compound_unit< units::voltage::volt, units::second, units::inverse< units::meter >> voltsecondspermeter
std::function< void(std::array< frc::SwerveModuleState, NumModules >)> m_outputStates
std::function< frc::Pose2d()> m_pose
std::function< frc::Rotation2d()> m_desiredRotation
SwerveControllerCommand2(frc::Trajectory trajectory, std::function< frc::Pose2d()> pose, frc::SwerveDriveKinematics< NumModules > kinematics, frc2::PIDController xController, frc2::PIDController yController, frc::ProfiledPIDController< units::radians > thetaController, std::function< frc::Rotation2d()> desiredRotation, std::function< void(std::array< frc::SwerveModuleState, NumModules >)> output, std::initializer_list< Subsystem * > requirements)
void End(bool interrupted) override
frc::SwerveDriveKinematics< NumModules > m_kinematics