13 Commits

4 changed files with 132 additions and 44 deletions

View File

@@ -45,35 +45,45 @@ async def monitor_distance():
# New Section # New Section
async def Run1(): # From M8_5.py async def Run1(): # From M8_5.py
left_arm.run_angle(1000, 300) right_arm.run_angle(1000,450)
right_arm.run_angle(1000,500) left_arm.run_angle(500,80)
await drive_base.straight(320) await drive_base.straight(200)
await right_arm.run_angle(5000,-500, Stop.HOLD) await drive_base.turn(-40)
await right_arm.run_angle(5000,500, Stop.HOLD) await drive_base.straight(325)
await right_arm.run_angle(5000,-500, Stop.HOLD) await left_arm.run_angle(500,-80)
await right_arm.run_angle(5000,500, Stop.HOLD)
await right_arm.run_angle(5000,-500, Stop.HOLD)
await drive_base.turn(-20) await drive_base.straight(-100)
await drive_base.straight(277) await drive_base.straight(50)
await drive_base.turn(20) await left_arm.run_angle(500,170)
await drive_base.straight(65)
await drive_base.straight(-270)
await drive_base.turn(40)
await drive_base.straight(135)
left_arm.run_angle(1000,670)
await right_arm.run_angle(5000,-450, Stop.HOLD)
await right_arm.run_angle(5000,450, Stop.HOLD)
await right_arm.run_angle(5000,-450, Stop.HOLD)
await right_arm.run_angle(5000,450, Stop.HOLD)
await right_arm.run_angle(5000,-450, Stop.HOLD)
right_arm.run_angle(5000,450, Stop.HOLD)
await drive_base.turn(-35)
await drive_base.straight(300)
await drive_base.turn(63)
await drive_base.straight(170)
await drive_base.turn(-80)
await drive_base.straight(87)
await drive_base.turn(-15)
await drive_base.straight(-120)
await drive_base.turn(-100)
await drive_base.straight(300)
await drive_base.turn(-45)
await drive_base.straight(500)
await drive_base.turn(-30)
right_arm.run_angle(70,500)
await drive_base.turn(45)
await drive_base.straight(-145)
await drive_base.turn(-60)
await drive_base.straight(90)
await left_arm.run_angle(1000,-450)
await drive_base.straight(-150)
await left_arm.run_angle(1000,450)
await drive_base.straight(27.67) #turns back to solve market place
await drive_base.turn(90) #Will solve market place
await drive_base.straight(-450)
await drive_base.turn(70)
await drive_base.straight(600)
async def Run2(): # From Heavy_lifting_final.py async def Run2(): # From Heavy_lifting_final.py
await drive_base.straight(200) await drive_base.straight(200)
@@ -166,7 +176,6 @@ async def Run6():
await drive_base.straight(-60) await drive_base.straight(-60)
await drive_base.turn(80) await drive_base.turn(80)
await drive_base.straight(-900) await drive_base.straight(-900)
# Function to classify color based on HSV # Function to classify color based on HSV
def detect_color(h, s, v, reflected): def detect_color(h, s, v, reflected):
if reflected > 4: if reflected > 4:

View File

@@ -2,26 +2,36 @@ from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
from pybricks.parameters import Button, Color, Direction, Port, Side, Stop from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
from pybricks.robotics import DriveBase from pybricks.robotics import DriveBase
from pybricks.tools import wait, StopWatch from pybricks.tools import wait, StopWatch, run_task, multitask
from pybricks.tools import run_task,multitask
hub = PrimeHub() hub = PrimeHub()
# Initialize both motors. In this example, the motor on the
# left must turn counterclockwise to make the robot go forward.
left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE) left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
right_motor = Motor(Port.B) right_motor = Motor(Port.B)
left_arm = Motor(Port.C, Direction.COUNTERCLOCKWISE)
right_arm = Motor(Port.D)
arm_motor = Motor(Port.D, Direction.CLOCKWISE)
arm_motor_left= Motor(Port.C, Direction.CLOCKWISE)
# Initialize the drive base. In this example, the wheel diameter is 56mm.
# The distance between the two wheel-ground contact points is 112mm.
drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180) drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180)
drive_base.settings(550,700,100,100) print('The default settings are: ' + str(drive_base.settings()))
drive_base.settings(300,1000,300,750)
# Optionally, uncomment the line below to use the gyro for improved accuracy.
drive_base.use_gyro(True) drive_base.use_gyro(True)
first_run = False
async def main(): async def main():
await drive_base.straight(750) await drive_base.straight(700)
await drive_base.straight(-650) await drive_base.turn(-17)
await drive_base.straight(100)
await drive_base.straight(-205)
await drive_base.turn(62)
await drive_base.straight(125)
await arm_motor.run_angle(1000, -1200)
await drive_base.straight(87)
await arm_motor.run_angle(300, 1200)
await drive_base.straight(-875)
run_task(main()) run_task(main())

View File

@@ -26,13 +26,13 @@ async def main():
await drive_base.turn(-70) await drive_base.turn(-70)
await drive_base.straight(900) await drive_base.straight(900)
await drive_base.turn(115) await drive_base.turn(110)
await drive_base.straight(75) await drive_base.straight(75)
await drive_base.straight(33)
await right_arm.run_angle(500,-250) await right_arm.run_angle(700,-250)
await right_arm.run_angle(500,250) await right_arm.run_angle(500,250)
await drive_base.turn(66) await drive_base.turn(54)
await drive_base.straight(7) await drive_base.straight(7)
await left_arm.run_angle(560,-390) #going down await left_arm.run_angle(560,-390) #going down
@@ -41,8 +41,8 @@ async def main():
await left_arm.run_angle(-410,-400) #lift a little bit await left_arm.run_angle(-410,-400) #lift a little bit
await drive_base.turn(-46.5) #ma din din din dun await drive_base.turn(-46.5) #ma din din din dun
await drive_base.turn(-40) await drive_base.turn(25)
await drive_base.straight(900) await drive_base.straight(900)
run_task(main()) run_task(main())

View File

@@ -0,0 +1,69 @@
from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
from pybricks.tools import run_task, multitask
from pybricks.tools import wait, StopWatch
from pybricks.robotics import DriveBase
from pybricks.hubs import PrimeHub
# Initialize hub and devices
hub = PrimeHub()
color_sensor = ColorSensor(Port.F)
# Color Settings
# https://docs.pybricks.com/en/latest/parameters/color.html
print("Default Detected Colors:", color_sensor.detectable_colors())
# Custom color Hue, Saturation, Brightness value for Lego bricks
Color.MAGENTA = Color(315,100,60)
Color.BLUE = Color(240,100,100)
Color.CYAN = Color(180,100,100)
Color.RED = Color(350, 100, 100)
LEGO_BRICKS_COLOR = [
Color.BLUE,
Color.GREEN,
Color.WHITE,
Color.RED,
Color.YELLOW,
Color.MAGENTA,
Color.NONE
]
magenta_counter = 0
stable_color = None
real_color = None
#Update Detectable colors
color_sensor.detectable_colors(LEGO_BRICKS_COLOR)
print(f'Yellow:{Color.YELLOW} : {Color.YELLOW.h}, {Color.YELLOW.s}, {Color.YELLOW.v}')
print("Updated Detected Colors:", color_sensor.detectable_colors())
async def main():
while True:
global magenta_counter, stable_color, real_color
color_reflected_percent = await color_sensor.reflection()
print("Reflection: ", color_reflected_percent)
if color_reflected_percent > 15:
color_detected = await color_sensor.color()
if color_detected == Color.MAGENTA:
magenta_counter += 1
else:
magenta_counter = 0
stable_color = color_detected
# Only accept magenta if it's been stable for a while - usually triggers before other colors so we gotta do this :|
if magenta_counter > 10:
stable_color = Color.MAGENTA
if stable_color != Color.MAGENTA:
stable_color = await color_sensor.color()
real_color = stable_color
#if(color_detected != Color.NONE):
# return
print("Magenta counter: ", magenta_counter)
if real_color is not None:
print(f'Detected color: {real_color} : {real_color.h}, {real_color.s}, {real_color.v}')
else:
print("No valid color detected yet.")
await wait(50)
run_task(main())