예제 #1
0
    def createObjects(self):
        """Robot initialization function"""
        self.chassis_left_front = rev.CANSparkMax(5, rev.MotorType.kBrushless)
        self.chassis_left_rear = rev.CANSparkMax(4, rev.MotorType.kBrushless)
        self.chassis_right_front = rev.CANSparkMax(7, rev.MotorType.kBrushless)
        self.chassis_right_rear = rev.CANSparkMax(6, rev.MotorType.kBrushless)

        self.indexer_motors = [ctre.WPI_TalonSRX(3)]
        self.indexer_switches = [wpilib.DigitalInput(9)]
        self.injector_slave_motor = ctre.WPI_TalonSRX(43)
        self.injector_slave_motor.follow(self.indexer_motors[0])
        self.injector_slave_motor.setInverted(True)

        self.loading_piston = wpilib.Solenoid(0)
        self.shooter_centre_motor = rev.CANSparkMax(3, rev.MotorType.kBrushless)
        self.shooter_outer_motor = rev.CANSparkMax(2, rev.MotorType.kBrushless)

        self.colour_sensor = rev.color.ColorSensorV3(wpilib.I2C.Port.kOnboard)
        self.spinner_motor = wpilib.Spark(2)
        self.spinner_solenoid = wpilib.DoubleSolenoid(2, 3)

        self.turret_centre_index = wpilib.DigitalInput(1)
        self.turret_motor = ctre.WPI_TalonSRX(10)

        self.vision = Vision()

        # operator interface
        self.joystick_left = wpilib.Joystick(0)
        self.joystick_right = wpilib.Joystick(1)
        self.spinner_joystick = wpilib.Joystick(2)
        self.turret_joystick = wpilib.Joystick(3)
예제 #2
0
def init_vision(heading=0.0):
    t = time.monotonic()
    v = Vision()
    v.chassis = FakeChassis()
    # Inject some fake odometry
    v.odometry.appendleft(Odometry(0, 0, heading, t - 0.3))
    v.odometry.appendleft(Odometry(1, 1, heading, t - 0.2))
    v.odometry.appendleft(Odometry(2, 2, heading, t - 0.1))
    v.odometry.appendleft(Odometry(3, 3, heading, t))
    return v, t
예제 #3
0
def test_odom_deque_order():
    v = Vision()
    v.chassis = FakeChassis()
    for i in range(5):
        time.sleep(0.05)
        v.execute()
    assert len(v.odometry) > 0
    newer_odom = v.odometry.popleft()
    for odom in v.odometry:
        assert newer_odom.t > odom.t
        newer_odom = odom
예제 #4
0
def test_nt_update():
    v = Vision()
    nt = NetworkTable.getTable('vision')
    nt.putNumber('x', 0.5)
    assert v._values['x'] == 0.5
    # Only updates to time should update the averaged values
    assert v.pidGet() == 0.0
    nt.putNumber('time', 1234)
    # No change if width is zero
    assert v.pidGet() == 0.0
    assert v.no_vision_counter == 1
    nt.putNumber('w', 0.7)
    nt.putNumber('time', 1235)
    assert v.pidGet() != 0.0
    assert v.no_vision_counter == 0
예제 #5
0
def get_players(constants, entities):
    players = []

    for i in range(constants['player_count']):
        # Building the players
        fighter_component = Fighter(hp=30, defense=1, power=2)
        inventory_component = Inventory(26)
        level_component = Level()
        equipment_component = Equipment()
        vision_component = Vision(None, constants['fov_radius'])
        players.append(
            Entity(0,
                   0,
                   '@',
                   libtcod.blue,
                   'Player{0}'.format(i + 1),
                   blocks=True,
                   render_order=RenderOrder.ACTOR,
                   fighter=fighter_component,
                   inventory=inventory_component,
                   level=level_component,
                   equipment=equipment_component,
                   vision=vision_component))

        # Give the player a dagger to start with
        equippable_component = Equippable(EquipmentSlots.MAIN_HAND,
                                          power_bonus=2)
        dagger = Entity(0,
                        0,
                        '-',
                        libtcod.sky,
                        'Dagger',
                        equippable=equippable_component)
        players[-1].inventory.add_item(dagger)
        players[-1].equipment.toggle_equip(dagger)

        entities.append(players[-1])

    return players
예제 #6
0
 def createObjects(self):
     self.logger = logging.getLogger("robot")
     self.sd = NetworkTable.getTable('SmartDashboard')
     self.intake_motor = wpilib.CANTalon(14)
     self.shooter_motor = wpilib.CANTalon(12)
     self.defeater_motor = wpilib.CANTalon(1)
     self.joystick = wpilib.Joystick(0)
     self.gamepad = wpilib.Joystick(1)
     self.pressed_buttons_js = set()
     self.pressed_buttons_gp = set()
     # needs to be created here so we can pass it in to the PIDController
     self.bno055 = BNO055()
     self.vision = Vision()
     self.range_finder = RangeFinder(0)
     self.heading_hold_pid_output = BlankPIDOutput()
     Tu = 1.6
     Ku = 0.6
     Kp = Ku * 0.3
     self.heading_hold_pid = wpilib.PIDController(
         0.8,
         0.0,
         1.5,  #2.0 * Kp / Tu * 0.1, 1.0 * Kp * Tu / 20.0 * 0,
         self.bno055,
         self.heading_hold_pid_output)
     """self.heading_hold_pid = wpilib.PIDController(0.6,
                                                  2.0 * Kp / Tu * 0.1,
                                                  1.0 * Kp * Tu / 20.0 * 0,
                                                  self.bno055, self.heading_hold_pid_output)"""
     self.heading_hold_pid.setAbsoluteTolerance(3.0 * math.pi / 180.0)
     self.heading_hold_pid.setContinuous(True)
     self.heading_hold_pid.setInputRange(-math.pi, math.pi)
     self.heading_hold_pid.setOutputRange(-0.2, 0.2)
     #self.heading_hold_pid.setOutputRange(-1.0, 1.0)
     self.intake_motor.setFeedbackDevice(
         wpilib.CANTalon.FeedbackDevice.QuadEncoder)
     self.intake_motor.reverseSensor(False)
     self.joystick_rate = 0.3