Example #1
0
 def sendableChooser(self):
     self.startingChooser = SendableChooser()
     self.startingChooser.addDefault('Move Forward Only', '!')
     self.startingChooser.addObject('Starting Left', 'L')
     self.startingChooser.addObject('Starting Middle', 'M')
     self.startingChooser.addObject('Starting Right', 'R')
     
     wpilib.SmartDashboard.putData('Starting Side', self.startingChooser)
     
     self.startingDelayChooser = SendableChooser()
     self.startingDelayChooser.addDefault('0', 0)
     self.startingDelayChooser.addObject('1', 1)
     self.startingDelayChooser.addObject('2', 2)
     self.startingDelayChooser.addObject('3', 3)
     self.startingDelayChooser.addObject('4', 4)
     self.startingDelayChooser.addObject('5', 5)
     self.startingDelayChooser.addObject('6', 6)
     self.startingDelayChooser.addObject('7', 7)
     self.startingDelayChooser.addObject('8', 8)
     self.startingDelayChooser.addObject('9', 9)
     self.startingDelayChooser.addObject('10', 10)
     self.startingDelayChooser.addObject('11', 11)
     self.startingDelayChooser.addObject('12', 12)
     self.startingDelayChooser.addObject('13', 13)
     self.startingDelayChooser.addObject('14', 14)
     self.startingDelayChooser.addObject('15', 15)
     
     wpilib.SmartDashboard.putData('Delay Time(sec)', self.startingDelayChooser)
     
     self.switchOrScale = SendableChooser()
     self.switchOrScale.addDefault('Switch', 'Switch')
     self.switchOrScale.addObject('Scale', 'Scale')
     
     wpilib.SmartDashboard.putData('Switch or Scale', self.switchOrScale)
Example #2
0
    def _create_smartdashboard_buttons(self):
        self._auto_program_chooser = SendableChooser()
        #self._auto_program_chooser.addDefault("Cross Line", 1)
        #self._auto_program_chooser.addObject("Hang Gear", 2)
        self._auto_program_chooser.addObject("Do Nothing", 3)
        SmartDashboard.putData("Autonomous", self._auto_program_chooser)

        self._starting_chooser = SendableChooser()
        self._starting_chooser.addDefault("Left", 1)
        self._starting_chooser.addObject("Center", 2)
        self._starting_chooser.addObject("Right", 3)
        SmartDashboard.putData("Starting_Position", self._starting_chooser)
Example #3
0
    def setupDashboardCommands(self):
        # Set up auton chooser
        self.autonChooser = SendableChooser()
        self.autonChooser.setDefaultOption(
            "Do Nothing", wpilib.command.WaitCommand(3.0, "Do Nothing"))
        self.autonChooser.addOption("Drive Forward", DriveTickTimed(1.0, 1.0))
        self.autonChooser.addOption("Drive Backward",
                                    DriveTickTimed(-1.0, -1.0))
        self.autonChooser.addOption("Rotate Right", DriveTickTimed(1.0, -1.0))
        self.autonChooser.addOption("Rotate Left", DriveTickTimed(-1.0, 1.0))
        SmartDashboard.putData("Auto mode", self.autonChooser)

        # Set up utility controls
        SmartDashboard.putData("Measure", Measure())

        # Drive controls
        DriveHuman.setupDashboardControls()
        SmartDashboard.putData("Brake Control",
                               DriveHuman.createBrakeModeToggleCommand())
        SmartDashboard.putData("Flip Front",
                               DriveHuman.createFlipFrontCommand())

        # Debug tools (if enabled)
        if self.debug:
            SmartDashboard.putData("CPU Load Test", LoadTest())
            SmartDashboard.putData("Drive Subsystem", subsystems.drive)
            dd = subsystems.drive.getDifferentialDrive()
            if dd != None:
                SmartDashboard.putData("DifferentialDrive", dd)
Example #4
0
    def robotInit(self):
        '''
        This is a good place to set up your subsystems and anything else that
        you will need to access later.
        '''
        wpilib.CameraServer.launch()
        self.lastAuto = False

        Command.getRobot = lambda x=0: self

        # Load system preferences prior to constructing
        # subsystems
        map.loadPreferences()

        # Construct subsystems prior to constructing commands
        #self.limelight = Limelight.Limelight(self) #not a subsystem

        self.hatch = HatchMech.HatchMech(self)
        self.hatch.initialize()

        self.cargo = CargoMech.CargoMech()  #not a subsystem
        self.cargo.initialize()

        self.climber = Climber.Climber()  #not a subsystem
        self.climber.initialize(self)

        self.drive = Drive.Drive(self)
        self.compressor = wpilib.Compressor(0)

        self.timer = wpilib.Timer()
        self.timer.start()

        self.watch = wpilib.Watchdog(150, None)
        '''
        Since OI instantiates commands and commands need access to subsystems,
        OI must be initialized after subsystems.
        '''

        [self.joystick0, self.joystick1, self.xbox] = oi.commands()

        self.updateDashboardInit()
        self.DriveStraight = DriveStraight()
        self.DriveStraightSide = DriveStraightSide()
        self.LeftCargo = LeftCargo()
        self.RightCargo = RightCargo()
        self.CenterCargo = CenterCargo()
        self.SetSpeedDT = SetSpeedDT()
        self.CenterCargoPart2 = CenterCargoPart2()

        # Set up auton chooser
        self.autonChooser = SendableChooser()
        self.autonChooser.setDefaultOption("Drive Straight", "DriveStraight")
        self.autonChooser.addOption("Left Cargo", "LeftCargo")
        self.autonChooser.addOption("Right Cargo", "RightCargo")
        self.autonChooser.addOption("Do Nothing", "DoNothing")
        self.autonChooser.addOption("Level 1 Center", "Level1Center")
        self.autonChooser.addOption("Drive Straight Side", "DriveStraightSide")

        SmartDashboard.putData("Auto mode", self.autonChooser)
Example #5
0
    def setupDashboardControls():
        # Only need to set up dashbard drive controls once
        global modeChooser
        if modeChooser == None:
            SmartDashboard.putBoolean("Quick Turn", False)
            SmartDashboard.putBoolean("Square Inputs", True)
            SmartDashboard.putNumber("Fixed Left", 0.4)
            SmartDashboard.putNumber("Fixed Right", 0.4)
            SmartDashboard.putNumber("Rotation Gain", 0.5)
            SmartDashboard.putNumber("Slow Gain", 0.5)

            mc = SendableChooser()
            mc.addDefault("Arcade", kModeArcade)
            mc.addOption("Tank", kModeTank)
            mc.addOption("Curvature", kModeCurvature)
            mc.addDefault("Indexed Arcade", kModeIndexedArcade)
            mc.addDefault("Indexed Tank", kModeIndexedTank)
            mc.addOption("Fixed", kModeFixed)
            SmartDashboard.putData("Drive Mode", mc)
            modeChooser = mc
Example #6
0
    def __init__(self, robot):

        self.robot = robot

        # Controllers
        # Xbox
        self.xbox_controller_1 = controls.xbox_controller.Xbox_Controller(0)
        self.xbox_controller_2 = controls.xbox_controller.Xbox_Controller(1)

        ## COMMANDS ##
        ##Controller 1 Commands
        # DRIVE COMMANDS
        self.drive_command = commands.drivetrain.Drive_With_Tank_Values(
            self.robot,
            self._get_axis(self.xbox_controller_1,
                           controls.xbox_controller.XBOX_AXIS_RIGHT_X,
                           inverted=INVERT_XBOX_RIGHT_X),
            self._get_axis(self.xbox_controller_1,
                           controls.xbox_controller.XBOX_AXIS_LEFT_Y,
                           inverted=INVERT_XBOX_LEFT_Y),
            self._get_axis(self.xbox_controller_1,
                           controls.xbox_controller.XBOX_AXIS_LEFT_X,
                           inverted=INVERT_XBOX_LEFT_X),
        )

        self.robot.drive.setDefaultCommand(self.drive_command)

        self.auto_choose = SendableChooser()

        self.auto_choose.addObject('Do Nothing',
                                   commands.autonomous.Do_Nothing(self.robot))
        self.auto_choose.addDefault(
            'Cross Baseline', commands.autonomous.Cross_Baseline(self.robot))
        self.auto_choose.addObject(
            'Center Gear',
            commands.autonomous.Move_To_Gear(self.robot,
                                             const.ID_AUTO_CENTER_GEAR))
        self.auto_choose.addDefault(
            'Center Gear No Camera',
            commands.autonomous.Center_Gear_Without_Camera(self.robot))
        self.auto_choose.addObject(
            'Right Gear',
            commands.autonomous.Move_To_Gear(self.robot,
                                             const.ID_AUTO_RIGHT_GEAR))
        self.auto_choose.addObject(
            'Right Gear And Shoot Red',
            commands.autonomous.Move_To_Gear_And_Shoot(self.robot,
                                                       const.ID_AUTO_RED_SIDE))
        self.auto_choose.addObject(
            'Left Gear',
            commands.autonomous.Move_To_Gear(self.robot,
                                             const.ID_AUTO_LEFT_GEAR))
        self.auto_choose.addObject(
            'Left Gear And Shoot Blue',
            commands.autonomous.Move_To_Gear_And_Shoot(
                self.robot, const.ID_AUTO_BLUE_SIDE))
        self.auto_choose.addObject(
            'Shoot From Hopper Red',
            commands.autonomous.Shoot_From_Hopper(self.robot,
                                                  const.ID_AUTO_RED_SIDE))
        self.auto_choose.addObject(
            'Shoot From Hopper Blue',
            commands.autonomous.Shoot_From_Hopper(self.robot,
                                                  const.ID_AUTO_BLUE_SIDE))
        self.auto_choose.addObject(
            'Shoot From Start',
            commands.autonomous.Shoot_From_Start(self.robot))

        SmartDashboard.putData('Autonomous Mode', self.auto_choose)

        # Toggle Drive State
        self.button_drive_shift = Xbox_Trigger(self.xbox_controller_1,
                                               XBOX_BTN_LEFT_TRIGGER)
        self.button_drive_shift.whenPressed(
            commands.drivetrain.Toggle_Drive_State(self.robot))

        # Toggle drivetrain gear
        if not const.DEMO_MODE:
            self.button_gear_shift = Xbox_Button(self.xbox_controller_1,
                                                 XBOX_BTN_LEFT_BUMPER)
            self.button_gear_shift.whenPressed(
                commands.drivetrain.Toggle_Gear_State(self.robot))

        # Slow speed for driving in Y direction so that we slow down before the gear peg
        self.button_slow_driving = Xbox_Trigger(self.xbox_controller_1,
                                                XBOX_BTN_RIGHT_TRIGGER)
        self.button_slow_driving.whenPressed(
            commands.drivetrain.Set_Sensitivity_Low(self.robot))
        self.button_slow_driving.whenReleased(
            commands.drivetrain.Set_Sensitivity_High(self.robot))

        # Drives backwards small distance, to align better for gear feeding
        self.button_drive_gear_feeder_reverse = Xbox_Button(
            self.xbox_controller_1, XBOX_BTN_X)
        self.button_drive_gear_feeder_reverse.whenPressed(
            commands.drivetrain.Back_Up(self.robot))

        if not const.DEMO_MODE:
            # For testing
            self.button_rotate_to_boiler = Xbox_Button(self.xbox_controller_1,
                                                       XBOX_BTN_Y)
            self.button_rotate_to_boiler.whenPressed(
                commands.drivetrain.Rotate_To_Boiler(self.robot))

            # For testing
            self.rotate = Xbox_Button(self.xbox_controller_1,
                                      XBOX_BTN_RIGHT_BUMPER)
            self.rotate.whenPressed(
                commands.drivetrain.Rotate_To_Angle(self.robot, -52))

            self.rotate_to_gear = Xbox_Button(self.xbox_controller_1,
                                              XBOX_BTN_A)
            self.rotate_to_gear.whenPressed(
                commands.drivetrain.Rotate_To_Gear(self.robot))

        ## Controller 2 Commands

        # Run Shooter
        if const.DEMO_MODE:
            # Lower top speed on shooter when in demo mode
            self.button_run_shooter = Xbox_Trigger(self.xbox_controller_2,
                                                   XBOX_BTN_RIGHT_TRIGGER)
            self.button_run_shooter.whenPressed(
                commands.shooter.Run_Shooter_Wheel(self.robot))
            self.button_run_shooter.whenReleased(
                commands.shooter.Stop_Shooter_Wheel(self.robot))
        else:
            self.button_run_shooter = Xbox_Trigger(self.xbox_controller_2,
                                                   XBOX_BTN_RIGHT_TRIGGER)
            self.button_run_shooter.whenPressed(
                commands.shooter.Run_Shooter_Wheel_Full_Speed(self.robot))
            self.button_run_shooter.whenReleased(
                commands.shooter.Stop_Shooter_Wheel(self.robot))

        # Run Agitator
        self.button_run_agitator = Xbox_Trigger(self.xbox_controller_2,
                                                XBOX_BTN_LEFT_TRIGGER)
        self.button_run_agitator.whenPressed(
            commands.agitator.Run_Agitator(self.robot, 0.8))
        self.button_run_agitator.whenReleased(
            commands.agitator.Stop_Agitator(self.robot))

        # FEEDER COMMANDS

        # Toggles feeder on/off when pressed
        self.button_run_feeder_forward = Xbox_Button(self.xbox_controller_2,
                                                     XBOX_BTN_RIGHT_BUMPER)
        self.button_run_feeder_forward.whenPressed(
            commands.feeder.Run_Feeder(self.robot, 1.0))
        self.button_run_feeder_forward.whenReleased(
            commands.feeder.Stop_Feeder(self.robot))

        self.button_run_feeder_backward = Xbox_Button(self.xbox_controller_2,
                                                      XBOX_BTN_LEFT_BUMPER)
        self.button_run_feeder_backward.whenPressed(
            commands.feeder.Run_Feeder(self.robot, -1.0))
        self.button_run_feeder_backward.whenReleased(
            commands.feeder.Stop_Feeder(self.robot))

        if not const.DEMO_MODE:
            # GILLOTUINNEE
            self.button_toggle_gear_lexan = Xbox_Button(
                self.xbox_controller_2, XBOX_BTN_Y)
            self.button_toggle_gear_lexan.whenPressed(
                commands.gear_lexan.Toggle_Gear_Lexan_State(self.robot))
            #self.button_toggle_gear_lexan.whenPressed( commands.gear_lexan.Set_Gear_Lexan_State( self.robot, const.ID_GEAR_LEXAN_OPEN ) )
            #self.button_toggle_gear_lexan.whenReleased( commands.gear_lexan.Set_Gear_Lexan_State( self.robot, const.ID_GEAR_LEXAN_CLOSED) )

        # Release gear
        self.button_toggle_gear_release = Xbox_Button(self.xbox_controller_2,
                                                      XBOX_BTN_A)
        self.button_toggle_gear_release.whenPressed(
            commands.gear_claw.Open_Container(self.robot))
        self.button_toggle_gear_release.whenReleased(
            commands.gear_claw.Close_Container(self.robot))

        # Toggle funnel
        self.button_toggle_gear_funnel = Xbox_Button(self.xbox_controller_2,
                                                     XBOX_BTN_B)
        self.button_toggle_gear_funnel.whenPressed(
            commands.gear_funnel.Toggle_Gear_Funnel_State(self.robot))
        self.button_toggle_gear_funnel.whenPressed(
            commands.gear_lexan.Set_Gear_Lexan_State(
                self.robot, const.ID_GEAR_LEXAN_CLOSED))
        self.button_toggle_gear_funnel.whenReleased(
            commands.gear_funnel.Toggle_Gear_Funnel_State(self.robot))

        # CLIMBER COMMANDS
        self.button_run_climber_up = Joystick_POV(
            self.xbox_controller_2, controls.joystick_pov.JOY_POV_UP)
        self.button_run_climber_up.whenPressed(
            commands.climber.Run_Climber(self.robot, 1.0))
        self.button_run_climber_up.whenReleased(
            commands.climber.Stop_Climber(self.robot))

        #self.button_run_climber_down = Joystick_POV( self.xbox_controller_1, controls.joystick_pov.JOY_POV_DOWN )
        #self.button_run_climber_down.whenPressed( commands.climber.Run_Climber( self.robot, -0.2 ) )
        #self.button_run_climber_down.whenReleased( commands.climber.Stop_Climber( self.robot ) )

        #self.button_change_gear_camera_type = Xbox_Button( self.xbox_controller_2, XBOX_BTN_BACK )
        #self.button_change_gear_camera_type.whenPressed( commands.gear_camera.Toggle_Gear_Camera_Mode( self.robot ) )

        #self.button_change_shooter_camera_type = Xbox_Button( self.xbox_controller_2, XBOX_BTN_START )
        #self.button_change_shooter_camera_type.whenPressed( commands.shooter_camera.Toggle_Shooter_Camera_Mode( self.robot ) )

        #smart dashboard changing PID values
        dp_trigger = SmartDashboard_Update_Trigger('Drive P: ',
                                                   self.robot.drive.default_kP)
        dp_trigger.whenActive(
            Command_Call(lambda: self.robot.drive.update_pid(p=dp_trigger.
                                                             get_key_value())))

        di_trigger = SmartDashboard_Update_Trigger('Drive I: ',
                                                   self.robot.drive.default_kI)
        di_trigger.whenActive(
            Command_Call(lambda: self.robot.drive.update_pid(i=di_trigger.
                                                             get_key_value())))

        dd_trigger = SmartDashboard_Update_Trigger('Drive D: ',
                                                   self.robot.drive.default_kD)
        dd_trigger.whenActive(
            Command_Call(lambda: self.robot.drive.update_pid(d=dd_trigger.
                                                             get_key_value())))

        #smart dashboard changing Shooter PID values
        sp_trigger = SmartDashboard_Update_Trigger(
            'Shooter P: ', self.robot.shooter.default_kP)
        sp_trigger.whenActive(
            Command_Call(lambda: self.robot.shooter.update_pid(
                p=sp_trigger.get_key_value())))

        si_trigger = SmartDashboard_Update_Trigger(
            'Shooter I: ', self.robot.shooter.default_kI)
        si_trigger.whenActive(
            Command_Call(lambda: self.robot.shooter.update_pid(
                i=si_trigger.get_key_value())))

        sd_trigger = SmartDashboard_Update_Trigger(
            'Shooter D: ', self.robot.shooter.default_kD)
        sd_trigger.whenActive(
            Command_Call(lambda: self.robot.shooter.update_pid(
                d=sd_trigger.get_key_value())))

        sf_trigger = SmartDashboard_Update_Trigger(
            'Shooter F: ', self.robot.shooter.default_kF)
        sf_trigger.whenActive(
            Command_Call(lambda: self.robot.shooter.update_pid(
                f=sf_trigger.get_key_value())))

        enc_trigger = SmartDashboard_Update_Trigger(
            'ENC Autocorrect constant ',
            const.DRIVE_CORRECTION_PROPORTION_FORWARD_ENC)
        enc_trigger.whenActive(
            Command_Call(
                lambda: const.update_enc_const(enc_trigger.get_key_value())))

        drive_corr_trigger = SmartDashboard_Update_Trigger(
            'Drive Correction Enbaled ', const.DRIVE_CORRECTION_ENABLED)
        drive_corr_trigger.whenActive(
            Command_Call(lambda: const.update_auto_correct(drive_corr_trigger.
                                                           get_key_value())))

        shooter_trigger = SmartDashboard_Update_Trigger(
            'Shooter Speed ', const.SHOOTER_SPEED)
        shooter_trigger.whenActive(
            Command_Call(lambda: const.update_shooter_speed(shooter_trigger.
                                                            get_key_value())))

        # Trigger for changing cameras exposure
        cam_exp_trigger = SmartDashboard_Update_Trigger(
            'Cam Exposure ', const.DEFAULT_CAMERA_EXPOSURE)
        cam_exp_trigger.whenActive(
            Command_Call(lambda: self._update_cameras_exposure(
                cam_exp_trigger.get_key_value())))