Permalink
| package com.team254.frc2015; | |
| import com.team254.frc2015.auto.AutoMode; | |
| import com.team254.frc2015.auto.AutoModeExecuter; | |
| import com.team254.frc2015.auto.AutoModeSelector; | |
| import com.team254.frc2015.behavior.BehaviorManager; | |
| import com.team254.frc2015.subsystems.Drive; | |
| import com.team254.frc2015.subsystems.ElevatorCarriage; | |
| import com.team254.frc2015.subsystems.MotorPeacock; | |
| import com.team254.frc2015.web.WebServer; | |
| import com.team254.lib.util.DriveSignal; | |
| import com.team254.lib.util.Looper; | |
| import com.team254.lib.util.MultiLooper; | |
| import com.team254.lib.util.SystemManager; | |
| import edu.wpi.first.wpilibj.IterativeRobot; | |
| import edu.wpi.first.wpilibj.Joystick; | |
| import edu.wpi.first.wpilibj.PowerDistributionPanel; | |
| public class Robot extends IterativeRobot { | |
| public enum RobotState { | |
| DISABLED, AUTONOMOUS, TELEOP | |
| } | |
| public static RobotState s_robot_state = RobotState.DISABLED; | |
| public static RobotState getState() { | |
| return s_robot_state; | |
| } | |
| public static void setState(RobotState state) { | |
| s_robot_state = state; | |
| } | |
| MultiLooper looper = new MultiLooper("Controllers", 1 / 200.0, true); | |
| MultiLooper slowLooper = new MultiLooper("SlowControllers", 1 / 100.0); | |
| Looper logUpdater = new Looper("Updater", new Updater(), 1 / 50.0); | |
| AutoModeExecuter autoModeRunner = new AutoModeExecuter(); | |
| Drive drive = HardwareAdaptor.kDrive; | |
| ElevatorCarriage top_carriage = HardwareAdaptor.kTopCarriage; | |
| ElevatorCarriage bottom_carriage = HardwareAdaptor.kBottomCarriage; | |
| MotorPeacock motor_peacock = HardwareAdaptor.kMotorPeacock; | |
| PowerDistributionPanel pdp = HardwareAdaptor.kPDP; | |
| BehaviorManager behavior_manager = new BehaviorManager(); | |
| OperatorInterface operator_interface = new OperatorInterface(); | |
| CheesyDriveHelper cdh = new CheesyDriveHelper(drive); | |
| Joystick leftStick = HardwareAdaptor.kLeftStick; | |
| Joystick rightStick = HardwareAdaptor.kRightStick; | |
| Joystick buttonBoard = HardwareAdaptor.kButtonBoard; | |
| static { | |
| SystemManager.getInstance().add(new RobotData()); | |
| } | |
| @Override | |
| public void robotInit() { | |
| System.out.println("Start robotInit()"); | |
| HardwareAdaptor.kGyroThread.start(); | |
| WebServer.startServer(); | |
| looper.addLoopable(top_carriage); | |
| looper.addLoopable(bottom_carriage); | |
| looper.addLoopable(motor_peacock); | |
| slowLooper.addLoopable(drive); | |
| logUpdater.start(); | |
| SystemManager.getInstance().add(behavior_manager); | |
| } | |
| @Override | |
| public void autonomousInit() { | |
| setState(RobotState.AUTONOMOUS); | |
| if (!top_carriage.isInitialized()) { | |
| top_carriage.findHome(); | |
| } | |
| HardwareAdaptor.kGyroThread.rezero(); | |
| HardwareAdaptor.kGyroThread.reset(); | |
| HardwareAdaptor.kLeftDriveEncoder.reset(); | |
| HardwareAdaptor.kRightDriveEncoder.reset(); | |
| AutoMode mode = AutoModeSelector.getInstance().getAutoMode(); | |
| autoModeRunner.setAutoMode(mode); | |
| // Prestart auto mode | |
| mode.prestart(); | |
| // Start control loops | |
| autoModeRunner.start(); | |
| looper.start(); | |
| slowLooper.start(); | |
| } | |
| @Override | |
| public void autonomousPeriodic() { | |
| } | |
| @Override | |
| public void teleopInit() { | |
| setState(RobotState.TELEOP); | |
| if (!top_carriage.isInitialized()) { | |
| top_carriage.findHome(); | |
| } | |
| System.out.println("Start teleopInit()"); | |
| looper.start(); | |
| } | |
| @Override | |
| public void teleopPeriodic() { | |
| cdh.cheesyDrive(-leftStick.getY(), rightStick.getX(), rightStick.getRawButton(1), true); | |
| behavior_manager.update(operator_interface.getCommands()); | |
| } | |
| @Override | |
| public void disabledInit() { | |
| setState(RobotState.DISABLED); | |
| System.out.println("Start disabledInit()"); | |
| // Stop auto mode | |
| autoModeRunner.stop(); | |
| // Stop routines | |
| //behavior_manager.reset(); | |
| // Stop control loops | |
| looper.stop(); | |
| slowLooper.stop(); | |
| // Stop controllers | |
| drive.setOpenLoop(DriveSignal.NEUTRAL); | |
| top_carriage.setOpenLoop(0.0, true); | |
| bottom_carriage.setOpenLoop(0.0, true); | |
| // Reload constants | |
| drive.reloadConstants(); | |
| top_carriage.reloadConstants(); | |
| bottom_carriage.reloadConstants(); | |
| System.gc(); | |
| System.out.println("end disable init!"); | |
| } | |
| @Override | |
| public void disabledPeriodic() { | |
| } | |
| } |