The code below will help you to be able read basic information from your Limelight Vision camera.
If you haven’t already read the documentation it’s a good idea to start there -> http://docs.limelightvision.io/en/latest/
Start with a new “Timed Robot” template project and add a few imports
import edu.wpi.first.networktables.NetworkTable; import edu.wpi.first.networktables.NetworkTableEntry; import edu.wpi.first.networktables.NetworkTableInstance;
Within the “public void teleopPeriodic() {” put the below in to start reading data from the Limelight Vision camera
Limelight Data Start
// get the default instance of NetworkTables
NetworkTableInstance inst = NetworkTableInstance.getDefault();
// get a reference to the subtable called "datatable"
NetworkTable table = inst.getTable("limelight");
inst.startClientTeam(3535); // Make sure you set this to your team number
inst.startDSClient(); // recommended if running on DS computer; this gets the robot IP from the DS
// NetworkTableEntry TeamEntry = table.getEntry("tx");
NetworkTableEntry xEntry = table.getEntry("tx");
NetworkTableEntry yEntry = table.getEntry("ty");
NetworkTableEntry aEntry = table.getEntry("ta");
NetworkTableEntry lEntry = table.getEntry("tl");
NetworkTableEntry vEntry = table.getEntry("tv");
NetworkTableEntry sEntry = table.getEntry("ts");
NetworkTableEntry tshortEntry = table.getEntry("tshort");
NetworkTableEntry tlongEntry = table.getEntry("tlong");
NetworkTableEntry thorEntry = table.getEntry("thor");
NetworkTableEntry tvertEntry = table.getEntry("tvert");
NetworkTableEntry getpipeEntry = table.getEntry("getpipe");
NetworkTableEntry camtranEntry = table.getEntry("camtran");
NetworkTableEntry ledModeEntry = table.getEntry("ledMode");
// double tx = xEntry.getDouble(0.0);
double tx = xEntry.getDouble(0.0); // Horizontal Offset From Crosshair To Target (-27 degrees to 27 degrees)
double ty = yEntry.getDouble(0.0); // Vertical Offset From Crosshair To Target (-20.5 degrees to 20.5 degrees)
double ta = aEntry.getDouble(0.0); // Target Area (0% of image to 100% of image)
double tl = lEntry.getDouble(0.0); // The pipeline’s latency contribution (ms) Add at least 11ms for image capture
// latency.
double tv = vEntry.getDouble(0.0); // Whether the limelight has any valid targets (0 or 1)
double ts = sEntry.getDouble(0.0); // Skew or rotation (-90 degrees to 0 degrees)
// double tshort = tshortEntry.getString(); // Sidelength of shortest side of
// the fitted bounding box (pixels)
// double tlong = tlong // Sidelength of longest side of the fitted bounding box
// (pixels)
// double thor = thor // Horizontal sidelength of the rough bounding box (0 -
// 320 pixels)
// double tvert = tvert // Vertical sidelength of the rough bounding box (0 -
// 320 pixels)
// double getpipe = getpipe // True active pipeline index of the camera (0 .. 9)
// double camtran = camtran // Results of a 3D position solution, 6 numbers:
// Translation (x,y,y) Rotation(pitch,yaw,roll)
//ledModeEntry.setNumber(0); // use the LED Mode set in the current pipeline
ledModeEntry.setNumber(1); // force off
//ledModeEntry.setNumber(2); // force blink
//ledModeEntry.setNumber(3); // force on
//System.out.println("X: " + tx);
//System.out.println("Y: " + ty);
//System.out.println("A: " + ta);
//System.out.println("L: " + tl);
//System.out.println("V: " + tv);
//System.out.println("S: " + tv);
// post to smart dashboard periodically
SmartDashboard.putNumber("Limelight X", tx);
SmartDashboard.putNumber("Limelight Y", ty);
SmartDashboard.putNumber("Limelight Area", ta);
SmartDashboard.putNumber("Limelight Latency", tl);
SmartDashboard.putNumber("Limelight Valid Target", tv);
SmartDashboard.putNumber("Limelight Skew", ts);
// Limelight Data End
Provided everything is running correctly you should be able to get updated numbers in a SmartDashboard
Last Updated on March 9, 2020
All information on this site is shared with the intention to help. Before any source code or program is ran on a production (non-development) system it is suggested you test it and fully understand what it is doing not just what it appears it is doing. I accept no responsibility for any damage you may do with this code.