X-Git-Url: http://challenge-bot.com/repos/?a=blobdiff_plain;f=src%2Forg%2Fusfirst%2Ffrc%2Fteam3501%2Frobot%2Fsubsystems%2FDriveTrain.java;h=a6a6f8c9ce7e7c7e434e144dcd316a3e3d35e8d9;hb=fc01fb0fb74d31a0818c69d0306253deb4236c58;hp=44744c4a078fa0f0edca7d3b0a6ca5e2290b481a;hpb=8e4c083cf74939e98aabaf8aaf45976a148d0666;p=3501%2F2017steamworks diff --git a/src/org/usfirst/frc/team3501/robot/subsystems/DriveTrain.java b/src/org/usfirst/frc/team3501/robot/subsystems/DriveTrain.java index 44744c4..a6a6f8c 100644 --- a/src/org/usfirst/frc/team3501/robot/subsystems/DriveTrain.java +++ b/src/org/usfirst/frc/team3501/robot/subsystems/DriveTrain.java @@ -1,33 +1,48 @@ package org.usfirst.frc.team3501.robot.subsystems; import org.usfirst.frc.team3501.robot.Constants; +import org.usfirst.frc.team3501.robot.MathLib; import org.usfirst.frc.team3501.robot.commands.driving.JoystickDrive; -import org.usfirst.frc.team3501.robot.utils.BNO055; import com.ctre.CANTalon; +import edu.wpi.first.wpilibj.ADXRS450_Gyro; +import edu.wpi.first.wpilibj.DoubleSolenoid; +import edu.wpi.first.wpilibj.DoubleSolenoid.Value; import edu.wpi.first.wpilibj.Encoder; -import edu.wpi.first.wpilibj.I2C.Port; import edu.wpi.first.wpilibj.RobotDrive; import edu.wpi.first.wpilibj.command.Subsystem; public class DriveTrain extends Subsystem { - public static double driveP = 0.008, driveI = 0.001, driveD = -0.002; - public static double defaultGyroP = 0.009, defaultGyroI = 0.00000, - defaultGyroD = -0.000; - private double gyroZero = 0; - - public static final double WHEEL_DIAMETER = 6; // inches - public static final int ENCODER_PULSES_PER_REVOLUTION = 256; + public static double driveP = 0.012, driveI = 0.0011, driveD = -0.002; + public static double smallTurnP = 0.004, smallTurnI = 0.0013, + smallTurnD = 0.005; + public static double largeTurnP = .003, largeTurnI = .0012, largeTurnD = .006; + public static double driveStraightGyroP = 0.01; + + public static final double WHEEL_DIAMETER = 4; // inches + public static final double ENCODER_PULSES_PER_REVOLUTION = 256; public static final double INCHES_PER_PULSE = WHEEL_DIAMETER * Math.PI / ENCODER_PULSES_PER_REVOLUTION; + public static final double MAINTAIN_CLIMBED_POSITION = 0; + public static final double TIME_TO_CLIMB_FOR = 0; + public static final double CLIMBER_SPEED = 0; + + public static final boolean DRIVE_BRAKE_MODE = true; + public static final boolean DRIVE_COAST_MODE = false; + private static DriveTrain driveTrain; + private final CANTalon frontLeft, frontRight, rearLeft, rearRight; private final RobotDrive robotDrive; private final Encoder leftEncoder, rightEncoder; + private final DoubleSolenoid leftDriveTrainPiston, rightDriveTrainPiston; + private final DoubleSolenoid gearManipulatorPiston; - private BNO055 imu; + private ADXRS450_Gyro imu; + + public boolean shouldBeClimbing = false; private DriveTrain() { // MOTOR CONTROLLERS @@ -48,9 +63,22 @@ public class DriveTrain extends Subsystem { // ROBOT DRIVE robotDrive = new RobotDrive(frontLeft, rearLeft, frontRight, rearRight); - this.imu = BNO055.getInstance(BNO055.opmode_t.OPERATION_MODE_IMUPLUS, - BNO055.vector_type_t.VECTOR_EULER, Port.kOnboard, (byte) 0x28); - gyroZero = imu.getHeading(); + this.imu = new ADXRS450_Gyro(Constants.DriveTrain.GYRO_PORT); + + // TODO: Not sure if MODULE_NUMBER should be the same for both + leftDriveTrainPiston = new DoubleSolenoid( + Constants.DriveTrain.PISTON_MODULE, + Constants.DriveTrain.LEFT_GEAR_PISTON_FORWARD, + Constants.DriveTrain.LEFT_GEAR_PISTON_REVERSE); + rightDriveTrainPiston = new DoubleSolenoid( + Constants.DriveTrain.PISTON_MODULE, + Constants.DriveTrain.RIGHT_GEAR_PISTON_FORWARD, + Constants.DriveTrain.RIGHT_GEAR_PISTON_REVERSE); + + gearManipulatorPiston = new DoubleSolenoid( + Constants.DriveTrain.PISTON_MODULE, + Constants.DriveTrain.GEAR_MANIPULATOR_PISTON_FORWARD, + Constants.DriveTrain.GEAR_MANIPULATOR_PISTON_REVERSE); } public static DriveTrain getDriveTrain() { @@ -61,7 +89,10 @@ public class DriveTrain extends Subsystem { } // DRIVE METHODS - public void setMotorValues(final double left, final double right) { + public void setMotorValues(double left, double right) { + left = MathLib.restrictToRange(left, -1.0, 1.0); + right = MathLib.restrictToRange(right, -1.0, 1.0); + frontLeft.set(left); rearLeft.set(left); @@ -77,20 +108,12 @@ public class DriveTrain extends Subsystem { setMotorValues(0, 0); } - public double getFrontLeftMotorVal() { - return frontLeft.get(); - } - - public double getFrontRightMotorVal() { - return frontRight.get(); + public double getLeftMotorVal() { + return (frontLeft.get() + rearLeft.get()) / 2; } - public double getRearLeftMotorVal() { - return frontLeft.get(); - } - - public double getRearRightMotorVal() { - return frontLeft.get(); + public double getRightMotorVal() { + return (frontRight.get() + rearRight.get()) / 2; } // ENCODER METHODS @@ -106,6 +129,7 @@ public class DriveTrain extends Subsystem { public void printEncoderOutput() { System.out.println("left: " + getLeftEncoderDistance()); System.out.println("right: " + getRightEncoderDistance()); + // System.out.println(getAvgEncoderDistance()); } public double getAvgEncoderDistance() { @@ -131,18 +155,61 @@ public class DriveTrain extends Subsystem { // ------Gyro------// public double getAngle() { - if (!this.imu.isInitialized()) - return -1; - return this.imu.getHeading() - this.gyroZero; + return this.imu.getAngle(); } public void resetGyro() { - this.gyroZero = this.getAngle(); + this.imu.reset(); + } + /* + * @return a value that is the current setpoint for the piston kReverse or + * KForward + */ + public Value getLeftDriveTrainPiston() { + return leftDriveTrainPiston.get(); } - public double getZeroAngle() { - return this.gyroZero; + /* + * @return a value that is the current setpoint for the piston kReverse or + * KForward + */ + public Value getRightDriveTrainPiston() { + return rightDriveTrainPiston.get(); + } + + /* + * Changes the ball shift gear assembly to high + */ + public void setHighGear() { + changeGear(Constants.DriveTrain.FORWARD_PISTON_VALUE); + } + + /* + * Changes the ball shift gear assembly to low + */ + public void setLowGear() { + changeGear(Constants.DriveTrain.REVERSE_PISTON_VALUE); + } + + /* + * Changes the gear to a DoubleSolenoid.Value + */ + private void changeGear(DoubleSolenoid.Value gear) { + leftDriveTrainPiston.set(gear); + rightDriveTrainPiston.set(gear); + } + + public Value getGearManipulatorPistonValue() { + return gearManipulatorPiston.get(); + } + + public void extendGearManipulatorPiston() { + gearManipulatorPiston.set(Constants.DriveTrain.FORWARD_PISTON_VALUE); + } + + public void retractGearManipulatorPiston() { + gearManipulatorPiston.set(Constants.DriveTrain.REVERSE_PISTON_VALUE); } @Override @@ -150,4 +217,11 @@ public class DriveTrain extends Subsystem { setDefaultCommand(new JoystickDrive()); } + public void setCANTalonsBrakeMode(boolean mode) { + frontLeft.enableBrakeMode(mode); + rearLeft.enableBrakeMode(mode); + + frontRight.enableBrakeMode(mode); + rearRight.enableBrakeMode(mode); + } }