Hello everybody! We switched all of our code from C++ to Java last week and consequently have little experience with Java. Basically when we deploy our Java code we get the error, “ERROR: Could not instantiate robot org.usfirst.frc.team2637.robot.Robot!” followed by a lot of gibberish. We know that the error is in our code and not the roboRio because the example code that FRC provides does not give us this error. Here is our code:
package Steamworks;
import edu.wpi.first.wpilibj.*;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
public class Robot
{
XboxController xboxDrive;
XboxController xboxAux;
Joystick joystickTemp;
Hardware hardware;
Drive driver;
double kickerSpeed;
double flapSpeed;
boolean notFinished;
double circumference;
double lFlapOpen,rFlapOpen,lFlapClosed,rFlapClosed;
Robot()
{
xboxDrive = new XboxController(0);
xboxAux = new XboxController(1);
joystickTemp = new Joystick(2);
hardware= new Hardware();
driver= new Drive(); //initiates robot components
kickerSpeed = 0.6;
flapSpeed = 0.5;
notFinished = true;
circumference = 8;
lFlapOpen =.31;
rFlapOpen =.54;
lFlapClosed = .424;
rFlapClosed = .42;
}
public void resetCounters()
{
hardware.OLScounter.reset();
hardware.ORScounter.reset();
hardware.CLScounter.reset();
hardware.CRScounter.reset();
hardware.KKLScounter.reset();
hardware.KNKLScounter.reset();
}
public boolean isSwitchSetOLSC()
{
int value = hardware.OLScounter.get();
hardware.OLScounter.reset();
return value > 0;
}
public boolean isSwitchSetORSC()
{
int value = hardware.ORScounter.get();
hardware.ORScounter.reset();
return value > 0;
}
public boolean isSwitchSetCLSC ()
{
int value = hardware.CLScounter.get();
hardware.CLScounter.reset();
return value > 0;
}
public boolean isSwitchSetCRSC ()
{
int value = hardware.CRScounter.get();
hardware.CRScounter.reset();
return value > 0;
}
public boolean isSwitchSetKKLSC ()
{
int value = hardware.KKLScounter.get();
hardware.KKLScounter.reset();
return value > 0;
}
public boolean isSwitchSetKNKLSC ()
{
int value = hardware.KNKLScounter.get();
hardware.KNKLScounter.reset();
return value > 0;
}
public void kick ()
{
//if (hardware.gearOpenLS.Get() == true && hardware.gearOpenRS.Get() == true)
//{
//hardware.kicker.Set(kickerSpeed); // start kicking
hardware.KKLScounter.reset();
hardware.kickerTimer.reset();
while (!isSwitchSetKKLSC()/*hardware.kickerKickedLS.Get() == 0*/) // wait until you hit the max kick limit switch
{
hardware.kicker.set(kickerSpeed);
}
hardware.kicker.set(0);
hardware.KNKLScounter.reset(); // make sure that the bottom limit switch is reset so you can move again
kickerSpeed = .2;
hardware.kickerTimer.start();
//hardware.kicker.Set(-kickerSpeed); // move the kicker back to the original position
while (hardware.kickerTimer.get() < 3/*!isSwitchSetKNKLSC()hardware.kickerNotKickedLS.Get() == 0*/) // wait until you hit the original position of the kicker
{
hardware.kicker.set(-kickerSpeed);
}
hardware.kickerTimer.reset();
hardware.KKLScounter.reset(); // reset the top limit switch so it can be used again
hardware.kicker.set(0); // stop the kicker
kickerSpeed = .6;
//}
}
public void releaseGear()
{
notFinished = true;
while(notFinished)
{
if (!hardware.gearCloseLS.get() && hardware.gearCloseRS.get())
{
closeFlaps();
}
openFlaps();
if (isKickReady())
{
kick();
notFinished = false;
}
}
while (!hardware.gearButton.get())
{
}
closeFlaps();
notFinished = true;
}
public void gearSequence()
{
openFlaps();
kick();
closeFlaps();
}
public boolean gearButtonPressed ()
{
//return ((hardware.gearOpenLS.GetChannel() == 1) && (hardware.gearOpenRS.GetChannel() == 1));
//return (isSwitchSetOLSC() && isSwitchSetORSC());
//return ((hardware.gearOpenLS.Get() == true) && (hardware.gearOpenRS.Get() == true));
return (hardware.gearOpenLS.get() && hardware.gearOpenRS.get());
}
public boolean isKickReady ()
{
//return ((hardware.gearOpenLS.GetChannel() == 1) && (hardware.gearOpenRS.GetChannel() == 1));
//return (isSwitchSetOLSC() && isSwitchSetORSC());
//return ((hardware.gearOpenLS.Get() == true) && (hardware.gearOpenRS.Get() == true));
return (hardware.gearOpenLS.get() && hardware.gearOpenRS.get());
}
public boolean isKickReadyL ()
{
//return ((hardware.gearOpenLS.GetChannel() == 1) && (hardware.gearOpenRS.GetChannel() == 1));
//return (isSwitchSetOLSC() && isSwitchSetORSC());
return (hardware.gearOpenLS.get() == true);
}
public boolean isKickReadyR ()
{
//return ((hardware.gearOpenLS.GetChannel() == 1) && (hardware.gearOpenRS.GetChannel() == 1));
//return (isSwitchSetOLSC() && isSwitchSetORSC());
return (hardware.gearOpenRS.get() == true);
}
public boolean isGearReady ()
{
//return ((hardware.gearCloseLS.kDigitalChannels() == 1) && (hardware.gearCloseRS.GetChannel() == 1));
//return (isSwitchSetCLSC() && isSwitchSetCRSC());
//return ((hardware.gearCloseLS.Get() == true) && (hardware.gearCloseRS.Get() == true));
return (hardware.gearCloseLS.get() && hardware.gearCloseRS.get());
}
public boolean isGearReadyL ()
{
//return ((hardware.gearCloseLS.kDigitalChannels() == 1) && (hardware.gearCloseRS.GetChannel() == 1));
//return (isSwitchSetCLSC() && isSwitchSetCRSC());
return (hardware.gearCloseLS.get() == true);
}
public boolean isGearReadyR ()
{
//return ((hardware.gearCloseLS.kDigitalChannels() == 1) && (hardware.gearCloseRS.GetChannel() == 1));
//return (isSwitchSetCLSC() && isSwitchSetCRSC());
return (hardware.gearCloseRS.get() == true);
}
public void openFlaps()
{
while(!isKickReady())
{
if (!isKickReadyL())
{
hardware.gearL.set(-flapSpeed);
}
else
{
hardware.gearL.set(0);
}
if (!isKickReadyR())
{
hardware.gearR.set(flapSpeed);
}
else
{
hardware.gearR.set(0);
}
}
hardware.gearL.set(0);
hardware.gearR.set(0);
}
public void closeFlaps()
{
while(!isGearReady())
{
if (!isGearReadyL())
{
hardware.gearL.set(flapSpeed);
}
else
{
hardware.gearL.set(0);
}
if (!isGearReadyR())
{
hardware.gearR.set(-flapSpeed);
}
else
{
hardware.gearR.set(0);
}
}
hardware.gearL.set(0);
hardware.gearR.set(0);
}
double PID(int taget_spd)
{
int deltaT = 2;
double kP = SmartDashboard.getNumber("kP", 0.8);
double kI = SmartDashboard.getNumber("kI", 0.45);
double kD = SmartDashboard.getNumber("kD", 0.1);
double P,I,D;
double targetSpd = SmartDashboard.getNumber("Target Speed", 200);
double power, currentSpd = 0,deltaspd; //might need to add old speed
double error = 0,oldError = 0,integralErr = 0;
double derivative;
double errThreshhold = 1;
currentSpd = hardware.shooterEncoder.getRate(); /// get current velocity or whatever the velocity function is not an error
error = targetSpd-currentSpd; //calculate error
integralErr += error; //calculate integral error
if(integralErr>errThreshhold)
{
integralErr = errThreshhold;
}
else if(integralErr<-errThreshhold)
{
integralErr = -errThreshhold;
}
deltaspd = error-oldError;
derivative = deltaspd/deltaT;
P = kP*error; // PID constant scaling
I = kI*integralErr;
D = kD*derivative;
power = P + I + D;
oldError = error;
return power;
}
public void turnRight (double d)
{
Timer.delay(.3); //pause code for a time in seconds
hardware.navx.reset();
double startingAngle = hardware.navx.getAngle(),power = 1;
while (startingAngle+d-0.5 > hardware.navx.getAngle() && power >= 0.35)
{
double currAngle = hardware.navx.getAngle();
power = 1/(0.03115*currAngle+1);
driver.autoDrive(power,-power);
SmartDashboard.putNumber("Navx reading",hardware.navx.getAngle());
}
while(startingAngle+d-0.5 > hardware.navx.getAngle())
{
driver.autoDrive(power,-power);
}
driver.autoDrive(0,0);
Timer.delay(.3);
}
public void turnLeft (double turnDegrees)
{
Timer.delay(.3); //wait for a time in milliseconds
hardware.navx.reset();
double startingAngle = hardware.navx.getAngle(),power = 1;
while (startingAngle+turnDegrees-0.5 > Math.abs(hardware.navx.getAngle()) && power >= 0.35)
{
double currAngle = Math.abs(hardware.navx.getAngle());
power = 1/(0.03115*currAngle+1);
driver.autoDrive(-power,power);
SmartDashboard.putNumber("Navx reading",hardware.navx.getAngle());
}
while(startingAngle+turnDegrees-0.5 > Math.abs(hardware.navx.getAngle()))
{
driver.autoDrive(-power,power);
}
driver.autoDrive(0,0);
Timer.delay(.3);
}
public void PDStraightDrive(double speed, double distance, int TReset)
{
double kP = -SmartDashboard.getNumber("kP", .45);
double kD = -SmartDashboard.getNumber("kD", .25);
int deltaTime = TReset; //milliseconds
hardware.navx.reset();
hardware.wheelEncoder.reset();
double error = 0;
double errornew;
double change;
double derivitive;
while(hardware.wheelEncoder.getDistance() <= distance)
{
SmartDashboard.putNumber("Encoder Reading",hardware.wheelEncoder.getDistance());
errornew = hardware.navx.getAngle();
change = errornew-error;
derivitive = change/(double)deltaTime;
driver.autoArcade(-speed, (kP*errornew + kD*derivitive));
error = errornew;
SmartDashboard.putNumber("CURRENT ANGLE", hardware.navx.getAngle());
}
driver.autoArcade(0,0);
}
public void toggleHopperServo()
{
if(SmartDashboard.getNumber("Hopper servo position", 1) == 1)
{
if(xboxAux.getBButton())
{
hardware.hopper.set(1);
SmartDashboard.putNumber("Hopper servo position", 0);
}
}
else if(SmartDashboard.getNumber("Hopper servo position", 0) == 0)
{
if(xboxAux.getBButton())
{
hardware.hopper.set(0);
SmartDashboard.putNumber("Hopper servo position", 1);
}
}
}
public void RobotInit()
{
//autonomous variables
SmartDashboard.putNumber("kP", .45);
SmartDashboard.putNumber("kD", .25);
SmartDashboard.putNumber("Wheel Diameter (in inches)", 8);
SmartDashboard.putNumber("starting position",1);
SmartDashboard.putString("alliance color", "blue");
hardware.Fleft.setExpiration(30);
hardware.Rleft.setExpiration(30);
hardware.Fright.setExpiration(30);
hardware.Rright.setExpiration(30);
}
public void AutonomousInit()
{
int Treset = 4;
double normalSpeed = 0.6;
circumference = Math.PI*SmartDashboard.getNumber("Wheel Diameter (in inches)", 8);
hardware.wheelEncoder.setDistancePerPulse(circumference/(180*4.74)); //prepares encoder for autonomous
int startPos = (int) SmartDashboard.getNumber("starting position", 1);
PDStraightDrive(normalSpeed,72,Treset);
//turnRight(90);
//turnLeft(90);
//squirrels gearSequence();
/*if (SmartDashboard.getString("alliance color","blue")=="blue")
{
switch(startPos)
{
case 1:// left blue
PDStraightDrive(normalSpeed,72.4,Treset);
turnRight(60);
PDStraightDrive(normalSpeed,52.8,Treset);
gear;//Gear
PDStraightDrive(-normalSpeed,69.6,Treset);
turnRight(90);
PDStraightDrive(normalSpeed,25.2,Treset);
turnRight(77.6);
PDStraightDrive(normalSpeed,47.2,Treset);
shoot;//shoot
break;
case 2:// middle blue
PDStraightDrive(normalSpeed,72,Treset);
gear;
PDStraightDrive(-normalSpeed,31.52,Treset);
turnLeft(90);
PDStraightDrive(normalSpeed,95.2,Treset);
turnLeft(44.2);
PDStraightDrive(normalSpeed,47.2,Treset);
shoot;//shoot
break;
case 3: // right blue
PDStraightDrive(normalSpeed,69.6,Treset);
turnLeft(60);
PDStraightDrive(normalSpeed,58.4,Treset);
gear;//put on gear
break;
default:
break;
}
}
else if (SmartDashboard.getString("alliance color","blue")=="red")
{
switch(startPos)
{
case 1: // left red
PDStraightDrive(normalSpeed,69.6,Treset);
turnRight(60);
PDStraightDrive(normalSpeed,52.8,Treset);
gear;//put on gear
break;
case 2:// middle red
PDStraightDrive(normalSpeed,72,Treset);
gear;//put on gear
PDStraightDrive(-normalSpeed,31.52,Treset);
turnRight(90);
PDStraightDrive(normalSpeed,58.2,Treset);
turnRight(44.7);
PDStraightDrive(normalSpeed,47.2,Treset);
shoot;//shoot
break;
case 3:// right red
PDStraightDrive(normalSpeed,72.4,Treset);
gear;//put on gear
turnLeft(60);
PDStraightDrive(normalSpeed,52.8,Treset);
PDStraightDrive(-normalSpeed,69.6,Treset);
turnLeft(90);
PDStraightDrive(normalSpeed,25.2,Treset);
turnLeft(77.6);
PDStraightDrive(normalSpeed,47.2 ,Treset);
shoot;//shoot
break;
default:
break;
}
}*/
}
public void TeleopPeriodic()
{
driver.setDriveControl(xboxDrive);
hardware.intake.set(xboxDrive.getRawAxis(3/*right trigger*/));
hardware.climber.set(xboxDrive.getRawAxis(4/*left trigger*/));
hardware.flywheel.set(xboxAux.getRawAxis(3/*right trigger*/));
hardware.feeder.set(xboxAux.getRawAxis(4/*left trigger*/));
if (xboxDrive.getRawButton(5)/*right bumper*/)
{
gearSequence();//gear mechanism code
}
else if (xboxDrive.getRawButton(4)/*left bumper*/)
{
//hopperToggle;//hopper flap code
}
/*else if (xboxDrive.getRawButton(button))
{
//shooterPID; //shooter code
}*/
if (xboxDrive.getAButton())
{
xboxDrive.setRumble(GenericHID.RumbleType.kLeftRumble, 1.0);
xboxDrive.setRumble(GenericHID.RumbleType.kRightRumble, 1.0);
}
if (xboxDrive.getBButton())
{
xboxDrive.setRumble(GenericHID.RumbleType.kLeftRumble, 0);
xboxDrive.setRumble(GenericHID.RumbleType.kRightRumble, 0);
}
if (joystickTemp.getRawButton(1)) {
openFlaps();
//hardware.gearL.Set(-flapSpeed);
//hardware.gearR.Set(flapSpeed);
}
else if (joystickTemp.getRawButton(2)){
closeFlaps();
//hardware.gearL.Set(flapSpeed);
//hardware.gearR.Set(-flapSpeed);
}
else if (joystickTemp.getRawButton(7)){
//closeFlaps();
hardware.gearL.set(flapSpeed);
//hardware.gearR.Set(-.5);
}
else if (joystickTemp.getRawButton(8)){
//closeFlaps();
hardware.gearL.set(-flapSpeed);
//hardware.gearR.Set(-.5);
}
else if (joystickTemp.getRawButton(9)){
//closeFlaps();
//hardware.gearL.Set(.5);
hardware.gearR.set(flapSpeed);
}
else if (joystickTemp.getRawButton(10)){
//closeFlaps();
//hardware.gearL.Set(.5);
hardware.gearR.set(-flapSpeed);
}
else{
hardware.gearL.set(0);
hardware.gearR.set(0);
}
if(joystickTemp.getRawButton(3)){
//releaseGear();
hardware.kicker.set(kickerSpeed);
//kick();
}
else if (joystickTemp.getRawButton(5)){
releaseGear();
}
else if(joystickTemp.getRawButton(11)){
kick();
}
else if(joystickTemp.getRawButton(4)){
hardware.kicker.set(-kickerSpeed);
}
else{
hardware.kicker.set(0);
}
}
}
Constructive criticism is welcome and appreciated! Thanks!
- team2637 programming