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)
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,
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(
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)
#!/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)
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)
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'))