class TankPIDVAFollower : TrajectoryFollower
Traditional PID controller with feedforward velocity and acceleration components to follow a trajectory. More specifically, one feedback loop controls the path displacement (that is, x in the robot reference frame), and another feedback loop to minimize cross track (lateral) error via heading correction (overall, very similar to HolonomicPIDVAFollower except adjusted for the nonholonomic constraint). Feedforward is applied at the wheel level.
axialCoeffs
- PID coefficients for the robot axial (robot X) controller
crossTrackCoeffs
- PID coefficients for the robot heading controller based on cross track error
admissibleError
- admissible/satisfactory pose error at the end of each move
timeout
- max time to wait for the error to be admissible
TankPIDVAFollower(axialCoeffs: PIDCoefficients, crossTrackCoeffs: PIDCoefficients, admissibleError: Pose2d = Pose2d(), timeout: Double = 0.0, clock: NanoClock = NanoClock.system())
Traditional PID controller with feedforward velocity and acceleration components to follow a trajectory. More specifically, one feedback loop controls the path displacement (that is, x in the robot reference frame), and another feedback loop to minimize cross track (lateral) error via heading correction (overall, very similar to HolonomicPIDVAFollower except adjusted for the nonholonomic constraint). Feedforward is applied at the wheel level. |
var lastError: Pose2d
Robot pose error computed in the last update call. |
val clock: NanoClock
clock |
|
lateinit var trajectory: Trajectory
Trajectory being followed if isFollowing is true. |
fun internalUpdate(currentPose: Pose2d): DriveSignal |
fun elapsedTime(): Double
Returns the elapsed time since the last followTrajectory call. |
|
open fun followTrajectory(trajectory: Trajectory): Unit
Follow the given trajectory. |
|
fun isFollowing(): Boolean
Returns true if the current trajectory has finished executing. |
|
fun update(currentPose: Pose2d): DriveSignal
Run a single iteration of the trajectory follower. |