WPILibC++ 2024.3.2
|
The linear time-varying unicycle controller has a similar form to the LQR, but the model used to compute the controller gain is the nonlinear unicycle model linearized around the drivetrain's current state. More...
#include <frc/controller/LTVUnicycleController.h>
Public Member Functions | |
LTVUnicycleController (units::second_t dt, units::meters_per_second_t maxVelocity=9_mps) | |
Constructs a linear time-varying unicycle controller with default maximum desired error tolerances of (0.0625 m, 0.125 m, 2 rad) and default maximum desired control effort of (1 m/s, 2 rad/s). More... | |
LTVUnicycleController (const wpi::array< double, 3 > &Qelems, const wpi::array< double, 2 > &Relems, units::second_t dt, units::meters_per_second_t maxVelocity=9_mps) | |
Constructs a linear time-varying unicycle controller. More... | |
LTVUnicycleController (LTVUnicycleController &&)=default | |
Move constructor. More... | |
LTVUnicycleController & | operator= (LTVUnicycleController &&)=default |
Move assignment operator. More... | |
bool | AtReference () const |
Returns true if the pose error is within tolerance of the reference. More... | |
void | SetTolerance (const Pose2d &poseTolerance) |
Sets the pose error which is considered tolerable for use with AtReference(). More... | |
ChassisSpeeds | Calculate (const Pose2d ¤tPose, const Pose2d &poseRef, units::meters_per_second_t linearVelocityRef, units::radians_per_second_t angularVelocityRef) |
Returns the linear and angular velocity outputs of the LTV controller. More... | |
ChassisSpeeds | Calculate (const Pose2d ¤tPose, const Trajectory::State &desiredState) |
Returns the linear and angular velocity outputs of the LTV controller. More... | |
void | SetEnabled (bool enabled) |
Enables and disables the controller for troubleshooting purposes. More... | |
The linear time-varying unicycle controller has a similar form to the LQR, but the model used to compute the controller gain is the nonlinear unicycle model linearized around the drivetrain's current state.
This controller is a roughly drop-in replacement for RamseteController with more optimal feedback gains in the "least-squares error" sense.
See section 8.9 in Controls Engineering in FRC for a derivation of the control law we used shown in theorem 8.9.1.
|
explicit |
Constructs a linear time-varying unicycle controller with default maximum desired error tolerances of (0.0625 m, 0.125 m, 2 rad) and default maximum desired control effort of (1 m/s, 2 rad/s).
dt | Discretization timestep. |
maxVelocity | The maximum velocity for the controller gain lookup table. |
std::domain_error | if maxVelocity <= 0. |
frc::LTVUnicycleController::LTVUnicycleController | ( | const wpi::array< double, 3 > & | Qelems, |
const wpi::array< double, 2 > & | Relems, | ||
units::second_t | dt, | ||
units::meters_per_second_t | maxVelocity = 9_mps |
||
) |
Constructs a linear time-varying unicycle controller.
See https://docs.wpilib.org/en/stable/docs/software/advanced-controls/state-space/state-space-intro.html#lqr-tuning for how to select the tolerances.
Qelems | The maximum desired error tolerance for each state. |
Relems | The maximum desired control effort for each input. |
dt | Discretization timestep. |
maxVelocity | The maximum velocity for the controller gain lookup table. |
std::domain_error | if maxVelocity <= 0 m/s or >= 15 m/s. |
|
default |
Move constructor.
bool frc::LTVUnicycleController::AtReference | ( | ) | const |
Returns true if the pose error is within tolerance of the reference.
ChassisSpeeds frc::LTVUnicycleController::Calculate | ( | const Pose2d & | currentPose, |
const Pose2d & | poseRef, | ||
units::meters_per_second_t | linearVelocityRef, | ||
units::radians_per_second_t | angularVelocityRef | ||
) |
Returns the linear and angular velocity outputs of the LTV controller.
The reference pose, linear velocity, and angular velocity should come from a drivetrain trajectory.
currentPose | The current pose. |
poseRef | The desired pose. |
linearVelocityRef | The desired linear velocity. |
angularVelocityRef | The desired angular velocity. |
ChassisSpeeds frc::LTVUnicycleController::Calculate | ( | const Pose2d & | currentPose, |
const Trajectory::State & | desiredState | ||
) |
Returns the linear and angular velocity outputs of the LTV controller.
The reference pose, linear velocity, and angular velocity should come from a drivetrain trajectory.
currentPose | The current pose. |
desiredState | The desired pose, linear velocity, and angular velocity from a trajectory. |
|
default |
Move assignment operator.
void frc::LTVUnicycleController::SetEnabled | ( | bool | enabled | ) |
Enables and disables the controller for troubleshooting purposes.
enabled | If the controller is enabled or not. |
void frc::LTVUnicycleController::SetTolerance | ( | const Pose2d & | poseTolerance | ) |
Sets the pose error which is considered tolerable for use with AtReference().
poseTolerance | Pose error which is tolerable. |