36 Commits

Author SHA1 Message Date
b4385dcecd Merge pull request 'dev' (#32) from dev into atharv-dev
Reviewed-on: #32
2025-10-31 11:56:39 +00:00
e785a8ad05 Delete HEAVY_LIFTING_UPD
we dont need it it is alr in missions/
2025-10-30 15:42:53 +00:00
a6bbba9419 Update README.md 2025-10-30 15:42:31 +00:00
8ccf8b9a5a Update README.md 2025-10-30 12:21:46 +00:00
bb95852bf1 Update README.md 2025-10-28 18:22:25 +00:00
9ca160a8c7 Update README.md 2025-10-28 18:11:19 +00:00
882ba3e13a Delete Screenshot 2025-10-28 1.06.30 PM.png 2025-10-28 18:07:08 +00:00
33b926cb1f Upload files to "/" 2025-10-28 18:06:44 +00:00
4ff5de480d Update README.md 2025-10-28 18:06:09 +00:00
aa062122de Merge pull request 'main' (#29) from main into dev
Reviewed-on: #29
2025-10-28 12:23:07 +00:00
0fbb38baeb Merge pull request 'dev' (#28) from dev into main
Reviewed-on: #28
2025-10-27 12:23:13 +00:00
3e1928fcad Merge pull request 'Update missions/tip the scale.py' (#27) from ayaan_dev into dev
Reviewed-on: #27
2025-10-27 12:22:25 +00:00
ef0ff44f2b HazmatCodeChanges
This is the code we changed at the scrimmage.
2025-10-25 02:06:49 +00:00
7b539b45d0 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
CVC
2025-10-25 02:05:16 +00:00
9a320589ab Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
67
2025-10-25 01:38:57 +00:00
4d1bd8abe3 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-25 01:26:41 +00:00
1317c8e8ce Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
Minor Changes
2025-10-25 01:15:49 +00:00
54e8c9eba5 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 01:16:19 +00:00
9d3d8b48e4 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 01:15:43 +00:00
702e05e7f7 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 01:13:45 +00:00
5427c73f1c Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
I am not a monkey
2025-10-24 01:09:49 +00:00
b41f833c5e Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 01:07:23 +00:00
3765db3001 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
MINOR CHANGES AGAIN
2025-10-24 01:01:04 +00:00
94bae3c140 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 00:52:40 +00:00
dbb0749ff3 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
Minor Changes AGAIN!!
2025-10-24 00:49:24 +00:00
831b75025d Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
Minor changes.
2025-10-24 00:45:10 +00:00
249071f5c3 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 00:42:21 +00:00
32a695e9ca Update codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-24 00:38:26 +00:00
2d2863726b Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 00:35:06 +00:00
1dec912abb Update missions/tip the scale.py 2025-10-24 00:11:38 +00:00
d3294bcb0b SCRIMMAGE MERGE!!!
Reviewed-on: #15
yayyyyyyyyyy
2025-10-11 02:30:26 +00:00
5ba2811af3 Merge pull request 'Updated LICENSE and README' (#12) from dev into main
Reviewed-on: #12
2025-10-09 21:16:08 +00:00
387e00b5c3 Merge branch 'dev' 2025-10-09 13:00:26 -05:00
3fdd6ae9d1 Merge to main for Scrimmage 2025-10-09 12:01:36 -05:00
ee0b8eb6a0 Update README.md 2025-09-10 13:28:54 +00:00
a745ed8c79 Merge pull request 'WIP - Test Merge ( dev to main )' (#1) from dev into main
Reviewed-on: #1
2025-09-02 02:32:19 +00:00
6 changed files with 391 additions and 185 deletions

View File

@@ -1,33 +0,0 @@
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
from pybricks.robotics import DriveBase
from pybricks.tools import wait, StopWatch
from pybricks.tools import run_task, multitask
hub = PrimeHub()
left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
right_motor = Motor(Port.B)
left_arm = Motor(Port.C, Direction.COUNTERCLOCKWISE)
right_arm = Motor(Port.D)
drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180)
drive_base.settings(600,500,300,200)
drive_base.use_gyro(True)
async def main():
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,3000)
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)
run_task(main())

View File

@@ -14,7 +14,7 @@
## Project Overview ## Project Overview
Welcome to the official code repository for **Team 65266 Lego Dynamics**! This repository contains all the Pybricks code powering our robot through the UNEARTHED season missions. Our modular approach allows for flexible mission execution and quick color-sensor-based run selection. Welcome to the official code repository for **Team 65266 - Lego Dynamics**! This repository contains all the Pybricks code powering our robot through the UNEARTHED season missions. Our modular approach allows for flexible mission execution and quick color-sensor-based run selection.
--- ---
@@ -26,8 +26,8 @@ Welcome to the official code repository for **Team 65266 Lego Dynamics**! This r
|-----------|--------------| |-----------|--------------|
| **Robot Name** | Optimus Prime III | | **Robot Name** | Optimus Prime III |
| **Firmware** | Pybricks | | **Firmware** | Pybricks |
| **Attachment Motors** | 2× Large Motors (Ports C & D) | | **Attachment Motors** | 2x Large Motors (Ports C & D) |
| **Drive Motors** | 2× Small Motors (Ports A & B) | | **Drive Motors** | 2x Small Motors (Ports A & B) |
| **Sensors** | Up-facing Color Sensor (Quick Start) | | **Sensors** | Up-facing Color Sensor (Quick Start) |
| **Attachments** | Multiple mission-specific tools | | **Attachments** | Multiple mission-specific tools |
@@ -46,10 +46,10 @@ Our codebase is organized for maximum efficiency and modularity:
``` ```
Repository Repository
┣ run_1.py # Individual mission runs ┣ run_1.py # Individual mission runs
┣ run_2.py # Each file = 1+ mission completions ┣ run_2.py
┣ run_3.py ┣ run_3.py
┣ ... ┣ ...
┗ master.py # 🎯 Combined master file with color-start logic ┗ masterFile.py # 🎯 Combined master file with color-start logic - this changes periodically as we release new versions. Check this README if you are unsure what code should be loaded on the robot.
``` ```
### Workflow ### Workflow
@@ -61,34 +61,45 @@ Repository
## How to Use ## How to Use
### Installation & Deployment ### Installation & Deployment - from the server - everyday
1. **Load the Code** 1. Download the file codes_for_scrimmage/hazmat/mainhazmatUPD.py
```bash - You can do this through the repo, by using cURL, or by using git.
# Open the master.py file in Pybricks IDE - Repo - Go to [codes_for_scrimmage/hazmat/mainhazmatUPD.py](codes_for_scrimmage/hazmat/mainhazmatUPD.py) and click the "Download" button.
``` - cURL or another HTTP data transferrer -
2. **Connect to Robot** ```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```
- Pair your robot via Bluetooth in Pybricks - 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```
Then use mainhazmatUPD.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.
- Import button looks like this:
![alt text](https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/do-not-merge/import.png)
- Bluetooth button looks like this:
![alt text](https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/do-not-merge/bluetooth.png)
3. **Upload to Robot** - Click "Download and Run" or send the program to the robot
- Run button looks like this: ![alt text](https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/do-not-merge/run.png)
3. **Upload to Robot**
- Click "Download and Run" or send the program to the robot
4. **Start Your Run** 4. **Start Your Run**
- Hold a colored LEGO brick up to the color sensor - If starting without Pybricks, press the center circular button on the SPIKE Prime Hub to start the program.
- Different colors trigger different mission runs! - Hold a colored LEGO brick up to the color sensor.
- Different colors trigger different mission runs - color mapping is below.
### Color Start System ### Color Start System
| Color | Mission | Celebration Sound | | Color | Mission |
|-------|-----------|------------------| |-------|-----------|
| Green 🟩 | Run 1 | Victory Fanfare | | Green 🟩 | Run 1 |
| White ⚪ | Run 2 | Rickroll Inspired | | Purple 🟪 | Run 2 |
| Yellow 🟨 | Run 3 | Success Chime | | Red 🟥| Run 3 |
| Orange 🟧 | Run 4 | Power Up | | Yellow 🟨| Run 4 |
| Blue 🟦 | Run 5 | Power Up | | Blue 🟦| Run 5 |
| Red 🟥 | Run 6 | Ta-Da! | | Orange 🟧| Run 6 |
> **Tip** Organize your colored bricks before the match for quick run selection!
--- ---
@@ -114,9 +125,7 @@ Team members can contribute by:
**GNU General Public License v3.0** **GNU General Public License v3.0**
```
You can take inspiration from our code, but you can't take our exact code. You can take inspiration from our code, but you can't take our exact code.
```
This project is licensed under GPL-3.0 - see the [LICENSE](LICENSE) file for complete details. This project is licensed under GPL-3.0 - see the [LICENSE](LICENSE) file for complete details.
@@ -130,14 +139,8 @@ This project is licensed under GPL-3.0 - see the [LICENSE](LICENSE) file for com
## Contact & Support ## Contact & Support
**Team 65266 Lego Dynamics** **Team 65266 - Lego Dynamics**
Questions about our approach? Interested in collaboration? Reach out! Questions about our approach? Interested in collaboration? Reach out!
--- ---
<div align="center">
Star this repo if you found it helpful!
</div>

View File

@@ -0,0 +1,227 @@
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
left_arm.run_angle(1000, -300)
right_arm.run_angle(1000, 500)
await drive_base.straight(320)
await right_arm.run_angle(5000, -500, Stop.HOLD)
await right_arm.run_angle(5000, 500, Stop.HOLD)
await right_arm.run_angle(5000, -500, Stop.HOLD)
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(277)
await drive_base.turn(20)
await drive_base.straight(65)
await drive_base.turn(-30)
right_arm.run_angle(50, 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(-145)
await left_arm.run_angle(1000, -450)
await drive_base.straight(10)
await drive_base.turn(35)
await drive_base.straight(-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
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(115)
await drive_base.straight(75)
await drive_base.straight(33)
await right_arm.run_angle(500,-250)
await right_arm.run_angle(500,250)
await drive_base.turn(66)
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.straight(80)
await drive_base.turn(-41) #ma din din din dun 67 41 21 69
await drive_base.straight(900)
async def Run4(): # From Send_Over_Final.py
#Get to mission
await drive_base.straight(920)
await drive_base.turn(-90,Stop.HOLD)
await drive_base.straight(65)
#Solve mission
drive_base.turn(-10)
await left_arm.run_angle(10000, 4000)
#Get to Red Start
await drive_base.straight(-110)
await drive_base.turn(90)
# while True:
# distance_mm = await lazer_ranger.distance()
# print('distancing...',distance_mm)
# if distance_mm < 300:
# drive_base.stop
# break
# else:
# drive_base.straight(300)
# print('running...')
# await wait(10)
await multitask(
drive_forward(),
monitor_distance()
)
# Add Rishi's code here
async def Run5():
await drive_base.straight(519)
await left_arm.run_angle(-10000, 300)
await left_arm.run_angle(10000, 600)
await drive_base.straight(160)
await drive_base.turn(-30)
await drive_base.straight(50)
await right_arm.run_angle(3000, 3000)
await drive_base.straight(-150)
await drive_base.turn(120)
await drive_base.straight(25)
await right_arm.run_angle(10000, -3000)
await drive_base.straight(-110)
await drive_base.turn(-43)
await right_arm.run_angle(10000, -3000)
await drive_base.straight(295)
await right_arm.run_angle(10000, 9000)
await drive_base.straight(-65)
await drive_base.turn(45)
await drive_base.straight(175)
await drive_base.turn(24.5)
await drive_base.straight(-100)
await right_arm.run_angle(10000, -8500)
await drive_base.straight(100)
await right_arm.run_angle(10000, 3500)
await drive_base.turn(-30)
await drive_base.straight(-300)
await drive_base.turn(-80)
await drive_base.straight(-700)
# Add - Adi's code here
async def Run6():
await drive_base.straight(750)
await drive_base.straight(-650)
# 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

@@ -189,6 +189,7 @@ async def monitor_distance():
"""Monitor ultrasonic sensor and stop when wall is detected.""" """Monitor ultrasonic sensor and stop when wall is detected."""
while True: while True:
distance = await lazer_ranger.distance() distance = await lazer_ranger.distance()
print('distancing...',distance)
if distance < WALL_DISTANCE: if distance < WALL_DISTANCE:
# Stop the drivebase # Stop the drivebase
@@ -246,30 +247,29 @@ async def Run2(): #From Heavy_lifting_final.py
async def Run3(): #tip the scale.py async def Run3(): #tip the scale.py
drive_base.settings(300,1000,300,200) #Custom drive_base setting based on Ayaan's code left_arm.run_angle(600,200)
left_arm.run_angle(500,200)
right_arm.run_angle(500,200) right_arm.run_angle(500,200)
await drive_base.straight(70) await drive_base.straight(70)
await drive_base.turn(-55) await drive_base.turn(-70)
await drive_base.straight(900) await drive_base.straight(900)
await drive_base.turn(92.5) await drive_base.turn(115)
await drive_base.straight(75) await drive_base.straight(75)
await drive_base.straight(21) await drive_base.straight(33)
await right_arm.run_angle(500,-250) await right_arm.run_angle(500,-250)
await right_arm.run_angle(500,250) await right_arm.run_angle(500,250)
await drive_base.turn(55) await drive_base.turn(66)
await drive_base.straight(7)
await left_arm.run_angle(300,-400) await left_arm.run_angle(560,-390) #going down
await drive_base.turn(40) # turning right
await left_arm.run_angle(-410,-400) #lift a little bit
await drive_base.turn(46.5) await drive_base.turn(-46.5) #ma din din din dun
await drive_base.turn(-40) await drive_base.turn(-40)
await drive_base.straight(900) await drive_base.straight(900)
drive_base.settings(600,500,300,200) #Reset it to the initial values
async def Run4(): #From Send_Over_Final.py async def Run4(): #From Send_Over_Final.py
#Get to mission #Get to mission

View File

@@ -7,10 +7,8 @@ from pybricks.hubs import PrimeHub
# Initialize hub and devices # Initialize hub and devices
hub = PrimeHub() hub = PrimeHub()
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) left_arm = Motor(Port.C)
right_arm = Motor(Port.D) right_arm = Motor(Port.D)
lazer_ranger = UltrasonicSensor(Port.E) lazer_ranger = UltrasonicSensor(Port.E)
@@ -20,116 +18,108 @@ color_sensor = ColorSensor(Port.F)
WHEEL_DIAMETER = 68.8 # mm (adjust for your wheels) WHEEL_DIAMETER = 68.8 # mm (adjust for your wheels)
AXLE_TRACK = 180 # mm (distance between wheels) AXLE_TRACK = 180 # mm (distance between wheels)
drive_base = DriveBase(left_motor, right_motor, WHEEL_DIAMETER, AXLE_TRACK) drive_base = DriveBase(left_motor, right_motor, WHEEL_DIAMETER, AXLE_TRACK)
drive_base.settings(600,500,300,200) drive_base.settings(600, 500, 300, 200)
drive_base.use_gyro(True) drive_base.use_gyro(True)
WALL_DISTANCE = 300 # mm
WALL_DISTANCE = 200 # mm
async def drive_forward(): async def drive_forward():
"""Drive forward continuously using DriveBase.""" """Drive forward continuously using DriveBase."""
#await drive_base.straight(5000) drive_base.drive(400, 0)
drive_base.drive(400,0)
async def monitor_distance(): async def monitor_distance():
"""Monitor ultrasonic sensor and stop when wall is detected.""" """Monitor ultrasonic sensor and stop when wall is detected."""
while True: while True:
distance = await lazer_ranger.distance() distance = await lazer_ranger.distance()
print('Distancing...',distance)
if distance < WALL_DISTANCE: if distance < WALL_DISTANCE:
# Stop the drivebase # Stop the drivebase
await drive_base.turn(-180) await drive_base.stop
drive_base.brake
print(f"Wall detected at {distance}mm!") print(f"Wall detected at {distance}mm!")
break break
# Small delay to prevent overwhelming the sensor # Small delay to prevent overwhelming the sensor
await wait(50) await wait(50)
#New Section # New Section
async def Run1(): #From M8_5.py async def Run1(): # From M8_5.py
left_arm.run_angle(1000, 300) left_arm.run_angle(1000, -300)
right_arm.run_angle(1000,500) right_arm.run_angle(1000, 500)
await drive_base.straight(320) await drive_base.straight(320)
await right_arm.run_angle(5000, -500, Stop.HOLD)
await right_arm.run_angle(5000,-500, Stop.HOLD) await right_arm.run_angle(5000, 500, Stop.HOLD)
await right_arm.run_angle(5000,500, Stop.HOLD) await right_arm.run_angle(5000, -500, Stop.HOLD)
await right_arm.run_angle(5000,-500, Stop.HOLD) await right_arm.run_angle(5000, 500, Stop.HOLD)
await right_arm.run_angle(5000,500, Stop.HOLD) 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.turn(-20)
await drive_base.straight(277) await drive_base.straight(277)
await drive_base.turn(20) await drive_base.turn(20)
await drive_base.straight(65) await drive_base.straight(65)
await drive_base.turn(-30) await drive_base.turn(-30)
right_arm.run_angle(50,500) right_arm.run_angle(50, 500)
await drive_base.turn(45) await drive_base.turn(45)
await drive_base.straight(-145) await drive_base.straight(-145)
await drive_base.turn(-60) await drive_base.turn(-60)
await drive_base.straight(90) await drive_base.straight(90)
await left_arm.run_angle(1000,-450) await left_arm.run_angle(1000, 450)
await drive_base.straight(-145) await drive_base.straight(-145)
await left_arm.run_angle(1000,450) await left_arm.run_angle(1000, -450)
await drive_base.straight(10) await drive_base.straight(10)
await drive_base.turn(35) await drive_base.turn(35)
await drive_base.straight(-600) 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)
await drive_base.turn(-20) await drive_base.turn(-20)
await drive_base.straight(536) await drive_base.straight(536)
await drive_base.turn(60, Stop.HOLD) await drive_base.turn(60, Stop.HOLD)
await drive_base.straight(30) await drive_base.straight(30)
await right_arm.run_angle(5000, 2900)
await right_arm.run_angle(5000,2900)
await drive_base.straight(40) await drive_base.straight(40)
await right_arm.run_angle(5000,-4000) await right_arm.run_angle(5000, -4000)
await drive_base.straight(-60) await drive_base.straight(-60)
await drive_base.turn(-60) await drive_base.turn(-60)
await drive_base.straight(-670) await drive_base.straight(-670)
async def Run3(): #tip the scale.py async def Run3(): # tip the scale.py
drive_base.settings(300,1000,300,200) #Custom drive_base setting based on Ayaan's code left_arm.run_angle(600,-200)
left_arm.run_angle(500,200)
right_arm.run_angle(500,200) right_arm.run_angle(500,200)
await drive_base.straight(70) await drive_base.straight(70)
await drive_base.turn(-55) await drive_base.turn(-70)
await drive_base.straight(900) await drive_base.straight(900)
await drive_base.turn(92.5) await drive_base.turn(115)
await drive_base.straight(75) await drive_base.straight(75)
await drive_base.straight(21) await drive_base.straight(33)
await right_arm.run_angle(500,-250) await right_arm.run_angle(500,-250)
await right_arm.run_angle(500,250) await right_arm.run_angle(500,250)
await drive_base.turn(55) await drive_base.turn(66)
await drive_base.straight(7)
await left_arm.run_angle(300,-400) await left_arm.run_angle(560,390) #going down
print('turning now...')
await drive_base.turn(46.5) await drive_base.turn(40) # turning right
await drive_base.turn(-40) await left_arm.run_angle(410,-400) #lift a little bit
await drive_base.straight(80)
await drive_base.turn(-41) #ma din din din dun 67 41 21 69
await drive_base.straight(900) await drive_base.straight(900)
drive_base.settings(600,500,300,200) #Reset it to the initial values
async def Run4(): #From Send_Over_Final.py
async def Run4(): # From Send_Over_Final.py
#Get to mission #Get to mission
await drive_base.straight(920) await drive_base.straight(920)
await drive_base.turn(-90,Stop.HOLD) await drive_base.turn(-90,Stop.HOLD)
await drive_base.straight(65) await drive_base.straight(65)
#Solve mission #Solve mission
drive_base.turn(-10) drive_base.turn(-10)
await left_arm.run_angle(10000,-4000) await left_arm.run_angle(10000, 4000)
#Get to Red Start #Get to Red Start
await drive_base.straight(-110) await drive_base.straight(-110)
await drive_base.turn(90) await drive_base.turn(90)
await drive_base.straight(500)
# while True: # while True:
# distance_mm = await lazer_ranger.distance() # distance_mm = await lazer_ranger.distance()
# print('distancing...',distance_mm) # print('distancing...',distance_mm)
@@ -146,7 +136,9 @@ async def Run4(): #From Send_Over_Final.py
monitor_distance() monitor_distance()
) )
#Add Rishi's code here
# Add Rishi's code here
async def Run5(): async def Run5():
await drive_base.straight(519) await drive_base.straight(519)
await left_arm.run_angle(-10000, 300) await left_arm.run_angle(-10000, 300)
@@ -156,66 +148,80 @@ async def Run5():
await drive_base.straight(50) await drive_base.straight(50)
await right_arm.run_angle(3000, 3000) await right_arm.run_angle(3000, 3000)
await drive_base.straight(-150) await drive_base.straight(-150)
await drive_base.turn(135) await drive_base.turn(120)
await drive_base.straight(25) await drive_base.straight(25)
await right_arm.run_angle(10000, -3000) await right_arm.run_angle(10000, -3000)
await drive_base.straight(-100) await drive_base.straight(-110)
await drive_base.turn(-55) await drive_base.turn(-43)
await right_arm.run_angle(10000, -3000) await right_arm.run_angle(10000, -3000)
await drive_base.straight(250) await drive_base.straight(295)
await drive_base.turn(-5) await right_arm.run_angle(10000, 9000)
await right_arm.run_angle(10000, 7000) await drive_base.straight(-65)
await drive_base.straight(-50)
await drive_base.turn(45) await drive_base.turn(45)
await drive_base.straight(100) await drive_base.straight(175)
await drive_base.turn(37) await drive_base.turn(24.5)
await right_arm.run_angle(10000, -6000)
await drive_base.straight(90)
await right_arm.run_angle(3000, 3000)
await drive_base.turn(-40)
#Add - Adi's code here
async def Run6():
await drive_base.straight(420)
await right_arm.run_angle(300,-100)
await drive_base.straight(-100) await drive_base.straight(-100)
await right_arm.run_angle(300, 100) await right_arm.run_angle(10000, -8500)
await drive_base.straight(-350) await drive_base.straight(100)
await right_arm.run_angle(10000, 3500)
await drive_base.turn(-30)
await drive_base.straight(-300)
await drive_base.turn(-80)
await drive_base.straight(-700)
# Add - Adi's code here
async def Run6():
await drive_base.straight(750)
await drive_base.straight(-650)
# Function to classify color based on HSV # Function to classify color based on HSV
async def main: def detect_color(h, s, v, reflected):
if reflected > 4: if reflected > 4:
if h < 4 or h > 350: #red if h < 4 or h > 350: # red
return "Red" return "Red"
print('Running Mission 3') elif 3 < h < 40 and s > 70: # orange
await Run3()
elif 3 < h < 40 and s > 70: #orange
return "Orange" return "Orange"
print('Running Mission 6') elif 47 < h < 56: # yellow
await Run6()
elif 47 < h < 56: #yellow
return "Yellow" return "Yellow"
print('Running Mission 4') elif 70 < h < 160: # green - do it vertically not horizontally for accuracy
await Run4()
elif 70 < h < 160: #green - do it vertically not horizontally for accuracy
return "Green" return "Green"
print('Running Mission 1') elif 210 < h < 225: # blue - do it vertically not horizontally for accuracy
await Run1()
elif 210 < h < 225: #blue - do it vertically not horizontally for accuracy
return "Blue" return "Blue"
print('Running Mission 5') elif 260 < h < 350: # purple
await Run5()
elif 230 < h < 320: #purple
return "Purple" return "Purple"
print('Running Mission 2')
await Run2()
else: else:
return "Unknown" return "Unknown"
return "Unknown"
# Main loop
while True: async def main():
h, s, v = sensor.hsv() while True:
reflected = sensor.reflection() h, s, v = await color_sensor.hsv()
reflected = await color_sensor.reflection()
color = detect_color(h, s, v, reflected) color = detect_color(h, s, v, reflected)
print(f"Detected Color: {color} (Hue: {h}, Sat: {s}, Val: {v})")
wait(1000) 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

@@ -15,31 +15,34 @@ left_arm = Motor(Port.C, Direction.COUNTERCLOCKWISE)
right_arm = Motor(Port.D) right_arm = Motor(Port.D)
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(300,1000,300,200) drive_base.settings(600,500,300,200)
#drive_base.use_gyro(True) drive_base.use_gyro(True)
async def main(): async def main():
left_arm.run_angle(500,200) left_arm.run_angle(600,200)
right_arm.run_angle(500,200) right_arm.run_angle(500,200)
await drive_base.straight(70) await drive_base.straight(70)
await drive_base.turn(-55) await drive_base.turn(-70)
await drive_base.straight(900) await drive_base.straight(900)
await drive_base.turn(92.5) await drive_base.turn(115)
await drive_base.straight(75) await drive_base.straight(75)
await drive_base.straight(21) await drive_base.straight(33)
await right_arm.run_angle(500,-250) await right_arm.run_angle(500,-250)
await right_arm.run_angle(500,250) await right_arm.run_angle(500,250)
await drive_base.turn(55) await drive_base.turn(66)
await drive_base.straight(7)
await left_arm.run_angle(300,-400) 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) await drive_base.turn(-46.5) #ma din din din dun
await drive_base.turn(-40) await drive_base.turn(-40)
await drive_base.straight(900) await drive_base.straight(900)
run_task(main()) run_task(main())