Compare commits
151 Commits
acfe0e622e
...
sectionals
| Author | SHA1 | Date | |
|---|---|---|---|
| cfe7b96be5 | |||
| 5a805e75fc | |||
| 4d94a35503 | |||
| 09490f4e3e | |||
| 4539ee361f | |||
| 288c4eac26 | |||
| c2e8ad028a | |||
| 4f21cdc99c | |||
| a0bec55e97 | |||
| f838d6b566 | |||
| 27e1e2f751 | |||
| f1f800783f | |||
| d0225f0417 | |||
| ddc0f2ccca | |||
| 61d1cf709c | |||
| 59a4c42060 | |||
| 0247088be2 | |||
| 42ceb9f38e | |||
| f926fbba79 | |||
| 63d4b27648 | |||
| 1db4458e16 | |||
| 821924e875 | |||
| 61d3dd3c06 | |||
| 1a966fd553 | |||
| ca0a9df801 | |||
| 8b2ab7b9c2 | |||
| 6fee096cf8 | |||
| e8607d02ae | |||
| d507a9c204 | |||
| 8bee9efe6b | |||
| d235d602ce | |||
| e8c25a4e90 | |||
| f389ff7101 | |||
| 51f4d4237c | |||
| 489ff94601 | |||
| 05be290f90 | |||
| d4e44bb53f | |||
| 751e008854 | |||
| 7d168ff378 | |||
| d5e9a97fc6 | |||
| 913e12f122 | |||
| 9e429cf8f1 | |||
| eae9c77bcf | |||
| 73ca30ed4c | |||
| b08d80b4b6 | |||
| 7047a0d227 | |||
| e254c65c56 | |||
| b3ec4861c7 | |||
|
|
9f5a41eace | ||
|
|
686875a066 | ||
|
|
6d54f9c2d7 | ||
| 10960a8473 | |||
| 19f79b91d1 | |||
| 1c0896cbeb | |||
| d2738e2615 | |||
| 1ee90ac2e1 | |||
| a8d8f5c8e0 | |||
| 31f482f576 | |||
| 30a5392e56 | |||
| 3b22d28e98 | |||
|
|
9cdb70dd80 | ||
|
|
c3c875e80e | ||
|
|
809789837d | ||
| 39bfe7b307 | |||
|
|
80d6300fc0 | ||
|
|
b25a2a5feb | ||
| 2d614c0e38 | |||
| c7801d17c0 | |||
| 6e82f4d476 | |||
| 0c4335993a | |||
| ff6100a964 | |||
| 974f87c4c4 | |||
| a50b0cd1d7 | |||
| 16e96693cc | |||
| acc44dac22 | |||
| 411f46d55e | |||
| 69745c053f | |||
| 214ea1c22e | |||
| 074703af1a | |||
| 9061eef311 | |||
| e924043945 | |||
| 94043eb522 | |||
| a690350d1d | |||
| 8d4b296331 | |||
| 73553b0964 | |||
| b1f378eae7 | |||
| 439aca673f | |||
| 4b7491637d | |||
| 9ca07a36a8 | |||
| 6c6b7f1f02 | |||
| b97dcf6837 | |||
| eea26150f9 | |||
| d056255994 | |||
| 5f0ffea7bc | |||
| 9a573c4eb2 | |||
| a0a4fa4792 | |||
| 14bc8d291a | |||
| b91e701f4c | |||
| debbc4e4d0 | |||
| 0c7633d92d | |||
| 3b81a3ff2b | |||
| 401033b185 | |||
| 9cdd9886e3 | |||
| 3a45721812 | |||
| a65ad1470c | |||
| d1eb92cf25 | |||
| b36a9f3355 | |||
| 21e8bd68c2 | |||
| b4385dcecd | |||
| 7e1d310e24 | |||
| 37b025088f | |||
| e785a8ad05 | |||
| a6bbba9419 | |||
| 8ccf8b9a5a | |||
| bb95852bf1 | |||
| 9ca160a8c7 | |||
| 882ba3e13a | |||
| 33b926cb1f | |||
| 4ff5de480d | |||
| aa062122de | |||
| 0fbb38baeb | |||
| 3e1928fcad | |||
| ef0ff44f2b | |||
| 7b539b45d0 | |||
| 9a320589ab | |||
| 4d1bd8abe3 | |||
| 1317c8e8ce | |||
| 54e8c9eba5 | |||
| 9d3d8b48e4 | |||
| 702e05e7f7 | |||
| 5427c73f1c | |||
| b41f833c5e | |||
| 3765db3001 | |||
| 94bae3c140 | |||
| dbb0749ff3 | |||
| 831b75025d | |||
| 249071f5c3 | |||
| 32a695e9ca | |||
| 2d2863726b | |||
| 1dec912abb | |||
| 12f3d97a9e | |||
| 99aa81a68c | |||
| 9e0c82b26b | |||
| 30bc22a457 | |||
| 11acca0744 | |||
| d3294bcb0b | |||
| 5ba2811af3 | |||
| 387e00b5c3 | |||
| 3fdd6ae9d1 | |||
| ee0b8eb6a0 | |||
| a745ed8c79 |
@@ -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())
|
||||
12
LINEUPS.md
12
LINEUPS.md
@@ -2,14 +2,14 @@
|
||||
|
||||
## 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. Also, when counting these lines, make sure you count from the inside curve, not the outside.
|
||||
|
||||
- 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.
|
||||
<img src="https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/do-not-merge/r1l.png" alt="Alt text" width="300"/>
|
||||
|
||||
- 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 #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 #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 #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 #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 #4 (Run #4) [Left/Red Home] - The robot's left edge should be positioned on the 2nd thick line from the left.
|
||||
|
||||
- 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.
|
||||
- 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 from the top. For both runs the robot should be facing the blue home.
|
||||
70
README.md
70
README.md
@@ -14,7 +14,7 @@
|
||||
|
||||
## 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 |
|
||||
| **Firmware** | Pybricks |
|
||||
| **Attachment Motors** | 2× Large Motors (Ports C & D) |
|
||||
| **Drive Motors** | 2× Small Motors (Ports A & B) |
|
||||
| **Attachment Motors** | 2x Large Motors (Ports C & D) |
|
||||
| **Drive Motors** | 2x Small Motors (Ports A & B) |
|
||||
| **Sensors** | Up-facing Color Sensor (Quick Start) |
|
||||
| **Attachments** | Multiple mission-specific tools |
|
||||
|
||||
@@ -46,10 +46,10 @@ Our codebase is organized for maximum efficiency and modularity:
|
||||
```
|
||||
Repository
|
||||
┣ run_1.py # Individual mission runs
|
||||
┣ run_2.py # Each file = 1+ mission completions
|
||||
┣ run_2.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
|
||||
@@ -61,34 +61,42 @@ Repository
|
||||
|
||||
## How to Use
|
||||
|
||||
### Installation & Deployment
|
||||
### Installation & Deployment - from the server - everyday
|
||||
|
||||
1. **Load the Code**
|
||||
```bash
|
||||
# Open the master.py file in Pybricks IDE
|
||||
```
|
||||
1. Download the file competition_codes/sectionals/sectional_main_dec_6.py
|
||||
- You can do this through the repo, by using cURL, or by using git.
|
||||
- Repo - Go to the latest release and click the "Download as ZIP" button to get the full repository.
|
||||
- Single file - Go to the latest release and click the file link to get the raw master file.
|
||||
- git CLI -
|
||||
```git clone https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed.git```
|
||||
|
||||
2. **Connect to Robot**
|
||||
- Pair your robot via Bluetooth in Pybricks
|
||||
Then use the master file.
|
||||
|
||||
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:
|
||||

|
||||
- Bluetooth button looks like this:
|
||||

|
||||
|
||||
3. **Upload to Robot** - Click "Download and Run" or send the program to the robot
|
||||
- Run button looks like this: 
|
||||
|
||||
3. **Upload to Robot**
|
||||
- Click "Download and Run" or send the program to the robot
|
||||
|
||||
4. **Start Your Run**
|
||||
- Hold a colored LEGO brick up to the color sensor
|
||||
- Different colors trigger different mission runs!
|
||||
- If starting without Pybricks, press the center circular button on the SPIKE Prime Hub to start the program.
|
||||
- Hold a colored LEGO brick up to the color sensor.
|
||||
- Different colors trigger different mission runs - color mapping is below.
|
||||
|
||||
### Color Start System
|
||||
| Color | Mission | Celebration Sound |
|
||||
|-------|-----------|------------------|
|
||||
| Green 🟩 | Run 1 | Victory Fanfare |
|
||||
| White ⚪ | Run 2 | Rickroll Inspired |
|
||||
| Yellow 🟨 | Run 3 | Success Chime |
|
||||
| Orange 🟧 | Run 4 | Power Up |
|
||||
| Blue 🟦 | Run 5 | Power Up |
|
||||
| Red 🟥 | Run 6 | Ta-Da! |
|
||||
|
||||
> **Tip** Organize your colored bricks before the match for quick run selection!
|
||||
| Color | Mission |
|
||||
|-------|-----------|
|
||||
| ```Green 🟩 ```| Run 1 |
|
||||
| ```Purple 🟪 ```| Run 2 |
|
||||
| ```Red 🟥 ```| Run 3 |
|
||||
| ```Yellow 🟨 ```| Run 4 |
|
||||
| ```Blue 🟦 ```| Run 5 |
|
||||
| ```Orange 🟧 ```| Run 6 |
|
||||
|
||||
---
|
||||
|
||||
@@ -114,9 +122,7 @@ Team members can contribute by:
|
||||
|
||||
**GNU General Public License v3.0**
|
||||
|
||||
```
|
||||
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.
|
||||
|
||||
@@ -130,14 +136,8 @@ This project is licensed under GPL-3.0 - see the [LICENSE](LICENSE) file for com
|
||||
|
||||
## Contact & Support
|
||||
|
||||
**Team 65266 Lego Dynamics**
|
||||
**Team 65266 - Lego Dynamics**
|
||||
|
||||
Questions about our approach? Interested in collaboration? Reach out!
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
Star this repo if you found it helpful!
|
||||
|
||||
</div>
|
||||
220
RegionalFinal.py
Normal file
220
RegionalFinal.py
Normal file
@@ -0,0 +1,220 @@
|
||||
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(-900)
|
||||
|
||||
|
||||
# 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(-102.5)
|
||||
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, 270)
|
||||
await drive_base.turn(30)
|
||||
await drive_base.straight(-60)
|
||||
|
||||
|
||||
|
||||
# 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())
|
||||
@@ -7,10 +7,8 @@ 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)
|
||||
@@ -20,116 +18,108 @@ color_sensor = ColorSensor(Port.F)
|
||||
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.settings(600, 500, 300, 200)
|
||||
drive_base.use_gyro(True)
|
||||
|
||||
WALL_DISTANCE = 300 # mm
|
||||
|
||||
WALL_DISTANCE = 200 # mm
|
||||
async def drive_forward():
|
||||
"""Drive forward continuously using DriveBase."""
|
||||
#await drive_base.straight(5000)
|
||||
drive_base.drive(400,0)
|
||||
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.turn(-180)
|
||||
drive_base.brake
|
||||
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)
|
||||
# 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 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)
|
||||
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 left_arm.run_angle(1000, 450)
|
||||
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.turn(35)
|
||||
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.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 right_arm.run_angle(5000, 2900)
|
||||
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.turn(-60)
|
||||
await drive_base.straight(-670)
|
||||
|
||||
|
||||
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(500,200)
|
||||
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(-55)
|
||||
await drive_base.turn(-70)
|
||||
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(21)
|
||||
await drive_base.straight(33)
|
||||
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 drive_base.turn(46.5)
|
||||
await drive_base.turn(-40)
|
||||
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)
|
||||
|
||||
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
|
||||
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)
|
||||
await left_arm.run_angle(10000, 4000)
|
||||
#Get to Red Start
|
||||
await drive_base.straight(-110)
|
||||
await drive_base.turn(90)
|
||||
await drive_base.straight(500)
|
||||
|
||||
# while True:
|
||||
# distance_mm = await lazer_ranger.distance()
|
||||
# print('distancing...',distance_mm)
|
||||
@@ -146,76 +136,93 @@ async def Run4(): #From Send_Over_Final.py
|
||||
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(135)
|
||||
await drive_base.straight(25)
|
||||
await right_arm.run_angle(10000, -3000)
|
||||
await drive_base.straight(-100)
|
||||
await drive_base.turn(-55)
|
||||
await right_arm.run_angle(10000, -3000)
|
||||
await drive_base.straight(250)
|
||||
await drive_base.turn(-5)
|
||||
await right_arm.run_angle(10000, 7000)
|
||||
await drive_base.straight(-50)
|
||||
await drive_base.turn(45)
|
||||
await drive_base.straight(100)
|
||||
await drive_base.turn(37)
|
||||
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
|
||||
|
||||
# Add Rishi's code here
|
||||
async def Run5():
|
||||
await drive_base.straight(700)
|
||||
await drive_base.turn(-18)
|
||||
await drive_base.straight(100)
|
||||
await drive_base.straight(-205)
|
||||
await drive_base.turn(63)
|
||||
await drive_base.straight(125)
|
||||
await arm_motor.run_angle(1000, -1200)
|
||||
await drive_base.straight(84)
|
||||
await arm_motor.run_angle(300, 1200)
|
||||
await drive_base.straight(-875)
|
||||
|
||||
|
||||
# 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 right_arm.run_angle(300, 100)
|
||||
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(-94)
|
||||
await drive_base.straight(-80)
|
||||
await left_arm.run_angle(500, 900)
|
||||
await drive_base.straight(50)
|
||||
await drive_base.turn(-10)
|
||||
await drive_base.straight(50)
|
||||
await left_arm.run_angle(700, -200)
|
||||
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
|
||||
async def main:
|
||||
def detect_color(h, s, v, reflected):
|
||||
if reflected > 4:
|
||||
if h < 4 or h > 350: #red
|
||||
if h < 4 or h > 350: # red
|
||||
return "Red"
|
||||
print('Running Mission 3')
|
||||
await Run3()
|
||||
elif 3 < h < 40 and s > 70: #orange
|
||||
elif 3 < h < 40 and s > 70: # orange
|
||||
return "Orange"
|
||||
print('Running Mission 6')
|
||||
await Run6()
|
||||
elif 47 < h < 56: #yellow
|
||||
elif 47 < h < 56: # yellow
|
||||
return "Yellow"
|
||||
print('Running Mission 4')
|
||||
await Run4()
|
||||
elif 70 < h < 160: #green - do it vertically not horizontally for accuracy
|
||||
elif 70 < h < 160: # green - do it vertically not horizontally for accuracy
|
||||
return "Green"
|
||||
print('Running Mission 1')
|
||||
await Run1()
|
||||
elif 210 < h < 225: #blue - do it vertically not horizontally for accuracy
|
||||
elif 210 < h < 225: # blue - do it vertically not horizontally for accuracy
|
||||
return "Blue"
|
||||
print('Running Mission 5')
|
||||
await Run5()
|
||||
elif 230 < h < 320: #purple
|
||||
elif 260 < h < 350: # purple
|
||||
return "Purple"
|
||||
print('Running Mission 2')
|
||||
await Run2()
|
||||
else:
|
||||
return "Unknown"
|
||||
return "Unknown"
|
||||
|
||||
# Main loop
|
||||
while True:
|
||||
h, s, v = sensor.hsv()
|
||||
reflected = sensor.reflection()
|
||||
|
||||
async def main():
|
||||
while True:
|
||||
h, s, v = await color_sensor.hsv()
|
||||
reflected = await color_sensor.reflection()
|
||||
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())
|
||||
@@ -189,6 +189,7 @@ 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
|
||||
@@ -246,30 +247,29 @@ async def Run2(): #From Heavy_lifting_final.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(500,200)
|
||||
left_arm.run_angle(600,200)
|
||||
right_arm.run_angle(500,200)
|
||||
await drive_base.straight(70)
|
||||
|
||||
await drive_base.turn(-55)
|
||||
await drive_base.turn(-70)
|
||||
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(21)
|
||||
await drive_base.straight(33)
|
||||
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.straight(900)
|
||||
|
||||
drive_base.settings(600,500,300,200) #Reset it to the initial values
|
||||
|
||||
async def Run4(): #From Send_Over_Final.py
|
||||
|
||||
#Get to mission
|
||||
230
competition_codes/hazmat/mainhazmatUPD.py
Normal file
230
competition_codes/hazmat/mainhazmatUPD.py
Normal file
@@ -0,0 +1,230 @@
|
||||
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 = 200 # 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
|
||||
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
|
||||
await drive_base.straight(900)
|
||||
|
||||
|
||||
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(600)
|
||||
await drive_base.straight(-100)
|
||||
await drive_base.straight(150)
|
||||
await drive_base.turn(60)
|
||||
await drive_base.straight(100)
|
||||
await drive_base.turn(-86)
|
||||
await drive_base.straight(120)
|
||||
await drive_base.turn(-45)
|
||||
await drive_base.straight(-200)
|
||||
await drive_base.turn(75)
|
||||
|
||||
# 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(-94)
|
||||
await drive_base.straight(-80)
|
||||
await left_arm.run_angle(500, 900)
|
||||
await drive_base.straight(50)
|
||||
await drive_base.turn(-10)
|
||||
await drive_base.straight(50)
|
||||
await left_arm.run_angle(700, -200)
|
||||
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())
|
||||
221
competition_codes/regional-final/Final_combined.py
Normal file
221
competition_codes/regional-final/Final_combined.py
Normal 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())
|
||||
372
competition_codes/sectionals/mukwonago_sectionals_final.py
Normal file
372
competition_codes/sectionals/mukwonago_sectionals_final.py
Normal file
@@ -0,0 +1,372 @@
|
||||
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,Direction.CLOCKWISE) # Specify default direction
|
||||
left_arm = Motor(Port.C, Direction.CLOCKWISE) # Specify default direction
|
||||
right_arm = Motor(Port.D, Direction.CLOCKWISE,[[12,36],[12,20,24]]) #Added gear train list for gear ration
|
||||
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 = 200 # mm
|
||||
|
||||
async def drive_forward():
|
||||
"""Drive forward continuously using DriveBase."""
|
||||
drive_base.drive(400, 0)
|
||||
|
||||
async def drive_backward():
|
||||
"""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
|
||||
drive_base.stop()
|
||||
print(f"Wall detected at {distance}mm!")
|
||||
break
|
||||
if distance is None:
|
||||
continue
|
||||
|
||||
|
||||
# Small delay to prevent overwhelming the sensor
|
||||
await wait(50)
|
||||
|
||||
"""
|
||||
Run#1
|
||||
- Removed forge and who lived here part
|
||||
- What's on sale + Silo
|
||||
- Green Key
|
||||
"""
|
||||
async def Run1():
|
||||
await solve_whats_on_sale()
|
||||
await solve_silo()
|
||||
|
||||
# return to base
|
||||
await drive_base.straight(-90)
|
||||
#await drive_base.turn(-100)
|
||||
await drive_base.arc(200,None,-300)
|
||||
drive_base.stop()
|
||||
|
||||
async def solve_whats_on_sale():
|
||||
|
||||
right_arm.run_angle(500,30)
|
||||
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)
|
||||
|
||||
async def solve_silo():
|
||||
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(4000,-30, Stop.HOLD)
|
||||
await right_arm.run_angle(4000,30, Stop.HOLD)
|
||||
await right_arm.run_angle(4000,-30, Stop.HOLD)
|
||||
await right_arm.run_angle(4000,30, Stop.HOLD)
|
||||
await right_arm.run_angle(4000,-30, Stop.HOLD)
|
||||
right_arm.run_angle(4000,30, Stop.HOLD)
|
||||
|
||||
|
||||
"""
|
||||
Run#2
|
||||
- This to solve forge, who lived here and heavy lifting combined
|
||||
- Red Key
|
||||
"""
|
||||
async def Run2():
|
||||
await solve_forge()
|
||||
await solve_heavy_lifting()
|
||||
await solve_who_lived_here()
|
||||
|
||||
# return to base
|
||||
await drive_base.arc(-500,None,600)
|
||||
drive_base.stop()
|
||||
|
||||
async def solve_forge():
|
||||
await right_arm.run_target(50,50)
|
||||
# await right_arm.run_angle(50,-30)
|
||||
await drive_base.arc(350,113, None)
|
||||
|
||||
await drive_base.straight(20)
|
||||
await drive_base.turn(-60)
|
||||
await drive_base.straight(-47)
|
||||
|
||||
async def solve_heavy_lifting():
|
||||
await right_arm.run_angle(500,-160) # arm down
|
||||
await wait(100)
|
||||
await drive_base.turn(20) # turn right a little bit
|
||||
await right_arm.run_angle(500,160) #arm up
|
||||
await drive_base.turn(-20) #reset position
|
||||
|
||||
async def solve_who_lived_here():
|
||||
await drive_base.straight(50)
|
||||
await drive_base.turn(-15)
|
||||
await drive_base.straight(50)
|
||||
await drive_base.turn(-25)
|
||||
await drive_base.straight(-50)
|
||||
await drive_base.turn(-100)
|
||||
|
||||
"""
|
||||
Run#2.1
|
||||
- Alternate solution for Forge, Who lived here and Heavy Lifting combined
|
||||
- Light Blue Key
|
||||
- Different alignment
|
||||
"""
|
||||
async def Run2_1():
|
||||
await solve_forge_straight()
|
||||
await solve_heavy_lifting()
|
||||
await solve_who_lived_here()
|
||||
|
||||
# return to base
|
||||
await drive_base.arc(-500,None,600)
|
||||
drive_base.stop()
|
||||
|
||||
async def solve_forge_straight():
|
||||
await right_arm.run_target(50,50)
|
||||
await right_arm.run_angle(50,-30)
|
||||
await drive_base.straight(700)
|
||||
# await drive_base.turn(-30)
|
||||
# await drive_base.straight(20)
|
||||
await drive_base.turn(-40)
|
||||
await drive_base.straight(-30)
|
||||
|
||||
"""
|
||||
Run#3
|
||||
- Combined angler artifacts and tip the scale
|
||||
- Yellow key
|
||||
"""
|
||||
async def Run3():
|
||||
await solve_angler_artifacts()
|
||||
await solve_tip_the_scale()
|
||||
|
||||
#cross over to red side
|
||||
await multitask(
|
||||
drive_forward(),
|
||||
monitor_distance()
|
||||
)
|
||||
|
||||
async def solve_angler_artifacts():
|
||||
await drive_base.straight(940)
|
||||
await drive_base.turn(-90,Stop.HOLD)
|
||||
await drive_base.straight(65)
|
||||
#Solve
|
||||
drive_base.turn(-10)
|
||||
await left_arm.run_angle(10000,-3000)
|
||||
await drive_base.straight(-110)
|
||||
|
||||
await drive_base.turn(90)
|
||||
await drive_base.arc(-150,-103, None)
|
||||
|
||||
async def solve_tip_the_scale():
|
||||
await drive_base.turn(3)
|
||||
await drive_base.straight(142.5)
|
||||
await right_arm.run_angle(800,-150)
|
||||
await right_arm.run_angle(900,150)
|
||||
|
||||
await drive_base.straight(-100)
|
||||
await drive_base.turn(-65)
|
||||
await drive_base.straight(300,Stop.COAST_SMART)
|
||||
await drive_base.arc(10,-47, None)
|
||||
#await drive_base.turn(-23, Stop.COAST_SMART)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Run #4
|
||||
- Solves the Mineshaft explorer + 2/3 Surface Brush + 1/3 Map Reveal
|
||||
- Blue Key
|
||||
"""
|
||||
async def Run4():
|
||||
await drive_base.straight(700)
|
||||
await drive_base.turn(-18)
|
||||
await drive_base.straight(120)
|
||||
await drive_base.straight(-210)
|
||||
await drive_base.turn(61)
|
||||
await drive_base.straight(133)
|
||||
await right_arm.run_angle(400, -200)
|
||||
await drive_base.straight(90)
|
||||
await right_arm.run_angle(100, 95)
|
||||
await drive_base.straight(-875)
|
||||
|
||||
async def solve_brush_reveal():
|
||||
await drive_base.straight(700)
|
||||
await drive_base.turn(-20)
|
||||
await drive_base.straight(110)
|
||||
await drive_base.straight(-210)
|
||||
|
||||
async def solve_mineshaft_explorer():
|
||||
await drive_base.turn(63)
|
||||
await drive_base.straight(130)
|
||||
await right_arm.run_angle(1000, -90)
|
||||
await drive_base.straight(84)
|
||||
await right_arm.run_angle(300, 90)
|
||||
|
||||
"""
|
||||
Run#5
|
||||
- Solves Salvage Operation + Statue Rebuild
|
||||
- Orange Key
|
||||
"""
|
||||
async def Run5():
|
||||
await drive_base.straight(550)
|
||||
await right_arm.run_angle(300,100)
|
||||
await drive_base.straight(-75)
|
||||
await right_arm.run_angle(300, -100)
|
||||
await drive_base.straight(300)
|
||||
await drive_base.straight(-200)
|
||||
await drive_base.turn(-15)
|
||||
#solving statue
|
||||
await drive_base.straight(350)
|
||||
await drive_base.turn(-104)
|
||||
await drive_base.straight(-80)
|
||||
await left_arm.run_angle(500, -900)
|
||||
await drive_base.straight(120)
|
||||
await drive_base.turn(5)
|
||||
await left_arm.run_angle(500, 290)
|
||||
await drive_base.turn(18)
|
||||
await drive_base.straight(-100)
|
||||
await drive_base.turn(-90)
|
||||
await drive_base.straight(900)
|
||||
drive_base.stop()
|
||||
|
||||
|
||||
async def solve_salvage_operation():
|
||||
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)
|
||||
|
||||
async def solve_statue_rebuild():
|
||||
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)
|
||||
|
||||
"""
|
||||
Run#6
|
||||
- Solve 2/3 Site Markings
|
||||
- Run only if have time
|
||||
- Purple Key
|
||||
"""
|
||||
async def Run6_7(): # experiment with ferris wheel for Site Markings
|
||||
solve_site_mark_1()
|
||||
solve_site_mark_2()
|
||||
#return to base
|
||||
await drive_base.straight(-300)
|
||||
drive_base.stop()
|
||||
|
||||
async def solve_site_mark_1():
|
||||
await drive_base.straight(500)
|
||||
await right_arm.run_angle(100, -10)
|
||||
await wait(50)
|
||||
await drive_base.straight(-300)
|
||||
await drive_base.arc(-150, -140, None)
|
||||
|
||||
async def solve_site_mark_2():
|
||||
await drive_base.straight(-300)
|
||||
await wait(50)
|
||||
await right_arm.run_angle(50, 50)
|
||||
|
||||
|
||||
|
||||
# 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 195 < h < 198: # light blue
|
||||
return "Light_Blue"
|
||||
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()
|
||||
print(color_sensor.color())
|
||||
print(h,s,v)
|
||||
reflected = await color_sensor.reflection()
|
||||
color = detect_color(h, s, v, reflected)
|
||||
print(color)
|
||||
|
||||
|
||||
if color == "Green":
|
||||
print('Running Mission 1')
|
||||
await Run1()
|
||||
elif color == "Red":
|
||||
print('Running Mission 2')
|
||||
await Run2()
|
||||
elif color == "Yellow":
|
||||
print('Running Mission 3')
|
||||
await Run3()
|
||||
elif color == "Blue":
|
||||
print('Running Mission 4')
|
||||
await Run4()
|
||||
elif color == "Orange":
|
||||
print('Running Mission 5')
|
||||
await Run5()
|
||||
elif color == "Purple":
|
||||
print('Running Mission 6')
|
||||
await Run6_7()
|
||||
elif color == "Light_Blue":
|
||||
print("Running Mission 2_1")
|
||||
await Run2_1()
|
||||
else:
|
||||
print(f"Unknown color detected (Hue: {h}, Sat: {s}, Val: {v})")
|
||||
await wait(10)
|
||||
# Run the main function
|
||||
run_task(main())
|
||||
@@ -2,26 +2,36 @@ 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
|
||||
from pybricks.tools import wait, StopWatch, run_task, multitask
|
||||
|
||||
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)
|
||||
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.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)
|
||||
|
||||
first_run = False
|
||||
|
||||
async def main():
|
||||
await drive_base.straight(750)
|
||||
await drive_base.straight(-650)
|
||||
await drive_base.straight(700)
|
||||
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())
|
||||
@@ -1,27 +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(880,850,700,700)
|
||||
|
||||
drive_base.use_gyro(True)
|
||||
|
||||
first_run = True
|
||||
|
||||
async def main():
|
||||
await drive_base.straight(750)
|
||||
await drive_base.straight(-650)
|
||||
|
||||
run_task(main())
|
||||
@@ -1,37 +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 right_arm.run_angle(2000,1000)
|
||||
|
||||
await drive_base.straight(200)
|
||||
await drive_base.turn(-20)
|
||||
await drive_base.straight(525)
|
||||
await drive_base.turn(60)
|
||||
await drive_base.straight(30)
|
||||
|
||||
await right_arm.run_angle(2000,-1000)
|
||||
await drive_base.straight(30)
|
||||
await right_arm.run_angle(3000,1000)
|
||||
await drive_base.straight(-60)
|
||||
|
||||
await drive_base.turn(-60)
|
||||
await drive_base.straight(-525)
|
||||
await drive_base.turn(20)
|
||||
await drive_base.straight(-200)
|
||||
|
||||
@@ -1,36 +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():
|
||||
#Get to mission
|
||||
await drive_base.straight(200)
|
||||
await drive_base.turn(-20)
|
||||
await drive_base.straight(525)
|
||||
await drive_base.turn(60)
|
||||
#Solve mission
|
||||
await drive_base.straight(50)
|
||||
await right_arm.run_angle(2000,1000)
|
||||
await drive_base.straight(-50)
|
||||
await drive_base.turn(45)
|
||||
await drive_base.straight(50)
|
||||
await right_arm.run_angle(350,-1000)
|
||||
#Return home
|
||||
await drive_base.straight(-100)
|
||||
await drive_base.turn(-100)
|
||||
await drive_base.straight(-600)
|
||||
run_task(main())
|
||||
@@ -2,7 +2,7 @@ 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, run_task
|
||||
from pybricks.tools import wait, StopWatch, run_task, multitask
|
||||
|
||||
hub = PrimeHub()
|
||||
|
||||
@@ -23,23 +23,15 @@ drive_base.settings(300,1000,300,750)
|
||||
drive_base.use_gyro(True)
|
||||
|
||||
async def main():
|
||||
await drive_base.straight(519)
|
||||
await arm_motor_left.run_angle(300, -100)
|
||||
await arm_motor_left.run_angle(300, 500)
|
||||
await drive_base.straight(180)
|
||||
await drive_base.turn(-37)
|
||||
await drive_base.straight(50)
|
||||
await arm_motor.run_angle(300, -400)
|
||||
await drive_base.straight(-150)
|
||||
await drive_base.turn(135)
|
||||
await drive_base.straight(50)
|
||||
await arm_motor.run_angle(300, 400)
|
||||
await drive_base.straight(-75)
|
||||
await arm_motor.run_angle(300, 300)
|
||||
await drive_base.turn(-50)
|
||||
await drive_base.straight(162)
|
||||
await arm_motor.run_angle(100, -200)
|
||||
await drive_base.straight(30)
|
||||
await arm_motor.run_angle(50,-500)
|
||||
await drive_base.straight(700)
|
||||
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())
|
||||
@@ -1,34 +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(525)
|
||||
await drive_base.turn(60)
|
||||
|
||||
await drive_base.straight(50)
|
||||
await right_arm.run_angle(2000,1000)
|
||||
await drive_base.straight(-50)
|
||||
await drive_base.turn(45)
|
||||
await drive_base.straight(50)
|
||||
await right_arm.run_angle(350,-1000)
|
||||
|
||||
await drive_base.turn(-100)
|
||||
await drive_base.straight(-600)
|
||||
run_task(main())
|
||||
@@ -1,34 +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(525)
|
||||
await drive_base.turn(60)
|
||||
|
||||
await drive_base.straight(50)
|
||||
await right_arm.run_angle(2000,1000)
|
||||
await drive_base.straight(-50)
|
||||
await drive_base.turn(45)
|
||||
await drive_base.straight(50)
|
||||
await right_arm.run_angle(350,-1000)
|
||||
|
||||
await drive_base.turn(-100)
|
||||
await drive_base.straight(-600)
|
||||
run_task(main())
|
||||
@@ -19,31 +19,47 @@ drive_base.settings(600,500,300,200)
|
||||
drive_base.use_gyro(True)
|
||||
|
||||
async def main():
|
||||
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)
|
||||
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.straight(277)
|
||||
await drive_base.turn(20)
|
||||
await drive_base.straight(65)
|
||||
await drive_base.turn(15)
|
||||
|
||||
await drive_base.turn(-30)
|
||||
right_arm.run_angle(50,500)
|
||||
await drive_base.straight(-173)
|
||||
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)
|
||||
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)
|
||||
|
||||
run_task(main())
|
||||
38
missions/New_MapReveal/New_MapReveal_Mineshaft.py
Normal file
38
missions/New_MapReveal/New_MapReveal_Mineshaft.py
Normal file
@@ -0,0 +1,38 @@
|
||||
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 = 200 # mm
|
||||
|
||||
async def main():
|
||||
await drive_base.straight(700)
|
||||
await drive_base.turn(-20)
|
||||
await drive_base.straight(110)
|
||||
await drive_base.straight(-220)
|
||||
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)
|
||||
|
||||
run_task(main())
|
||||
@@ -37,14 +37,6 @@ async def main():
|
||||
await drive_base.straight(-100)
|
||||
await drive_base.turn(-54)
|
||||
await arm_motor.run_angle(10000, -3000)
|
||||
await drive_base.straight(250)
|
||||
await drive_base.turn(-5)
|
||||
await arm_motor.run_angle(10000, 7000)
|
||||
await drive_base.straight(-50)
|
||||
await drive_base.turn(68)
|
||||
await arm_motor.run_angle(10000, -6000)
|
||||
await drive_base.straight(200)
|
||||
await arm_motor.run_angle(10000, 4000)
|
||||
await drive_base.turn(-40)
|
||||
await arm_motor.run_angle(10000, 7000)
|
||||
await arm_motor.run_angle(10000, 10000)
|
||||
run_task(main())
|
||||
@@ -1,29 +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(400,500,100,100)
|
||||
|
||||
drive_base.use_gyro(True)
|
||||
|
||||
|
||||
async def main():
|
||||
await drive_base.straight(500)
|
||||
await right_arm.run_angle(300,100)
|
||||
await drive_base.straight(-100)
|
||||
await right_arm.run_angle(300,-100)
|
||||
await drive_base.straight(-350)
|
||||
|
||||
run_task(main())
|
||||
@@ -19,28 +19,41 @@ drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=
|
||||
drive_base.settings(600,500,300,200)
|
||||
drive_base.use_gyro(True)
|
||||
|
||||
WALL_DISTANCE = 200 # 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)
|
||||
|
||||
async def main():
|
||||
#Get to mission
|
||||
await drive_base.straight(920)
|
||||
await drive_base.straight(-920)
|
||||
await drive_base.turn(-90,Stop.HOLD)
|
||||
await drive_base.straight(65)
|
||||
#Solve mission
|
||||
#Solve
|
||||
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)
|
||||
await drive_base.straight(500)
|
||||
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()
|
||||
)
|
||||
|
||||
run_task(main())
|
||||
@@ -1,44 +0,0 @@
|
||||
# ---JOHANNES---
|
||||
# THIS CODE IS NOT USED ANYMORE AND SHOULD NOT BE USED!!!!!!
|
||||
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
|
||||
|
||||
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)
|
||||
right_motor = Motor(Port.B)
|
||||
|
||||
arm_motor = Motor(Port.E, Direction.CLOCKWISE)
|
||||
arm_motor.run_angle(299,90, Stop.HOLD)
|
||||
# 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=54, axle_track=140)
|
||||
|
||||
print('The default settings are: ' + str(drive_base.settings()))
|
||||
drive_base.settings(100,1000,166,750)
|
||||
# Optionally, uncomment the line below to use the gyro for improved accuracy.
|
||||
drive_base.use_gyro(True)
|
||||
|
||||
async def solveM9():
|
||||
print("Solving Mission 9")
|
||||
await drive_base.turn(45)
|
||||
await drive_base.straight(260)
|
||||
await arm_motor.run_angle(500,-500, Stop.HOLD)
|
||||
await drive_base.straight(-40)
|
||||
await drive_base.turn(92)
|
||||
await drive_base.straight(-120)
|
||||
await drive_base.straight(220)
|
||||
await arm_motor.run_angle(500,100, Stop.HOLD)
|
||||
await drive_base.turn(-50)
|
||||
await drive_base.straight(-600)
|
||||
async def main():
|
||||
await drive_base.straight(50)
|
||||
print("Hello, Robot is starting to run.")
|
||||
await solveM9()
|
||||
|
||||
run_task(main())
|
||||
@@ -15,28 +15,23 @@ 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(300,1000,300,200)
|
||||
drive_base.settings(600,500,300,200)
|
||||
|
||||
#drive_base.use_gyro(True)
|
||||
drive_base.use_gyro(True)
|
||||
|
||||
async def main():
|
||||
left_arm.run_angle(500,200)
|
||||
right_arm.run_angle(500,200)
|
||||
await drive_base.straight(70)
|
||||
|
||||
await drive_base.turn(-55)
|
||||
await drive_base.straight(900)
|
||||
await drive_base.turn(92.5)
|
||||
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 drive_base.straight(21)
|
||||
await right_arm.run_angle(500,-250)
|
||||
await right_arm.run_angle(500,250)
|
||||
await drive_base.turn(55)
|
||||
await drive_base.straight(-100)
|
||||
await drive_base.turn(90)
|
||||
await drive_base.straight(800)
|
||||
drive_base.brake()
|
||||
|
||||
await left_arm.run_angle(300,-400)
|
||||
|
||||
await drive_base.turn(46.5)
|
||||
await drive_base.turn(-40)
|
||||
await drive_base.straight(900)
|
||||
run_task(main())
|
||||
|
||||
|
||||
@@ -1,31 +1,29 @@
|
||||
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
|
||||
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)
|
||||
|
||||
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)
|
||||
lazer_ranger = UltrasonicSensor(Port.E)
|
||||
color_sensor = ColorSensor(Port.F)
|
||||
# DriveBase configuration
|
||||
WHEEL_DIAMETER = 68.8 # mm
|
||||
AXLE_TRACK = 180 # mm
|
||||
drive_base = DriveBase(left_motor, right_motor, WHEEL_DIAMETER, AXLE_TRACK)
|
||||
drive_base.settings(600, 500, 300, 200)
|
||||
drive_base.use_gyro(True)
|
||||
|
||||
async def main():
|
||||
WALL_DISTANCE = 200 # mm
|
||||
|
||||
await drive_base.straight(915)
|
||||
await drive_base.turn(-90)
|
||||
await drive_base.straight(60)
|
||||
await left_arm.run_angle(10000,-4000)
|
||||
await drive_base.straight(-90)
|
||||
await drive_base.turn(80)
|
||||
await drive_base.straight(2000)
|
||||
async def main():
|
||||
# Your code goes here
|
||||
|
||||
run_task(main())
|
||||
Reference in New Issue
Block a user