package com.team254.lib.trajectory; import static org.junit.Assert.*; import org.junit.Test; public class TestTrajectoryFollower { @Test public void test() { TrajectoryFollower follower = new TrajectoryFollower(); TrajectoryFollower.TrajectoryConfig config = new TrajectoryFollower.TrajectoryConfig(); config.dt = 0.005; config.max_acc = 180.0; config.max_vel = 60.0; TrajectoryFollower.TrajectorySetpoint setpoint = new TrajectoryFollower.TrajectorySetpoint(); setpoint.acc = 0; setpoint.vel = 0; setpoint.pos = 0; follower.configure(0.1, 0.0, 0.0, 1.0, 0.0, config); follower.setGoal(setpoint, 100.0); int num_cycles = 0; while (!follower.isFinishedTrajectory()) { double command = follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Result: " + setpoint + "; Command: " + command); assert (setpoint.vel > -1E-3); assert (command > -1E-3); ++num_cycles; } follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Took " + num_cycles + " cycles"); num_cycles = 0; assertEquals(setpoint.pos, 100.0, 1E-3); assertEquals(setpoint.vel, 0.0, 1E-3); // Now go -100 units follower.setGoal(setpoint, 0.0); while (!follower.isFinishedTrajectory()) { double command = follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Result: " + setpoint + "; Command: " + command); assert (setpoint.vel < 1E-3); assert (command < 1E-3); ++num_cycles; } follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Took " + num_cycles + " cycles"); num_cycles = 0; assertEquals(setpoint.pos, 0.0, 1E-3); assertEquals(setpoint.vel, 0.0, 1E-3); // Now we will go back to 100, but start with an initial velocity // upwards. setpoint.pos = 0; setpoint.vel = 50.0; setpoint.acc = 0; follower.setGoal(setpoint, 100.0); while (!follower.isFinishedTrajectory()) { double command = follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Result: " + setpoint + "; Command: " + command); assert (setpoint.vel > -1E-3); assert (command > -1E-3); ++num_cycles; } follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Took " + num_cycles + " cycles"); num_cycles = 0; assertEquals(setpoint.pos, 100.0, 1E-3); assertEquals(setpoint.vel, 0.0, 1E-3); // Now we will go back to 0, but start with an initial velocity upwards. setpoint.pos = 100.0; setpoint.vel = 50.0; setpoint.acc = 0; follower.setGoal(setpoint, 0.0); while (!follower.isFinishedTrajectory()) { double command = follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Result: " + setpoint + "; Command: " + command); assert (setpoint.vel > -1E-3); assert (command > -1E-3); ++num_cycles; } follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Took " + num_cycles + " cycles"); num_cycles = 0; assertEquals(setpoint.pos, 0.0, 1E-3); assertEquals(setpoint.vel, 0.0, 1E-3); // Now we will go to 2, but start with an initial velocity that is too // fast. setpoint.pos = 0.0; setpoint.vel = 60.0; setpoint.acc = 0; follower.setGoal(setpoint, 2.0); while (!follower.isFinishedTrajectory()) { double command = follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Result: " + setpoint + "; Command: " + command); assert (setpoint.vel > -1E-3); assert (command > -1E-3); ++num_cycles; } follower.calculate(setpoint.pos, setpoint.vel); setpoint = follower.getCurrentSetpoint(); System.out.println("Took " + num_cycles + " cycles"); num_cycles = 0; assertEquals(setpoint.pos, 2.0, 1E-3); assertEquals(setpoint.vel, 0.0, 1E-3); } }