public class RamseteController
extends java.lang.Object
Instead of using wheel path arc lengths (which are in the robot's local coordinate frame), nonlinear controllers like pure pursuit and Ramsete use global pose. The controller uses this extra information to guide a linear reference tracker like the PID controllers back in by adjusting the references of the PID controllers.
The paper "Control of Wheeled Mobile Robots: An Experimental Overview" describes a nonlinear controller for a wheeled vehicle with unicycle-like kinematics; a global pose consisting of x, y, and theta; and a desired pose consisting of x_d, y_d, and theta_d. We call it Ramsete because that's the acronym for the title of the book it came from in Italian ("Robotica Articolata e Mobile per i SErvizi e le TEcnologie").
See Controls Engineering in the FIRST Robotics Competition section on Ramsete unicycle controller for a derivation and analysis.
Constructor and Description |
---|
RamseteController(double b,
double zeta)
Construct a Ramsete unicycle controller.
|
Modifier and Type | Method and Description |
---|---|
boolean |
atReference()
Returns true if the pose error is within tolerance of the reference.
|
ChassisSpeeds |
calculate(Pose2d currentPose,
Pose2d poseRef,
double linearVelocityRefMeters,
double angularVelocityRefRadiansPerSecond)
Returns the next output of the Ramsete controller.
|
ChassisSpeeds |
calculate(Pose2d currentPose,
Trajectory.State desiredState)
Returns the next output of the Ramsete controller.
|
void |
setTolerance(Pose2d poseTolerance)
Sets the pose error which is considered tolerable for use with
atReference().
|
public RamseteController(double b, double zeta)
b
- Tuning parameter (b > 0) for which larger values make convergence more
aggressive like a proportional term.zeta
- Tuning parameter (0 < zeta < 1) for which larger values provide more damping
in response.public boolean atReference()
public void setTolerance(Pose2d poseTolerance)
poseTolerance
- Pose error which is tolerable.public ChassisSpeeds calculate(Pose2d currentPose, Pose2d poseRef, double linearVelocityRefMeters, double angularVelocityRefRadiansPerSecond)
The reference pose, linear velocity, and angular velocity should come from a drivetrain trajectory.
currentPose
- The current pose.poseRef
- The desired pose.linearVelocityRefMeters
- The desired linear velocity in meters.angularVelocityRefRadiansPerSecond
- The desired angular velocity in meters.public ChassisSpeeds calculate(Pose2d currentPose, Trajectory.State desiredState)
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.