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>
|
| 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 (x = 0.0625 m, y = 0.125 m, heading = 2 rad) and default maximum desired control effort of (linear velocity = 1 m/s, angular velocity = 2 rad/s).
|
|
| 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.
|
|
| LTVUnicycleController (LTVUnicycleController &&)=default |
| Move constructor.
|
|
LTVUnicycleController & | operator= (LTVUnicycleController &&)=default |
| Move assignment operator.
|
|
bool | AtReference () const |
| Returns true if the pose error is within tolerance of the reference.
|
|
void | SetTolerance (const Pose2d &poseTolerance) |
| Sets the pose error which is considered tolerable for use with AtReference().
|
|
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.
|
|
ChassisSpeeds | Calculate (const Pose2d ¤tPose, const Trajectory::State &desiredState) |
| Returns the linear and angular velocity outputs of the LTV controller.
|
|
void | SetEnabled (bool enabled) |
| Enables and disables the controller for troubleshooting purposes.
|
|
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.
◆ LTVUnicycleController() [1/3]
frc::LTVUnicycleController::LTVUnicycleController |
( |
units::second_t | dt, |
|
|
units::meters_per_second_t | maxVelocity = 9_mps ) |
|
explicit |
Constructs a linear time-varying unicycle controller with default maximum desired error tolerances of (x = 0.0625 m, y = 0.125 m, heading = 2 rad) and default maximum desired control effort of (linear velocity = 1 m/s, angular velocity = 2 rad/s).
- Parameters
-
dt | Discretization timestep. |
maxVelocity | The maximum velocity for the controller gain lookup table. |
- Throws:
- std::domain_error if maxVelocity <= 0 m/s or >= 15 m/s.
◆ LTVUnicycleController() [2/3]
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 ) |
◆ LTVUnicycleController() [3/3]
◆ AtReference()
bool frc::LTVUnicycleController::AtReference |
( |
| ) |
const |
Returns true if the pose error is within tolerance of the reference.
◆ Calculate() [1/2]
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.
- Parameters
-
currentPose | The current pose. |
poseRef | The desired pose. |
linearVelocityRef | The desired linear velocity. |
angularVelocityRef | The desired angular velocity. |
◆ Calculate() [2/2]
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.
- Parameters
-
currentPose | The current pose. |
desiredState | The desired pose, linear velocity, and angular velocity from a trajectory. |
◆ operator=()
Move assignment operator.
◆ SetEnabled()
void frc::LTVUnicycleController::SetEnabled |
( |
bool | enabled | ) |
|
Enables and disables the controller for troubleshooting purposes.
- Parameters
-
enabled | If the controller is enabled or not. |
◆ SetTolerance()
void frc::LTVUnicycleController::SetTolerance |
( |
const Pose2d & | poseTolerance | ) |
|
Sets the pose error which is considered tolerable for use with AtReference().
- Parameters
-
poseTolerance | Pose error which is tolerable. |
The documentation for this class was generated from the following file: