コード例 #1
0
ファイル: AutoCar.py プロジェクト: xiaohaogong/EV3-classroom
class AutoCar:
    def __init__(self, left_motor_port, right_motor_port):
        self.__movesteering = MoveSteering(left_motor_port, right_motor_port)
        self.__touch = TouchSensor()

    def __run_forward(self):
        self.__movesteering.on(0, 30)

    def __stop(self):
        self.__movesteering.off()

    def __play_text_sound(self, words):
        sound = Sound()
        sound.speak(words)

    def __back_left(self):
        self.__movesteering.on_for_rotations(50, 20, -1)

    def __touch_sensor_pressed(self):
        return self.__touch.is_pressed

    def __touch_execute(self):
        self.__stop()
        self.__play_text_sound("Ouch")  #take some time, consume resource
        self.__back_left()

    def run(self):
        self.__run_forward()
        touched = self.__touch_sensor_pressed()
        if (touched):
            self.__touch_execute()
コード例 #2
0
class MovementController:
    """Class to move the robot"""

    _ROTATION_TO_DEGREE = 1
    _DISTANCE_TO_DEGREE = 1

    def __init__(self):
        self.moveSteering = MoveSteering(constants.LEFT_MOTOR_PORT,
                                         constants.RIGHT_MOTOR_PORT)

    def rotate(self, degrees, speed=100, block=True):
        """Rotate the robot a certain number of degrees. Positive is counter-clockwise"""
        self.moveSteering.on_for_degrees(
            100,
            SpeedPercent(speed),
            degrees * MovementController._ROTATION_TO_DEGREE,
            block=block)

    def travel(self, distance, speed=100, block=True):
        """Make the robot move forward or backward a certain number of cm"""
        self.moveSteering.on_for_degrees(
            0,
            speed,
            distance * MovementController._DISTANCE_TO_DEGREE,
            block=block)

    def steer(self, direction, speed=100):
        """Make the robot move in a direction"""
        self.moveSteering.on(direction, speed)

    def stop(self):
        """Make robot stop"""
        self.moveSteering.off()
コード例 #3
0
class WalkDog:
    def __init__(self, left_motor_port, right_motor_port, sensor_mode):
        self._movesteering = MoveSteering(left_motor_port, right_motor_port)
        self._ir = InfraredSensor()
        self._ir.mode = sensor_mode

    @property
    def ir(self):
        return self._ir

    @ir.setter
    def ir(self, ir):
        self._ir = ir

    @property
    def movesteering(self):
        return _movesteering

    @movesteering.setter
    def movesteering(self, ms):
        self._movesteering = ms

    def convert_heading_to_steering(self, heading):
        return heading * 2

    def run(self, channel=1):
        beacon_distance = self._ir.distance(channel)
        head_angle = self._ir.heading(channel)
        steering = self.convert_heading_to_steering(head_angle)
        if (beacon_distance > 30):
            self._movesteering.on(steering, 50)
        else:
            self._movesteering.off()
コード例 #4
0
class ThirdStage:
    def __init__(self):
        self.steeringDrive = MoveSteering(OUTPUT_B, OUTPUT_C)
        self.moveTank = MoveTank(OUTPUT_B, OUTPUT_C)
        self.mvInfrared = MVInfraredSensor()

    def start(self):
        # go until wall
        self.goUntilDistanceFromWall(41)

        # turn right
        self.moveTank.on_for_rotations(SpeedPercent(-40), SpeedPercent(40),
                                       1.33)
        #self.steeringDrive.on(100, SpeedPercent(40))

        # go until wall
        self.goUntilDistanceFromWall(36.4)

        # turn right
        self.moveTank.on_for_rotations(SpeedPercent(-40), SpeedPercent(40),
                                       1.33)
        #self.steeringDrive.on(100, SpeedPercent(40))

        sleep(4)

        self.steeringDrive.on_for_seconds(0, SpeedPercent(-100), 6)

    def goUntilDistanceFromWall(self, distance, speed=-40):
        while True:
            #self.moveTank.on_for_rotations(SpeedPercent(speed), SpeedPercent(speed), 0.25)
            self.steeringDrive.on(0, SpeedPercent(speed))
            print(self.mvInfrared.getDistance())
            if self.mvInfrared.getDistance() < distance:
                self.steeringDrive.off()
                return
コード例 #5
0
class AutoDrive:
    def __init__(self, left_motor_port, right_motor_port, infra_mode,
                 ultra_mode):
        self.__moveSteering = MoveSteering(left_motor_port, right_motor_port)
        self.__mediumMotor = MediumMotor()
        self.__ir = InfraredSensor()
        self.__ir.mode = infra_mode
        self.__us = UltrasonicSensor()
        self.__us.mode = ultra_mode

    def __run_forward(self):
        self.__moveSteering.on(0, 30)

    def __run_backward_rotations(self, rotations):
        self.__moveSteering.on_for_rotations(0, 20, -rotations)

    def __stop(self):
        self.__moveSteering.off()

    def __back_and_turn(self, steering):
        self.__moveSteering.on_for_rotations(-steering, 20, -1)

    def __scan_around_distance(self):
        proximities = {}
        distance = 0
        index = 0
        for deg in [-90, 30, 30, 30, 30, 30, 30]:
            self.__mediumMotor.on_for_degrees(10, deg)
            distance = self.__ir.proximity
            proximities[-90 + index * 30] = distance
            index += 1
            time.sleep(1)
        self.__mediumMotor.on_for_degrees(10, -90)
        # print("%s" % proximities)
        return proximities

    def __find_clear_direction(self, proximitiesDic):
        max_distance = max(list(proximitiesDic.values()))
        direction = list(proximitiesDic.keys())[list(
            proximitiesDic.values()).index(max_distance)]
        #print("%d" % direction)
        steering = self.__convert_direction_to_steering(direction)
        return steering

    def __convert_direction_to_steering(self, direction):
        return 5 * direction / 9

    def __ultrasonic_distance(self):
        return self.__us.distance_centimeters

    def run(self):
        self.__run_forward()
        block_distance = self.__ultrasonic_distance()
        if (block_distance < 20):
            self.__stop()
            around_distance = self.__scan_around_distance()
            steering = self.__find_clear_direction(around_distance)
            self.__run_backward_rotations(0.5)
            self.__back_and_turn(steering)
コード例 #6
0
ファイル: drive.py プロジェクト: Phantom5522/NekoNeko-chan
class Drive(object):
    def __init__(self):
        self.pid = PIDController(kP=1.0, kI=0.0, kD=0.1)

        # motors
        try:
            self.steerPair = MoveSteering(OUTPUT_B, OUTPUT_C)
        except ev3dev2.DeviceNotFound as e:
            Debug.print("Error:", e)

        self.speed = Config.data['pid']['fast']['speed_max']

    def updateConfig(self):
        self.speed = Config.data['pid']['fast']['speed_max']
        self.pid.updateConfig()

    def followLine(self, sensValues):
        colorLeft = sensValues["ColorLeft"][1]  # TODO: HSL? Lichtwert anpassen
        colorRight = sensValues["ColorRight"][1]
        feedback = colorLeft - colorRight

        self.pid.update(feedback)
        turn = self.pid.output
        self.steerPair.on(turn, self.speed)

    def followLineSlow(self, speed, sensValues):
        colorLeft = sensValues["ColorLeft"][1]  # TODO: HSL? Lichtwert anpassen
        colorRight = sensValues["ColorRight"][1]
        feedback = colorLeft - colorRight

        self.pid.update(feedback)
        turn = self.pid.output
        self.steerPair.on(turn, self.speed)

    def turn(self, action):
        def right():
            self.steerPair.on_for_degrees(-100, 20, 200)

        def left():
            self.steerPair.on_for_degrees(100, 20, 200)

        if action == "right":
            right()
        elif action == "left":
            left()
        elif action == "skip":
            self.steerPair.on_for_degrees(
                0, -20, 50)  # back off until centered on cross
            self.steerPair.wait_until_not_moving(2000)
            left()
        else:
            raise AttributeError("no valid action string given for turn()")

    def brake(self):
        self.steerPair.off()
コード例 #7
0
ファイル: MVFollowLine.py プロジェクト: jamacias/MonkeyVision
class MVFollowLine:
    def __init__(self):
        self.colorSensor = MVColorSensor()
        self.steeringDrive = MoveSteering(OUTPUT_B, OUTPUT_C)
        self.oldError = 0.01
        self.timer = 0

    def followLine(self):
        isRed = False
        self.timer = time()
        while not isRed:
            self._followLine(self.oldError)
            if (time() - self.timer) > 100:
                isRed = self._isRed(self.colorSensor.getRGB())

        self.steeringDrive.off()

    def lookForLine(self, speed=-40):
        intensity = self.colorSensor.getRefectionLight()
        while intensity < 17:  # prev 20
            print(intensity)
            self.steeringDrive.on(0, SpeedPercent(speed))
            intensity = self.colorSensor.getRefectionLight()

    def turnOnLine(self):
        epsilon = 10
        while True:
            intensity = self.colorSensor.getRefectionLight()
            if 18 < intensity and intensity < 22:
                self.steeringDrive.on_for_seconds(0, SpeedPercent(-30), 2)
                break
            else:
                self._followLine(self.oldError)

    def _followLine(self, oldError, kp=100, ki=0):
        intensity = self._mapping(self.colorSensor.getRefectionLight())
        speed = -20
        self.steeringDrive.on(0.7 * intensity, SpeedPercent(speed))

        #self.oldError = intensity

    def _mapping(self, x):
        if x <= 20:
            return max(100 / 12 * x - 1000 / 6, -100)

        return min(5 * x - 100, 100)

    # red : 150, 175, 286
    # white:  137, 151, 181
    # black: 38, 32, 40
    # yellow: 190, 143, 40
    def _isRed(self, rgb):
        return rgb[0] > 145 and rgb[1] > 165 and rgb[2] > 250
コード例 #8
0
class Wheels:
    def __init__(self,
                 left_address=OUTPUT_A,
                 right_address=OUTPUT_B,
                 touch_address=INPUT_3):
        self._wheels = MoveSteering(left_address, right_address)
        self._left = self._wheels.left_motor
        self._right = self._wheels.right_motor
        self._touch = TouchSensor(touch_address)

    def move_straight(self, speed=50):
        self._wheels.on(0, SpeedPercent(speed))

    def move_for_distance(self, speed=50, distance_mm=100):
        MoveDifferential(OUTPUT_A, OUTPUT_B, EV3EducationSetTire,
                         80).on_for_distance(speed, distance_mm, brake=False)

    def rotate_right_in_place(self,
                              speed=50,
                              amount=1.0,
                              brake=True,
                              block=True):
        self._wheels.on_for_rotations(-100,
                                      SpeedPercent(speed),
                                      amount,
                                      brake=brake,
                                      block=block)

    def rotate_left_in_place(self,
                             speed=50,
                             amount=1.0,
                             brake=True,
                             block=True):
        self._wheels.on_for_rotations(100,
                                      SpeedPercent(speed),
                                      amount,
                                      brake=brake,
                                      block=block)

    def reverse(self, speed=50):
        self._wheels.on(0, SpeedPercent(-speed))

    def reverse_until_bumped(self, speed=50, timeout=None):
        self.reverse(speed)
        time = datetime.now()
        ms = time.microsecond
        while not timeout or time.microsecond - ms < timeout:
            if self._touch.is_pressed:
                self._wheels.off()
                break

    def stop(self):
        self._wheels.off(brake=False)
コード例 #9
0
ファイル: ev3_robot.py プロジェクト: Technolimit/city-shaper
class Ev3Robot:
    def __init__(self, wheel1=OUTPUT_B, wheel2=OUTPUT_C):
        self.steer_pair = MoveSteering(wheel1, wheel2)
        self.gyro = GyroSensor()
        self.tank_pair = MoveTank(wheel1, wheel2)
        self.motorB = LargeMotor(OUTPUT_B)
        self.motorC = LargeMotor(OUTPUT_C)

    def pivot_right(self, degrees, speed=20):
        self.tank_pair.on(left_speed=0, right_speed=speed)
        self.gyro.wait_until_angle_changed_by(degrees - 10)
        self.tank_pair.off()

    def pivot_left(self, degrees, speed=20):
        self.tank_pair.on(left_speed=speed, right_speed=0)
        self.gyro.wait_until_angle_changed_by(degrees - 10)
        self.tank_pair.off()

    def spin_right(self, degrees, speed=20):
        self.gyro.mode = 'GYRO-ANG'
        value1 = self.gyro.angle
        self.tank_pair.on(left_speed=speed, right_speed=speed * -1)
        self.gyro.wait_until_angle_changed_by(degrees)
        self.tank_pair.off()
        value2 = self.gyro.angle
        self.tank_pair.on(left_speed=-20, right_speed=20)
        self.gyro.wait_until_angle_changed_by(value2 - value1 - degrees)

    def spin_left(self, degrees, speed=20):
        self.gyro.mode = 'GYRO-ANG'
        value1 = self.gyro.angles
        self.gyro.reset()
        self.tank_pair.on(left_speed=speed * -1, right_speed=speed)
        self.gyro.wait_until_angle_changed_by(degrees)
        self.tank_pair.off()
        value2 = self.gyro.angle
        self.tank_pair.on(left_speed=20, right_speed=-20)
        self.gyro.wait_until_angle_changed_by(value2 - value1 - degrees)

    def go_straight_forward(self, cm, speed=30):
        value1 = self.motorB.position
        angle0 = self.gyro.angle
        rotations = cm / 19.05
        while (self.motorB.position - value1) / 360 < rotations:
            self.gyro.mode = 'GYRO-ANG'
            angle = self.gyro.angle - angle0
            print(angle, file=stderr)
            self.steer_pair.on(steering=angle * -1, speed=speed)
コード例 #10
0
async def on_connect(socket, path):
    color_sensor = ColorSensor(INPUT_1)
    motor = MoveSteering(OUTPUT_A, OUTPUT_B)
    try:
        while True:
            try:
                cmd = await asyncio.wait_for(socket.recv(), timeout=0.25)
                if cmd == 'go':
                    motor.on(0, SpeedPercent(-25))
                elif cmd == 'stay':
                    motor.off()
            except TimeoutError:
                pass
            await socket.send(str(color_sensor.color_name))
    except ConnectionClosed:
        pass
コード例 #11
0
def move():
    motor_pair = MoveSteering(OUTPUT_B, OUTPUT_C)
    touch_sensor = TouchSensor()

    # Start robot moving forward
    motor_pair.on(steering=0, speed=60)

    # Wait until robot touches wall
    touch_sensor.wait_for_pressed()

    # Stop moving forward
    motor_pair.off()

    # Reverse away from wall
    motor_pair.on_for_seconds(steering=0, speed=-10, seconds=2)
    motor_pair.on_for_rotations(steering=-100, speed=15, rotations=0.5)
    motor_pair.on_for_rotations(steering=-100, speed=15, rotations=0.5)
コード例 #12
0
class GyroCar:
    def __init__(self, left_motor_port, right_motor_port, gyro_mode):
        self.__moveSteering = MoveSteering(left_motor_port, right_motor_port)
        self.__gyro = GyroSensor()
        self.__gyro.mode = gyro_mode

    def __run_forward(self):
        self.__moveSteering.on(0, 20)

    def run_rotations(self, rotations):
        self.__moveSteering.on_for_rotations(0, 20, rotations)

    def stop(self):
        self.__moveSteering.off()

    def __back_and_turn(self, steering):
        self.__moveSteering.on_for_rotations(-steering, 20, -1)

    def reset_angle(self):
        self.__gyro.reset()

    def is_on_flat(self):
        print("is_on_flat: %d" % self.__gyro.angle)
        time.sleep(1)
        return (math.fabs(self.__gyro.angle) < 10)

    def is_on_slope(self):
        print("is_on_slope: %d" % self.__gyro.angle)
        time.sleep(1)
        return (math.fabs(self.__gyro.angle) >= 10)

    def run(self):
        self.__run_forward()

    @property
    def angle(self):
        return self.__gyro.angle
コード例 #13
0
class Driver:
    def __init__(self):
        self.driver = MoveSteering(OUTPUT_B, OUTPUT_C)
        self.speed = 40


    def set_speed(self, speed):
        self.speed = max(-100, min(100, speed))

    def get_speed(self):
        return self.speed

    
    def move(self):
        self.driver.on(0, SpeedPercent(self.speed))

    def move_cm(self, cm):
        TRANSFORM_CONST = 37.0
        self.driver.on_for_degrees(0, SpeedPercent(self.speed), cm * TRANSFORM_CONST)
    
    def move_neg_cm(self, cm):
        TRANSFORM_CONST = 37.0
        self.driver.on_for_degrees(0, SpeedPercent(self.speed), -cm * TRANSFORM_CONST)

    def reverse(self):
        self.driver.on(0, SpeedPercent(-self.speed))

    def reverse_cm(self, cm):
        TRANSFORM_CONST = 37.0
        self.driver.on_for_degrees(0, SpeedPercent(-self.speed), cm*TRANSFORM_CONST)

    def stop(self):
        self.driver.off()

    def turn(self, steering):
        steering = max(-100, min(100, steering))
        self.driver.on(steering, self.speed)

    def turn_rotations(self, steering, rotations):
        steering = max(-100, min(100, steering))
        self.driver.on_for_rotations(steering, SpeedPercent(self.speed), rotations)

    def turn_degrees(self, degrees):
        TRANSFORM_CONST = 3.9
        self.driver.on_for_degrees(100, SpeedPercent(self.speed), degrees * TRANSFORM_CONST)

    def turn_neg_degrees(self, degrees):
        TRANSFORM_CONST = 3.9
        steering = 100 if degrees > 0 else -100
        self.driver.on_for_degrees(steering, SpeedPercent(self.speed), -degrees * TRANSFORM_CONST)

    def move_seconds(self, seconds):
        self.driver.on_for_seconds(0, self.speed, seconds)

    def back_seconds(self, seconds):
        self.driver.on_for_seconds(0, -self.speed, seconds)
コード例 #14
0
async def on_connect(socket, path):
    movesteering = MoveSteering(OUTPUT_A, OUTPUT_B)
    fork = MediumMotor(OUTPUT_C)
    color_sensor = ColorSensor(address=INPUT_1)

    while True:
        try:
            raw_cmd = await asyncio.wait_for(socket.recv(), timeout=500)
            if raw_cmd != "":
                command = json.loads(raw_cmd)
                command_type = command['type']

                print("MOVE COMMAND")
                print(command)
                if command_type == 'MOVE':
                    move = command['move']

                    if move == 'w':
                        movesteering.on(0, 100)
                    elif move == 's':
                        movesteering.on(0, -100)
                    elif move == 'a':
                        movesteering.on(100, 100)
                    elif move == 'd':
                        movesteering.on(-100, 100)
                    elif move == 't':
                        fork.on(-100)
                    elif move == 'g':
                        fork.on(100)
                    elif move == 'c':
                        print(color_sensor.color_name)
                    elif move == 'stop':
                        movesteering.off()
                        fork.off()
        except TimeoutError:
            pass
コード例 #15
0
ファイル: RobotRun4.py プロジェクト: planetrobotics/FLL2020
def Robotrun4():
    robot = MoveSteering(OUTPUT_A, OUTPUT_B)
    tank = MoveTank(OUTPUT_A, OUTPUT_B)
    colorLeft = ColorSensor(INPUT_1)
    colorRight = ColorSensor(INPUT_3)
    gyro = GyroSensor(INPUT_2)
    motorC = LargeMotor(OUTPUT_C)
    motorD = LargeMotor(OUTPUT_D)
    motorB = LargeMotor(OUTPUT_B)
    motorA = LargeMotor(OUTPUT_A)

    Constants.STOP = False

    gyro.reset()

    GyroDrift()

    gyro.reset()

    show_text("Robot Run 2")

    motorC.off(brake=True)

    #GyroTurn(steering=-50, angle=5)
    acceleration(degrees=DistanceToDegree(30), finalSpeed=30)
    lineFollowPID(degrees=DistanceToDegree(30), kp=1.3, ki=0.01, kd=15, color=ColorSensor(INPUT_3))
    acceleration(degrees=DistanceToDegree(5), finalSpeed=30)
    accelerationMoveBackward(degrees = DistanceToDegree(7), finalSpeed=50, steering=0)
    motorC.on_for_seconds(speed=15, seconds=1, brake=False)
    GyroTurn(steering=50, angle=20)
    acceleration(degrees=DistanceToDegree(20), finalSpeed=30)
    GyroTurn(steering=-55, angle=22)
    acceleration(degrees=DistanceToDegree(17), finalSpeed=30)
    gyro.mode = "GYRO-ANG"
    while gyro.value() < -10 and False == Constants.STOP:
        motorA.on(speed = 20)
    
    lineFollowPID(degrees=DistanceToDegree(15), kp=1.3, ki=0.01, kd=15, color=ColorSensor(INPUT_3))    
    lineFollowTillIntersectionPID(kp=1.3, ki=0.01, kd=15, color=ColorSensor(INPUT_3), color2=ColorSensor(INPUT_1))
    lineFollowPID(degrees=DistanceToDegree(10), kp=1.3, ki=0.01, kd=15, color=ColorSensor(INPUT_3))
    lineFollowTillIntersectionPID(kp=1.3, ki=0.01, kd=15, color=ColorSensor(INPUT_3), color2=ColorSensor(INPUT_1))

    if gyro.angle > 2 and False == Constants.STOP:
        GyroTurn(steering=-50, angle=gyro.angle)
    elif gyro.angle < -2 and False == Constants.STOP:
        ang = -1 * gyro.angle
        GyroTurn(steering=50, angle=ang)
    accelerationMoveBackward(degrees = DistanceToDegree(5), finalSpeed=50, steering=0)

    acceleration(degrees=DistanceToDegree(12), finalSpeed=50, steering=2.5)

    motorC.on_for_degrees(speed=-25, degrees=150, brake=True)
    motorD.on_for_degrees(speed=-25, degrees=150, brake=True)

    acceleration(degrees=DistanceToDegree(12), finalSpeed=45, steering=4)
    #acceleration(degrees=DistanceToDegree(12), finalSpeed=45, steering=5)

    #Moving treadmill
    if False == Constants.STOP:
        tank.on_for_seconds(left_speed=1, right_speed=20, seconds=5.5)
    #motorB.on_for_seconds(speed=15, seconds=10)

    motorC.on_for_seconds(speed=25, seconds=2, brake=False)
    motorD.on_for_seconds(speed=25, seconds=2, brake=False)

    accelerationMoveBackward(degrees = DistanceToDegree(5), finalSpeed=20, steering=0)
    while colorLeft.reflected_light_intensity < Constants.WHITE:
        robot.on(steering=0, speed=-20)
    accelerationMoveBackward(degrees = DistanceToDegree(2), finalSpeed=10, steering=0)

    GyroTurn(steering=-50, angle=gyro.angle)
    MoveBackwardBlack(10)

    ang = -1 * (88 + gyro.angle)
    GyroTurn(steering=-100, angle=ang)

    # wall square
    if False == Constants.STOP:
        robot.on_for_seconds(steering=5, speed=-10, seconds=2.7, brake=False)

    # moving towards row machine    
    acceleration(degrees=DistanceToDegree(3), finalSpeed=50, steering=0)
    ang = math.fabs(89 + gyro.angle)
    show_text(str(ang))
    if ang > 2 and False == Constants.STOP:
        GyroTurn(steering=-100, angle=ang)

    acceleration(degrees=DistanceToDegree(26), finalSpeed=50, steering=0)
    
    GyroTurn(steering=100, angle=68)
    #acceleration(degrees=DistanceToDegree(1), finalSpeed=20, steering=0)

    if False == Constants.STOP:
        motorC.on_for_seconds(speed=-10, seconds=1.5, brake=False)
        GyroTurn(steering=100, angle=2)
        sleep(0.2)
        GyroTurn(steering=-100, angle=2)
        motorC.on_for_seconds(speed=-10, seconds=0.2, brake=True)
        motorC.off(brake=True)
    acceleration(degrees=DistanceToDegree(1), finalSpeed=20, steering=0)

    accelerationMoveBackward(degrees = DistanceToDegree(10), finalSpeed=20, steering=0)
    GyroTurn(steering=-100, angle=10)

    #DOING Row Machine
    if False == Constants.STOP:
        motorC.on_for_seconds(speed=20, seconds=2)
        ang = 90 + gyro.angle
        GyroTurn(steering=-100, angle=ang)
    
    acceleration(degrees=DistanceToDegree(28), finalSpeed=50, steering=0)
    lineSquare()

    #Moving towards weight machine
    show_text(str(gyro.angle))
    ang = math.fabs(87 + gyro.angle)
    show_text(str(ang))
    GyroTurn(steering=100, angle=ang)
    acceleration(degrees=DistanceToDegree(22), finalSpeed=30, steering=0)

    if False == Constants.STOP:
        motorD.on_for_degrees(speed=-20, degrees=160)
        GyroTurn(steering=-100, angle=ang)
    accelerationMoveBackward(degrees = DistanceToDegree(20), finalSpeed=20, steering=0)
    if False == Constants.STOP:
        motorD.on_for_seconds(speed=20, seconds=2, brake=True)
    lineSquare()

    if False == Constants.STOP:
        GyroTurn(steering=-40, angle=85)
    
    lineFollowRightPID(degrees=DistanceToDegree(30), kp=1.3, ki=0.01, kd=15, color=colorLeft)
    lineFollowTillIntersectionRightPID(kp=1.3, ki=0.01, kd=15, color=colorLeft, color2=colorRight)
    lineFollowRightPID(degrees=DistanceToDegree(34), kp=1.3, ki=0.01, kd=15, color=colorLeft)

    if False == Constants.STOP:
        GyroTurn(steering=50, angle=20)
    acceleration(degrees=DistanceToDegree(12), finalSpeed=30, steering=2)
    lineSquare()

    if False == Constants.STOP:
        GyroTurn(steering=100, angle=75)
        motorC.on_for_seconds(speed=-10, seconds=1, brake=False)
        acceleration(degrees=DistanceToDegree(6.5), finalSpeed=30, steering=0)
        motorC.on_for_seconds(speed=10, seconds=2, brake=True)

    if False == Constants.STOP:
        GyroTurn(steering=50, angle=75)
    acceleration(degrees=DistanceToDegree(5), finalSpeed=30, steering=0)

    while Constants.STOP == False:
        acceleration(degrees=DistanceToDegree(3), finalSpeed=31, steering=0)
        accelerationMoveBackward(degrees = DistanceToDegree(3), finalSpeed=30, steering=0)

    motorC.off(brake=False)
    motorD.off(brake=False)
コード例 #16
0
ファイル: bloco2.py プロジェクト: Ppaulo03/SEK
        alinhamento()                       #achou a faixa preta
        # sleep(0.1)
        # k = (cor('dir') != 'amarelo') and (cor('dir') != 'azul') and (cor('dir') != 'vermelho')
        # l = (cor('esq') != 'amarelo') and (cor('esq') != 'azul') and (cor('esq') != 'vermelho')
        # while k and l:
        #     alinhamento()                       #achou a primeira cor
        #     sleep(0.1)
        #     k = (cor('dir') != 'amarelo') and (cor('dir') != 'azul') and (cor('dir') != 'vermelho')
        #     l = (cor('esq') != 'amarelo') and (cor('esq') != 'azul') and (cor('esq') != 'vermelho')
        # steering_pair.on_for_degrees(0,20,100)
        steering_pair.on_for_degrees(0,20,100)
        girar_pro_lado('esq',90)
        cor1 = cor('dir')                #salvar primeira cor
        while cor('dir')==cor1 or cor('dir')=='preto':
            while cor('dir')!='preto':
                steering_pair.on(-10,15)
            else:
                steering_pair.off()
                steering_pair.on_for_degrees(50,15,100)

        # sleep(0.01)
        # girar_pro_lado('esq',85)              #90 graus pra esquerda
        # alinhamento()
        # steering_pair.on_for_degrees(0,20,350)
        cor2 = cor('dir')                #salvar segunda cor
        cor3 = autocompletar(cor1, cor2)    #autocompletar 3a cor
        cores = open("cores.txt","a")
        escrever = [cor1,'\n',cor2,'\n',cor3]
        cores.writelines(escrever)
        cores.close()
        sound.beep()
コード例 #17
0
ファイル: c3.py プロジェクト: Ppaulo03/SEK
    else:
        sleep(0.01)  # Wait 0.01 second

rgbmax_e = definir_rgbmax('esq')
rgbmax_d = definir_rgbmax('dir')
garra_g.on_for_seconds(10, 1.5)
garra_m.on_for_seconds(10, 1)
mapadecores = ['vermelho', 'amarelo', 'azul']

while True:
    while meeting_area:  #começa aleatório, termina virado pro preto
        while cor('esq') == 'branco' and cor('dir') == 'branco':
            log = open('log.txt', 'a')
            log.write('Sensores no branco, indo pra frente\n')
            log.close()
            steering_pair.on(0, 20)
        else:
            log = open('log.txt', 'a')
            log.write('Algum sensor saiu do branco, para.\n')
            log.close()
            steering_pair.off()
        #trocar isso acima por alinhamento()
        #steering_pair.on_for_degrees(0,10,30)
        if cor('esq') == 'vazio' or cor('dir') == 'vazio':
            log = open('log.txt', 'a')
            log.write('Um dos sensores está no vazio\n')
            log.close()
            steering_pair.on_for_degrees(0, -10, 120)
            sleep(1)
            alinhamento()
            sleep(1)
コード例 #18
0
ファイル: bloco4.py プロジェクト: Ppaulo03/SEK
        ir_pro_gasoduto = True
        rgbmax_e = definir_rgbmax('esq')
        rgbmax_d = definir_rgbmax('dir')
    else:
        sleep(0.01)  # Wait 0.01 second

sleep(10)
sound.beep()
sound.beep()

while ir_pro_gasoduto:  #começa com os sensores no vazio certo
    #termina paralelo ao gasoduto
    steering_pair.on_for_degrees(0, -20, 350)
    girar_pro_lado('esq', 90)
    while cor('esq') != 'azul' and cor('dir') != 'azul':
        steering_pair.on(0, -40)
    else:
        steering_pair.off()
    steering_pair.on_for_degrees(0, -55, 300)
    girar_pro_lado('esq', 180)
    while usf.distance_centimeters > 15:
        steering_pair.on(0, 10)
    else:
        steering_pair.off()
    if usf.distance_centimeters < 16 and cor('esq') == 'azul':
        girar_pro_lado('dir', 90)
    sound.speak('go go go')
    garra_g.on_for_degrees(20, -1200)
    sleep(0.1)
    global gasoduto_com_cano
    gasoduto_com_cano = (usl.distance_centimeters < 25
コード例 #19
0
#!/usr/bin/env python3
from ev3dev2.motor import MoveTank, OUTPUT_B, OUTPUT_C, MoveSteering
from ev3dev2.sensor.lego import TouchSensor, UltrasonicSensor
from time import sleep
from ev3dev2.sound import Sound
from threading import Thread
us = UltrasonicSensor()
us.mode = 'US-DIST-CM'
ts = TouchSensor()
sound = Sound()
steer_pair = MoveSteering(OUTPUT_B, OUTPUT_C)
speed = 0
while True:
    if ts.wait_for_bump() == True:
        speed += 10
        steer_pair.on(steering=0, speed=speed)
    else:
        sleep(0.01)
コード例 #20
0
class ColorTank:
    def __init__(self, left_motor_port, right_motor_port, infra_sensor_mode,
                 color_sensor_mode):
        self.__movesteering = MoveSteering(left_motor_port, right_motor_port)
        self.__mediummotor = MediumMotor()
        self.__cs = ColorSensor()
        self.__cs.mode = color_sensor_mode
        self.__ir = InfraredSensor()
        self.__ir.mode = infra_sensor_mode

    def __turn_left(self):
        self.__movesteering.on(-50, 30)

    def __turn_right(self):
        self.__movesteering.on(50, 30)

    def __run_forward(self):
        self.__movesteering.on(0, 50)

    def __run_backward(self):
        self.__movesteering.on(0, -20)

    def __stop(self):
        self.__movesteering.off()

    def __play_text_sound(self, words):
        sound = Sound()
        sound.speak(words)

    def __lift_up(self):
        self.__mediummotor.on_for_degrees(10, 50)

    def __lift_down(self):
        self.__mediummotor.on_for_degrees(10, -50)

    def __get_button_pressed_value(self, buttons):
        BUTTON_VALUES = {
            0: [],
            1: ['top_left'],
            2: ['bottom_left'],
            3: ['top_right'],
            4: ['bottom_right'],
            5: ['top_left', 'top_right'],
            6: ['top_left', 'bottom_right'],
            7: ['bottom_left', 'top_right'],
            8: ['bottom_left', 'bottom_right'],
            9: ['beacon'],
            10: ['top_left', 'bottom_left'],
            11: ['top_right', 'bottom_right']
        }
        return list(BUTTON_VALUES.keys())[list(
            BUTTON_VALUES.values()).index(buttons)]

    def __run(self, button_value):
        if (button_value == 1):
            self.__turn_left()
        elif (button_value == 3):
            self.__turn_right()
        elif (button_value == 5):
            self.__run_forward()
        elif (button_value == 8):
            self.__run_backward()
        elif (button_value == 2):
            self.__lift_up()
        elif (button_value == 4):
            self.__lift_down()
        # elif(button_value == 2):
        #     self.__play_text_sound("Lily, I love you")
        else:
            self.__stop()

    def __color_detect(self):
        color = self.__cs.color
        if (color == 1):
            self.__play_text_sound("black")
        elif (color == 2):
            self.__play_text_sound("blue")
        elif (color == 3):
            self.__play_text_sound("green")
        elif (color == 4):
            self.__play_text_sound("yellow")
        elif (color == 5):
            self.__play_text_sound("red")
        elif (color == 6):
            self.__play_text_sound("white")
        elif (color == 7):
            self.__play_text_sound("brown")
        else:
            pass

    def process(self):
        self.__ir.process()
        buttons_pressed = self.__ir.buttons_pressed()
        button_value = self.__get_button_pressed_value(buttons_pressed)
        self.__run(button_value)
        self.__color_detect()
コード例 #21
0
ファイル: testedistancia.py プロジェクト: Ppaulo03/SEK
#     c.write(n)
#     c.write(') ')
#     c.write(str(d))
#     c.write('\n')
#     c.close()

#precisa achar onde os valores tão estáveis
#ver o comprimento dessa faixa estável
#voltar pra onde essa faixa acabou

achou_fim_cano = False
achou_cano = False
dist = []

while distancia_do_corre(usl) > 40:
    steering_pair.on(0, 50)
else:
    sleep(2)
    sound.beep()
    steering_pair.off()
    while not (achou_fim_cano):
        sleep(0.02)
        steering_pair.on_for_degrees(0, 10, 10)
        sleep(0.02)
        d = distancia_do_corre(usl)
        dist.append(d)
        if len(dist) > 20:  #ter certeza que já tem 7
            a = 0
            for i in range(20):  #pega os 7 últimos e faz a média
                a = a + dist[len - 1 - i]
            media_dos_7 = a / 20
コード例 #22
0
#!/usr/bin/env python3
from ev3dev2.motor import MoveSteering, OUTPUT_B, OUTPUT_C
from ev3dev2.sensor.lego import TouchSensor, ColorSensor
from time import sleep
from ev3dev2.sound import Sound
ts = TouchSensor()
cl = ColorSensor()
steer_pair = MoveSteering(OUTPUT_B, OUTPUT_C) # 스티어링 모드 설정
while not ts.is_pressed:  # 터치 센서를 클릭하면 멈춤
         if cl.reflected_light_intensity < 30:
              steer_pair.on(30,10) # 오른쪽 방향으로 10 속도로 주행
         else:
              steer_pair.on(-30,10) # 왼쪽 방향으로 10 속도로 주행  
コード例 #23
0
class myRobot:
  # Initialize the Class 
  def __init__(self, motorL=None, motorR=None, motorM=None, gyroPort=None, colorL=None, colorR=None, colorM=None):
    if motorL: self.motorL = LargeMotor(motorL)
    if motorR: self.motorR = LargeMotor(motorR)
    if motorM: self.motorM = Motor(motorM)
    if gyroPort: 
      self.gyro = GyroSensor(gyroPort)
      self.gyro.mode = 'GYRO-CAL'
      time.sleep(0.2)
      self.gyro.mode = 'GYRO-ANG'
    if colorL: self.colorL = ColorSensor(colorL)
    if colorR: self.colorR = ColorSensor(colorR)
    if colorM: self.colorM = ColorSensor(colorM)
    if motorL and motorR: 
      self.drive = MoveSteering(motorL, motorR)
      self.move = MoveTank(motorL, motorR)
    print("Successful initialization!")

  # Function to go forward, by default it uses the gyro for correcting, but it can be disabled.
  # Can use either rotations to measure distance, or time
  def forward(self, speed, distance, useRots=True, correction=2, useGyro=True, way=None): 
    initialGyro = way if way else self.gyro.angle
    if useRots:
      initialMotor = abs((self.motorL.position/360 + self.motorR.position/360)/2) # Get the average of the 2 motor values
      while abs((self.motorL.position/360 + self.motorR.position/360)/2) < initialMotor+distance: 
        self.drive.on(initialGyro - self.gyro.angle*correction, speed)
        print("%f : %i" % (abs((self.motorL.position/360 + self.motorR.position/360)/2), initialMotor+distance))
        print("gyro: %i" % self.gyro.angle)
    elif not useRots:
      initialTime = time.time()
      while time.time()-initialTime < distance: 
        self.drive.on(initialGyro - self.gyro.angle*correction, speed)
        print("%f : %i" % (time.time()-initialTime, distance))
        print("gyro: %i" % self.gyro.angle)

  def stop(self, brake=False): 
    self.drive.stop(brake=brake)

  # Function that can turn either absolute or relative to current rotation
  # if way is float, then destination will be gyro.angle+way, if int, then just way
  def turn(self, way, speed, linear=False, leeway=1, debug=False, minSpeed=5):
    if type(way)==type(1.1):
      way = int(self.gyro.angle+way)
    leewayList = range(way-leeway, way+leeway+1)
    if linear:
      while self.gyro.angle not in leewayList:
        if debug: print(self.gyro.angle)
        lin = abs(way/self.gyro.angle)
        print(lin)
        self.move.on(speed*lin+minSpeed, speed*-1*lin+minSpeed)
    elif not linear:
      while self.gyro.angle not in leewayList:
        if debug: print(self.gyro.angle)
        self.move.on(speed, speed*-1)

  # Will fix gyro drift when called
  def nodrift(self, t=0.2):
    self.gyro.mode = 'GYRO-CAL'
    time.sleep(t)
    self.gyro.mode = 'GYRO-ANG'
コード例 #24
0
ファイル: ev3_robot.py プロジェクト: pro-thorin/city-shaper
class Ev3Robot:
    def __init__(self,
                 wheel1=OUTPUT_B,
                 wheel2=OUTPUT_C,
                 wheel3=OUTPUT_A,
                 wheel4=OUTPUT_D):
        self.steer_pair = MoveSteering(wheel1, wheel2)
        self.gyro = GyroSensor()
        self.tank_pair = MoveTank(wheel1, wheel2)
        self.motor1 = LargeMotor(wheel1)
        self.motor2 = LargeMotor(wheel2)
        self.motor3 = MediumMotor(wheel3)
        self.motor4 = MediumMotor(wheel4)
        self.color1 = ColorSensor(INPUT_1)
        self.color4 = ColorSensor(INPUT_4)
        self._black1 = 0
        self._black4 = 0
        self._white1 = 100
        self._white4 = 100
        self.gyro.mode = 'GYRO-ANG'
        self.led = Leds()
        self.btn = Button()
        self.btn._state = set()

    def write_color(self, file, value):
        # opens a file
        f = open(file, "w")
        # writes a value to the file
        f.write(str(value))
        f.close()

    def read_color(self, file):
        # opens a file
        f = open(file, "r")
        # reads the value
        color = int(f.readline().strip())
        f.close()
        return color

    def pivot_right(self, degrees, speed=20):
        # makes the robot pivot to the right until the gyro sensor
        # senses that it has turned the required number of degrees
        self.tank_pair.on(left_speed=speed, right_speed=0)
        self.gyro.wait_until_angle_changed_by(degrees - 10)
        self.tank_pair.off()

    def pivot_left(self, degrees, speed=20):
        # makes the robot pivot to the left until the gyro sensor
        # senses that it has turned the required number of degrees
        self.tank_pair.on(left_speed=0, right_speed=speed)
        self.gyro.wait_until_angle_changed_by(degrees - 10)
        self.tank_pair.off()

    def old_spin_right(self, degrees, speed=20):
        #old program; don't use
        self.gyro.reset()
        value1 = self.gyro.angle
        self.tank_pair.on(left_speed=speed, right_speed=speed * -1)
        self.gyro.wait_until_angle_changed_by(degrees)
        value2 = self.gyro.angle
        self.tank_pair.on(left_speed=-30, right_speed=30)
        self.gyro.wait_until_angle_changed_by(value1 - value2 - degrees)
        self.stop()

    def old_spin_left(self, degrees, speed=20):
        #old program; don't use
        value1 = self.gyro.angle
        self.tank_pair.on(left_speed=speed * -1, right_speed=speed)
        self.gyro.wait_until_angle_changed_by(degrees)
        value2 = self.gyro.angle
        self.tank_pair.on(left_speed=8, right_speed=-8)
        self.gyro.wait_until_angle_changed_by(value2 - value1 - degrees + 5)
        self.tank_pair.off()

    def dog_gear(self, degrees, motor, speed=30):
        if motor == 3:
            self.motor3.on_for_degrees(degrees=degrees, speed=speed)
            self.motor3.off()
        else:
            self.motor4.on_for_degrees(degrees=degrees, speed=speed)

    def go_straight_forward(self, cm, speed=20, wiggle_factor=1):
        value1 = self.motor1.position
        angle0 = self.gyro.angle
        rotations = cm / 19.05  #divides by circumference of the wheel

        # calculates the amount of degrees the robot has turned, then turns the
        # opposite direction and repeats until the robot has gone the required
        # number of centimeters
        while abs(self.motor1.position - value1) / 360 < rotations:
            angle = self.gyro.angle - angle0
            self.steer_pair.on(steering=angle * wiggle_factor * -1,
                               speed=speed * -1)
        self.steer_pair.off()

    def go_straight_backward(self, cm, speed=20, wiggle_factor=1):
        # see go_straight_forward
        value1 = self.motor1.position
        angle0 = self.gyro.angle
        rotations = cm / 19.05
        while abs(self.motor1.position - value1) / 360 < rotations:
            angle = self.gyro.angle - angle0
            self.steer_pair.on(steering=angle * wiggle_factor, speed=speed)
        self.steer_pair.off()

    def calibrate(self):
        # turns the led lights orange, and waits for a button to be pressed
        # (signal that the robot is on black), then calculates the reflected
        # light intensity of the black line, then does the same on the white line
        self.led.set_color('LEFT', 'ORANGE')
        self.led.set_color('RIGHT', 'ORANGE')
        while not self.btn.any():
            sleep(0.01)
        self.led.set_color('LEFT', 'GREEN')
        self.led.set_color('RIGHT', 'GREEN')
        self._black1 = self.color1.reflected_light_intensity
        self._black4 = self.color4.reflected_light_intensity
        sleep(2)
        self.led.set_color('LEFT', 'ORANGE')
        self.led.set_color('RIGHT', 'ORANGE')

        while not self.btn.any():
            sleep(0.01)
        self.led.set_color('LEFT', 'GREEN')
        self.led.set_color('RIGHT', 'GREEN')
        self._white1 = self.color1.reflected_light_intensity
        self._white4 = self.color4.reflected_light_intensity
        sleep(3)
        self.write_color("/tmp/black1", self._black1)
        self.write_color("/tmp/black4", self._black4)
        self.write_color("/tmp/white1", self._white1)
        self.write_color("/tmp/white4", self._white4)

    def read_calibration(self):
        # reads the color files
        self._black1 = self.read_color("/tmp/black1")
        self._black4 = self.read_color("/tmp/black4")
        self._white1 = self.read_color("/tmp/white1")
        self._white4 = self.read_color("/tmp/white4")

    def align_white(self, speed=20, t=96.8, direction=1):
        # goes forward until one of the color sensors sees the white line.
        while self.calibrate_RLI(self.color1) < t and self.calibrate_RLI(
                self.color4) < t:
            self.steer_pair.on(steering=0, speed=speed * direction)
        self.steer_pair.off()
        # determines which sensor sensed the white line, then moves the opposite
        # motor until both sensors have sensed the white line
        if self.calibrate_RLI(self.color4) > t:
            while self.calibrate_RLI(self.color1) < t:
                self.motor1.on(speed=speed * direction)
            self.motor1.off()
        else:
            while self.calibrate_RLI(self.color4) < t:
                self.motor2.on(speed=speed * direction)
            self.motor2.off()

    def align_black(self, speed=20, t=4.7, direction=1):
        # see align_white
        while self.calibrate_RLI(self.color1) > t and self.calibrate_RLI(
                self.color4) > t:
            self.steer_pair.on(steering=0, speed=speed * direction)
        self.steer_pair.off()
        if self.calibrate_RLI(self.color4) < t:
            while self.calibrate_RLI(self.color1) > t:
                self.motor1.on(speed=speed * direction)
            self.motor1.off()
        else:
            while self.calibrate_RLI(self.color4) > t:
                self.motor2.on(speed=speed * direction)
            self.motor2.off()

    def align(self, t, speed=-20, direction=1):
        # aligns three times for extra accuracy
        self.align_white(speed=speed, t=100 - t, direction=direction)
        self.align_black(speed=-5, t=t, direction=direction)
        self.align_white(speed=-5, t=100 - t, direction=direction)

    def calibrate_RLI(self, color_sensor):
        # returns a scaled value based on what black and white are
        if (color_sensor.address == INPUT_1):
            black = self._black1
            white = self._white1
        else:
            black = self._black4
            white = self._white4
        return (color_sensor.reflected_light_intensity - black) / (white -
                                                                   black) * 100

    def stop(self):
        self.tank_pair.off()

    def spin_right(self, degrees, speed=30):
        self.turn(degrees, 100, speed)

    def spin_left(self, degrees, speed=30):
        self.turn(degrees, -100, speed)

    def turn(self, degrees, steering, speed=30):
        # turns at a decreasing speed until it turns the required amount of degrees
        value1 = self.gyro.angle
        s1 = speed
        d1 = 0
        while d1 < degrees - 2:
            value2 = self.gyro.angle
            d1 = abs(value1 - value2)
            slope = speed / degrees
            s1 = (speed - slope * d1) * (degrees / 90) + 3
            self.steer_pair.on(steering=steering, speed=s1)
        self.steer_pair.off()
コード例 #25
0
us = UltrasonicSensor()
us.mode = 'US-DIST-CM'
ts = TouchSensor()
sound = Sound()
steer_pair = MoveSteering(OUTPUT_B, OUTPUT_C)


def play_sound():
    global Distance
    while loop == True:  # repeat until 'loop' is set to False in the main thread.
        Distance = us.value()
        if Distance < 200:
            sound.play_tone(440, Distance / 1000)
            #sleep(0.1)
        else:
            sleep(0.1)


loop = True
t = Thread(target=play_sound)
t.start()
steer_pair.on(steering=0, speed=10)
while True:
    if Distance < 90:
        steer_pair.off(brake=True)
        loop = False
        sleep(1)
    else:
        loop = True
        sleep(0.01)
コード例 #26
0
ファイル: c1.py プロジェクト: Ppaulo03/SEK
        meeting_area = True
    else:
        sleep(0.01)  # Wait 0.01 second

rgbmax_e = definir_rgbmax('esq')
rgbmax_d = definir_rgbmax('dir')
garra_g.on_for_seconds(10, 1.5)
garra_m.on_for_seconds(10, 1)
mapadecores = ['vermelho', 'amarelo', 'azul']

while True:
    while meeting_area:  #começa aleatoriamente na meeting area
        #termina com os sensores de cor no vazio certo
        sound.beep()
        while cor('esq') == 'branco' and cor('dir') == 'branco':
            steering_pair.on(0, 15)
        else:
            steering_pair.off()
        steering_pair.on_for_degrees(0, -15, 70)
        alinhamento()
        steering_pair.on_for_degrees(0, 10, 70)
        if cor('esq') == 'vazio' or cor('dir') == 'vazio':
            global no_vazio
            no_vazio = True
            if cor('esq') != cor('dir'):
                steering_pair.on_for_degrees(0, -15, 150)
                alinhamento()
            steering_pair.on_for_degrees(0, -25,
                                         350)  #volta e vira pra esquera
            girar_pro_lado('esq', 90)
            sound.speak('empty')
コード例 #27
0
from ev3dev2.sensor import INPUT_1, INPUT_2, INPUT_3, INPUT_4
from ev3dev2.sensor.lego import ColorSensor, GyroSensor, UltrasonicSensor

medMotor = MediumMotor(OUTPUT_C)
ultrasonic_sensor_front = UltrasonicSensor(INPUT_4)
ultrasonic_sensor_side = UltrasonicSensor(INPUT_2)
ultrasonic_sensor_front.mode = 'US-DIST-CM'
ultrasonic_sensor_side.mode = 'US-DIST-CM'
gyro = GyroSensor(INPUT_1)
gyro.mode = GyroSensor.MODE_GYRO_ANG

drivetrain = MoveSteering(OUTPUT_B, OUTPUT_D)

front_dist = ultrasonic_sensor_front.distance_centimeters
side_dist = ultrasonic_sensor_side.distance_centimeters

while True:
    if ultrasonic_sensor_front.distance_centimeters <= 10:
        if ultrasonic_sensor_side.distance_centimeters <= 15:
            drivetrain.on(steering=100, speed=20)
            gyro.wait_until_angle_changed_by(90)
            drivetrain.on(steering=0, speed=0)

        else:
            drivetrain.on(steering=-100, speed=20)
            gyro.wait_until_angle_changed_by(90)
            drivetrain.on(steering=0, speed=0)

    else:
        drivetrain.on(steering=0, speed=20)
コード例 #28
0
# limitations under the License.


print('Starting up...')
print('Loading EV3 dependencies...')
from ev3dev2.motor import OUTPUT_A, OUTPUT_B, SpeedPercent, MoveSteering, MoveDifferential, MoveTank
from ev3dev2.wheel import EV3Tire
from ev3dev2.button import Button
from ev3dev2.sensor.lego import InfraredSensor, TouchSensor, ColorSensor
from ev3dev2.sound import Sound
from ev3dev2.power import PowerSupply

steering_drive = MoveSteering(OUTPUT_A, OUTPUT_B)
STUD_MM = 8
mdiff = MoveDifferential(OUTPUT_A, OUTPUT_B, EV3Tire, 16 * STUD_MM)
steering_drive.on(0, SpeedPercent(0))
print('Motors initialized')

print('Loading ROS and other dependencies...')
import rospy
from std_msgs.msg import String
from geometry_msgs.msg import Twist
import json
from time import sleep
from math import degrees
import threading
import datetime
from random import uniform

class EV3DEV(object):
    def __init__(self):
コード例 #29
0
#!/usr/bin/env python3
from ev3dev2.motor import MoveSteering, OUTPUT_B, OUTPUT_C
from ev3dev2.sensor.lego import ColorSensor
from ev3dev2.button import Button
from ev3dev2.sound import Sound
from time import sleep

cl = ColorSensor()
btn = Button()
sound = Sound()
steer_pair = MoveSteering(OUTPUT_B, OUTPUT_C)

sound.speak('Press the Enter key when the sensor is in dim light')
btn.wait_for_bump('enter')
dim = cl.ambient_light_intensity
sound.beep()

sound.speak('Press the Enter key when the sensor is in bright light')
btn.wait_for_bump('enter')
bright = cl.ambient_light_intensity
sound.beep()
sound.speak('3, 2, 1, go!')

while not btn.any():  # Press any key to exit
    intensity = cl.ambient_light_intensity
    steer = (200 * (intensity - dim) / (bright - dim)) - 100
    steer = min(max(steer, -100), 100)
    steer_pair.on(steering=steer, speed=30)
    sleep(0.1)  # wait for 0.1 seconds
コード例 #30
0
ファイル: color2.py プロジェクト: Nikolay-Zagrebin/Ev3dev
#!/usr/bin/env python3
from ev3dev2.motor import MoveSteering, OUTPUT_B, OUTPUT_C
from ev3dev2.sensor.lego import ColorSensor
from ev3dev2.sound import Sound
from time import sleep
cl = ColorSensor()
steer_pair = MoveSteering(OUTPUT_B, OUTPUT_C)
sound = Sound()
steer_pair.on(0, 50)
while cl.reflected_light_intensity > 30:
    sleep(0.01)
steer_pair.off()