Java 类edu.wpi.first.wpilibj.PIDSource 实例源码
项目:turtleshell
文件:SetDistanceToBox.java
public SetDistanceToBox(double distance) {
requires(Robot.drivetrain);
pid = new PIDController(-2, 0, 0, new PIDSource() {
PIDSourceType m_sourceType = PIDSourceType.kDisplacement;
public double pidGet() {
return Robot.drivetrain.getDistanceToObstacle();
}
@Override
public void setPIDSourceType(PIDSourceType pidSource) {
m_sourceType = pidSource;
}
@Override
public PIDSourceType getPIDSourceType() {
return m_sourceType;
}
}, new PIDOutput() {
public void pidWrite(double d) {
Robot.drivetrain.drive(d, d);
}
});
pid.setAbsoluteTolerance(0.01);
pid.setSetpoint(distance);
}
项目:turtleshell
文件:DriveStraight.java
public DriveStraight(double distance) {
requires(Robot.drivetrain);
pid = new PIDController(4, 0, 0,
new PIDSource() {
PIDSourceType m_sourceType = PIDSourceType.kDisplacement;
public double pidGet() {
return Robot.drivetrain.getDistance();
}
@Override
public void setPIDSourceType(PIDSourceType pidSource) {
m_sourceType = pidSource;
}
@Override
public PIDSourceType getPIDSourceType() {
return m_sourceType;
}
},
new PIDOutput() { public void pidWrite(double d) {
Robot.drivetrain.drive(d, d);
}});
pid.setAbsoluteTolerance(0.01);
pid.setSetpoint(distance);
}
项目:strongback-java
文件:SoftwarePIDControllerTest.java
protected static PIDSource sourceFor(SystemModel model, PIDSourceType initialSourceType) {
return new PIDSource() {
private PIDSourceType sourceType = initialSourceType;
@Override
public PIDSourceType getPIDSourceType() {
return sourceType;
}
@Override
public void setPIDSourceType(PIDSourceType pidSource) {
this.sourceType = pidSource;
}
@Override
public double pidGet() {
return model.getActualValue();
}
};
}
项目:SwerveDrive
文件:SwervePod.java
public SwervePod(SpeedController turningMotor, SpeedController driveMotor, Encoder encoder, double encoderDistancePerTick, AngularSensor directionSensor) {
// Initialize motors //
_turningMotor = turningMotor;
_driveMotor = driveMotor;
// Initialize sensors //
_encoder = encoder;
_encoder.setPIDSourceParameter(PIDSource.PIDSourceParameter.kRate);
_encoder.setDistancePerPulse(encoderDistancePerTick);
_encoder.start();
_directionSensor = directionSensor;
// Initialize PID loops //
// Turning //
PIDTurning = new PIDController(Kp_turning, Ki_turning, Kd_turning, _directionSensor, _turningMotor);
PIDTurning.setOutputRange(minSpeed, maxSpeed);
PIDTurning.setContinuous(true);
PIDTurning.setAbsoluteTolerance(tolerance_turning);
PIDTurning.enable();
// Linear driving //
PIDDriving = new PIDController(Kp_driving, Ki_driving, Kd_driving, _encoder, _driveMotor);
PIDDriving.setOutputRange(minSpeed, maxSpeed);
PIDDriving.disable(); //TODO: Enable
}
项目:BadRobot2013
文件:EasyPID.java
/**
* Constructs an EasyPID object with the given parameters
* @param p the constant P value
* @param i the constant I value
* @param d the constant D value
* @param f the constant F value
* @param name the name to be given to the EasyPID object for SmartDashboard
* @param s the source to be used for input in the PIDController object
*/
public EasyPID(double p, double i, double d, double f, String name, PIDSource s)
{
this.name = name;
System.out.println("constucting PIDEasy object");
source = s;
output = new SoftPID();
P = p;
I = i;
D = d;
F = f;
controller = new PIDController(P, I, D, F, source, output);
SmartDashboard.putData(name, controller);
}
项目:steamworks-java
文件:DriveToPeg.java
public DriveToPeg(){
double distance = .2;
requires(Robot.driveBase);
double kP = -.4;
double kI = 1;
double kD = 5;
pid = new PIDController(kP, kI, kD, new PIDSource() {
PIDSourceType m_sourceType = PIDSourceType.kDisplacement;
@Override
public double pidGet() {
return Robot.driveBase.getDistanceAhead();
}
@Override
public void setPIDSourceType(PIDSourceType pidSource) {
m_sourceType = pidSource;
}
@Override
public PIDSourceType getPIDSourceType() {
return m_sourceType;
}
}, new PIDOutput() {
@Override
public void pidWrite(double d) {
Robot.driveBase.driveForward(d);
System.out.println(d);
}
});
pid.setAbsoluteTolerance(0.01);
pid.setSetpoint(distance);
pid.setOutputRange(0, .35);
SmartDashboard.putData("driveToPeg", pid);
}
项目:2017-Steamworks
文件:NavXGyroWrapper.java
public NavXGyroWrapper(PIDSource wrappedSource) throws IllegalSourceException {
super(wrappedSource);
if (wrappedSource.getClass() != AHRS.class) {
throw new IllegalSourceException();
}
else {
m_navxSource = ((AHRS) m_pidSource);
}
}
项目:2017-Steamworks
文件:NavXAccelWrapper.java
public NavXAccelWrapper(PIDSource wrappedSource, Axis axis) throws IllegalSourceException {
super(wrappedSource);
if (wrappedSource.getClass() != AHRS.class) {
throw new IllegalSourceException();
}
else {
m_navxSource = ((AHRS) m_pidSource);
this.axis = axis;
}
}
项目:2017SteamBot2
文件:DriveToAngle.java
public DriveToAngle(double angle, PIDSource source) {
requires(Robot.driveTrain);
setPoint = angle;
Robot.driveTrain.ahrs.reset();
controller = new PIDController(0.75, 0, 0.9, 0, source, this);
controller.setInputRange(-180, 180);
controller.setOutputRange(-.26, .26);
controller.setAbsoluteTolerance(1.0);
controller.setContinuous(true);
LiveWindow.addActuator("DriveToAngle", "RotationController", controller);
}
项目:2017SteamBot2
文件:DriveToDistance.java
public DriveToDistance(double distance, PIDSource source) {
// Use requires() here to declare subsystem dependencies
// eg. requires(chassis);
requires(Robot.driveTrain);
setPoint = distance;
controller = new PIDController(0.3, 0, 1, source, this);
controller.setOutputRange(-.28, .28);
controller.setAbsoluteTolerance(.5);
}
项目:snobot-2017
文件:LinearDigitalFilter.java
/**
* Create a linear FIR or IIR filter.
*
* @param source The PIDSource object that is used to get values
* @param ffGains The "feed forward" or FIR gains
* @param fbGains The "feed back" or IIR gains
*/
public LinearDigitalFilter(PIDSource source, double[] ffGains,
double[] fbGains) {
super(source);
m_inputs = new CircularBuffer(ffGains.length);
m_outputs = new CircularBuffer(fbGains.length);
m_inputGains = ffGains;
m_outputGains = fbGains;
}
项目:snobot-2017
文件:LinearDigitalFilter.java
/**
* Creates a K-tap FIR moving average filter of the form: y[n] = 1/k * (x[k] + x[k-1] + ... +
* x[0]).
*
* <p>This filter is always stable.
*
* @param source The PIDSource object that is used to get values
* @param taps The number of samples to average over. Higher = smoother but slower
* @throws IllegalArgumentException if number of taps is less than 1
*/
public static LinearDigitalFilter movingAverage(PIDSource source, int taps) {
if (taps <= 0) {
throw new IllegalArgumentException("Number of taps was not at least 1");
}
double[] ffGains = new double[taps];
for (int i = 0; i < ffGains.length; i++) {
ffGains[i] = 1.0 / taps;
}
double[] fbGains = new double[0];
return new LinearDigitalFilter(source, ffGains, fbGains);
}
项目:RobotCode2017
文件:DriveStraightCommand.java
public void setPIDSource(PIDSource source)
{
turnController = new PIDController(kP, kI, kD, kF, source, this);
turnController.setInputRange(-15.0, 15.0);
turnController.setOutputRange(-1.0, 1.0);
turnController.setAbsoluteTolerance(kToleranceDegrees);
turnController.setContinuous(false);
}
项目:2014CataBot
文件:TargetSource.java
public PIDSource getSource(final int index) {
return new PIDSource() {
public double pidGet() {
return vals[index];
}
};
}
项目:robot2014
文件:ChassisSubsystem.java
public ChassisSubsystem() {
encLeft.setPIDSourceParameter(PIDSource.PIDSourceParameter.kRate);
encRight.setPIDSourceParameter(PIDSource.PIDSourceParameter.kRate);
encLeft.start();
encRight.start();
pidLeft.setInputRange(-Constants.MAX_ENCODER_COUNTS, Constants.MAX_ENCODER_COUNTS);
pidRight.setInputRange(-Constants.MAX_ENCODER_COUNTS, Constants.MAX_ENCODER_COUNTS);
pidLeft.setOutputRange(-1.0, 1.0);
pidRight.setOutputRange(-1.0, 1.0);
}
项目:Storm2014
文件:BangBangController.java
public BangBangController (PIDOutput pidOutput, PIDSource pidSource, double period){
_pidSource = pidSource;
_pidOutput = pidOutput;
_period = period;
_setPoint = 0;
_timer.schedule(new _bgTask(), 0, (long) (1000*_period));
}
项目:Storm2014
文件:TakeBackHalfPlusPlus.java
public TakeBackHalfPlusPlus(PIDOutput pidoutput, PIDSource pidsource, double period, double max, double min){
_pidSource = pidsource;
_pidOutput = pidoutput;
_setPoint = 0;
_period = period;
_max = max;
_min = min;
_timer.schedule(new _bgTask(), 0, (long) (1000 * _period));
}
项目:649code2014
文件:PIDController649.java
/**
* Allocate a PID object with the given constants for P, I, D, and F
*
* @param Kp the proportional coefficient
* @param Ki the integral coefficient
* @param Kd the derivative coefficient
* @param Kf the feed forward term
* @param source The PIDSource object that is used to get values
* @param output The PIDOutput object that is set to the output percentage
* @param period the loop time for doing calculations. This particularly
* effects calculations of the integral and differential terms. The default
* is 50ms.
*/
public PIDController649(double Kp, double Ki, double Kd, double Kf,
PIDSource source, PIDOutput output,
double period) {
if (source == null) {
throw new NullPointerException("Null PIDSource was given");
}
if (output == null) {
throw new NullPointerException("Null PIDOutput was given");
}
m_controlLoop = new java.util.Timer();
m_P = Kp;
m_I = Ki;
m_D = Kd;
m_F = Kf;
m_pidInput = source;
m_pidOutput = output;
m_period = period;
m_controlLoop.schedule(new PIDTask(this), 0L, (long) (m_period * 1000));
instances++;
UsageReporting.report(UsageReporting.kResourceType_PIDController, instances);
m_tolerance = new NullTolerance();
m_outputDirection = true;
}
项目:2017-Steamworks
文件:VariablePIDInput.java
public VariablePIDInput(PIDSource wrappedSource) {
m_pidSource = wrappedSource;
}
项目:frc-2016
文件:PIDSpeedController.java
public PIDSpeedController(PIDSource source, PIDOutput output, String subsystem, String controllerName) {
controller = new PIDController(0, 0, 0, 0, source, output);
LiveWindow.addActuator(subsystem, controllerName, controller);
}
项目:snobot-2017
文件:Filter.java
public Filter(PIDSource source) {
m_source = source;
}
项目:frc-2015
文件:PIDSpeedController.java
public PIDSpeedController(PIDSource source, PIDOutput output, String subsystem, String controllerName) {
controller = new PIDController(0, 0, 0, 0, source, output);
LiveWindow.addActuator(subsystem, controllerName, controller);
}
项目:strongback-java
文件:SoftwarePIDControllerTest.java
protected static PIDSource sourceFor(SystemModel model) {
return sourceFor(model, PIDSourceType.kRate);
}
项目:649code2014
文件:PIDController649.java
/**
* Read the input, calculate the output accordingly, and write to the
* output. This should only be called by the PIDTask and is created during
* initialization.
*/
private void calculate() {
boolean enabled;
PIDSource pidInput;
synchronized (this) {
if (m_pidInput == null) {
return;
}
if (m_pidOutput == null) {
return;
}
enabled = m_enabled; // take snapshot of these values...
pidInput = m_pidInput;
}
if (enabled) {
double input;
input = pidInput.pidGet();
double result;
PIDOutput pidOutput = null;
synchronized (this) {
m_error = m_setpoint - input;
if (m_continuous) {
if (Math.abs(m_error)
> (m_maximumInput - m_minimumInput) / 2) {
if (m_error > 0) {
m_error = m_error - m_maximumInput + m_minimumInput;
} else {
m_error = m_error
+ m_maximumInput - m_minimumInput;
}
}
}
if (m_I != 0) {
double potentialIGain = (m_totalError + m_error) * m_I;
if (potentialIGain < m_maximumOutput) {
if (potentialIGain > m_minimumOutput) {
m_totalError += m_error;
} else {
m_totalError = m_minimumOutput / m_I;
}
} else {
m_totalError = m_maximumOutput / m_I;
}
}
//******************************************************************************************************************
if (m_error > 0 && m_prevError < 0 || m_error < 0 && m_prevError > 0) {
m_totalError = 0;
}
//******************************************************************************************************************
m_result = m_P * m_error + m_I * m_totalError + m_D * (m_error - m_prevError) + m_setpoint * m_F;
m_errorDiff = m_prevError - m_error;
m_prevError = m_error;
if (m_result > m_maximumOutput) {
m_result = m_maximumOutput;
} else if (m_result < m_minimumOutput) {
m_result = m_minimumOutput;
}
pidOutput = m_pidOutput;
result = m_result * (m_outputDirection ? 1 : -1);
}
pidOutput.pidWrite(result);
}
}
项目:rover
文件:RobotMap.java
public static void init() {
//initialize encoders
frontWheelEncoder = new Encoder(1, 1, 1, 2, false, CounterBase.EncodingType.k2X);
frontWheelEncoder.setDistancePerPulse(WHEEL_ENCODER_DISTANCE_PER_TICK);
frontWheelEncoder.setPIDSourceParameter(PIDSource.PIDSourceParameter.kRate); // have encoder measure rate, not distance
frontWheelEncoder.start();
LiveWindow.addSensor("Drivetrain", "frontWheelEncoder", frontWheelEncoder);
leftWheelEncoder = new Encoder(1, 3, 1, 4, false, CounterBase.EncodingType.k2X);
leftWheelEncoder.setDistancePerPulse(WHEEL_ENCODER_DISTANCE_PER_TICK);
leftWheelEncoder.setPIDSourceParameter(PIDSource.PIDSourceParameter.kRate); // have encoder measure rate, not distance
leftWheelEncoder.start();
LiveWindow.addSensor("Drivetrain", "leftWheelEncoder", leftWheelEncoder);
backWheelEncoder = new Encoder(1, 5, 1, 6, false, CounterBase.EncodingType.k2X);
backWheelEncoder.setDistancePerPulse(WHEEL_ENCODER_DISTANCE_PER_TICK);
backWheelEncoder.setPIDSourceParameter(PIDSource.PIDSourceParameter.kRate); // have encoder measure rate, not distance
backWheelEncoder.start();
LiveWindow.addSensor("Drivetrain", "backWheelEncoder", backWheelEncoder);
rightWheelEncoder = new Encoder(1, 7, 1, 8, false, CounterBase.EncodingType.k2X);
rightWheelEncoder.setDistancePerPulse(WHEEL_ENCODER_DISTANCE_PER_TICK);
rightWheelEncoder.setPIDSourceParameter(PIDSource.PIDSourceParameter.kRate); // have encoder measure rate, not distance
rightWheelEncoder.start();
LiveWindow.addSensor("Drivetrain", "rightWheelEncoder", rightWheelEncoder);
frontModuleEncoder = new Encoder(2, 1, 2, 2, false, CounterBase.EncodingType.k2X);
frontModuleEncoder.setDistancePerPulse(MODULE_ENCODER_DISTANCE_PER_TICK);
frontModuleEncoder.setPIDSourceParameter(PIDSource.PIDSourceParameter.kDistance); // have encoder measure rate, not distance
frontModuleEncoder.start();
LiveWindow.addSensor("Drivetrain", "frontModuleEncoder", frontModuleEncoder);
leftModuleEncoder = new Encoder(2, 7, 2, 8, false, CounterBase.EncodingType.k2X);
leftModuleEncoder.setDistancePerPulse(MODULE_ENCODER_DISTANCE_PER_TICK);
leftModuleEncoder.setPIDSourceParameter(PIDSource.PIDSourceParameter.kDistance); // have encoder measure rate, not distance
leftModuleEncoder.start();
LiveWindow.addSensor("Drivetrain", "leftModuleEncoder", leftModuleEncoder);
backModuleEncoder = new Encoder(2, 5, 2, 6, false, CounterBase.EncodingType.k2X);
backModuleEncoder.setDistancePerPulse(MODULE_ENCODER_DISTANCE_PER_TICK);
backModuleEncoder.setPIDSourceParameter(PIDSource.PIDSourceParameter.kDistance); // have encoder measure rate, not distance
backModuleEncoder.start();
LiveWindow.addSensor("Drivetrain", "backModuleEncoder", backModuleEncoder);
rightModuleEncoder = new Encoder(2, 3, 2, 4, false, CounterBase.EncodingType.k2X);
rightModuleEncoder.setDistancePerPulse(MODULE_ENCODER_DISTANCE_PER_TICK);
rightModuleEncoder.setPIDSourceParameter(PIDSource.PIDSourceParameter.kDistance); // have encoder measure rate, not distance
rightModuleEncoder.start();
LiveWindow.addSensor("Drivetrain", "rightModuleEncoder", rightModuleEncoder);
//initialize motors
frontWheelMotor = new Victor246(1,1);
LiveWindow.addActuator("Drivetrain", "frontWheelMotor", (Victor) frontWheelMotor);
leftWheelMotor = new Victor246(1,2);
LiveWindow.addActuator("Drivetrain", "leftWheelMotor", (Victor) leftWheelMotor);
backWheelMotor = new Victor246(1,3);
LiveWindow.addActuator("Drivetrain", "backWheelMotor", (Victor) backWheelMotor);
rightWheelMotor = new Victor246(1,4);
LiveWindow.addActuator("Drivetrain", "rightWheelMotor", (Victor) rightWheelMotor);
frontModuleMotor = new Jaguar246(2,1);
LiveWindow.addActuator("Drivetrain", "frontModuleMotor", (Jaguar) frontModuleMotor);
leftModuleMotor = new Jaguar246(2,2);
LiveWindow.addActuator("Drivetrain", "leftModuleMotor", (Jaguar) leftModuleMotor);
backModuleMotor = new Jaguar246(2,3);
LiveWindow.addActuator("Drivetrain", "backModuleMotor", (Jaguar) backModuleMotor);
rightModuleMotor = new Jaguar246(2,4);
LiveWindow.addActuator("Drivetrain", "rightModuleMotor", (Jaguar) rightModuleMotor);
//initialize limit switch
angleZeroingButton = new DigitalInput(1,9);
LiveWindow.addSensor("Drivetrain", "encoderZeroingSwitch", angleZeroingButton);
}
项目:BadRobot2013
文件:EasyPID.java
public EasyPID(String name, PIDSource s)
{
this(0.0, 0.0, 0.0, 0.0, name, s);
}
项目:BadRobot2013
文件:EasyPID.java
/**
* Constructs an EasyPID object with the given source
* @param s the source that should be used for the PIDController input
*/
public EasyPID(PIDSource s)
{
this("EasyPID", s);
}
项目:snobot-2017
文件:LinearDigitalFilter.java
/**
* Creates a one-pole IIR low-pass filter of the form: y[n] = (1-gain)*x[n] + gain*y[n-1] where
* gain = e^(-dt / T), T is the time constant in seconds.
*
* <p>This filter is stable for time constants greater than zero.
*
* @param source The PIDSource object that is used to get values
* @param timeConstant The discrete-time time constant in seconds
* @param period The period in seconds between samples taken by the user
*/
public static LinearDigitalFilter singlePoleIIR(PIDSource source,
double timeConstant,
double period) {
double gain = Math.exp(-period / timeConstant);
double[] ffGains = {1.0 - gain};
double[] fbGains = {-gain};
return new LinearDigitalFilter(source, ffGains, fbGains);
}
项目:snobot-2017
文件:LinearDigitalFilter.java
/**
* Creates a first-order high-pass filter of the form: y[n] = gain*x[n] + (-gain)*x[n-1] +
* gain*y[n-1] where gain = e^(-dt / T), T is the time constant in seconds.
*
* <p>This filter is stable for time constants greater than zero.
*
* @param source The PIDSource object that is used to get values
* @param timeConstant The discrete-time time constant in seconds
* @param period The period in seconds between samples taken by the user
*/
public static LinearDigitalFilter highPass(PIDSource source,
double timeConstant,
double period) {
double gain = Math.exp(-period / timeConstant);
double[] ffGains = {gain, -gain};
double[] fbGains = {-gain};
return new LinearDigitalFilter(source, ffGains, fbGains);
}
项目:CMonster2015
文件:DriveUtils.java
/**
* Creates a {@link PIDController} from a {@link PIDConstants} object and
* the specified source and output.
*
* @param constants the PID constants
* @param source the PID source
* @param output the PID output
* @return a shiny new PID controller
*/
public static PIDController createPIDControllerFromConstants(PIDConstants constants,
PIDSource source, PIDOutput output) {
return new PIDController(constants.p, constants.i, constants.d, constants.f, source, output);
}
项目:649code2014
文件:PIDController649.java
/**
* Allocate a PID object with the given constants for P, I, D and period
*
* @param Kp
* @param Ki
* @param Kd
* @param source
* @param output
* @param period
*/
public PIDController649(double Kp, double Ki, double Kd,
PIDSource source, PIDOutput output,
double period) {
this(Kp, Ki, Kd, 0.0, source, output, period);
}
项目:649code2014
文件:PIDController649.java
/**
* Allocate a PID object with the given constants for P, I, D, using a 50ms
* period.
*
* @param Kp the proportional coefficient
* @param Ki the integral coefficient
* @param Kd the derivative coefficient
* @param source The PIDSource object that is used to get values
* @param output The PIDOutput object that is set to the output percentage
*/
public PIDController649(double Kp, double Ki, double Kd,
PIDSource source, PIDOutput output) {
this(Kp, Ki, Kd, source, output, kDefaultPeriod);
}
项目:649code2014
文件:PIDController649.java
/**
* Allocate a PID object with the given constants for P, I, D, using a 50ms
* period.
*
* @param Kp the proportional coefficient
* @param Ki the integral coefficient
* @param Kd the derivative coefficient
* @param source The PIDSource object that is used to get values
* @param output The PIDOutput object that is set to the output percentage
*/
public PIDController649(double Kp, double Ki, double Kd, double Kf,
PIDSource source, PIDOutput output) {
this(Kp, Ki, Kd, Kf, source, output, kDefaultPeriod);
}