Compare commits

...

15 Commits

Author SHA1 Message Date
913e12f122 Merge pull request 'dev' (#44) from dev into main
Reviewed-on: #44
2025-11-12 01:22:35 +00:00
9e429cf8f1 Update README.md 2025-11-12 01:15:22 +00:00
eae9c77bcf Update README.md 2025-11-12 01:14:40 +00:00
73ca30ed4c Delete commit-graphnew.html 2025-11-12 01:13:09 +00:00
b08d80b4b6 Delete graph.txt 2025-11-12 01:13:04 +00:00
7047a0d227 Delete commit-graph.html 2025-11-12 01:12:58 +00:00
e254c65c56 Merge pull request 'Update missions/tip the scale.py' (#43) from parthiv-dev into dev
Reviewed-on: #43
2025-11-12 01:12:37 +00:00
b3ec4861c7 Merge pull request 'Add codes_for_scrimmage/regional-final/Final_combined.py' (#42) from Rishi_dev into dev
Reviewed-on: #42
2025-11-12 01:12:07 +00:00
alkadienePhoton
9f5a41eace Merge branch 'dev' of https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed into dev
Works
2025-11-11 19:11:13 -06:00
alkadienePhoton
686875a066 Fixed conflicts 2025-11-11 19:10:54 -06:00
alkadienePhoton
6d54f9c2d7 Fixed conflicts 2025-11-11 19:10:21 -06:00
10960a8473 Add codes_for_scrimmage/regional-final/Final_combined.py 2025-11-12 01:06:33 +00:00
1ee90ac2e1 Update missions/M8_5.py 2025-11-09 22:16:39 +00:00
a8d8f5c8e0 Update missions/tip the scale.py 2025-11-09 22:03:29 +00:00
d1eb92cf25 Merge pull request 'dev' (#35) from dev into main
Reviewed-on: #35
2025-10-31 11:58:01 +00:00
4 changed files with 251 additions and 38 deletions

View File

@@ -63,17 +63,17 @@ Repository
### Installation & Deployment - from the server - everyday
1. Download the file codes_for_scrimmage/hazmat/mainhazmatUPD.py
1. Download the file codes_for_scrimmage/regional-final/Final_combined.py
- You can do this through the repo, by using cURL, or by using git.
- Repo - Go to [codes_for_scrimmage/hazmat/mainhazmatUPD.py](codes_for_scrimmage/hazmat/mainhazmatUPD.py) and click the "Download" button.
- Repo - Go to [codes_for_scrimmage/regional-final/Final_combined.py](codes_for_scrimmage/regional-final/Final_combined.py) and click the "Download" button.
- cURL or another HTTP data transferrer -
```curl -o mainhazmatUPD.py https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/main/codes_for_scrimmage/hazmat/mainhazmatUPD.py```
```curl -o Final_combined.py https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/main/codes_for_scrimmage/regional-final/Final_combined.py```
- git CLI -
```git clone -b dev https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed.git && cd solutions_season_unearthed/codes_for_scrimmage/hazmat```
```git clone -b dev https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed.git && cd solutions_season_unearthed/codes_for_scrimmage/regional-final```
Then use mainhazmatUPD.py.
Then use Final_combined.py.
2. Open https://code.pybricks.com/ and select the "Import a file" button on the top of the left bar. Import the .py file. Pair your robot via Bluetooth in Pybricks by selecting the Bluetooth button.

View File

@@ -0,0 +1,221 @@
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()
left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
right_motor = Motor(Port.B)
left_arm = Motor(Port.C)
right_arm = Motor(Port.D)
lazer_ranger = UltrasonicSensor(Port.E)
color_sensor = ColorSensor(Port.F)
# DriveBase configuration
WHEEL_DIAMETER = 68.8 # mm (adjust for your wheels)
AXLE_TRACK = 180 # mm (distance between wheels)
drive_base = DriveBase(left_motor, right_motor, WHEEL_DIAMETER, AXLE_TRACK)
drive_base.settings(600, 500, 300, 200)
drive_base.use_gyro(True)
WALL_DISTANCE = 300 # mm
async def drive_forward():
"""Drive forward continuously using DriveBase."""
drive_base.drive(400, 0)
async def monitor_distance():
"""Monitor ultrasonic sensor and stop when wall is detected."""
while True:
distance = await lazer_ranger.distance()
print('Distancing...',distance)
if distance < WALL_DISTANCE:
# Stop the drivebase
await drive_base.stop
print(f"Wall detected at {distance}mm!")
break
# Small delay to prevent overwhelming the sensor
await wait(50)
# New Section
async def Run1(): # From M8_5.py
right_arm.run_angle(1000,450)
left_arm.run_angle(500,90)
await drive_base.straight(200)
await drive_base.turn(-40)
await drive_base.straight(325)
await left_arm.run_angle(500,-90)
await drive_base.straight(-100)
await drive_base.straight(50)
await left_arm.run_angle(500,180)
await drive_base.straight(-90)
left_arm.run_angle(500,-180)
await drive_base.turn(-20)
await drive_base.turn(15)
await drive_base.straight(-173)
await drive_base.turn(45)
await drive_base.straight(120)
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(297)
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(-90)
await drive_base.turn(-100)
await drive_base.arc(-500,None,600)
async def Run2(): # From Heavy_lifting_final.py
await drive_base.straight(200)
await drive_base.turn(-20)
await drive_base.straight(536)
await drive_base.turn(60, Stop.HOLD)
await drive_base.straight(30)
await right_arm.run_angle(5000, 2900)
await drive_base.straight(40)
await right_arm.run_angle(5000, -4000)
await drive_base.straight(-60)
await drive_base.turn(-60)
await drive_base.straight(-670)
async def Run3(): # tip the scale.py
right_arm.run_angle(500,400)
await drive_base.straight(800)
await drive_base.turn(90)
await drive_base.straight(86)
await right_arm.run_angle(800,-600)
await right_arm.run_angle(900,800)
await drive_base.straight(-100)
await drive_base.turn(90)
await drive_base.straight(800)
drive_base.brake()
async def Run4(): # From Send_Over_Final.py
await drive_base.straight(920)
await drive_base.turn(-90,Stop.HOLD)
await drive_base.straight(65)
#Solve
drive_base.turn(-10)
await left_arm.run_angle(10000,-4000)
await drive_base.straight(-110)
await drive_base.turn(90)
await multitask(
drive_forward(),
monitor_distance()
)
# Add Rishi's code here
async def Run5():
await drive_base.straight(700)
await drive_base.turn(-20)
await drive_base.straight(110)
await drive_base.straight(-210)
await drive_base.turn(63)
await drive_base.straight(130)
await right_arm.run_angle(1000, -1200)
await drive_base.straight(84)
await right_arm.run_angle(300, 1200)
await drive_base.straight(-875)
# Add - Adi's code here
async def Run6():
await drive_base.straight(500)
await right_arm.run_angle(300,500)
await drive_base.straight(-75)
await right_arm.run_angle(300, -900)
await drive_base.straight(-350)
await wait(1000)
await drive_base.straight(800)
await drive_base.straight(-200)
await drive_base.turn(-15)
await drive_base.straight(350)
await drive_base.turn(-100)
await drive_base.straight(-80)
await left_arm.run_angle(500, -900)
await drive_base.straight(50)
await drive_base.straight(50)
await left_arm.run_angle(700, 250)
await drive_base.turn(30)
await drive_base.straight(-60)
await drive_base.turn(80)
await drive_base.straight(-900)
# Function to classify color based on HSV
def detect_color(h, s, v, reflected):
if reflected > 4:
if h < 4 or h > 350: # red
return "Red"
elif 3 < h < 40 and s > 70: # orange
return "Orange"
elif 47 < h < 56: # yellow
return "Yellow"
elif 70 < h < 160: # green - do it vertically not horizontally for accuracy
return "Green"
elif 210 < h < 225: # blue - do it vertically not horizontally for accuracy
return "Blue"
elif 260 < h < 350: # purple
return "Purple"
else:
return "Unknown"
return "Unknown"
async def main():
while True:
h, s, v = await color_sensor.hsv()
reflected = await color_sensor.reflection()
color = detect_color(h, s, v, reflected)
if color == "Red":
print('Running Mission 3')
await Run3() #red
elif color == "Orange":
print('Running Mission 6')
await Run6() #orange
elif color == "Yellow":
print('Running Mission 4')
await Run4() #yellow
elif color == "Green":
print('Running Mission 1')
await Run1() #green - vertically
elif color == "Blue":
print('Running Mission 5')
await Run5() #blue - vertically
elif color == "Purple":
print('Running Mission 2')
await Run2() #purple - vertically
else:
print(f"Unknown color detected (Hue: {h}, Sat: {s}, Val: {v})")
await wait(10)
# Run the main function
run_task(main())

View File

@@ -21,20 +21,25 @@ drive_base.use_gyro(True)
async def main():
right_arm.run_angle(1000,450)
left_arm.run_angle(500,-80)
left_arm.run_angle(500,-90)
await drive_base.straight(200)
await drive_base.turn(-40)
await drive_base.straight(325)
await left_arm.run_angle(500,80)
await left_arm.run_angle(500,90)
await drive_base.straight(-100)
await drive_base.straight(50)
await left_arm.run_angle(500,-170)
await left_arm.run_angle(500,-180)
await drive_base.straight(-270)
await drive_base.turn(40)
await drive_base.straight(135)
await drive_base.straight(-90)
left_arm.run_angle(500,180)
await drive_base.turn(-20)
await drive_base.turn(15)
await drive_base.straight(-173)
await drive_base.turn(45)
await drive_base.straight(120)
left_arm.run_angle(1000,-670)
await right_arm.run_angle(5000,-450, Stop.HOLD)
@@ -45,7 +50,7 @@ async def main():
right_arm.run_angle(5000,450, Stop.HOLD)
await drive_base.turn(-35)
await drive_base.straight(300)
await drive_base.straight(297)
await drive_base.turn(63)
await drive_base.straight(170)
@@ -53,10 +58,8 @@ async def main():
await drive_base.straight(87)
await drive_base.turn(-15)
await drive_base.straight(-120)
await drive_base.straight(-90)
await drive_base.turn(-100)
await drive_base.straight(300)
await drive_base.turn(-45)
await drive_base.straight(500)
await drive_base.arc(-500,None,600)
run_task(main())

View File

@@ -20,29 +20,18 @@ drive_base.settings(600,500,300,200)
drive_base.use_gyro(True)
async def main():
left_arm.run_angle(600,200)
right_arm.run_angle(500,200)
await drive_base.straight(70)
await drive_base.turn(-70)
await drive_base.straight(900)
await drive_base.turn(110)
right_arm.run_angle(500,400)
await drive_base.straight(800)
await drive_base.turn(90)
await drive_base.straight(88)
await right_arm.run_angle(100,-300)
await right_arm.run_angle(400,400)
await drive_base.straight(75)
await right_arm.run_angle(700,-250)
await right_arm.run_angle(500,250)
await drive_base.turn(54)
await drive_base.straight(7)
await left_arm.run_angle(560,-390) #going down
print('turning now...')
await drive_base.turn(40) # turning right
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(25)
await drive_base.straight(900)
await drive_base.straight(-100)
await drive_base.turn(90)
await drive_base.straight(800)
drive_base.brake()
run_task(main())