Beispiel #1
0
class Slick:
    # Drive Base configs
    LEFT_MOTOR_PORT = Ports.PORT1
    LEFT_MOTOR_REVERSE_POLARITY = False

    RIGHT_MOTOR_PORT = Ports.PORT6
    RIGHT_MOTOR_REVERSE_POLARITY = True

    WHEEL_TRAVEL = 200
    TRACK_WIDTH = 176
    DISTANCE_UNIT = DistanceUnits.MM
    GEAR_RATIO = 1

    # Controller configs
    CONTROLLER_DEADBAND = 3

    def __init__(self):
        self.brain = Brain()

        self.left_motor = \
            Motor(
                self.LEFT_MOTOR_PORT,   # index
                self.LEFT_MOTOR_REVERSE_POLARITY   # reverse polarity?
            )
        self.right_motor = \
            Motor(
                self.RIGHT_MOTOR_PORT,   # index
                self.RIGHT_MOTOR_REVERSE_POLARITY   # reverse polarity?
            )
        self.drivetrain = \
            Drivetrain(
                self.left_motor,   # left_motor
                self.right_motor,   # right_motor
                self.WHEEL_TRAVEL,   # wheel_travel
                self.TRACK_WIDTH,   # track_width
                self.DISTANCE_UNIT,   # distanceUnit
                self.GEAR_RATIO   # gear_ratio
            )

        self.controller = Controller()
        self.controller.set_deadband(self.CONTROLLER_DEADBAND)

    def drive_by_controller(self):
        self.left_motor.spin(
            DirectionType.FWD,  # dir
            self.controller.axisA.position(),  # velocity
            VelocityUnits.PCT  # velocityUnit
        )
        self.right_motor.spin(
            DirectionType.FWD,  # dir
            self.controller.axisD.position(),  # velocity
            VelocityUnits.PCT  # velocityUnit
        )

    def keep_driving_by_controller(self):
        while True:
            self.drive_by_controller()

    def main(self):
        self.keep_driving_by_controller()
Beispiel #2
0
class Armbot:
    # Base Pivot motor configs
    BASE_PIVOT_MOTOR_PORT = Ports.PORT10
    BASE_PIVOT_REVERSE_POLARITY = False
    BASE_PIVOT_VELOCITY_PERCENT = 100

    # Shoulder motor configs
    SHOULDER_MOTOR_PORT = Ports.PORT6
    SHOULDER_REVERSE_POLARITY = True  # reverse polarity

    # Elbow motor configs
    ELBOW_MOTOR_PORT = Ports.PORT1
    ELBOW_REVERSE_POLARITY = False

    # Claw motor configs
    CLAW_MOTOR_PORT = Ports.PORT4
    CLAW_MOTOR_REVERSE_POLARITY = False
    CLAW_MOTOR_VELOCITY_PERCENT = 100
    CLAW_MOTOR_TIMEOUT_SECS = 3

    # sensor configs
    BASE_BUMPER_SWITCH_PORT = Ports.PORT2
    ELBOW_BUMPER_SWITCH_PORT = Ports.PORT9
    DISTANCE_SENSOR_PORT = Ports.PORT8
    COLOR_SENSOR_PORT = Ports.PORT12
    LEFT_TOUCH_LED_PORT = Ports.PORT5
    RIGHT_TOUCH_LED_PORT = Ports.PORT11

    # controller configs
    CONTROLLER_DEADBAND = 3  # seconds

    def __init__(self):
        self.brain = Brain()

        self.base_pivot_motor = \
            Motor(
                self.BASE_PIVOT_MOTOR_PORT,   # index
                self.BASE_PIVOT_REVERSE_POLARITY   # reverse polarity?
            )

        self.shoulder_motor = \
            Motor(
                self.SHOULDER_MOTOR_PORT,   # index
                self.SHOULDER_REVERSE_POLARITY   # reverse polarity?
            )

        self.elbow_motor = \
            Motor(
                self.ELBOW_MOTOR_PORT,   # index
                self.ELBOW_REVERSE_POLARITY   # reverse polarity?
            )

        self.claw_motor = \
            Motor(
                self.CLAW_MOTOR_PORT,   # index
                self.CLAW_MOTOR_REVERSE_POLARITY   # reverse polarity?
            )
        self.claw_motor.set_timeout(
            self.CLAW_MOTOR_TIMEOUT_SECS,  # time
            TimeUnits.SEC  # timeUnit
        )

        self.base_bumper_switch = Bumper(self.BASE_BUMPER_SWITCH_PORT)

        self.elbow_bumper_switch = Bumper(self.ELBOW_BUMPER_SWITCH_PORT)

        self.distance_sensor = Sonar(self.DISTANCE_SENSOR_PORT)

        self.color_sensor = \
            Colorsensor(
                self.COLOR_SENSOR_PORT,   # index
                False,   # is_grayscale
                700   # proximity
            )

        self.left_touch_led = Touchled(self.LEFT_TOUCH_LED_PORT)
        self.right_touch_led = Touchled(self.RIGHT_TOUCH_LED_PORT)

        self.controller = Controller()
        self.controller.set_deadband(self.CONTROLLER_DEADBAND)

    def pivot_base_by_controller_left_buttons(self):
        # pivot base right
        if self.controller.buttonLDown.pressing():
            self.base_pivot_motor.spin(
                DirectionType.REV,  # dir
                self.BASE_PIVOT_VELOCITY_PERCENT,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        # pivot base left
        elif self.controller.buttonLUp.pressing():
            self.base_pivot_motor.spin(
                DirectionType.FWD,  # dir
                self.BASE_PIVOT_VELOCITY_PERCENT,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        else:
            self.base_pivot_motor.stop(BrakeType.HOLD)

    def keep_pivoting_base_by_controller_left_buttons(self):
        while True:
            self.pivot_base_by_controller_left_buttons()

    def control_shoulder_by_controller_axis_d(self):
        controller_axis_d_position = self.controller.axisD.position()

        if ((controller_axis_d_position > 0) and
                (not self.base_bumper_switch.pressing())) or \
                (controller_axis_d_position < 0):
            self.shoulder_motor.spin(
                DirectionType.FWD,  # dir
                controller_axis_d_position,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        else:
            self.shoulder_motor.stop(BrakeType.HOLD)

    def keep_controlling_shoulder_by_controller_axis_d(self):
        while True:
            self.control_shoulder_by_controller_axis_d()

    def control_elbow_by_controller_axis_a(self):
        controller_axis_a_position = self.controller.axisA.position()

        if ((controller_axis_a_position > 0) and
                (not self.elbow_bumper_switch.pressing())) or \
                (controller_axis_a_position < 0):
            self.elbow_motor.spin(
                DirectionType.FWD,  # dir
                controller_axis_a_position,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        else:
            self.elbow_motor.stop(BrakeType.HOLD)

    def keep_controlling_elbow_by_controller_axis_a(self):
        while True:
            self.control_elbow_by_controller_axis_a()

    def control_claw_by_controller_right_buttons(self):
        # open claw
        if self.controller.buttonRDown.pressing():
            self.claw_motor.spin(
                DirectionType.REV,  # dir
                self.CLAW_MOTOR_VELOCITY_PERCENT,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        # close claw
        elif self.controller.buttonRUp.pressing():
            self.claw_motor.spin(
                DirectionType.FWD,  # dir
                self.CLAW_MOTOR_VELOCITY_PERCENT,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        else:
            self.claw_motor.stop(BrakeType.HOLD)

    def keep_controlling_claw_by_controller_right_buttons(self):
        while True:
            self.control_claw_by_controller_right_buttons()

    def main(self):
        while True:
            self.pivot_base_by_controller_left_buttons()
            self.control_shoulder_by_controller_axis_d()
            self.control_elbow_by_controller_axis_a()
            self.control_claw_by_controller_right_buttons()
Beispiel #3
0
class Allie:
    FRONT_LEFT_MOTOR_PORT = Ports.PORT1
    FRONT_LEFT_MOTOR_REVERSE_POLARITY = False

    FRONT_RIGHT_MOTOR_PORT = Ports.PORT6
    FRONT_RIGHT_MOTOR_REVERSE_POLARITY = True

    REAR_LEFT_MOTOR_PORT = Ports.PORT7
    REAR_LEFT_MOTOR_REVERSE_POLARITY = False

    REAR_RIGHT_MOTOR_PORT = Ports.PORT12
    REAR_RIGHT_MOTOR_REVERSE_POLARITY = True

    MOTOR_VELOCITY_PCT = 100

    CONTROLLER_DEADBAND = 3  # seconds

    def __init__(self):
        self.front_left_motor = \
            Motor(
                self.FRONT_LEFT_MOTOR_PORT,   # index
                self.FRONT_LEFT_MOTOR_REVERSE_POLARITY   # reverse
            )
        self.front_right_motor = \
            Motor(
                self.FRONT_RIGHT_MOTOR_PORT,   # index
                self.FRONT_RIGHT_MOTOR_REVERSE_POLARITY   # reverse
            )
        self.rear_left_motor = \
            Motor(
                self.REAR_LEFT_MOTOR_PORT,   # index
                self.REAR_LEFT_MOTOR_REVERSE_POLARITY   # reverse
            )
        self.rear_right_motor = \
            Motor(
                self.REAR_RIGHT_MOTOR_PORT,   # index
                self.REAR_RIGHT_MOTOR_REVERSE_POLARITY   # reverse
            )

        self.controller = Controller()
        self.controller.set_deadband(self.CONTROLLER_DEADBAND)

    def rest_leg_on_surface(self, leg_motor, forward=True):
        # rotate motor up to 270 degrees within 1 second
        # using max velocity but very light power/torque
        leg_motor.set_max_torque_percent(5)
        leg_motor.set_timeout(
            1,  # time,
            TimeUnits.SEC  # timeUnit
        )
        leg_motor.spin_for(
            DirectionType.FWD if forward else DirectionType.REV,  # dir
            270,  # rotation
            RotationUnits.DEG,  # rotationUnit
            100,  # velocity
            VelocityUnits.PCT,  # velocityUnit
            True  # waitForCompletion
        )

        # restore max motor power/torque to 100% again
        leg_motor.set_max_torque_percent(100)

    def reset_legs(self):
        for leg_motor in (self.front_left_motor, self.front_right_motor,
                          self.rear_left_motor, self.rear_right_motor):
            self.rest_leg_on_surface(leg_motor, True)

            # set motor encoder to 0
            leg_motor.reset_rotation()

    def rest_left_legs_forward(self):
        for leg_motor in (self.front_left_motor, self.rear_left_motor):
            self.rest_leg_on_surface(leg_motor, True)

    def rest_left_legs_backward(self):
        for leg_motor in (self.rear_left_motor, self.front_left_motor):
            self.rest_leg_on_surface(leg_motor, False)

    def rest_right_legs_forward(self):
        for leg_motor in (self.front_right_motor, self.rear_right_motor):
            self.rest_leg_on_surface(leg_motor, True)

    def rest_right_legs_backward(self):
        for leg_motor in (self.rear_right_motor, self.front_right_motor):
            self.rest_leg_on_surface(leg_motor, False)

    def remote_control_once(self):
        if self.controller.buttonEUp.pressing():
            self.rest_left_legs_forward()

        elif self.controller.buttonEDown.pressing():
            self.rest_left_legs_backward()

        elif self.controller.buttonFUp.pressing():
            self.rest_right_legs_forward()

        elif self.controller.buttonFDown.pressing():
            self.rest_right_legs_backward()

        else:
            left_velocity = self.controller.axisA.position()
            right_velocity = self.controller.axisD.position()
            self.front_left_motor.spin(
                DirectionType.FWD,  # dir
                left_velocity,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )
            self.rear_left_motor.spin(
                DirectionType.FWD,  # dir
                left_velocity,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )
            self.front_right_motor.spin(
                DirectionType.FWD,  # dir
                right_velocity,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )
            self.rear_right_motor.spin(
                DirectionType.FWD,  # dir
                right_velocity,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

    def keep_remote_controlling(self):
        while True:
            self.remote_control_once()
Beispiel #4
0
class Clawbot:
    # Drive Base configs
    LEFT_MOTOR_PORT = Ports.PORT1
    LEFT_MOTOR_REVERSE_POLARITY = False

    RIGHT_MOTOR_PORT = Ports.PORT6
    RIGHT_MOTOR_REVERSE_POLARITY = True

    WHEEL_TRAVEL = 200
    TRACK_WIDTH = 176
    DISTANCE_UNIT = DistanceUnits.MM
    GEAR_RATIO = 1

    # Arm motor configs
    ARM_MOTOR_PORT = Ports.PORT10
    ARM_MOTOR_REVERSE_POLARITY = False
    ARM_MOTOR_VELOCITY_PERCENT = 30

    # Claw motor configs
    CLAW_MOTOR_PORT = Ports.PORT11
    CLAW_MOTOR_REVERSE_POLARITY = False
    CLAW_MOTOR_TIMEOUT_SECS = 3
    CLAW_MOTOR_VELOCITY_PERCENT = 60

    # sensor configs
    TOUCH_LED_PORT = Ports.PORT2
    COLOR_SENSOR_PORT = Ports.PORT3
    GYRO_SENSOR_PORT = Ports.PORT4
    DISTANCE_SENSOR_PORT = Ports.PORT7
    BUMPER_SWITCH_PORT = Ports.PORT8

    # Controller configs
    CONTROLLER_DEADBAND = 3

    def __init__(self):
        self.brain = Brain()

        self.left_motor = \
            Motor(
                self.LEFT_MOTOR_PORT,   # index
                self.LEFT_MOTOR_REVERSE_POLARITY   # reverse polarity?
            )
        self.right_motor = \
            Motor(
                self.RIGHT_MOTOR_PORT,   # index
                self.RIGHT_MOTOR_REVERSE_POLARITY   # reverse polarity?
            )
        self.drivetrain = \
            Drivetrain(
                self.left_motor,   # left_motor
                self.right_motor,   # right_motor
                self.WHEEL_TRAVEL,   # wheel_travel
                self.TRACK_WIDTH,   # track_width
                self.DISTANCE_UNIT,   # distanceUnit
                self.GEAR_RATIO   # gear_ratio
            )

        self.arm_motor = \
            Motor(
                self.ARM_MOTOR_PORT,   # index
                self.ARM_MOTOR_REVERSE_POLARITY   # reverse polarity?
            )

        self.claw_motor = \
            Motor(
                self.CLAW_MOTOR_PORT,   # index
                self.CLAW_MOTOR_REVERSE_POLARITY   # reverse polarity?
            )
        self.claw_motor.set_timeout(
            self.CLAW_MOTOR_TIMEOUT_SECS,  # time
            TimeUnits.SEC  # timeUnit
        )

        self.touch_led = Touchled(self.TOUCH_LED_PORT)

        self.color_sensor = \
            Colorsensor(
                self.COLOR_SENSOR_PORT,   # index
                False,   # is_grayscale
                700   # proximity
            )

        self.gyro_sensor = \
            Gyro(
                self.GYRO_SENSOR_PORT,   # index
                True   # calibrate
            )

        self.distance_sensor = Sonar(self.DISTANCE_SENSOR_PORT)

        self.bumper_switch = Bumper(self.BUMPER_SWITCH_PORT)

        self.controller = Controller()
        self.controller.set_deadband(self.CONTROLLER_DEADBAND)

    def drive_by_controller(self):
        self.left_motor.spin(
            DirectionType.FWD,  # dir
            self.controller.axisA.position(),  # velocity
            VelocityUnits.PCT  # velocityUnit
        )
        self.right_motor.spin(
            DirectionType.FWD,  # dir
            self.controller.axisD.position(),  # velocity
            VelocityUnits.PCT  # velocityUnit
        )

    def keep_driving_by_controller(self):
        while True:
            self.drive_by_controller()

    def lower_or_raise_arm_by_controller(self):
        if self.controller.buttonLDown.pressing():
            self.arm_motor.spin(
                DirectionType.REV,  # dir
                self.ARM_MOTOR_VELOCITY_PERCENT,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        elif self.controller.buttonLUp.pressing():
            self.arm_motor.spin(
                DirectionType.FWD,  # dir
                self.ARM_MOTOR_VELOCITY_PERCENT,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        else:
            self.arm_motor.stop(BrakeType.HOLD)

    def keep_lowering_or_raising_arm_by_controller(self):
        while True:
            self.lower_or_raise_arm_by_controller()

    def grab_or_release_object_by_controller(self):
        if self.controller.buttonRDown.pressing():
            self.claw_motor.spin(
                DirectionType.REV,  # dir
                self.CLAW_MOTOR_VELOCITY_PERCENT,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        elif self.controller.buttonRUp.pressing():
            self.claw_motor.spin(
                DirectionType.FWD,  # dir
                self.CLAW_MOTOR_VELOCITY_PERCENT,  # velocity
                VelocityUnits.PCT  # velocityUnit
            )

        else:
            self.claw_motor.stop(BrakeType.HOLD)

    def keep_grabbing_or_releasing_objects_by_controller(self):
        while True:
            self.grab_or_release_object_by_controller()

    def main(self):
        while True:
            self.drive_by_controller()
            self.lower_or_raise_arm_by_controller()
            self.grab_or_release_object_by_controller()
class Clawbot:
    ARM_MOTOR_PORT = Ports.PORT10
    ARM_MOTOR_REVERSE_POLARITY = False

    CLAW_MOTOR_PORT = Ports.PORT11
    CLAW_MOTOR_REVERSE_POLARITY = False

    def __init__(self):
        self.brain = Brain()

        self.arm_motor = \
            Motor(
                self.ARM_MOTOR_PORT,   # index
                self.ARM_MOTOR_REVERSE_POLARITY   # reverse
            )

        self.claw_motor = \
            Motor(
                self.CLAW_MOTOR_PORT,   # index
                self.CLAW_MOTOR_REVERSE_POLARITY   # reverse
            )

        self.control_arm_or_claw = 0

    def switch_between_arm_and_claw(self):
        if self.brain.buttonCheck.pressing():
            self.control_arm_or_claw = 1 - self.control_arm_or_claw

    def control_arm(self):
        if not self.control_arm_or_claw:
            if self.brain.buttonUp.pressing():
                self.arm_motor.spin(
                    DirectionType.FWD,  # dir
                    100,  # velocity
                    VelocityUnits.PCT  # velocityUnit
                )

            elif self.brain.buttonDown.pressing():
                self.arm_motor.spin(
                    DirectionType.REV,  # dir
                    100,  # velocity
                    VelocityUnits.PCT  # velocityUnit
                )

            else:
                self.arm_motor.stop(BrakeType.HOLD)

        else:
            self.arm_motor.stop(BrakeType.HOLD)

    def control_claw(self):
        if self.control_arm_or_claw:
            if self.brain.buttonDown.pressing():
                self.claw_motor.spin(
                    DirectionType.REV,  # dir
                    None,  # velocity
                    VelocityUnits.PCT  # velocityUnit
                )

            elif self.brain.buttonUp.pressing():
                self.claw_motor.spin(
                    DirectionType.FWD,  # dir
                    None,  # velocity
                    VelocityUnits.PCT  # velocityUnit
                )

            else:
                self.claw_motor.stop(BrakeType.HOLD)

        else:
            self.claw_motor.stop(BrakeType.HOLD)