예제 #1
0
파일: mymotor.py 프로젝트: flyxiao2000/c3
class MyMotor(object):
    def __init__(self, motor, speed=0):
        self._motor = LargeMotor(motor)
        assert self._motor.connected
        self._motor.reset()
        self._motor.position = 0
        self._motor.stop_action = 'brake'
        self._set_speed(speed)

    @property
    def speed(self):
        return int(self._speed/10)

    def _set_speed(self, speed):
        assert speed >= -100 and speed <= 100
        self._speed = speed*10

    def run_forever(self, speed):
        if speed is not None:
            self._set_speed(speed)
        self._motor.run_forever(speed_sp=self._speed)

    def run_timed(self, timed, speed):
        if speed is not None:
            self._set_speed(speed)
        runtimed = timed * 1000
        self._motor.run_timed(speed_sp=self._speed, time_sp=runtimed)

    def run_position(self, postion, speed, lastpostion=False):
        if speed is not None:
            self._set_speed(speed)
        if lastpostion:
            self._motor.run_to_abs_pos(speed_sp=self._speed)
        else:
            self._motor.run_to_rel_pos(speed_sp=self._speed)

    def stop(self):
        self._motor.stop()

    def run_back(self, speed):
        if not self._speed:
            self.stop()
            self._set_speed(speed)
        self._motor.run_forever(speed_sp=self._speed)
예제 #2
0
STING_MOTOR.wait_while(Motor.STATE_RUNNING)

for i in range(3):
    GO_MOTOR.run_forever(speed_sp=-1000)

    SPEAKER.play(wav_file='/home/robot/sound/Blip 2.wav').wait()

    while INFRARED_SENSOR.proximity >= 40:
        pass

    GO_MOTOR.run_forever(speed_sp=250)

    SPEAKER.play(wav_file='/home/robot/sound/Blip 4.wav').wait()

    STING_MOTOR.run_to_rel_pos(
        speed_sp=750,
        position_sp=-220,
        stop_action=Motor.STOP_ACTION_HOLD)
    STING_MOTOR.wait_while(Motor.STATE_RUNNING)

    SPEAKER.play(wav_file='/home/robot/sound/Blip 3.wav').wait()
    
    STING_MOTOR.run_timed(
        speed_sp=-1000,
        time_sp=1000,
        stop_action=Motor.STOP_ACTION_HOLD)
    STING_MOTOR.wait_while(Motor.STATE_RUNNING)

    SPEAKER.play(wav_file='/home/robot/sound/Blip 1.wav').wait()

    MEDIUM_MOTOR.run_timed(
        speed_sp=750,
예제 #3
0
from ev3dev.ev3 import (Motor, LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B,
                        OUTPUT_C, Sound)

from time import sleep

LEFT_MOTOR = LargeMotor(address=OUTPUT_B)
RIGHT_MOTOR = LargeMotor(address=OUTPUT_C)
MEDIUM_MOTOR = MediumMotor(address=OUTPUT_A)

SPEAKER = Sound()

MEDIUM_MOTOR.run_forever(speed_sp=-1000)

for i in range(2):
    LEFT_MOTOR.run_to_rel_pos(
        position_sp=2 * 360,  # degrees
        speed_sp=750,  # degrees per second
        stop_action=Motor.STOP_ACTION_BRAKE)
    RIGHT_MOTOR.run_to_rel_pos(
        position_sp=2 * 360,  # degrees
        speed_sp=750,  # degrees per second
        stop_action=Motor.STOP_ACTION_BRAKE)
    LEFT_MOTOR.wait_while(Motor.STATE_RUNNING)
    RIGHT_MOTOR.wait_while(Motor.STATE_RUNNING)

    MEDIUM_MOTOR.run_forever(speed_sp=1000)

    SPEAKER.play(wav_file='/home/robot/sound/Airbrake.wav').wait()

    sleep(0.5)

    LEFT_MOTOR.run_to_rel_pos(
예제 #4
0
class Robot(object):

    BASE = 12.3  #base of the tire
    RADUIS = 3  #radius of the tire
    CIRCUMFERENCE = 17.2  #circumference of the tires
    '''
    left_motor_port :: left motor port
    right_motor_port :: right motor port
    front_us_port :: front ultrasonic sensor port
    right_us_port ::right ultrasonic sensor port
    left_us_port ::left ultrasonic sensor port
    '''
    def __init__(self, left_motor_port, right_motor_port, front_us_port,
                 right_us_port, left_us_port):
        self.leftMotor = LargeMotor('out' + left_motor_port)
        self.rightMotor = LargeMotor('out' + right_motor_port)
        self.FRONT_US_SENSOR = UltrasonicSensor('in' + front_us_port)
        self.RIGHT_US_SENSOR = UltrasonicSensor('in' + right_us_port)
        self.LEFT_US_SENSOR = UltrasonicSensor('in' + left_us_port)
        self.TOUCH_SENSOR = TouchSensor()

        assert self.leftMotor.connected, "Connect left Motor to port" + \
            str(left_motor_port)
        assert self.rightMotor.connected, "Connect right Motor to port" + \
            str(right_motor_port)
        assert self.TOUCH_SENSOR.connected, "Connect a touch sensor"
        assert self.FRONT_US_SENSOR.connected, "Connect the ultrasound sensor in the front"
        assert self.RIGHT_US_SENSOR.connected, "Connect the ultrasound sensor on the right"
        assert self.LEFT_US_SENSOR.connected, "Connect the ultrasound sensor on the left"

        #set sensor mode to cm
        self.FRONT_US_SENSOR.mode = 'US-DIST-CM'
        self.RIGHT_US_SENSOR.mode = 'US-DIST-CM'
        self.LEFT_US_SENSOR.mode = 'US-DIST-CM'

    #move straight
    def moveStraight(self, distance, speed):
        n = (360 * distance) / self.CIRCUMFERENCE
        self.rightMotor.run_to_rel_pos(position_sp=n,
                                       speed_sp=speed,
                                       stop_action="brake")
        self.leftMotor.run_to_rel_pos(position_sp=n,
                                      speed_sp=speed,
                                      stop_action="brake")
        self.rightMotor.wait_while('running')
        self.leftMotor.wait_while('running')

    #move backward
    def moveBackward(self, distance, speed):
        n = (360 * distance) / self.CIRCUMFERENCE
        n = (-1 * n)
        self.rightMotor.run_to_rel_pos(position_sp=n,
                                       speed_sp=speed,
                                       stop_action="brake")
        self.leftMotor.run_to_rel_pos(position_sp=n,
                                      speed_sp=speed,
                                      stop_action="brake")
        self.rightMotor.wait_while('running')
        self.leftMotor.wait_while('running')

    #left left
    def turnLeft(self, distance, speed):
        n = (360 * distance) / self.CIRCUMFERENCE
        m = (-1 * n)
        self.rightMotor.run_to_rel_pos(position_sp=n,
                                       speed_sp=speed,
                                       stop_action="brake")
        self.leftMotor.run_to_rel_pos(position_sp=m,
                                      speed_sp=speed,
                                      stop_action="brake")
        self.rightMotor.wait_while('running')
        self.leftMotor.wait_while('running')

    #turn right
    def turnRight(self, distance, speed):
        n = (360 * distance) / self.CIRCUMFERENCE
        m = (-1 * n)
        self.rightMotor.run_to_rel_pos(position_sp=m,
                                       speed_sp=speed,
                                       stop_action="brake")
        self.leftMotor.run_to_rel_pos(position_sp=n,
                                      speed_sp=speed,
                                      stop_action="brake")
        self.rightMotor.wait_while('running')
        self.leftMotor.wait_while('running')

    #stop robot movement
    def stopMotor(self):
        self.rightMotor.stop()
        self.leftMotor.stop()

    #get ultrasonic sensor reading
    def getSensorReading(self, sensor):
        if sensor == 'front':
            reading = self.FRONT_US_SENSOR.value() / 10
        elif sensor == 'right':
            reading = self.RIGHT_US_SENSOR.value() / 10
        elif sensor == 'left':
            reading = self.LEFT_US_SENSOR.value() / 10
        return reading
    pass

GO_MOTOR.run_forever(speed_sp=-200)

while BEACON_SEEKER.heading >= 3:
    pass

# FIXME: Spik3r doesn't stop at the correct angle
GO_MOTOR.stop(stop_action=Motor.STOP_ACTION_HOLD)

SPEAKER.play(wav_file='/home/robot/sound/Blip 4.wav').wait()

# FIXME: the following doesn't run
for i in range(3):
    GO_MOTOR.run_to_rel_pos(speed_sp=1000,
                            position=-10,
                            stop_action=Motor.STOP_ACTION_HOLD)
    GO_MOTOR.wait_while(Motor.STATE_RUNNING)

    STING_MOTOR.run_to_rel_pos(speed_sp=750,
                               position=-220,
                               stop_action=Motor.STOP_ACTION_HOLD)
    STING_MOTOR.wait_while(Motor.STATE_RUNNING)

    sleep(0.1)

    STING_MOTOR.run_timed(speed_sp=-1000,
                          time_sp=1000,
                          stop_action=Motor.STOP_ACTION_HOLD)
    STING_MOTOR.wait_while(Motor.STATE_RUNNING)
예제 #6
0
#!/usr/bin/env python3

from ev3dev.ev3 import (Motor, LargeMotor, OUTPUT_D, Sound)

LARGE_MOTOR = LargeMotor(address=OUTPUT_D)

SPEAKER = Sound()

LARGE_MOTOR.run_timed(speed_sp=400,
                      time_sp=1000,
                      stop_action=Motor.STOP_ACTION_BRAKE)
LARGE_MOTOR.wait_while(Motor.STATE_RUNNING)

LARGE_MOTOR.run_to_rel_pos(speed_sp=750,
                           position_sp=-220,
                           stop_action=Motor.STOP_ACTION_BRAKE)
LARGE_MOTOR.wait_while(Motor.STATE_RUNNING)

SPEAKER.play(wav_file='/home/robot/sound/Blip 3.wav').wait()

LARGE_MOTOR.run_timed(speed_sp=-1000,
                      time_sp=1000,
                      stop_action=Motor.STOP_ACTION_BRAKE)
LARGE_MOTOR.wait_while(Motor.STATE_RUNNING)

LARGE_MOTOR.run_timed(
    speed_sp=1000,  # 400 too weak
    time_sp=1000,
    stop_action=Motor.STOP_ACTION_BRAKE)
LARGE_MOTOR.wait_while(Motor.STATE_RUNNING)
예제 #7
0
class Spik3r:
    def __init__(self,
                 sting_motor_port: str = OUTPUT_D,
                 go_motor_port: str = OUTPUT_B,
                 claw_motor_port: str = OUTPUT_A,
                 touch_sensor_port: str = INPUT_1,
                 color_sensor_port: str = INPUT_3,
                 ir_sensor_port: str = INPUT_4,
                 ir_beacon_channel: int = 1):
        self.sting_motor = LargeMotor(address=sting_motor_port)
        self.go_motor = LargeMotor(address=go_motor_port)
        self.claw_motor = MediumMotor(address=claw_motor_port)

        self.ir_sensor = InfraredSensor(address=ir_sensor_port)
        self.ir_beacon_channel = ir_beacon_channel
        self.beacon = RemoteControl(sensor=self.ir_sensor,
                                    channel=self.ir_beacon_channel)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.dis = Screen()
        self.speaker = Sound()

    def sting_by_ir_beacon(self):
        while True:
            if self.beacon.beacon:
                self.sting_motor.run_to_rel_pos(
                    speed_sp=750,
                    position=-220,
                    stop_action=Motor.STOP_ACTION_HOLD)
                self.sting_motor.wait_while(Motor.STATE_RUNNING)

                self.speaker.play(
                    wav_file='/home/robot/sound/Blip 3.wav').wait()

                self.sting_motor.run_timed(speed_sp=-1000,
                                           time_sp=1000,
                                           stop_action=Motor.STOP_ACTION_HOLD)
                self.sting_motor.wait_while(Motor.STATE_RUNNING)

                self.sting_motor.run_timed(speed_sp=1000,
                                           time_sp=1000,
                                           stop_action=Motor.STOP_ACTION_HOLD)
                self.sting_motor.wait_while(Motor.STATE_RUNNING)

                while self.beacon.beacon:
                    pass

    def be_noisy_to_people(self):
        while True:
            if self.color_sensor.reflected_light_intensity > 30:
                for i in range(4):
                    self.speaker.play_song(
                        (('D4', 'e3'), ('D4', 'e3'), ('D4', 'e3'), ('G4', 'h'),
                         ('D5', 'h'), ('C5', 'e3'), ('B4', 'e3'), ('A4', 'e3'),
                         ('G5', 'h'), ('D5', 'q'), ('C5', 'e3'), ('B4', 'e3'),
                         ('A4', 'e3'), ('G5', 'h'), ('D5', 'q'), ('C5', 'e3'),
                         ('B4', 'e3'), ('C5', 'e3'), ('A4', 'h.')))

    def pinch_if_touched(self):
        while True:
            if self.touch_sensor.is_pressed:
                self.claw_motor.run_timed(speed_sp=500,
                                          time_sp=1000,
                                          stop_action=Motor.STOP_ACTION_HOLD)
                self.claw_motor.wait_while(Motor.STATE_RUNNING)

                self.claw_motor.run_timed(speed_sp=-500,
                                          time_sp=0.3 * 1000,
                                          stop_action=Motor.STOP_ACTION_HOLD)
                self.claw_motor.wait_while(Motor.STATE_RUNNING)

    def keep_driving_by_ir_beacon(self):
        while True:
            if self.beacon.red_up and self.beacon.blue_up:
                self.go_motor.run_forever(speed_sp=910)

            elif self.beacon.blue_up:
                self.go_motor.run_forever(speed_sp=-1000)

            else:
                self.go_motor.stop(stop_action=Motor.STOP_ACTION_HOLD)

    def main(self):
        self.dis.image.paste(im=Image.open('/home/robot/image/Evil.bmp'))
        self.dis.update()

        # FIXME: ValueError: invalid literal for int() with base 10: '' or '9\n9'
        # when multiple threads access the same Sensor
        Thread(target=self.pinch_if_touched, daemon=True).start()

        Thread(target=self.be_noisy_to_people, daemon=True).start()

        Thread(target=self.sting_by_ir_beacon, daemon=True).start()

        self.keep_driving_by_ir_beacon()

MEDIUM_MOTOR.run_timed(
    speed_sp=-200,   # deg/s
    time_sp=1000,   # ms 
    stop_action=Motor.STOP_ACTION_HOLD)
MEDIUM_MOTOR.wait_while(Motor.STATE_RUNNING)


while True:
    if IR_SENSOR.proximity < 25:
        SCREEN.image.paste(im=Image.open('/home/robot/image/Pinch right.bmp'))
        SCREEN.update()

        LEFT_MOTOR.run_to_rel_pos(
            speed_sp=750,   # degrees/second
            position_sp=-1000,   # degrees
            stop_action=Motor.STOP_ACTION_HOLD)
        RIGHT_MOTOR.run_to_rel_pos(
            speed_sp=750,   # degrees/second
            position_sp=1000,   # degrees
            stop_action=Motor.STOP_ACTION_HOLD)
        LEFT_MOTOR.wait_while(Motor.STATE_RUNNING)
        RIGHT_MOTOR.wait_while(Motor.STATE_RUNNING)

        SCREEN.image.paste(im=Image.open('/home/robot/image/Angry.bmp'))
        SCREEN.update()
      
        MEDIUM_MOTOR.run_timed(
            speed_sp=1000,   # deg/s
            time_sp=0.3 * 1000,   # ms 
            stop_action=Motor.STOP_ACTION_HOLD)
    if IR_SENSOR.proximity < 25:
        LEFT_FOOT_MOTOR.stop(stop_action=Motor.STOP_ACTION_BRAKE)
        RIGHT_FOOT_MOTOR.stop(stop_action=Motor.STOP_ACTION_BRAKE)

        LEDS.set_color(group=Leds.LEFT, color=Leds.RED, pct=1)
        LEDS.set_color(group=Leds.RIGHT, color=Leds.RED, pct=1)

        SPEAKER.play(wav_file='/home/robot/sound/Object.wav').wait()
        SPEAKER.play(wav_file='/home/robot/sound/Detected.wav').wait()
        SPEAKER.play(wav_file='/home/robot/sound/Error alarm.wav').wait()

        MEDIUM_MOTOR.run_forever(speed_sp=1000  # degrees per second
                                 )

        LEFT_FOOT_MOTOR.run_to_rel_pos(
            position_sp=360,  # degrees
            speed_sp=1000,  # degrees per second
            stop_action=Motor.STOP_ACTION_BRAKE)
        RIGHT_FOOT_MOTOR.run_to_rel_pos(
            position_sp=360,  # degrees
            speed_sp=800,  # degrees per second
            stop_action=Motor.STOP_ACTION_BRAKE)
        LEFT_FOOT_MOTOR.wait_while(Motor.STATE_RUNNING)
        RIGHT_FOOT_MOTOR.wait_while(Motor.STATE_RUNNING)

        MEDIUM_MOTOR.run_forever(speed_sp=-1000  # degrees per second
                                 )

        LEFT_FOOT_MOTOR.run_to_rel_pos(
            position_sp=-360,  # degrees
            speed_sp=1000,  # degrees per second
            stop_action=Motor.STOP_ACTION_BRAKE)
예제 #10
0
                        OUTPUT_C, Screen, Sound)

from PIL import Image

MEDIUM_MOTOR = MediumMotor(address=OUTPUT_A)
LEFT_MOTOR = LargeMotor(address=OUTPUT_B)
RIGHT_MOTOR = LargeMotor(address=OUTPUT_C)

SCREEN = Screen()
SPEAKER = Sound()

SCREEN.image.paste(im=Image.open('/home/robot/image/Pinch right.bmp'))
SCREEN.update()

LEFT_MOTOR.run_to_rel_pos(
    position_sp=-0.5 * 360,  # degrees
    speed_sp=250,  # degrees per second
    stop_action=Motor.STOP_ACTION_BRAKE)
RIGHT_MOTOR.run_to_rel_pos(
    position_sp=0.5 * 360,  # degrees
    speed_sp=250,  # degrees per second
    stop_action=Motor.STOP_ACTION_BRAKE)
LEFT_MOTOR.wait_while(Motor.STATE_RUNNING)
RIGHT_MOTOR.wait_while(Motor.STATE_RUNNING)

MEDIUM_MOTOR.run_to_rel_pos(
    position_sp=3 * 360,  # degrees
    speed_sp=1000,  # degrees per second
    stop_action=Motor.STOP_ACTION_BRAKE)
MEDIUM_MOTOR.wait_while(Motor.STATE_RUNNING)

SCREEN.image.paste(im=Image.open('/home/robot/image/Pinch left.bmp'))