package com.team254.frc2015.subsystems.controllers; import com.team254.lib.trajectory.TrajectoryFollower; import com.team254.lib.util.Controller; public class TrajectoryFollowingPositionController extends Controller { TrajectoryFollower m_follower; double m_goal; double m_error; double m_on_target_delta; double m_result = 0; public TrajectoryFollowingPositionController(double kp, double ki, double kd, double kv, double ka, double on_target_delta, TrajectoryFollower.TrajectoryConfig config) { m_follower = new TrajectoryFollower(); m_follower.configure(kp, ki, kd, kv, ka, config); m_on_target_delta = on_target_delta; } public void setGoal(TrajectoryFollower.TrajectorySetpoint current_state, double goal) { m_goal = goal; m_follower.setGoal(current_state, goal); } public double getGoal() { return m_follower.getGoal(); } public void setConfig(TrajectoryFollower.TrajectoryConfig config) { m_follower.setConfig(config); } public TrajectoryFollower.TrajectoryConfig getConfig() { return m_follower.getConfig(); } public void update(double position, double velocity) { m_error = m_goal - position; m_result = m_follower.calculate(position, velocity); } public TrajectoryFollower.TrajectorySetpoint getSetpoint() { return m_follower.getCurrentSetpoint(); } public double get() { return m_result; } @Override public void reset() { m_result = 0; m_error = 0; m_follower.setGoal(m_follower.getCurrentSetpoint(), m_goal); } public boolean isFinishedTrajectory() { return m_follower.isFinishedTrajectory(); } @Override public boolean isOnTarget() { return m_follower.isFinishedTrajectory() && Math.abs(m_error) < m_on_target_delta; } }