/* * Copyright (c) 2013, Will Szumski * Copyright (c) 2013, Doug Szumski * * This file is part of Cyclismo. * * Cyclismo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Cyclismo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Cyclismo. If not, see <http://www.gnu.org/licenses/>. */ import org.cowboycoders.ant.Node; import org.cowboycoders.ant.interfaces.AntTransceiver; import org.cowboycoders.ant.messages.StandardMessage; import org.cowboycoders.ant.messages.commands.ResetMessage; import org.cowboycoders.ant.utils.AntLoggerImpl; import org.cowboycoders.ant.utils.SimplePidLogger; import org.cowboycoders.pid.GainController; import org.cowboycoders.pid.GainParameters; import org.cowboycoders.pid.OutputControlParameters; import org.cowboycoders.turbotrainers.Mode; import org.cowboycoders.turbotrainers.TurboTrainerDataListener; import org.cowboycoders.turbotrainers.bushido.brake.BushidoBrake; import org.cowboycoders.turbotrainers.bushido.brake.BushidoBrake.VersionRequestCallback; import org.cowboycoders.turbotrainers.bushido.brake.ConstantResistanceController; import org.cowboycoders.turbotrainers.bushido.brake.SpeedPidBrakeController; import org.cowboycoders.turbotrainers.bushido.brake.SpeedResistanceMapper; import org.cowboycoders.turbotrainers.bushido.brake.SpeedResistancePowerMapper; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import java.io.File; import java.util.concurrent.TimeoutException; import java.util.logging.ConsoleHandler; import java.util.logging.Level; public class BrakeControllerTest { private static AntTransceiver antchip = new AntTransceiver(0); @BeforeClass public static void beforeClass() { AntTransceiver.LOGGER.setLevel(Level.SEVERE); ConsoleHandler handler = new ConsoleHandler(); // PUBLISH this level handler.setLevel(Level.ALL); AntTransceiver.LOGGER.addHandler(handler); //Node.LOGGER.setLevel(Level.ALL); //Node.LOGGER.addHandler(handler); StandardMessage msg = new ResetMessage(); //StandardMessage msg = new BroadcastDataMessage(); //antchip.start(); //antchip.send(msg.encode()); //antchip.send(msg.encode()); //antchip.stop(); } @AfterClass public static void afterClass() { antchip.stop(); //antchip.stop(); } @Before public void before() throws InterruptedException { //Thread.sleep(1000); } TurboTrainerDataListener dataListener = new TurboTrainerDataListener() { @Override public void onSpeedChange(double speed) { System.out.println("speed: " + speed); } @Override public void onPowerChange(double power) { System.out.println("power: " + power); } @Override public void onCadenceChange(double cadence) { // TODO Auto-generated method stub } @Override public void onDistanceChange(double distance) { //System.out.println("Distance: " + distance); //System.out.println("Distance real: " + b.getRealDistance()); } @Override public void onHeartRateChange(double heartRate) { // TODO Auto-generated method stub } }; VersionRequestCallback versionCallback = new VersionRequestCallback() { @Override public void onVersionReceived(String versionString) { System.out.println(versionString); } }; BushidoBrake b; AntLoggerImpl antLogger = new AntLoggerImpl(); //@Test public void testRequestVersion() throws InterruptedException, TimeoutException { Node n = new Node(BrakeControllerTest.antchip); n.registerAntLogger(antLogger); SpeedPidBrakeController pid = new SpeedPidBrakeController(); b = new BushidoBrake(); b.setMode(Mode.TARGET_SLOPE); b.setNode(n); b.overrideDefaultResistanceController(pid); b.registerDataListener(dataListener); b.startConnection(); for (int i = 0; i < 100; i++) { b.requestVersion(versionCallback); Thread.sleep(500); } b.stop(); n.stop(); } GainController gainController = new GainController() { @Override public GainParameters getGain(OutputControlParameters parameters) { //we could ease them until on target, so we don't get a sudden jerk //if (parameters.getSetPoint() < 7.4) { // return new GainParameters(2,0.5,0); //} //return new GainParameters(-1.8,-0.5,-0.2); //return new GainParameters(-4.6,-0.8,-0.3); /ok return new GainParameters(-15.0, -0.5, 0.); } }; //@Test public void testBrakeSlopeController() throws InterruptedException, TimeoutException { Node n = new Node(BrakeControllerTest.antchip); n.registerAntLogger(antLogger); SimplePidLogger pidLogger = new SimplePidLogger(); SpeedPidBrakeController pid = new SpeedPidBrakeController(); b = new BushidoBrake(); b.setMode(Mode.TARGET_SLOPE); b.setNode(n); b.overrideDefaultResistanceController(pid); b.registerDataListener(dataListener); b.startConnection(); pid.getPidParameterController().registerPidUpdateLister(pidLogger); pid.getPidParameterController().setGainController(gainController); pidLogger.newLog(pid.getPidParameterController()); Thread.sleep(60000); b.stop(); n.stop(); } @Test public void testPolynomialController() throws InterruptedException, TimeoutException { Node n = new Node(BrakeControllerTest.antchip); n.registerAntLogger(antLogger); SpeedResistanceMapper mapper = new SpeedResistanceMapper(); mapper.enableLogging(new File("./logs/polylog")); b = new BushidoBrake(); b.setNode(n); b.setMode(Mode.TARGET_SLOPE); b.overrideDefaultResistanceController(mapper); b.registerDataListener(dataListener); b.startConnection(); Thread.sleep(60000); b.stop(); n.stop(); } //@Test This is broken, because the surface fit mapper isn't supported / working public void testSurfaceFitController() throws InterruptedException, TimeoutException { Node n = new Node(BrakeControllerTest.antchip); n.registerAntLogger(antLogger); SpeedResistancePowerMapper mapper = new SpeedResistancePowerMapper(); mapper.enableLogging(new File("./logs/surfacelog_newbounds")); b = new BushidoBrake(); b.setMode(Mode.TARGET_SLOPE); b.setNode(n); b.overrideDefaultResistanceController(mapper); b.registerDataListener(dataListener); b.startConnection(); Thread.sleep(240000); b.stop(); n.stop(); } //@Test public void testFixedResistanceCOntroller() throws InterruptedException, TimeoutException { Node n = new Node(BrakeControllerTest.antchip); n.registerAntLogger(antLogger); ConstantResistanceController mapper = new ConstantResistanceController(); mapper.setAbsoluteResistance(1000); mapper.enableLogging(new File("./logs/constant_reslog")); b = new BushidoBrake(); b.setMode(Mode.TARGET_SLOPE); b.setNode(n); b.overrideDefaultResistanceController(mapper); b.registerDataListener(dataListener); b.startConnection(); Thread.sleep(60000); b.stop(); n.stop(); } }