13 Commits

4 changed files with 137 additions and 51 deletions

View File

@@ -2,14 +2,12 @@
## These are the line-up positions for the robot game for various missions. ## These are the line-up positions for the robot game for various missions.
- Mission Run #1 (Mission #1) [Right/Blue Home] - The left yellow part of the right arm attachment is positioned with its right edge on the 5th thin line from the left. Note that this is NOT positioned from the back of the robot. - Mission Run #1 (Run #1) [Right/Blue Home] - The left yellow part of the right arm attachment is positioned with its right edge on the 5th thin line from the left. Note that this is NOT positioned from the back of the robot.
- Mission Run #2 (Send Over) [Right/Blue Home] - The robot should be lined up on the vertical edge of the left home. The robot's right side should be positioned on the 1st thin line from the top. Note that the 0th line is the one that is not part of the curve. - Mission Run #2 (Tip the scales) [Right/Blue Home] - The middle of the left edge of the robot should be positioned on the 2nd thick line from the left.
- Mission Run #3 (Sand mission) [Right/Blue Home] - The robot should be lined up on the vertical edge of the left home. The robot's left side should be positioned on the 1/2th thin line from the bottom. - Mission Run #3 (Send Over) [Right/Blue Home] - The robot should be lined up on the vertical edge of the right home. The robot's right edge should be positioned on the 1st thin line from the top. Note that the 0th line is the one that is in the inner curve.
- Mission Run #4 (Boat mission) [Left/Red Home] - The robot should be lined up on the vertical edge of the left home. The robot's right side should be positioned on the 2nd thick line from the bottom. - Mission Run #4 (Run #4) [Left/Red Home] - The robot's left edge should be positioned on the 2nd thin line from the left.
- Mission Run #5 (Bautism) [Left/Red Home] - The robot's left edge should be positioned at the 1st thick, 2nd thin line from the left. - Mission Run #5 (Boat mission) [Left/Red Home] - There are two alignments for this. When sending off the robot for part 1, the robot should be facing the right home. It's right edge should be positioned at the very bottom edge of the board. Once it completes the pulling part, once it comes back begin part 2. For part 2, the middle of the robot's right side should be positioned in the middle of the 3rd thick and the 3rd thick, 1st thin lines.
- Mission Run #6 (Not-so-heavy Lifting) [Right/Blue Home] - The robot's right edge should be positioned at the 1st thick from the right.

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)
@@ -133,14 +143,14 @@ async def Run4(): # From Send_Over_Final.py
# Add Rishi's code here # Add Rishi's code here
async def Run5(): async def Run5():
await drive_base.straight(700) await drive_base.straight(700)
await drive_base.turn(-18) await drive_base.turn(-20)
await drive_base.straight(100) await drive_base.straight(110)
await drive_base.straight(-205) await drive_base.straight(-220)
await drive_base.turn(63) await drive_base.turn(63)
await drive_base.straight(125) await drive_base.straight(130)
await arm_motor.run_angle(1000, -1200) await right_arm.run_angle(1000, -1200)
await drive_base.straight(84) await drive_base.straight(84)
await arm_motor.run_angle(300, 1200) await right_arm.run_angle(300, 1200)
await drive_base.straight(-875) await drive_base.straight(-875)
# Add - Adi's code here # Add - Adi's code here
@@ -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

@@ -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())