We did fix that and we have that update complete.
Here's our code
Code:
import edu.wpi.first.wpilibj.GenericHID.Hand;
import edu.wpi.first.wpilibj.Gyro;
import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.PIDController;
import edu.wpi.first.wpilibj.PIDOutput;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.SpeedController;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj.camera.AxisCamera;
import edu.wpi.first.wpilibj.camera.AxisCameraException;
import edu.wpi.first.wpilibj.image.ColorImage;
import edu.wpi.first.wpilibj.image.NIVisionException;
import edu.wpi.first.wpilibj.DriverStationLCD;
// import edu.wpi.first.wpilibj.samples.CircleTrackerDemo.TrackerDashboard;
/**
* The VM is configured to automatically run this class, and to call the
* functions corresponding to each mode, as described in the IterativeRobot
* documentation. If you change the name of this class or the package after
* creating this project, you must also update the manifest file in the resource
* directory.
*/
public class CircleTrackerDemo extends IterativeRobot {
double kScoreThreshold = .01;
AxisCamera cam;
TrackerDashboard trackerDashboard = new TrackerDashboard();
/**
* This function is run when the robot is first started up and should be
* used for any initialization code.
*/
public void robotInit() {
Timer.delay(10.0);
cam = AxisCamera.getInstance();
cam.writeResolution(AxisCamera.ResolutionT.k320x240);
cam.writeBrightness(0);
}
/**
* This function is called periodically during autonomous
*/
public void autonomousPeriodic() {
}
/**
* This function is called while the robot is disabled.
*/
public void disabledPeriodic() {
}
/**
* This function is called at the beginning of teleop
*/
public void teleopInit() {
boolean lastTrigger = false;
DriverStationLCD.getInstance().println(DriverStationLCD.Line.kUser2, 1, "Starting Camera Code");
DriverStationLCD.getInstance().updateLCD();
Timer.delay(1.0); //Wait one second so user can see starting message
}
/**
* This function is called periodically during operator control
*/
public void teleopPeriodic() {
try {
DriverStationLCD.getInstance().println(DriverStationLCD.Line.kUser2, 1, "Camera Running ");
DriverStationLCD.getInstance().updateLCD();
if (cam.freshImage()) {// && turnController.onTarget()) {
ColorImage image = cam.getImage();
Thread.yield();
Target[] targets = Target.findCircularTargets(image);
Thread.yield();
image.free();
if (targets.length == 0 || targets[0].m_score < kScoreThreshold) {
System.out.println("No target found");
DriverStationLCD.getInstance().println(DriverStationLCD.Line.kUser2, 1, "Not Found " );
Target[] newTargets = new Target[targets.length + 1];
newTargets[0] = new Target();
newTargets[0].m_majorRadius = 0;
newTargets[0].m_minorRadius = 0;
newTargets[0].m_score = 0;
for (int i = 0; i < targets.length; i++) {
newTargets[i + 1] = targets[i];
}
} else {
DriverStationLCD.getInstance().println(DriverStationLCD.Line.kUser3, 1, "Pos X: " + targets[0].m_xPos );
DriverStationLCD.getInstance().println(DriverStationLCD.Line.kUser4, 1, "Pos Y: " + targets[0].m_yPos );
DriverStationLCD.getInstance().updateLCD();
System.out.println(targets[0]);
System.out.println("Target Angle: " + targets[0].getHorizontalAngle());
}
}
} catch (NIVisionException ex) {
ex.printStackTrace();
} catch (AxisCameraException ex) {
ex.printStackTrace();
}
}
}
It's just the basic default code for the CircleTrackerDemo