58 units::meter_t trackwidth,
62 : m_trackwidth{trackwidth},
84 return std::abs(m_error(0)) < m_tolerance(0) &&
85 std::abs(m_error(1)) < m_tolerance(1) &&
86 std::abs(m_error(2)) < m_tolerance(2) &&
87 std::abs(m_error(3)) < m_tolerance(3) &&
88 std::abs(m_error(4)) < m_tolerance(4);
100 units::meters_per_second_t leftVelocityTolerance,
101 units::meters_per_second_t rightVelocityTolerance) {
102 m_tolerance = Eigen::Vector<double, 5>{
103 poseTolerance.
X().value(), poseTolerance.
Y().value(),
105 leftVelocityTolerance.value(), rightVelocityTolerance.value()};
122 const Pose2d& currentPose, units::meters_per_second_t leftVelocity,
123 units::meters_per_second_t rightVelocity,
const Pose2d& poseRef,
124 units::meters_per_second_t leftVelocityRef,
125 units::meters_per_second_t rightVelocityRef);
140 const Pose2d& currentPose, units::meters_per_second_t leftVelocity,
141 units::meters_per_second_t rightVelocity,
155 currentPose, leftVelocity, rightVelocity, desiredState.
pose,
157 (1 - (desiredState.
curvature / 1_rad * m_trackwidth / 2.0)),
159 (1 + (desiredState.
curvature / 1_rad * m_trackwidth / 2.0)));
163 units::meter_t m_trackwidth;
166 Eigen::Matrix<double, 2, 2> m_A;
167 Eigen::Matrix<double, 2, 2> m_B;
170 Eigen::Matrix<double, 5, 5> m_Q;
171 Eigen::Matrix<double, 2, 2> m_R;
173 units::second_t m_dt;
175 Eigen::Vector<double, 5> m_error;
176 Eigen::Vector<double, 5> m_tolerance;
#define WPILIB_DLLEXPORT
Definition SymbolExports.h:36
The linear time-varying differential drive controller has a similar form to the LQR,...
Definition LTVDifferentialDriveController.h:41
bool AtReference() const
Returns true if the pose error is within tolerance of the reference.
Definition LTVDifferentialDriveController.h:83
LTVDifferentialDriveController(const frc::LinearSystem< 2, 2, 2 > &plant, units::meter_t trackwidth, const wpi::array< double, 5 > &Qelems, const wpi::array< double, 2 > &Relems, units::second_t dt)
Constructs a linear time-varying differential drive controller.
Definition LTVDifferentialDriveController.h:57
DifferentialDriveWheelVoltages Calculate(const Pose2d ¤tPose, units::meters_per_second_t leftVelocity, units::meters_per_second_t rightVelocity, const Trajectory::State &desiredState)
Returns the left and right output voltages of the LTV controller.
Definition LTVDifferentialDriveController.h:139
LTVDifferentialDriveController & operator=(LTVDifferentialDriveController &&)=default
Move assignment operator.
DifferentialDriveWheelVoltages Calculate(const Pose2d ¤tPose, units::meters_per_second_t leftVelocity, units::meters_per_second_t rightVelocity, const Pose2d &poseRef, units::meters_per_second_t leftVelocityRef, units::meters_per_second_t rightVelocityRef)
Returns the left and right output voltages of the LTV controller.
void SetTolerance(const Pose2d &poseTolerance, units::meters_per_second_t leftVelocityTolerance, units::meters_per_second_t rightVelocityTolerance)
Sets the pose error which is considered tolerable for use with AtReference().
Definition LTVDifferentialDriveController.h:99
LTVDifferentialDriveController(LTVDifferentialDriveController &&)=default
Move constructor.
A plant defined using state-space notation.
Definition LinearSystem.h:35
Represents a 2D pose containing translational and rotational elements.
Definition Pose2d.h:28
constexpr const Rotation2d & Rotation() const
Returns the underlying rotation.
Definition Pose2d.h:128
constexpr units::meter_t Y() const
Returns the Y component of the pose's translation.
Definition Pose2d.h:121
constexpr units::meter_t X() const
Returns the X component of the pose's translation.
Definition Pose2d.h:114
constexpr units::radian_t Radians() const
Returns the radian value of the rotation constrained within [-π, π].
Definition Rotation2d.h:206
This class is a wrapper around std::array that does compile time size checking.
Definition array.h:26
Definition SystemServer.h:9
constexpr Matrixd< sizeof...(Ts), sizeof...(Ts)> MakeCostMatrix(Ts... tolerances)
Creates a cost matrix from the given vector for use with LQR.
Definition StateSpaceUtil.h:37
Motor voltages for a differential drive.
Definition DifferentialDriveWheelVoltages.h:14
Represents one point on the trajectory.
Definition Trajectory.h:34
Pose2d pose
The pose at that point of the trajectory.
Definition Trajectory.h:45
units::meters_per_second_t velocity
The speed at that point of the trajectory.
Definition Trajectory.h:39
units::curvature_t curvature
The curvature at that point of the trajectory.
Definition Trajectory.h:48