View Single Post
  #1   Spotlight this post!  
Unread 02-17-2016, 12:41 PM
fireXtract fireXtract is offline
MegaHertz_Lux
FRC #2847 (Mega Hertz)
Team Role: Programmer
 
Join Date: Jan 2013
Rookie Year: 2012
Location: fmt
Posts: 42
fireXtract is an unknown quantity at this point
NetworkTables not refreshing

I am using grip with networktables and I do not think I am setting it up properly. Here is my code:
Code:
package org.usfirst.frc.team2847.robot.subsystems;

import org.usfirst.frc.team2847.robot.RobotMap;
import org.usfirst.frc.team2847.robot.commands.JoystickDrive;

import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.command.PIDSubsystem;
import edu.wpi.first.wpilibj.networktables.NetworkTable;

/**
 *
 */
public class Drivetrain extends PIDSubsystem {

	// Initialize your subsystem here

	double[] greenAreasArray = {};
	double[] greenXArray = {};
	double[] greenYArray = {};
	double[] defaultValue = new double[0];

	double maxArea = 0;
	double greenX = 0;
	double greenY = 0;
	double offsetX;

	int arrayNum = 0;

	// create our drivetrain object
	RobotDrive myDriveTrain = new RobotDrive(RobotMap.frontLeftDrive, RobotMap.rearRightDrive);

	NetworkTable table = NetworkTable.getTable("GRIP/myContoursReport");

	public Drivetrain() {
		// Use these to get going:
		// setSetpoint() - Sets where the PID controller should move the system
		// to
		// enable() - Enables the PID controller.
		super("Drivetrain", RobotMap.kDriveP, RobotMap.kDriveI, RobotMap.kDriveD);
		setPercentTolerance(5.0);

		// viz

	}

	// Put methods for controlling this subsystem
	// here. Call these from Commands.

	public void initDefaultCommand() {
		// Set the default command for a subsystem here.
		setDefaultCommand(new JoystickDrive());
	}

	// make the method for our drivetrain
	public void manDrive(double leftValue, double rightValue) {
		myDriveTrain.tankDrive(leftValue, rightValue);
	}

	/*
	 * starts a counter and for each item in the number array compares it to the
	 * max value from before in the end of the loop we should have max = the
	 * biggest value in our array we do this to find out which contour is our
	 * target this should filter out any minor interference in the camera
	 */

	public boolean isContours() {
		table = NetworkTable.getTable("GRIP/myContoursReport");
		greenAreasArray = table.getNumberArray("area", defaultValue);
		if (greenAreasArray.length > 0) {
			System.out.println(greenAreasArray.length);
			return true;
		} else {
			System.out.println("no array");
			return false;
		}
	}

	public void findMaxArea() {
		if (isContours()) {
			System.out.println("Areas:");
			for (int counter = 0; counter < greenAreasArray.length; counter++) {
				if (greenAreasArray[counter] > maxArea) {
					maxArea = greenAreasArray[counter];
					arrayNum = counter;
					System.out.println(greenAreasArray[counter]);
				}
			}
			System.out.print(maxArea);
		}
	}

	public void updateArea() {
		findMaxArea();
	}

	public void useCenter() {
		this.updateArea();
		if (isContours()) {
			greenXArray = table.getNumberArray("centerX", defaultValue);
			greenYArray = table.getNumberArray("centerY", defaultValue);
			greenX = greenXArray[arrayNum];
			greenY = greenYArray[arrayNum];
		}
	}

	public double offsetCalc() {
		this.useCenter();
		offsetX = 320 - greenX;
		return offsetX;
	}

	protected double returnPIDInput() {
		// Return your input value for the PID loop
		// e.g. a sensor, like a potentiometer:
		// yourPot.getAverageVoltage() / kYourMaxVoltage;
		return greenY;
	}

	protected void usePIDOutput(double output) {
		// Use output to drive your system, like a motor
		// e.g. yourMotor.set(output);
		double go;
		go = (output * 0.50);
		if (offsetCalc() > 0) {
			this.manDrive(go * (greenX / 320), go);
		} else if (offsetCalc() < 0) {
			this.manDrive(go, go * (greenX / 320));
		} else {
			this.manDrive(go, go);
		}

		System.out.println(go);
	}
}
I currently use a button to call the PID, but my area array doesnt update. Its always 1001.1. How am I supposed to set up the NetworkTable, as a server, do I need to give it an IP? I am using Outline viewer server to view the GRIP tables right now, but how do I replicate that in my code to update.
Reply With Quote