diff --git a/py/src/drive.py b/py/src/drive.py index dd3f031..0d12463 100644 --- a/py/src/drive.py +++ b/py/src/drive.py @@ -10,7 +10,7 @@ class Drive(): def __init__(self, motors: tuple, dimensions: tuple): leftMotor, rightMotor = motors wheelDiameter, axleTrack = dimensions - + self.driveBase = DriveBase(leftMotor, rightMotor, wheel_diameter=wheelDiameter, axle_track=axleTrack) @@ -20,14 +20,14 @@ def forward(self, speed): self.driveBase.drive(speed, 0) def backward(self, speed): - self.driveBase.drive(speed, 0 ) + self.driveBase.drive(-abs(speed), 0 ) - def left(self, speed, angle): + def left(self, speed): self.driveBase.drive(speed, 90) - def right(self, speed, angle): - self.driveBase.drive(speed, -90) + def right(self, speed): + self.driveBase.turn(90) - def stop(self, speed): + def stop(self, brakeType): self.driveBase.drive(0,0) \ No newline at end of file diff --git a/py/src/main.py b/py/src/main.py index 0e09bfc..08eb296 100644 --- a/py/src/main.py +++ b/py/src/main.py @@ -7,10 +7,9 @@ from pybricks.robotics import DriveBase from pybricks.media.ev3dev import SoundFile, ImageFile - + try: from drive import Drive - from sensors import Sensors from robot import Robot except Exception as e: @@ -23,17 +22,15 @@ # This program requires LEGO EV3 MicroPython v2.0 or higher. # Click "Open user guide" on the EV3 extension tab for more information. -dimensions = ( 20, # Wheel diamter - 20 ) #Axle track +dimensions = ( 47, # Wheel diamter + 140 ) #Axle track motors = (Motor(port=Port.D), # Left motor for the drive base Motor(port=Port.C)) # Right motor for the drive base -sensors = (ColorSensor(port=Port.S1), # Lyssensor for å måle fargen på jorda - UltrasonicSensor(port=Port.S4)) # Ultrasonisksensor for å sjekke for potensielle hindringer robotten må navigere unna +sensors = (Port.S3, # Lyssensor for å måle fargen på jorda + Port.S1) # Ultrasonisksensor for å sjekke for potensielle hindringer robotten må navigere unna robotDrive = Drive(motors, dimensions) # Robottens kjørefunksjonalitet -robotSensors = Sensors(sensors) # Robottens sensorfunksjonalitet - -robot = Robot(robotDrive, robotSensors) # EV3 robot +robot = Robot(robotDrive, *sensors) # EV3 robot robot.start() \ No newline at end of file diff --git a/py/src/robot.py b/py/src/robot.py index 6984787..e1d5d6c 100644 --- a/py/src/robot.py +++ b/py/src/robot.py @@ -8,21 +8,39 @@ from pybricks.media.ev3dev import SoundFile, ImageFile from drive import Drive -from sensors import Sensors +from sensors import UltraSonic, Colour class Robot(): - def __init__(self, drive: Drive, sensors: Sensors): + def __init__(self, drive: Drive, colorPort, ultrsonicPort): self.hub = EV3Brick() self.drive = drive - self.sensors = sensors + self.color = Colour(colorPort) + self.ultrasonic = UltraSonic(ultrsonicPort) + + + def start(self): + self.speed = 150 + self.drive.forward(self.speed) - def start(self, duration_ms = 5000): - self.drive.forward(50) - timer = StopWatch() - while timer.time() < duration_ms: + while True: wait(50) + + - self.stop() + if self.ultrasonic.distanceLessThan(100): + self.drive.stop(0) + self.hub.speaker.beep() + wait(1000) + self.drive.backward(self.speed) + wait(1000) + self.drive.right(self.speed) + wait(1000) + self.drive.forward(self.speed) + wait(1000) + self.drive.right(self.speed) + wait(1000) + self.drive.forward(self.speed) + def stop(self): self.drive.forward(0) diff --git a/py/src/sensors.py b/py/src/sensors.py index dfe179b..84037fd 100644 --- a/py/src/sensors.py +++ b/py/src/sensors.py @@ -13,10 +13,6 @@ GAMMEL SENSOR FUNKSJONALITET BEHOLDES FREM TIL NY FUNKSJONALITET ER IMPLEMENTERT """ -class Sensors(): - def __init__(self, sensors: tuple): - self.color, self.ultrasonic = sensors - """ @@ -27,13 +23,19 @@ def __init__(self, sensorPort): self.sensor = UltrasonicSensor(port=sensorPort) def distanceLessThan(self, value): - if self.sensor.distance() < value: - return True - else: - return False - - -class Color(): + try: + return self.sensor.distance() < value + except OSError: + # kort pause og ett nytt forsøk + wait(50) + try: + return self.sensor.distance() < value + except OSError: + # Logg/varsle, og anta "for nær" for sikkerhet + return True + + +class Colour(): def __init__(self, sensorPort): self.sensor = ColorSensor(port=sensorPort)