コード例 #1
0
    def __init__(self):

        self.mainCompressor = Compressor(PCMID)
        self.intakeSolenoid = Solenoid(PCMID, intakeSolenoidChannel)
        self.isExtended = False

        self.mainCompressor.start()
コード例 #2
0
class MyRobot(wpilib.TimedRobot):
    """ Small program to verify Neo motor and encoder are working. """
    def robotInit(self):
        self.solenoid = Solenoid(0, 1)

    def teleopInit(self):
        self.solenoid.set(True)
コード例 #3
0
    def __init__(self, Robot):
        #self.navx = Robot.navx

        self.speedLimit = 0.999

        self._leftRamp = 0.0
        self._rightRamp = 0.0
        self._rampSpeed = 6.0
        self._kOonBalanceAngleThresholdDegrees = 5.0
        self._autoBalance = True

        self._quickstop_accumulator = 0.0
        self._old_wheel = 0.0
        self._driveReversed = True

        self._drivePool = DataPool("Drive")
        # setup drive train motors
        self.rightDrive = SyncGroup(RIGHT_DRIVE_MOTOR_IDS, WPI_VictorSPX)
        self.leftDrive = SyncGroup(LEFT_DRIVE_MOTOR_IDS, WPI_VictorSPX)
        self.rightDrive.setInverted(True)
        # setup drive train gear shifter
        self.shifter = Solenoid(DRIVE_SHIFTER_PORT)
        self.shifter.set(False)
        # setup drive train encoders
        self.leftEncoder = Encoder(LEFT_DRIVE_ENCODER_A, LEFT_DRIVE_ENCODER_B,
                                   False, Encoder.EncodingType.k4X)
        self.rightEncoder = Encoder(RIGHT_DRIVE_ENCODER_A,
                                    RIGHT_DRIVE_ENCODER_B, False,
                                    Encoder.EncodingType.k4X)
        self.leftEncoder.setDistancePerPulse(DRIVE_INCHES_PER_TICK)
        self.leftEncoder.setReverseDirection(True)
        self.rightEncoder.setReverseDirection(False)
        self.rightEncoder.setDistancePerPulse(DRIVE_INCHES_PER_TICK)
コード例 #4
0
class Intake:
    def __init__(self, Robot):
        self._lift = Robot.lift
        self._ramp = 0.0
        self._rampSpeed = 6.0
        self._intakeMotorLeft = WPI_VictorSPX(*INTAKE_MOTOR_LEFT_IDS)
        self._intakeMotorRight = WPI_VictorSPX(*INTAKE_MOTOR_RIGHT_IDS)
        self._intakeMotorRight.setInverted(True)
        self._intakePistons = Solenoid(INTAKE_PISTONS)
        self._photosensor = LimelightPhotosensor(Robot.limelight, 1)

    def rampSpeed(self, speed):
        # Ramp to prevent brown outs
        self._ramp += (speed - self._ramp) / self._rampSpeed
        self._intakeMotorLeft.set(self._ramp)
        self._intakeMotorRight.set(self._ramp)

    def setSpeed(self, speed):
        self._intakeMotorLeft.set(speed)
        self._intakeMotorRight.set(speed)

    def getSpeed(self):
        return self._intakeMotorLeft.get()

    def pistonToggle(self):
        self._intakePistons.set(not self._intakePistons.get())

    def hasCube(self):
        return self._photosensor.isTriggered()

    def periodic(self):
        #if lift.isBottom():
        #photosensor.update()
        pass
コード例 #5
0
 def __init__(self, Robot):
     self._lift = Robot.lift
     self._ramp = 0.0
     self._rampSpeed = 6.0
     self._intakeMotorLeft = WPI_VictorSPX(*INTAKE_MOTOR_LEFT_IDS)
     self._intakeMotorRight = WPI_VictorSPX(*INTAKE_MOTOR_RIGHT_IDS)
     self._intakeMotorRight.setInverted(True)
     self._intakePistons = Solenoid(INTAKE_PISTONS)
     self._photosensor = LimelightPhotosensor(Robot.limelight, 1)
コード例 #6
0
 def __init__(self, robot):
     super().__init__()
     self.robot = robot
     self.cylinder1Up = Solenoid(6, 4)
     self.cylinder1Down = Solenoid(6, 5)
     self.cylinder2Up = Solenoid(6, 6)
     self.cylinder2Down = Solenoid(6, 7)
     self.ARM_STATUS = False
     self.BOTH_HELD = False
コード例 #7
0
 def initialize(self):
     self.xbox = oi.getJoystick(2)
     self.joystick0 = oi.getJoystick(0)
     self.joystick1 = oi.getJoystick(1)
     self.kicker = Solenoid(map.hatchKick)
     self.slider = Solenoid(map.hatchSlide)
     self.kick("in")
     self.slide("in")
     self.lastKick = False
     self.lastSlide = False
コード例 #8
0
ファイル: intake.py プロジェクト: RMWare/Team-2070-Robot-Code
    def __init__(self):
        super().__init__()

        self._l_motor = Talon(constants.motor_intake_l)
        self._r_motor = Talon(constants.motor_intake_r)
        self._intake_piston = Solenoid(constants.solenoid_intake)
        self._photosensor = DigitalInput(constants.far_photosensor)

        self._left_pwm = 0
        self._right_pwm = 0
        self._open = False
コード例 #9
0
    def __init__(self):
        self.colorWheelExtend = Solenoid(robotmap.PCM_ID,
                                         robotmap.COLOR_WHEEL_EXTEND_SOLENOID)
        self.colorWheelRetract = Solenoid(
            robotmap.PCM_ID, robotmap.COLOR_WHEEL_RETRACT_SOLENOID)

        self.colorWheelMotor = Spark(robotmap.COLOR_WHEEL_ID)

        self.RGBSensor = ColorSensorV3(wpilib.I2C.Port.kOnboard)

        self.colorWheelExtend.set(False)
        self.colorWheelRetract.set(True)
コード例 #10
0
class lift(Component):

    def __init__(self, robot):
        super().__init__()
        self.robot = robot
        self.cylinder1Up = Solenoid(6, 4)
        self.cylinder1Down = Solenoid(6, 5)
        self.cylinder2Up = Solenoid(6, 6)
        self.cylinder2Down = Solenoid(6, 7)
        self.ARM_STATUS = False
        self.BOTH_HELD = False

    def climbUpDown(self, leftButtonPressed, rightButtonPressed):
        if(rightButtonPressed == True and leftButtonPressed == True and self.BOTH_HELD == False):
            self.BOTH_HELD = True

            # Toggle arm status
            if(self.ARM_STATUS == False):
                self.ARM_STATUS = True
            elif(self.ARM_STATUS == True):
                self.ARM_STATUS = False

            # Set cylinder to up or down... Don't break plz!!!
            self.cylinder1Up.set(self.ARM_STATUS)
            self.cylinder1Down.set(not self.ARM_STATUS)
            self.cylinder2Up.set(self.ARM_STATUS)
            self.cylinder2Down.set(not self.ARM_STATUS)

        # Reset the button held flag
        elif(rightButtonPressed == False and leftButtonPressed == False):
            self.BOTH_HELD = False
コード例 #11
0
class Popper(Subsystem):
  def __init__(self, can_id=0, channel=0):
    super().__init__()

    self.solenoid = Solenoid(can_id, channel)

  def set(self, state):
    self.solenoid.set(state)

  def extend(self):
    self.set(True)

  def retract(self):
    self.set(False)
コード例 #12
0
    def __init__(self):
        super().__init__()

        self._l_motor = Talon(hardware.intake_left)
        self._r_motor = Talon(hardware.intake_right)
        self._intake_piston = Solenoid(hardware.intake_solenoid)

        self._left_pwm = 0
        self._right_pwm = 0
        self._open = False

        self._left_intake_amp = CircularBuffer(25)
        self._right_intake_amp = CircularBuffer(25)
        self._pulse_timer = Timer()
コード例 #13
0
    def __init__(self, robot):
        super().__init__("Claw")
        self.robot = robot

        self.leftMotor = Spark(robotmap.CLAWLEFT)
        self.rightMotor = Spark(robotmap.CLAWRIGHT)

        self.CLAW_OPEN = Solenoid(robotmap.PCM1_CANID,
                                  robotmap.CLAW_OPEN_SOLENOID)
        self.CLAW_CLOSE = Solenoid(robotmap.PCM1_CANID,
                                   robotmap.CLAW_CLOSE_SOLENOID)

        self.sensor = InfraredSensor(robotmap.INFRARED_SENSOR_CHANNEL)

        self.close()
コード例 #14
0
    def __init__(self, robot):
        super().__init__("Drive")
        self.robot = robot

        self.left_master = WPI_TalonSRX(robotmap.DRIVELEFTMASTER)
        self.right_master = WPI_TalonSRX(robotmap.DRIVERIGHTMASTER)
        self.left_slave = WPI_TalonSRX(robotmap.DRIVELEFTSLAVE)
        self.right_slave = WPI_TalonSRX(robotmap.DRIVERIGHTSLAVE)
        self.shifter_high = Solenoid(robotmap.PCM1_CANID,
                                     robotmap.SHIFTER_HIGH)
        self.shifter_low = Solenoid(robotmap.PCM1_CANID, robotmap.SHIFTER_LOW)
        self.differential_drive = DifferentialDrive(self.left_master,
                                                    self.right_master)

        self.TalonConfig()
        self.shiftLow()
コード例 #15
0
    def __init__(self, robot):
        super().__init__("Climb")
        self.robot = robot

        self.winchMotor = Spark(robotmap.CLIMBWINCH)
        self.armUpSolenoid = Solenoid(robotmap.CLIMBARM_UP)
        self.armDownSolenoid = Solenoid(robotmap.CLIMBARM_DOWN)
        self.lockCloseSolenoid = Solenoid(robotmap.CLIMBCLAMPLOCK_CLOSE)
        self.lockOpenSolenoid = Solenoid(robotmap.CLIMBCLAMPLOCK_OPEN)
        self.hookLimit = DigitalInput(robotmap.LIMIT_SWITCH_HOOK)
コード例 #16
0
 def createPistons(self, pistonSpec):
     piston = None
     if pistonSpec['Type'] == 'Double':
         piston = DoubleSolenoid(pistonSpec['portA'], pistonSpec['portB'])
     elif pistonSpec['Type'] == 'single':
         piston = Solenoid(pistonSpec['portA'])
     else:
         print("IDK your pistons")
     return piston
コード例 #17
0
    def __init__(self):
        super().__init__()
        self._motor = SyncGroup(Talon, hardware.elevator)
        self._stabilizer_piston = Solenoid(hardware.stabilizer_solenoid)

        # Motion Planning!
        self._follower = TrajectoryFollower()

        self._calibrated = False
        self.tote_count = 0
        self.has_bin = False  # Do we have a bin?
        self._reset = True  # starting a new stack?
        self.tote_first = False  # We're stacking totes without a bin.
        self._should_drop = False  # Are we currently trying to get a bin ?
        self._manual_stack = False
        self._cap = False

        self._follower.set_goal(Setpoints.BIN)  # Base state
        self._follower_thread = Thread(target=self.update_follower)
        self._follower_thread.start()
コード例 #18
0
ファイル: intake.py プロジェクト: RMWare/Team-2070-Robot-Code
class Intake(Component):
    def __init__(self):
        super().__init__()

        self._l_motor = Talon(constants.motor_intake_l)
        self._r_motor = Talon(constants.motor_intake_r)
        self._intake_piston = Solenoid(constants.solenoid_intake)
        self._photosensor = DigitalInput(constants.far_photosensor)

        self._left_pwm = 0
        self._right_pwm = 0
        self._open = False

    def update(self):
        self._l_motor.set(self._left_pwm)
        self._r_motor.set(self._right_pwm)

        self._intake_piston.set(not self._open)

    def spin(self, power, same_direction=False):
        self._left_pwm = power
        self._right_pwm = power * (1 if same_direction else -1)

    def intake_tote(self):
        power = .3 if not self._photosensor.get() else .75
        self.spin(power)

    def intake_bin(self):
        power = .3 if not self._photosensor.get() else .65
        self.spin(power)

    def open(self):
        self._open = True

    def close(self):
        self._open = False

    def stop(self):
        """Disables EVERYTHING. Only use in case of critical failure"""
        self._l_motor.set(0)
        self._r_motor.set(0)
コード例 #19
0
    def initialize(self):
        #makes control objects
        self.xbox = oi.getJoystick(2)
        self.joystick0 = oi.getJoystick(0)
        self.joystick1 = oi.getJoystick(1)

        #makes solenoid objects to be used in kick and slide functions
        self.kicker = Solenoid(map.hatchKick)
        self.slider = Solenoid(map.hatchSlide)

        self.maxVolts = 10
        timeout = 0

        self.wheels = Talon(map.hatchWheels)
        self.wheels.setNeutralMode(2)
        self.wheels.configVoltageCompSaturation(self.maxVolts)

        self.wheels.configContinuousCurrentLimit(20,
                                                 timeout)  #20 Amps per motor
        self.wheels.configPeakCurrentLimit(
            30, timeout)  #30 Amps during Peak Duration
        self.wheels.configPeakCurrentDuration(
            100, timeout)  #Peak Current for max 100 ms
        self.wheels.enableCurrentLimit(True)
        self.wheels.setInverted(True)

        self.powerIn = 0.9
        self.powerOut = -0.9

        #sets kicker and slide solenoids to in
        self.kick("in")
        self.slide("in")

        #starts lastkick/slide booleans
        self.lastKick = False
        self.lastSlide = False

        self.hasHatch = False

        self.outPower = 0
コード例 #20
0
    def init(self):
        self.logger.info("DeepSpaceLift::init()")
        self.timer = wpilib.Timer()
        self.timer.start()

        self.robot_mode = RobotMode.TEST

        self.last_lift_adjust_time = 0
        self.lift_adjust_timer = wpilib.Timer()
        self.lift_adjust_timer.start()

        self.state_timer = wpilib.Timer()
        self.current_state = LiftState.LIFT_START_CONFIGURATION
        self.current_lift_preset = LiftPreset.LIFT_PRESET_STOW
        self.current_lift_preset_val = self.lift_stow_position

        self.lift_setpoint = self.min_lift_position
        self.lift_adjust_val = 0

        self.lift_talon = TalonSRX(robotmap.LIFT_CAN_ID)
        '''Select and zero sensor in init() function.  That way the zero position doesn't get reset every time we enable/disable robot'''
        self.lift_talon.configSelectedFeedbackSensor(FeedbackDevice.Analog, 0,
                                                     robotmap.CAN_TIMEOUT_MS)
        self.lift_talon.setSelectedSensorPosition(0, 0,
                                                  robotmap.CAN_TIMEOUT_MS)

        self.lift_pneumatic_extend = Solenoid(robotmap.PCM1_CANID,
                                              robotmap.LIFT_RAISE_SOLENOID)
        self.lift_pneumatic_retract = Solenoid(robotmap.PCM1_CANID,
                                               robotmap.LIFT_LOWER_SOLENOID)

        self.lift_pneumatic_extend.set(False)
        self.lift_pneumatic_retract.set(True)

        self.test_lift_pneumatic = sendablechooser.SendableChooser()
        self.test_lift_pneumatic.setDefaultOption("Retract", 1)
        self.test_lift_pneumatic.addOption("Extend", 2)

        SmartDashboard.putData("TestLiftPneumatic", self.test_lift_pneumatic)
コード例 #21
0
class PneumaticsSubsystem(Subsystem):
    def __init__(self):

        self.mainCompressor = Compressor(PCMID)
        self.intakeSolenoid = Solenoid(PCMID, intakeSolenoidChannel)
        self.isExtended = False

        self.mainCompressor.start()

    def initDefaultCommand(self):
        pass

    def flipSolenoid(self):
        if self.isExtended == False:
            self.isExtended = True
        else:
            self.isExtended == False

        self.intakeSolenoid.set(isExtended)

    def getIsExtended(self):
        return self.isExtended
コード例 #22
0
    def __init__(self):
        super().__init__()
        self._motor = SyncGroup(Talon, constants.motor_elevator)
        self._position_encoder = Encoder(*constants.encoder_elevator)
        self._photosensor = DigitalInput(constants.photosensor)
        self._stabilizer_piston = Solenoid(constants.solenoid_dropper)
        self._position_encoder.setDistancePerPulse(
            (PITCH_DIAMETER * math.pi) / TICKS_PER_REVOLUTION)

        # Trajectory controlling stuff
        self._follower = TrajectoryFollower()
        self.assure_tote = CircularBuffer(5)

        self.auto_stacking = True  # Do the dew

        self._tote_count = 0  # Keep track of totes!
        self._has_bin = False  # Do we have a bin on top?
        self._new_stack = True  # starting a new stack?
        self._tote_first = False  # Override bin first to grab totes before anything else
        self._should_drop = False  # Are we currently trying to get a bin ?

        self._close_stabilizer = True  # Opens the stabilizer manually
        self.force_stack = False  # manually actuates the elevator down and up

        self._follower.set_goal(Setpoints.BIN)  # Base state
        self._follower_thread = Thread(target=self.update_follower)
        self._follower_thread.start()

        self._auton = False

        quickdebug.add_tunables(Setpoints,
                                ["DROP", "STACK", "BIN", "TOTE", "FIRST_TOTE"])
        quickdebug.add_printables(
            self,
            [('position', self._position_encoder.getDistance),
             ('photosensor', self._photosensor.get), "has_bin", "tote_count",
             "tote_first", "at_goal", "has_game_piece", "auto_stacking"])
コード例 #23
0
    def __init__(self):
        self.stateTimer = wpilib.Timer()
        self.stateTimer.start()

        self.ballRakeExtend = Solenoid(robotmap.PCM2_ID, robotmap.BALL_RAKE_EXTEND_SOLENOID)
        self.ballRakeRetract = Solenoid(robotmap.PCM2_ID, robotmap.BALL_RAKE_RETRACT_SOLENOID)

        self.ballHatchExtend = Solenoid(robotmap.PCM2_ID, robotmap.BALL_HATCH_EXTEND_SOLENOID)
        self.ballHatchRetract = Solenoid(robotmap.PCM2_ID, robotmap.BALL_HATCH_RETRACT_SOLENOID)

        self.ballTickler = Spark(robotmap.BALL_TICKLER_ID)
        self.bottomIntake = Spark(robotmap.BOTTOM_INTAKE_ID)
        self.rakeMotor = Talon(robotmap.RAKE_ID)

        self.ballRakeExtend.set(False)
        self.ballRakeRetract.set(True)

        self.ballHatchExtend.set(False)
        self.ballHatchRetract.set(True)
コード例 #24
0
class ClawSubsystem(Subsystem):
    def __init__(self, robot):
        super().__init__("Claw")
        self.robot = robot

        self.leftMotor = Spark(robotmap.CLAWLEFT)
        self.rightMotor = Spark(robotmap.CLAWRIGHT)

        self.CLAW_OPEN = Solenoid(robotmap.PCM1_CANID,
                                  robotmap.CLAW_OPEN_SOLENOID)
        self.CLAW_CLOSE = Solenoid(robotmap.PCM1_CANID,
                                   robotmap.CLAW_CLOSE_SOLENOID)

        self.sensor = InfraredSensor(robotmap.INFRARED_SENSOR_CHANNEL)

        self.close()

    def initDefaultCommand(self):
        self.setDefaultCommand(ObtainBoxContinuous(self.robot))

    def open(self):
        self.CLAW_OPEN.set(True)
        self.CLAW_CLOSE.set(False)

    def close(self):
        self.CLAW_OPEN.set(False)
        self.CLAW_CLOSE.set(True)

    def setSpeed(self, pullSpeed):
        #positive left speed is pull
        self.leftMotor.set(pullSpeed)
        self.rightMotor.set(-pullSpeed)

    def boxIsClose(self):
        return self.sensor.GetMedianVoltage() > 0.6

    def boxIsReallyClose(self):
        return self.sensor.GetMedianVoltage() > 2.6
コード例 #25
0
class HatchMech(Subsystem):
    def __init__(self, Robot):
        """ Create all physical parts used by subsystem. """
        super().__init__('Hatch')
        self.debug = True
        self.robot = Robot

    def initialize(self):
        self.xbox = oi.getJoystick(2)
        self.joystick0 = oi.getJoystick(0)
        self.joystick1 = oi.getJoystick(1)
        self.kicker = Solenoid(map.hatchKick)
        self.slider = Solenoid(map.hatchSlide)
        self.kick("in")
        self.slide("in")
        self.lastKick = False
        self.lastSlide = False

    def periodic(self):

        #if self.xbox.getRawButton(map.kickHatch) == True: self.kick("out")
        #elif self.xbox.getRawButton(map.toggleHatch) == True: self.kick("in")

        #if self.xbox.getRawButton(map.extendHatch) == True: self.slide("out")
        #elif self.xbox.getRawButton(map.retractHatch) == True: self.slide("in")

        currKick = self.xbox.getRawButton(map.kickHatch)
        currSlide = self.xbox.getRawButton(map.toggleHatch)

        if currKick and currKick != self.lastKick: self.kick("toggle")
        if currSlide and currSlide != self.lastSlide: self.slide("toggle")

        self.lastKick = currKick
        self.lastSlide = currSlide

        if self.joystick0.getRawButton(
                map.drivehatch) or self.joystick1.getRawButton(map.drivehatch):
            self.kick("out")

    def kick(self, mode):
        if mode == "out": self.kicker.set(True)
        elif mode == "in": self.kicker.set(False)
        else: self.kicker.set(not self.kicker.get())

    def slide(self, mode):
        if mode == "out": self.slider.set(True)
        elif mode == "in": self.slider.set(False)
        else: self.slider.set(not self.slider.get())

    def isEjectorOut(self):
        return self.kicker.get()

    def toggle(self):
        if self.kicker.get(): self.kick("out")
        else: self.kick("in")

    def disable(self):
        self.kick("in")

    def dashboardInit(self):
        pass

    def dashboardPeriodic(self):
        pass
コード例 #26
0
class Pneumatics(Subsystem):
    def __init__(self):
        super().__init__("Pneumatics")
        self.solenoid_R = Solenoid(robotmap.solenoid_R)
        self.solenoid_L = Solenoid(robotmap.solenoid_L)
        self.is_active = False

    def extend(self):
        self.solenoid_L.set(False)
        self.solenoid_R.set(True)

    def retract(self):
        self.solenoid_R.set(False)
        self.solenoid_L.set(True)

    def halt(self):
        self.solenoid_R.set(False)
        self.solenoid_L.set(False)

    def get_active(self):
        return self.is_active

    def alternate(self):
        pass
コード例 #27
0
class Drive:
    def __init__(self, Robot):
        #self.navx = Robot.navx

        self.speedLimit = 0.999

        self._leftRamp = 0.0
        self._rightRamp = 0.0
        self._rampSpeed = 6.0
        self._kOonBalanceAngleThresholdDegrees = 5.0
        self._autoBalance = True

        self._quickstop_accumulator = 0.0
        self._old_wheel = 0.0
        self._driveReversed = True

        self._drivePool = DataPool("Drive")
        # setup drive train motors
        self.rightDrive = SyncGroup(RIGHT_DRIVE_MOTOR_IDS, WPI_VictorSPX)
        self.leftDrive = SyncGroup(LEFT_DRIVE_MOTOR_IDS, WPI_VictorSPX)
        self.rightDrive.setInverted(True)
        # setup drive train gear shifter
        self.shifter = Solenoid(DRIVE_SHIFTER_PORT)
        self.shifter.set(False)
        # setup drive train encoders
        self.leftEncoder = Encoder(LEFT_DRIVE_ENCODER_A, LEFT_DRIVE_ENCODER_B,
                                   False, Encoder.EncodingType.k4X)
        self.rightEncoder = Encoder(RIGHT_DRIVE_ENCODER_A,
                                    RIGHT_DRIVE_ENCODER_B, False,
                                    Encoder.EncodingType.k4X)
        self.leftEncoder.setDistancePerPulse(DRIVE_INCHES_PER_TICK)
        self.leftEncoder.setReverseDirection(True)
        self.rightEncoder.setReverseDirection(False)
        self.rightEncoder.setDistancePerPulse(DRIVE_INCHES_PER_TICK)

    def cheesyDrive(self, wheel, throttle, quickturn, altQuickturn, shift):
        throttle = Util.deadband(throttle)
        wheel = Util.deadband(wheel)
        if self._driveReversed:
            wheel *= -1

        neg_inertia = wheel - self._old_wheel
        self._old_wheel = wheel
        wheel = Util.sinScale(wheel, 0.9, 1, 0.9)

        if wheel * neg_inertia > 0:
            neg_inertia_scalar = 2.5
        else:
            if abs(wheel) > .65:
                neg_inertia_scalar = 6
            else:
                neg_inertia_scalar = 4
        neg_inertia_accumulator = neg_inertia * neg_inertia_scalar
        wheel += neg_inertia_accumulator

        if altQuickturn:
            if abs(throttle) < 0.2:
                alpha = .1
                self._quickstop_accumulator = (
                    1 -
                    alpha) * self._quickstop_accumulator + alpha * self.limit(
                        wheel, 1.0) * 5
            over_power = -wheel * .75
            angular_power = -wheel * 1
        elif quickturn:
            if abs(throttle) < 0.2:
                alpha = .1
                self._quickstop_accumulator = (
                    1 -
                    alpha) * self._quickstop_accumulator + alpha * self.limit(
                        wheel, 1.0) * 5
            over_power = 1
            angular_power = -wheel * 1
        else:
            over_power = 0
            sensitivity = .9
            angular_power = throttle * wheel * sensitivity - self._quickstop_accumulator
            self._quickstop_accumulator = Util.wrap_accumulator(
                self._quickstop_accumulator)

        if shift:
            if not self.shifter.get():
                self.shifter.set(True)
        else:
            if self.shifter.get():
                self.shifter.set(False)

        right_pwm = left_pwm = throttle
        left_pwm += angular_power
        right_pwm -= angular_power
        if left_pwm > 1:
            right_pwm -= over_power * (left_pwm - 1)
            left_pwm = 1
        elif right_pwm > 1:
            left_pwm -= over_power * (right_pwm - 1)
            right_pwm = 1
        elif left_pwm < -1:
            right_pwm += over_power * (-1 - left_pwm)
            left_pwm = -1
        elif right_pwm < -1:
            left_pwm += over_power * (-1 - right_pwm)
            right_pwm = -1
        if self._driveReversed:
            left_pwm *= -1
            right_pwm *= -1

        if self.shifter.get():  # if low gear
            #leftDrive.set(left_pwm)
            #rightDrive.set(right_pwm)
            self.moveRamped(left_pwm, right_pwm)
        else:
            self.moveRamped(left_pwm, right_pwm)

    def setGear(self, gear):
        if self.shifter.get() != gear:
            self.shifter.set(gear)

    def tankDrive(self, left, right):
        scaledBalance = self.autoBalance()
        left = self.limit(left + scaledBalance, self.speedLimit)
        right = self.limit(right + scaledBalance, self.speedLimit)
        self.leftDrive.set(left * LEFT_DRIFT_OFFSET)
        self.rightDrive.set(right * RIGHT_DRIFT_OFFSET)

    def limit(self, wheel, d):
        return Util.limit(wheel, d)

    def moveRamped(self, desiredLeft, desiredRight):
        self._leftRamp += (desiredLeft - self._leftRamp) / self._rampSpeed
        self._rightRamp += (desiredRight - self._rightRamp) / self._rampSpeed
        self.tankDrive(self._leftRamp, self._rightRamp)

    def autoShift(self, b):
        if self.shifter.get() != b:
            self.shifter.set(b)

    def periodic(self):
        self._drivePool.logDouble("gyro_angle", self.getRotation())
        self._drivePool.logDouble("left_enc", self.rightEncoder.getDistance())
        self._drivePool.logDouble("right_enc", self.leftEncoder.getDistance())

    def setDrivetrainReversed(self, rev):
        self.driveReversed = rev

    def driveReversed(self):
        return self.driveReversed

    def getRotation(self):
        return self.navx.getAngle()

    def getLeftDistance(self):
        return self.leftEncoder.getDistance() * 2.54 * ROBOT_INVERTED

    def getRightDistance(self):
        return self.rightEncoder.getDistance() * 2.54 * ROBOT_INVERTED

    def resetDistance(self):
        self.leftEncoder.reset()
        self.rightEncoder.reset()

    def autoBalance(self):
        '''if self._autoBalance:
			pitchAngleDegrees = self.navx.getPitch()
			scaledPower = 1 + (0 - pitchAngleDegrees - self._kOonBalanceAngleThresholdDegrees) / self._kOonBalanceAngleThresholdDegrees
			if scaledPower > 2:
				scaledPower = 2
			#return scaledPower;'''
        return 0

    def setSpeedLimit(self, speedLimit):
        self.speedLimit = self.limit(speedLimit, DRIVE_SPEED_LIMIT)
コード例 #28
0
 def robotInit(self):
     self.solenoid = Solenoid(0, 1)
コード例 #29
0
 def __init__(self):
     super().__init__("Pneumatics")
     self.solenoid_R = Solenoid(robotmap.solenoid_R)
     self.solenoid_L = Solenoid(robotmap.solenoid_L)
     self.is_active = False
コード例 #30
0
ファイル: config.py プロジェクト: grt192/2016Stronghold
pickup_achange_motor1 = CANTalon(45)
pickup_achange_motor2 = CANTalon(46)

pickup_achange_motor1.changeControlMode(CANTalon.ControlMode.Follower)
pickup_achange_motor1.set(47)
pickup_achange_motor1.reverseOutput(True)

pickup_roller_motor = CANTalon(8)
pickup = Pickup(pickup_achange_motor1, pickup_achange_motor2,
                pickup_roller_motor)

#Manual shooter Talons and Objects

flywheel_motor = CANTalon(44)
shooter_act = Solenoid(1)
turntable_motor = CANTalon(12)
manual_shooter = ManualShooter(flywheel_motor, shooter_act, turntable_motor)

#DT Talons and Objects

dt_right = CANTalon(1)
# dt_r2 = CANTalon(2)
# dt_r3 = CANTalon(3)
dt_left = CANTalon(10)
# dt_l2 = CANTalon(11)
# dt_l3 = CANTalon(12)
dt_shifter = Solenoid(0)

# dt_r2.changeControlMode(CANTalon.ControlMode.Follower)
# dt_r3.changeControlMode(CANTalon.ControlMode.Follower)
コード例 #31
0
dt_r3.changeControlMode(CANTalon.ControlMode.Follower)
dt_r4.changeControlMode(CANTalon.ControlMode.Follower)
dt_l2.changeControlMode(CANTalon.ControlMode.Follower)
dt_l3.changeControlMode(CANTalon.ControlMode.Follower)
dt_l4.changeControlMode(CANTalon.ControlMode.Follower)
dt_r2.set(1)
dt_r3.set(1)
dt_r4.set(1)
dt_l2.set(7)
dt_l3.set(7)
dt_l4.set(7)

dt = DriveTrain(1.0, dt_left, dt_right, left_encoder=None, right_encoder=None)

#Pneumatics
s_a = Solenoid(1)
s_b = Solenoid(2)
s_c = Solenoid(3)
s_d = Solenoid(4)

# Drive Controllers
driver_stick = Attack3Joystick(0)
xbox_controller = XboxJoystick(1)
ac = ArcadeDriveController(dt, driver_stick)
hid_sp = SensorPoller(
    (driver_stick, xbox_controller))  # human interface devices

# Mech Talons, objects, and controller

# define MechController
mc = MechController(driver_stick, xbox_controller)
コード例 #32
0
class HatchMech(Subsystem):
    def __init__(self, Robot):
        #Create all physical parts used by subsystem.
        super().__init__('Hatch')
        #self.debug = True
        self.robot = Robot

    def initialize(self):
        #makes control objects
        self.xbox = oi.getJoystick(2)
        self.joystick0 = oi.getJoystick(0)
        self.joystick1 = oi.getJoystick(1)

        #makes solenoid objects to be used in kick and slide functions
        self.kicker = Solenoid(map.hatchKick)
        self.slider = Solenoid(map.hatchSlide)

        self.maxVolts = 10
        timeout = 0

        self.wheels = Talon(map.hatchWheels)
        self.wheels.setNeutralMode(2)
        self.wheels.configVoltageCompSaturation(self.maxVolts)

        self.wheels.configContinuousCurrentLimit(20,timeout) #20 Amps per motor
        self.wheels.configPeakCurrentLimit(30,timeout) #30 Amps during Peak Duration
        self.wheels.configPeakCurrentDuration(100,timeout) #Peak Current for max 100 ms
        self.wheels.enableCurrentLimit(True)
        self.wheels.setInverted(True)

        self.powerIn = 0.9
        self.powerOut = -0.9

        #sets kicker and slide solenoids to in
        self.kick("in")
        self.slide("in")

        #starts lastkick/slide booleans
        self.lastKick = False
        self.lastSlide = False

        self.hasHatch = False

        self.outPower = 0

    def periodic(self):
        self.updateHatch()

        self.currKick = self.xbox.getRawButton(map.kickHatch)
        self.currSlide = self.xbox.getRawButton(map.toggleHatch)

        #if the variable is true and it does not equal the lastkick/slide boolean, sets it to the opposite of what it currently is
        if self.currKick and (self.currKick != self.lastKick): self.kick("toggle")
        if self.currSlide and (self.currSlide != self.lastSlide): self.slide("toggle")

        #after the if statement, sets the lastkick/slide to the currkick/slide
        self.lastKick = self.currKick
        self.lastSlide = self.currSlide

        self.setWheels()

    # kick function to activate kicker solenoid
    def kick(self, mode):
        #out mode sets kicker solenoid to true
        if mode == "out": self.setKick(True)
        #in mode sets kicker solenoid to false
        elif mode == "in": self.setKick(False)
        #if neither of them, makes the kicker solenoid to the opposite of what it is
        else: self.setKick(not self.kicker.get())

    # slide function to activate slide solenoid
    def slide(self, mode):
        # out mode sets slider solenoid to true
        if mode == "out": self.slider.set(True)
        # in mode sets slider solenoid to false
        elif mode == "in": self.slider.set(False)
        #if neither of them, makes the slider solenoid to the opposite of what it is
        else: self.slider.set(not self.slider.get())

    def setKick(self, state):
        self.kicker.set(state)
        if state and self.slider.get() and self.hasHatch: self.hasHatch = False

    def setWheels(self):
        if self.kicker.get() and self.slider.get() and self.hasHatch:
            self.wheels.set(self.powerOut)
            self.outPower = self.powerOut
        elif not self.kicker.get() and self.slider.get() and not self.hasHatch:
            #should be "and not self.hasHatch"
            self.wheels.set(self.powerIn)
            self.outPower = self.powerIn
        #elif self.joystick1.getRawButton(1):
        #    self.wheels.set(self.powerIn)
        #    self.outPower = self.powerIn
        else:
            self.wheels.set(0)
            self.outPower = 0

    def updateHatch(self):
        #only checks current to possibly set false to true for hasHatch
        threshold = 10 #10 amp current separates freely spinning and stalled
        if self.slider.get() and self.wheels.getOutputCurrent()>threshold:
            self.hasHatch = True

        if self.joystick0.getRawButton(3) or self.joystick0.getRawButton(4) or self.joystick1.getRawButton(3) or self.joystick1.getRawButton(4):
            self.hasHatch = True

    #disable function runs kick function on in
    def disable(self): self.kick("in")

    def dashboardInit(self): pass

    def dashboardPeriodic(self):
        #commented out some values. DON'T DELETE THESE VALUES
        #SmartDashboard.putNumber("Hatch Current", self.wheels.getOutputCurrent())
        #SmartDashboard.putNumber("Power", self.outPower)
        SmartDashboard.putBoolean("Has Hatch", self.hasHatch)
        SmartDashboard.putBoolean("Slider Out", self.slider.get())
        SmartDashboard.putBoolean("Kicker Out", self.kicker.get())