224 Commits

Author SHA1 Message Date
dc3057ee97 Merge pull request 'State merge' (#57) from dev into main
Reviewed-on: #57
2026-01-14 17:33:15 +00:00
ba9ddf6373 Update competition_codes/state/sunprarie_state_main_FINAL.py 2026-01-14 17:32:46 +00:00
bc9e78da95 Merge pull request 'Merge pull request 'dev' (#31) from dev into ayaan_dev' (#56) from ayaan_dev into dev
Reviewed-on: #56
2026-01-12 14:45:46 +00:00
782b6ec78f Update competition_codes/state/sunprarie_state_main.py 2026-01-12 03:37:32 +00:00
edd49e0a9b Update competition_codes/state/sunprarie_state_main.py 2026-01-12 03:36:10 +00:00
ea9723a67d Update competition_codes/state/sunprarie_state_main.py 2026-01-12 03:30:25 +00:00
67c6554c61 Update competition_codes/state/sunprarie_state_main.py 2026-01-11 20:16:08 +00:00
2d57f65a58 Update competition_codes/state/sunprarie_state_main.py 2026-01-11 01:19:39 +00:00
eb9b2ca30f Update competition_codes/state/sunprarie_state_main.py 2026-01-11 00:57:25 +00:00
54dd1db320 Update competition_codes/state/sunprarie_state_main.py 2026-01-11 00:47:37 +00:00
e46897548b Update competition_codes/state/sunprarie_state_main.py 2026-01-10 03:02:02 +00:00
70c4df4a12 Update competition_codes/state/sunprarie_state_main.py 2026-01-10 03:01:48 +00:00
0e009d2da4 Update competition_codes/state/sunprarie_state_main.py 2026-01-09 14:33:43 +00:00
e306b7dce1 Delete utils/starter_drivebase_code.py 2026-01-09 13:30:08 +00:00
aed13bedff Delete utils/constants.py 2026-01-09 13:29:06 +00:00
3e4dab3c9c Delete utils/color_sensor_navi.py 2026-01-09 13:28:45 +00:00
65373a16d3 Update old_combined/main5.py 2026-01-09 13:27:35 +00:00
ccd30af870 Update old_combined/4main.py 2026-01-09 13:27:28 +00:00
664defae73 Update old_combined/3main.py 2026-01-09 13:25:14 +00:00
b0fd33d6b0 Update old_combined/2main.py 2026-01-09 13:25:06 +00:00
dbf5fc4880 Update old_combined/1main.py 2026-01-09 13:24:59 +00:00
b3ab479bc4 Update final/old_combined/1main.py 2026-01-09 13:24:33 +00:00
ba3e833434 Update competition_codes/twist_scrimmage/twist_scrimmage.py 2026-01-09 13:22:52 +00:00
3bbf3fb2e6 Update competition_codes/twist_scrimmagetwist_scrimmage.py 2026-01-09 13:22:47 +00:00
79158d0f15 Update competition_codes/regional-final/RegionalFinalOld.py 2026-01-09 13:22:24 +00:00
b93ab2f788 Delete test_10_17_2025.py 2026-01-09 01:30:03 +00:00
44bbcf176d Delete config.py 2026-01-09 01:29:48 +00:00
a395daba02 Delete RoshoDaGoat.py 2026-01-09 01:29:36 +00:00
fa28fbb086 Update competition_codes/state/sunprarie_state_main.py 2026-01-08 23:21:51 +00:00
8b152a371d Add competition_codes/state/Updated state.py 2026-01-08 23:11:34 +00:00
50d125a09e Update competition_codes/state/sunprarie_state_main.py
Forgot to add run task before
2026-01-07 00:17:23 +00:00
a116a9b3bb Update competition_codes/state/sunprarie_state_main.py 2026-01-06 22:24:05 +00:00
4942f28e67 Update competition_codes/state/sunprarie_state_main.py
Battery diagnostics added.
2026-01-06 22:23:43 +00:00
3efdf8ecbc Update competition_codes/state/sunprarie_state_main.py
Slight changes to motor angles in Run_5.
2026-01-05 01:24:12 +00:00
4233cc5f74 Update competition_codes/state/sunprarie_state_main.py
Various updates to a few of the codes.
2026-01-04 18:09:47 +00:00
6dbcfbe146 Update competition_codes/state/sunprarie_state_main.py
Changes to Run 12
2026-01-03 18:38:23 +00:00
54aa537877 Fixed motor angles for the left arm 2025-12-29 22:45:02 +00:00
aa69eed534 Update competition_codes/state/sunprarie_state_main.py
Updates to run 10.
2025-12-29 19:25:24 +00:00
d5e7e5816a Add competition_codes/state/run11_experimental.py 2025-12-29 05:44:44 +00:00
6755e783f4 Add competition_codes/state/run10_experimental.py 2025-12-29 05:44:11 +00:00
d9dec685c3 Update competition_codes/state/sunprarie_state_main.py
Slight updates to Send over and the first mission run.
2025-12-28 01:55:38 +00:00
5a5b6d2d16 Update competition_codes/state/sunprarie_state_main.py
Code optimization and additions to 1st run.
2025-12-24 16:34:38 +00:00
a902f29952 Add competition_codes/state/sunprarie_state_main.py 2025-12-22 23:00:02 +00:00
36fb4d94a3 Merge pull request 'Update competition_codes/sectionals/mukwonago_sectionals_final.py' (#55) from dev into main
Reviewed-on: #55
2025-12-09 18:26:13 +00:00
3014305d69 Update competition_codes/sectionals/mukwonago_sectionals_final.py
Fixed return
2025-12-09 17:34:12 +00:00
68d8b346c7 Merge pull request 'Update README.md' (#54) from dev into main
Reviewed-on: #54
2025-12-08 19:18:47 +00:00
f38a3cc625 Update README.md 2025-12-08 19:18:33 +00:00
cfe7b96be5 Merge pull request 'dev' (#53) from dev into main
Reviewed-on: #53
2025-12-08 19:16:23 +00:00
5a805e75fc Update README.md 2025-12-08 19:16:10 +00:00
4d94a35503 Update competition_codes/sectionals/mukwonago_sectionals_final.py 2025-12-08 19:15:10 +00:00
09490f4e3e Merge pull request 'dev' (#52) from dev into main
Reviewed-on: #52
2025-12-08 19:13:47 +00:00
4539ee361f Update README.md 2025-12-08 19:13:17 +00:00
288c4eac26 Update README.md 2025-12-08 17:29:02 +00:00
c2e8ad028a Merge pull request 'dev' (#51) from dev into main
Reviewed-on: #51
2025-12-08 16:55:06 +00:00
4f21cdc99c Update competition_codes/sectionals/sectional_main_dec_6.py
Updated values
2025-12-08 00:05:09 +00:00
a0bec55e97 Update competition_codes/sectionals/sectional_main_dec_6.py 2025-12-07 21:10:25 +00:00
f838d6b566 Update competition_codes/sectionals/sectional_main_dec_6.py 2025-12-06 20:36:10 +00:00
27e1e2f751 Update competition_codes/sectionals/sectional_main_dec_6.py 2025-12-06 20:35:00 +00:00
f1f800783f Update competition_codes/sectionals/sectional_main_dec_6.py
Updates for gear ratio change
2025-12-06 20:16:37 +00:00
d0225f0417 Merge pull request 'Update competition_codes/sectionals/sectional_main_dec_6.py' (#50) from Rishi_dev into dev
Reviewed-on: #50
2025-12-06 20:09:25 +00:00
ddc0f2ccca Update competition_codes/sectionals/sectional_main_dec_6.py 2025-12-06 18:01:47 +00:00
61d1cf709c Merge pull request 'Rishi_dev' (#49) from Rishi_dev into dev
Reviewed-on: #49
2025-12-06 17:48:09 +00:00
59a4c42060 Update competition_codes/sectionals/sectional_main_experimental.py 2025-12-06 17:47:05 +00:00
0247088be2 Merge pull request 'dev' (#48) from dev into Rishi_dev
Reviewed-on: #48
2025-12-06 17:46:32 +00:00
42ceb9f38e Delete utils/tests/Diagnostics.py 2025-12-06 17:45:34 +00:00
f926fbba79 Delete utils/tests/ColorSensor.py 2025-12-06 17:45:31 +00:00
63d4b27648 Delete utils/tests/FullDiagnostics/FullDiagnostics.py 2025-12-06 17:44:25 +00:00
1db4458e16 Delete utils/tests/FullDiagnostics/BatteryDiagnostics.py 2025-12-06 17:44:20 +00:00
821924e875 Upload files to "utils/tests/FullDiagnostics" 2025-12-06 17:22:50 +00:00
61d3dd3c06 Delete utils/tests/BatteryDiagnostics.py/BatteryDiagnostics.py 2025-12-06 17:21:24 +00:00
1a966fd553 Upload files to "utils/tests/BatteryDiagnostics.py" 2025-12-06 17:20:58 +00:00
ca0a9df801 Delete BatteryDiagnostics.py/BatteryDiagnostics.py 2025-12-06 17:20:14 +00:00
8b2ab7b9c2 Upload files to "BatteryDiagnostics.py" 2025-12-06 17:19:39 +00:00
6fee096cf8 Update competition_codes/sectionals/sectional_main_experimental.py 2025-12-06 14:26:20 +00:00
e8607d02ae Update utils/tests/ColorSensor.py 2025-12-05 16:28:00 +00:00
d507a9c204 Update competition_codes/sectionals/sectional_main_experimental.py 2025-12-04 23:46:26 +00:00
8bee9efe6b Add utils/tests/Diagnostics.py
Returns all information about the robot
2025-12-04 23:41:29 +00:00
d235d602ce Update competition_codes/sectionals/sectional_main_experimental.py 2025-12-04 23:33:57 +00:00
e8c25a4e90 Update competition_codes/sectionals/sectional_main_experimental.py 2025-12-04 03:01:19 +00:00
f389ff7101 Update competition_codes/sectionals/sectional_main_experimental.py 2025-12-04 01:46:03 +00:00
51f4d4237c Merge pull request 'atharv-dev' (#47) from atharv-dev into dev
Reviewed-on: #47
2025-11-25 23:11:26 +00:00
489ff94601 Update competition_codes/sectionals/sectional_main_experimental.py 2025-11-25 20:27:57 +00:00
05be290f90 Update competition_codes/sectionals/sectional_main_experimental.py 2025-11-25 20:23:48 +00:00
d4e44bb53f Merge pull request 'for-sectionals/experimental' (#46) from for-sectionals/experimental into atharv-dev
Reviewed-on: #46
2025-11-25 20:21:38 +00:00
751e008854 Experimentals 2025-11-25 13:17:33 -06:00
7d168ff378 Merge pull request 'RegionalFinal.py' (#45) from dev into main
Reviewed-on: #45
2025-11-18 00:50:19 +00:00
d5e9a97fc6 RegionalFinal.py
This is the final code. If changes are needed, please contact (31lolapr@elmbrookstudents.org).
2025-11-15 17:13:26 +00:00
913e12f122 Merge pull request 'dev' (#44) from dev into main
Reviewed-on: #44
2025-11-12 01:22:35 +00:00
9e429cf8f1 Update README.md 2025-11-12 01:15:22 +00:00
eae9c77bcf Update README.md 2025-11-12 01:14:40 +00:00
73ca30ed4c Delete commit-graphnew.html 2025-11-12 01:13:09 +00:00
b08d80b4b6 Delete graph.txt 2025-11-12 01:13:04 +00:00
7047a0d227 Delete commit-graph.html 2025-11-12 01:12:58 +00:00
e254c65c56 Merge pull request 'Update missions/tip the scale.py' (#43) from parthiv-dev into dev
Reviewed-on: #43
2025-11-12 01:12:37 +00:00
b3ec4861c7 Merge pull request 'Add codes_for_scrimmage/regional-final/Final_combined.py' (#42) from Rishi_dev into dev
Reviewed-on: #42
2025-11-12 01:12:07 +00:00
alkadienePhoton
9f5a41eace Merge branch 'dev' of https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed into dev
Works
2025-11-11 19:11:13 -06:00
alkadienePhoton
686875a066 Fixed conflicts 2025-11-11 19:10:54 -06:00
alkadienePhoton
6d54f9c2d7 Fixed conflicts 2025-11-11 19:10:21 -06:00
10960a8473 Add codes_for_scrimmage/regional-final/Final_combined.py 2025-11-12 01:06:33 +00:00
19f79b91d1 Update utils/FINAL_STARTER_BLANK_CODE.py 2025-11-12 00:37:21 +00:00
1c0896cbeb Add utils/FINAL_STARTER_BLANK_CODE.py
ayaan is SO ANNOYING BRO
2025-11-12 00:31:22 +00:00
d2738e2615 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-09 22:26:09 +00:00
1ee90ac2e1 Update missions/M8_5.py 2025-11-09 22:16:39 +00:00
a8d8f5c8e0 Update missions/tip the scale.py 2025-11-09 22:03:29 +00:00
31f482f576 Update LINEUPS.md 2025-11-09 01:52:54 +00:00
30a5392e56 Update LINEUPS.md 2025-11-09 01:20:19 +00:00
3b22d28e98 Update LINEUPS.md 2025-11-09 01:12:56 +00:00
alkadienePhoton
9cdb70dd80 Merging with actual stuff fixed #2 2025-11-08 17:51:13 -06:00
alkadienePhoton
c3c875e80e Merging with actual stuff fixed 2025-11-08 17:50:29 -06:00
alkadienePhoton
809789837d Merging 2025-11-08 17:48:31 -06:00
39bfe7b307 Merge pull request 'parthiv-dev' (#39) from parthiv-dev into dev
Reviewed-on: #39
2025-11-08 23:45:13 +00:00
alkadienePhoton
80d6300fc0 Merge branch 'dev' of https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed into dev
merging dev
2025-11-08 17:43:45 -06:00
alkadienePhoton
b25a2a5feb Merge branch 'Vickram_dev_' into dev
Merging Vickram_dev_ into dev
2025-11-08 17:40:27 -06:00
2d614c0e38 Update LINEUPS.md
well now we have 5 missions?
2025-11-08 22:25:56 +00:00
c7801d17c0 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-07 23:14:24 +00:00
6e82f4d476 Add missions/New_MapReveal/New_MapReveal_Mineshaft.py
Rishi's updated code
2025-11-07 23:12:55 +00:00
0c4335993a Update missions/tip the scale.py 2025-11-07 23:12:43 +00:00
ff6100a964 changed values to make it work. 2025-11-07 22:52:30 +00:00
974f87c4c4 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-06 01:53:13 +00:00
a50b0cd1d7 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-06 01:50:26 +00:00
16e96693cc Update utils/tests/colorsensortest.py 2025-11-06 01:47:54 +00:00
acc44dac22 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-06 01:44:09 +00:00
411f46d55e Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-06 01:36:51 +00:00
69745c053f Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-06 01:26:47 +00:00
214ea1c22e Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-06 01:24:47 +00:00
074703af1a Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-06 01:24:37 +00:00
9061eef311 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-06 01:12:19 +00:00
e924043945 Upload files to "utils/tests" 2025-11-06 01:11:00 +00:00
94043eb522 Merge pull request 'Update missions/Boat.py' (#37) from Rishi_dev into dev
Reviewed-on: #37
2025-11-06 01:08:48 +00:00
a690350d1d Update missions/Send_Over_Final.py 2025-11-06 01:08:31 +00:00
8d4b296331 Delete missions/mission_09_old.py 2025-11-06 01:08:04 +00:00
73553b0964 Delete missions/Send_Over.py 2025-11-06 01:07:19 +00:00
b1f378eae7 Delete missions/Sand Mission.py 2025-11-06 01:06:43 +00:00
439aca673f Delete missions/Lift2.py 2025-11-06 01:06:28 +00:00
4b7491637d Delete missions/Lift.py 2025-11-06 01:06:20 +00:00
9ca07a36a8 Update missions/Boat.py 2025-11-06 01:06:09 +00:00
6c6b7f1f02 Delete missions/Heavy_lifting_final.py 2025-11-06 01:06:05 +00:00
b97dcf6837 Delete missions/Heavy lifting.py 2025-11-06 01:05:57 +00:00
eea26150f9 Upload files to "missions" 2025-11-06 01:05:24 +00:00
d056255994 Delete missions/Boat.py 2025-11-06 01:04:37 +00:00
5f0ffea7bc Delete missions/Boat_mission.py 2025-11-06 01:04:31 +00:00
9a573c4eb2 Delete missions/Bautism.py 2025-11-06 01:03:46 +00:00
a0a4fa4792 Merge pull request 'Rishi_dev' (#36) from Rishi_dev into dev
Reviewed-on: #36
2025-11-06 01:01:39 +00:00
14bc8d291a Add missions/Hypo.py 2025-11-06 00:58:52 +00:00
b91e701f4c Upload files to "missions"
from risshi ramdom ahhhh repo
2025-11-06 00:03:28 +00:00
debbc4e4d0 Delete missions/Set2.py 2025-11-06 00:03:03 +00:00
0c7633d92d Update missions/M8_5.py 2025-11-04 18:21:26 +00:00
3b81a3ff2b Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-04 02:57:00 +00:00
401033b185 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-04 01:18:44 +00:00
9cdd9886e3 Update codes_for_scrimmage/hazmat/HazmatCodeChanges.py 2025-11-04 01:15:50 +00:00
3a45721812 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-11-04 01:10:02 +00:00
a65ad1470c Update README.md 2025-10-31 16:09:41 +00:00
d1eb92cf25 Merge pull request 'dev' (#35) from dev into main
Reviewed-on: #35
2025-10-31 11:58:01 +00:00
b36a9f3355 Merge pull request 'dev' (#34) from dev into Rishi_dev
Reviewed-on: #34
2025-10-31 11:57:36 +00:00
21e8bd68c2 Merge pull request 'dev' (#33) from dev into Johannes_Dev
Reviewed-on: #33
2025-10-31 11:57:09 +00:00
b4385dcecd Merge pull request 'dev' (#32) from dev into atharv-dev
Reviewed-on: #32
2025-10-31 11:56:39 +00:00
ce23d9586a Merge pull request 'dev' (#31) from dev into ayaan_dev
Reviewed-on: #31
2025-10-31 11:56:16 +00:00
7e1d310e24 New rishi code 2025-10-31 00:29:07 +00:00
37b025088f Merge pull request 'dev' (#30) from dev into Vickram_dev_
Reviewed-on: #30
2025-10-31 00:27:53 +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
12f3d97a9e Merge pull request 'Update missions/tip the scale.py' (#25) from ayaan_dev into dev
Reviewed-on: #25
2025-10-23 15:49:51 +00:00
99aa81a68c Merge pull request 'arcmyx-dev' (#26) from arcmyx-dev into dev
Reviewed-on: #26
2025-10-23 15:49:44 +00:00
acfe0e622e Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
This is the new version of Hazmat Code with the colors. Check to see if your color is different. Only Run2 is different, it was white, now violet.
2025-10-23 02:30:26 +00:00
4ad60502b9 Add codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-23 02:14:42 +00:00
9e0c82b26b Update missions/tip the scale.py 2025-10-23 00:52:26 +00:00
819b222610 Update codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:38:23 +00:00
a16d5deb92 Update codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:35:38 +00:00
30bc22a457 Delete codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:34:40 +00:00
1cb08a0c32 Update codes_for_scrimmage/hazmat/hazmat_main.py
Adding Rishi/Vickram + Adi Mission's
2025-10-23 00:34:14 +00:00
11acca0744 Add codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:33:01 +00:00
68aff887da Update codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:29:22 +00:00
1f2a467b9b Update codes_for_scrimmage/hazmat/Heavy_lifting_final.py 2025-10-23 00:28:52 +00:00
b3b0590bb9 Merge pull request 'Organize mission codes for scrimmage. Fixed some coolor detection issues' (#22) from add-folder-structure-for-scrimmage into dev
Reviewed-on: #22
2025-10-22 18:55:29 +00:00
d8f1d47882 Organize mission codes for scrimmage. Fixed some coolor detection issues 2025-10-22 12:37:05 -05:00
e0061dc672 Merge pull request 'dev' (#21) from Johannes/Johannes-dev:dev into dev
Reviewed-on: #21
2025-10-22 00:15:37 +00:00
4496396d0b Update missions/M8_5.py 2025-10-22 00:15:11 +00:00
3ec1aafbeb Update missions/M8_5.py 2025-10-22 00:07:04 +00:00
6c9efe26f9 Update missions/Heavy_lifting_final.py 2025-10-22 00:05:00 +00:00
cf1f8a1995 Update missions/Send_Over_Final.py 2025-10-22 00:04:16 +00:00
2567e8b8d7 Add missions/Send_Over_Final.py 2025-10-21 23:57:13 +00:00
cb79ecbb95 Add missions/Heavy_lifting_final.py 2025-10-21 23:54:55 +00:00
51d7255cd0 Add HEAVY_LIFTING_UPD 2025-10-20 00:48:18 +00:00
f69c61e796 Add missions/Sand_mission.py 2025-10-17 20:52:24 +00:00
8061eb71d5 Add missions/Boat_mission.py 2025-10-17 20:51:55 +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
95c3491b44 Update missions/M8_5.py 2025-10-04 00:53:13 +00:00
47c89cba0a Add missions/Lift2.py 2025-10-03 21:26:35 +00:00
b8620e37aa Update missions/Lift.py 2025-09-26 21:46:12 +00:00
3527ee5600 Add missions/Lift
Parthicc made this originally.
2025-09-26 21:45:42 +00:00
a20bf2255b Update missions/Send_Over.py 2025-09-20 22:52:04 +00:00
9cff4d8626 Update missions/Send_Over.py 2025-09-19 22:00:28 +00: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
37 changed files with 2850 additions and 475 deletions

View File

@@ -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.

View File

@@ -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](https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/releases) 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```
Then use the master file.
2. **Connect to Robot**
- Pair your robot via Bluetooth in Pybricks
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.
3. **Upload to Robot**
- Click "Download and Run" or send the program to the robot
- 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)
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>
---

View File

@@ -0,0 +1,228 @@
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(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(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())

View File

@@ -17,21 +17,17 @@ 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.straight(200)
await drive_base.turn(-20)
await drive_base.straight(525)
await drive_base.turn(60)
await drive_base.straight(536)
await drive_base.turn(60, Stop.HOLD)
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 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(-525)
await drive_base.turn(20)
await drive_base.straight(-200)
await drive_base.straight(-670)
run_task(main())

View File

@@ -0,0 +1,49 @@
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():
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)
run_task(main())

View File

@@ -12,6 +12,7 @@ right_motor = Motor(Port.B)
left_arm = Motor(Port.C, Direction.COUNTERCLOCKWISE)
right_arm = Motor(Port.D)
lazer_ranger = UltrasonicSensor(Port.E)
drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180)
@@ -19,13 +20,27 @@ drive_base.settings(600,500,300,200)
drive_base.use_gyro(True)
async def main():
await drive_base.straight(915)
await drive_base.turn(-90)
await drive_base.straight(60)
#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 drive_base.straight(-90)
await drive_base.turn(80)
await drive_base.straight(2000)
#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)
run_task(main())

View File

@@ -1,27 +1,55 @@
# Stuff from 10/15/2025
# Atharv trying with no avail to add more colors to the color sensor logic 😭😭😭😭😭😭😭
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor
from pybricks.parameters import Port, Stop, Color, Direction
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.tools import wait, StopWatch, multitask, run_task
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)#, Direction.COUNTERCLOCKWISE)
left_arm = Motor(Port.C)
right_arm = Motor(Port.D)
drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180)
drive_base.settings(550,700,100,100)
drive_base.use_gyro(True)
lazer_ranger = UltrasonicSensor(Port.E)
color_sensor = ColorSensor(Port.F)
Color.ORANGE = Color(28, 61, 61)
Color.BLUE = Color(230,100,100)
Color.YELLOW = Color(37, 85, 95)
Color.PURPLE = Color(326, 60, 87)
color_sensor.detectable_colors([Color.ORANGE, Color.BLUE, Color.GREEN, Color.WHITE, Color.RED, Color.YELLOW, Color.NONE, Color.PURPLE])
# 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)
# Color Settings
# https://docs.pybricks.com/en/latest/parameters/color.html
print("Default Detected Colors:", color_sensor.detectable_colors())
# Custom color Hue, Saturation, Brightness value for Lego bricks
Color.MAGENTA = Color(300,100,100)
Color.VIOLET = Color(277,68,32)
Color.BLUE = Color(240,100,100)
Color.CYAN = Color(180,100,100)
LEGO_BRICKS_COLOR = [
Color.BLUE,
Color.GREEN,
Color.WHITE,
Color.RED,
Color.YELLOW,
Color.MAGENTA,
Color.VIOLET,
Color.NONE
]
#Update Detectable colors
color_sensor.detectable_colors(LEGO_BRICKS_COLOR)
print("Updated Detected Colors:", color_sensor.detectable_colors())
hub.speaker.volume(50) # Set the volume of the speaker
color_sensor.detectable_colors()
# Celebration sound types
class CelebrationSound:
VICTORY_FANFARE = 0
@@ -152,124 +180,174 @@ async def celebrate_mission_complete(sound_type=CelebrationSound.SUCCESS_CHIME):
hub.light.off()
async def Run1():
left_arm.run_angle(1000, -300)
WALL_DISTANCE = 200 # mm
async def drive_forward():
"""Drive forward continuously using DriveBase."""
#await drive_base.straight(5000)
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
print(f"Wall detected at {distance}mm!")
break
# Small delay to prevent overwhelming the sensor
await wait(50)
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(-145)
await left_arm.run_angle(1000,450)
await drive_base.straight(10)
await drive_base.turn(35)
await drive_base.straight(-700)
await drive_base.straight(-600)
async def Run2():
await drive_base.straight(200)
async def Run2(): #From Heavy_lifting_final.py
await drive_base.straight(200)
await drive_base.turn(-20)
await drive_base.straight(525)
await drive_base.turn(60)
await drive_base.straight(536)
await drive_base.turn(60, Stop.HOLD)
await drive_base.straight(30)
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.straight(-100)
await drive_base.turn(-100)
await drive_base.straight(-750)
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():
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
await drive_base.turn(40) # turning right
await left_arm.run_angle(-410,-400) #lift a little bit
await drive_base.turn(-46.5) #ma din din din dun
await drive_base.turn(-40)
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)
await drive_base.straight(60)
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)
await drive_base.straight(2000)
await drive_base.straight(500)
# while True:
# distance_mm = await lazer_ranger.distance()
# print('distancing...',distance_mm)
async def Run4():
# 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 drive_base.straight(519)
await arm_motor_left.run_angle(-10000, 300)
await arm_motor_left.run_angle(10000, 600)
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 arm_motor.run_angle(3000, 3000)
await right_arm.run_angle(3000, 3000)
await drive_base.straight(-150)
await drive_base.turn(135)
await drive_base.straight(50)
await arm_motor.run_angle(10000, -3000)
await drive_base.straight(25)
await right_arm.run_angle(10000, -3000)
await drive_base.straight(-100)
await drive_base.turn(-54)
await arm_motor.run_angle(10000, -3000)
await drive_base.turn(-55)
await right_arm.run_angle(10000, -3000)
await drive_base.straight(250)
await drive_base.turn(-5)
await arm_motor.run_angle(10000, 7000)
await right_arm.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(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)
await arm_motor.run_angle(10000, 7000)
async def Run5():
#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(-350)
async def Run6():
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)
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 left_arm.run_angle(300,-400)
await drive_base.turn(46.5)
await drive_base.turn(-40)
await drive_base.straight(900)
async def main():
while True:
#await celebrate_mission_complete(CelebrationSound.LEVEL_UP)
color_reflected_percent = await color_sensor.reflection()
print(color_reflected_percent)
color_detected = await color_sensor.color()
print(f'Detected color: {color_detected.h}, {color_detected.s}, {color_detected.v}')
if color_reflected_percent > 1:
if color_reflected_percent > 0: # Make sure we actually have color reflections before checking for color
color_detected = await color_sensor.color() # Moved this inside the if clause
print(f'Detected color:{color_detected} : {color_detected.h}, {color_detected.s}, {color_detected.v}')
if color_detected == Color.GREEN:
print('Running Mission 1')
await Run1()
@@ -278,26 +356,29 @@ async def main():
print('Running Mission 2')
await Run2()
#await celebrate_mission_complete(CelebrationSound.RICKROLL_INSPIRED)
elif color_detected == Color.YELLOW:
elif color_detected == Color.RED:
print('Running Mission 3')
await Run3()
#await celebrate_mission_complete(CelebrationSound.SUCCESS_CHIME )
elif color_detected == Color.BLUE:
elif color_detected == Color.YELLOW:
print('Running Mission 4')
await Run4()
#await celebrate_mission_complete(CelebrationSound.POWER_UP)
elif color_detected == Color.ORANGE:
elif color_detected == Color.BLUE:
print('Running Mission 5')
await Run5()
#await celebrate_mission_complete(CelebrationSound.LEVEL_UP)
elif color_detected == Color.PURPLE:
print('Running Mission 6 (this is ayaan\'s code)')
elif color_detected == Color.VIOLET:
print('Running Mission 6')
await Run6()
#await celebrate_mission_complete(CelebrationSound.LEVEL_UP)
else:
hub.light.off()
left_motor.stop()
right_motor.stop()
color_detected = Color.NONE
else:
color_detected = Color.NONE
await wait(1000) #prevent loop from iterating fast
# Main execution loop
run_task(main())

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

View File

@@ -10,25 +10,33 @@ 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)
drive_base.settings(300,1000,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)
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)
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 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())

View File

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

View File

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

View File

@@ -0,0 +1,383 @@
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)
#return with arc
await drive_base.straight(-600)
await drive_base.arc(10,-47, None)
await drive_base.straight(-400,Stop.COAST_SMART)
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()
await drive_base.straight(640)
await drive_base.straight(-150)
await drive_base.turn(-8)
await left_arm.run_angle(500, -520)
await drive_base.straight(300)
await wait(50)
await left_arm.run_angle(500, 700)
#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_7')
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())

View File

@@ -0,0 +1,513 @@
#Important Notice: All codes should be tested while the robot's battery is at 100%, and all updates must be made when the robot is at full charge.
import umath
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, [[12,36]],[[12,20,24]] ) # 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)
"""
Debugging helps
"""
DEBUG = 1 # Enable when you want to show logs
# Example conversion function (adjust min/max values as needed for your hub)
async def get_battery_percentage(voltage_mV:float):
max_voltage = 8400.0 # max battery level https://assets.education.lego.com/v3/assets/blt293eea581807678a/bltb87f4ba8db36994a/5f8801b918967612e58a69a6/techspecs_techniclargehubrechargeablebattery.pdf?locale=en-us
min_voltage = 5000.0 # min battery level
percentage = ((float(voltage_mV) - min_voltage) / float(max_voltage - min_voltage) )* 100
return max(0, min(100, percentage)) # Ensure percentage is between 0 and 100
async def wait_button_release():
"""Wait for all buttons to be released"""
while hub.buttons.pressed():
await wait(500)
await wait(1000) # Debounce delay
WALL_DISTANCE = 200 # mm
async def drive_forward():
"""Drive forward continuously using DriveBase."""
drive_base.drive(1000,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)
# Use this to set default
def set_default_speed():
drive_base.settings(600, 500, 300, 200)
# Use this to change drive base movement
def set_speed(straight_speed, st_acc, turn_speed, turn_acc):
drive_base.settings(straight_speed, st_acc, turn_speed, turn_acc)
"""
Run#1
- Removed forge and who lived here part
- What's on sale + Silo
- Green Key
"""
async def Run1():
# Fast approach to near-stall position
await left_arm.run_angle(2000, 180) # Fast movement upward
# Gentle stall detection (shorter distance = faster)
await left_arm.run_until_stalled(1500, duty_limit=15)
left_arm.reset_angle(0)
print(f"Initial left arm angle : {left_arm.angle()}")
await solve_whats_on_sale_v2()
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)
#Automated inconsistency
#left_arm.run_angle(500,-119.5)
left_arm.run_target(500,-121.5, Stop.HOLD)
print(f"Position left arm angle : {left_arm.angle()}")
await drive_base.straight(180)
await drive_base.turn(-40)
await drive_base.straight(335)
await left_arm.run_angle(500,-20)
await drive_base.straight(-100)
await drive_base.straight(60)
await left_arm.run_angle(500,50)
await drive_base.straight(-100)
left_arm.run_angle(500,-50)
await drive_base.turn(-20)
left_arm.run_angle(1000,180)
await drive_base.turn(15)
async def solve_whats_on_sale_v2():
right_arm.run_angle(500,30)
# Bring down left arm to position
await left_arm.run_angle(2000, -120)
#await left_arm.run_until_stalled(-500,duty_limit=15)
print(f"Position left arm angle : {left_arm.angle()}")
left_arm.reset_angle(0)
await drive_base.straight(180)
await drive_base.turn(-40)
await drive_base.straight(335)
await left_arm.run_angle(500,-20)
await drive_base.straight(-100)
await drive_base.straight(60)
await left_arm.run_angle(500,50)
await drive_base.straight(-100)
left_arm.run_angle(500,-50)
await drive_base.turn(-20)
left_arm.run_angle(1000,180)
await drive_base.turn(15)
async def solve_silo():
await drive_base.straight(-80)
await drive_base.turn(42)
await drive_base.straight(95)
SPEED = 10000 # speed in degree per second
SWING_ANGLE = 60 # the angle!
REBOUND_ADJ = 20
# Repeat this motion 4 times
for _ in range(4):
await right_arm.run_angle(SPEED,SWING_ANGLE, Stop.HOLD) # Swing up
await right_arm.run_angle(SPEED,(-1 * SWING_ANGLE),Stop.HOLD) # Swing down
right_arm.run_angle(4000,60, 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(2000,-160) # arm down
await wait(100)
await drive_base.turn(30) # turn right a little bit
await right_arm.run_angle(2000,160) #arm up
await drive_base.turn(-30) #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(-40)
await drive_base.straight(50)
right_arm.run_angle(1000,-160)
await drive_base.turn(-60)
await right_arm.run_angle(2000,160)
"""
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(870)
await drive_base.turn(-90,Stop.HOLD)
await drive_base.straight(45)
#Solve
drive_base.turn(-10)
await left_arm.run_angle(10000,-750)
await drive_base.straight(-130)
await drive_base.turn(67)
async def solve_tip_the_scale():
await drive_base.straight(-200)
await drive_base.straight(60)
await drive_base.turn(22)
"""
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():
# Getting the sand down
await drive_base.straight(550)
await right_arm.run_angle(300,100)
await drive_base.straight(-75)
await right_arm.run_angle(300, -100)
# Shoving the boat into place
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, -300)
await drive_base.straight(120)
await drive_base.turn(5)
# Lift up statue
await left_arm.run_angle(500, 100, Stop.HOLD)
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,200)
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)
async def Run10(): # experimental map reveal attachment
await drive_base.straight(600)
drive_base.settings(150, 750, 50, 500)
await drive_base.turn(-30)
await drive_base.straight(260)
left_arm.run_angle(300,218)
set_default_speed()
await drive_base.straight(-80)
await drive_base.turn(30)
await drive_base.straight(-300)
await drive_base.straight(400)
#await left_arm.run_angle(50,120)
await drive_base.straight(-200)
await left_arm.run_angle(300,-215)
await drive_base.straight(-600)
drive_base.stop()
async def Run11(): # experimental surface brushing attachment
await drive_base.straight(600)
drive_base.settings(150, 750, 50, 500)
await drive_base.turn(-30)
await drive_base.straight(250)
#left_arm.run_angle(300,218)
set_default_speed()
await drive_base.straight(-100)
await drive_base.turn(30)
await drive_base.straight(-190)
#await drive_base.straight(400)
#await left_arm.run_angle(50,120)
#await drive_base.straight(-200)
await left_arm.run_angle(300,-300)
await drive_base.straight(-600)
drive_base.stop()
async def Run12():
await drive_base.straight(900)
await drive_base.turn(83)
await left_arm.run_angle(3000, -300)
await right_arm.run_angle(1100, -180)
drive_base.settings(150, 50, 50, 50)
await drive_base.straight(120)
left_arm.reset_angle(0)
await left_arm.run_angle(50, 50)
await right_arm.run_angle(50, 90)
await drive_base.straight(-100)
drive_base.settings(950, 750, 750, 750)
await drive_base.turn(110)
await drive_base.straight(1000)
# 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:
pressed = hub.buttons.pressed()
h, s, v = await color_sensor.hsv()
reflected = await color_sensor.reflection()
color = detect_color(h, s, v, reflected)
if DEBUG :
#print(color_sensor.color())
#print(h,s,v)
#print(color)
print(f"button pressed: {pressed}")
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 Run11()
elif color == "Light_Blue":
print("Running Mission 2_1")
await Run12()
else:
print(f"Unknown color detected (Hue: {h}, Sat: {s}, Val: {v})")
#pass
# Show battery % for debugging
if Button.BLUETOOTH in pressed: # using bluetooth button here since away from color sensor
# Get the battery voltage in millivolts (mV)
battery_voltage_mV = hub.battery.voltage()
# Use the function with your voltage reading
percentage = await get_battery_percentage(float(battery_voltage_mV))
if DEBUG:
print(f"Battery voltage: {battery_voltage_mV} mV")
print(f"Battery level: {percentage:.3f}%")
print("FLL Robot System Ready!")
await hub.display.text(f"{percentage:.0f}")
break
elif pressed == None:
continue
await wait(10)
# Run the main function
run_task(main())

View File

@@ -0,0 +1,16 @@
await drive_base.straight(600)
drive_base.settings(150, 750, 50, 500)
await drive_base.turn(-30)
await drive_base.straight(260)
left_arm.run_angle(300,218)
set_default_speed()
await drive_base.straight(-80)
await drive_base.turn(30)
await drive_base.straight(-300)
await drive_base.straight(400)
#await left_arm.run_angle(50,120)
await drive_base.straight(-200)
await left_arm.run_angle(300,-215)
await drive_base.straight(-600)
drive_base.stop()

View File

@@ -0,0 +1,16 @@
await drive_base.straight(600)
drive_base.settings(150, 750, 50, 500)
await drive_base.turn(-30)
await drive_base.straight(250)
#left_arm.run_angle(300,218)
set_default_speed()
await drive_base.straight(-80)
await drive_base.turn(30)
await drive_base.straight(-180)
#await drive_base.straight(400)
#await left_arm.run_angle(50,120)
#await drive_base.straight(-200)
await left_arm.run_angle(300,-300)
await drive_base.straight(-600)
drive_base.stop()

View File

@@ -0,0 +1,513 @@
#Important Notice: All codes should be tested while the robot's battery is at 100%, and all updates must be made when the robot is at full charge.
import umath
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, [[12,36]],[[12,20,24]] ) # 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)
"""
Debugging helps :)
"""
DEBUG = 0 # Enable when you want to show logs
# Example conversion function (adjust min/max values as needed for your hub)
async def get_battery_percentage(voltage_mV:float):
max_voltage = 8400.0 # max battery level https://assets.education.lego.com/v3/assets/blt293eea581807678a/bltb87f4ba8db36994a/5f8801b918967612e58a69a6/techspecs_techniclargehubrechargeablebattery.pdf?locale=en-us
min_voltage = 5000.0 # min battery level
percentage = ((float(voltage_mV) - min_voltage) / float(max_voltage - min_voltage) )* 100
return max(0, min(100, percentage)) # Ensure percentage is between 0 and 100
async def wait_button_release():
"""Wait for all buttons to be released"""
while hub.buttons.pressed():
await wait(500)
await wait(1000) # Debounce delay
WALL_DISTANCE = 200 # mm
async def drive_forward():
"""Drive forward continuously using DriveBase."""
drive_base.drive(1000,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)
# Use this to set default
def set_default_speed():
drive_base.settings(600, 500, 300, 200)
# Use this to change drive base movement
def set_speed(straight_speed, st_acc, turn_speed, turn_acc):
drive_base.settings(straight_speed, st_acc, turn_speed, turn_acc)
"""
Run#1
- Removed forge and who lived here part
- What's on sale + Silo
- Green Key
"""
async def Run1():
# Fast approach to near-stall position
await left_arm.run_angle(2000, -190) # Fast movement downward
# Gentle stall detection (shorter distance = faster)
await left_arm.run_until_stalled(-1500, duty_limit=15)
left_arm.reset_angle(0)
print(f"Initial left arm angle : {left_arm.angle()}")
await solve_whats_on_sale_v3()
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_v3():
right_arm.run_angle(500,30)
#Automated inconsistency
#left_arm.run_angle(500,-119.5)
left_arm.run_target(500,70, Stop.HOLD)
print(f"Position left arm angle : {left_arm.angle()}")
await drive_base.straight(180)
await drive_base.turn(-40)
await drive_base.straight(335)
await left_arm.run_angle(500,-20)
await drive_base.straight(-100)
await drive_base.straight(60)
await left_arm.run_angle(500,50)
await drive_base.straight(-100)
left_arm.run_angle(500,-50)
await drive_base.turn(-20)
left_arm.run_angle(1000,180)
await drive_base.turn(15)
async def solve_whats_on_sale_v2():
right_arm.run_angle(500,30)
# Bring down left arm to position
await left_arm.run_angle(2000, -120)
#await left_arm.run_until_stalled(-500,duty_limit=15)
print(f"Position left arm angle : {left_arm.angle()}")
left_arm.reset_angle(0)
await drive_base.straight(180)
await drive_base.turn(-40)
await drive_base.straight(335)
await left_arm.run_angle(500,-20)
await drive_base.straight(-100)
await drive_base.straight(60)
await left_arm.run_angle(500,50)
await drive_base.straight(-100)
left_arm.run_angle(500,-50)
await drive_base.turn(-20)
left_arm.run_angle(1000,180)
await drive_base.turn(15)
async def solve_silo():
await drive_base.straight(-80)
await drive_base.turn(42)
await drive_base.straight(95)
SPEED = 10000 # speed in degree per second
SWING_ANGLE = 60 # the angle!
REBOUND_ADJ = 20
# Repeat this motion 4 times
for _ in range(4):
await right_arm.run_angle(SPEED,SWING_ANGLE, Stop.HOLD) # Swing up
await right_arm.run_angle(SPEED,(-1 * SWING_ANGLE),Stop.HOLD) # Swing down
right_arm.run_angle(4000,60, 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(2000,-160) # arm down
await wait(100)
await drive_base.turn(30) # turn right a little bit
await right_arm.run_angle(2000,160) #arm up
await drive_base.turn(-30) #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(-40)
await drive_base.straight(50)
right_arm.run_angle(1000,-160)
await drive_base.turn(-60)
await right_arm.run_angle(2000,160)
"""
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(870)
await drive_base.turn(-90,Stop.HOLD)
await drive_base.straight(45)
#Solve
drive_base.turn(-10)
await left_arm.run_angle(10000,-750)
await drive_base.straight(-130)
await drive_base.turn(67)
async def solve_tip_the_scale():
await drive_base.straight(-200)
await drive_base.straight(60)
await drive_base.turn(22)
"""
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():
# Getting the sand down
await drive_base.straight(550)
await right_arm.run_angle(300,100)
await drive_base.straight(-75)
await right_arm.run_angle(300, -100)
# Shoving the boat into place
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, -300)
await drive_base.straight(120)
await drive_base.turn(5)
# Lift up statue
await left_arm.run_angle(500, 100, Stop.HOLD)
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,200)
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)
async def Run10(): # experimental map reveal attachment
await drive_base.straight(600)
drive_base.settings(150, 750, 50, 500)
await drive_base.turn(-30)
await drive_base.straight(260)
left_arm.run_angle(300,218)
set_default_speed()
await drive_base.straight(-80)
await drive_base.turn(30)
await drive_base.straight(-300)
await drive_base.straight(400)
#await left_arm.run_angle(50,120)
await drive_base.straight(-200)
await left_arm.run_angle(300,-215)
await drive_base.straight(-600)
drive_base.stop()
async def Run11(): # experimental surface brushing attachment
await drive_base.straight(600)
drive_base.settings(150, 750, 50, 500)
await drive_base.turn(-30)
await drive_base.straight(250)
#left_arm.run_angle(300,218)
set_default_speed()
await drive_base.straight(-230)
await drive_base.turn(30)
#await drive_base.straight(400)
#await left_arm.run_angle(50,120)
#await drive_base.straight(-200)
#await drive_base.straight(-80)
#await left_arm.run_angle(300, -75)
await drive_base.arc(-650,None,-800)
drive_base.stop()
async def Run12():
await drive_base.straight(900)
await drive_base.turn(83)
await left_arm.run_angle(3000, -300)
await right_arm.run_angle(1100, -180)
drive_base.settings(150, 50, 50, 50)
await drive_base.straight(120)
left_arm.reset_angle(0)
await left_arm.run_angle(50, 50)
await right_arm.run_angle(50, 90)
await drive_base.straight(-100)
drive_base.settings(950, 750, 750, 750)
await drive_base.turn(110)
await drive_base.straight(1000)
# 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:
pressed = hub.buttons.pressed()
h, s, v = await color_sensor.hsv()
reflected = await color_sensor.reflection()
color = detect_color(h, s, v, reflected)
if DEBUG :
#print(color_sensor.color())
#print(h,s,v)
#print(color)
print(f"button pressed: {pressed}")
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 Run11()
elif color == "Light_Blue":
print("Running Mission 2_1")
await Run12()
else:
print(f"Unknown color detected (Hue: {h}, Sat: {s}, Val: {v})")
#pass
# Show battery % for debugging
if Button.BLUETOOTH in pressed: # using bluetooth button here since away from color sensor
# Get the battery voltage in millivolts (mV)
battery_voltage_mV = hub.battery.voltage()
# Use the function with your voltage reading
percentage = await get_battery_percentage(float(battery_voltage_mV))
if DEBUG:
print(f"Battery voltage: {battery_voltage_mV} mV")
print(f"Battery level: {percentage:.3f}%")
print("FLL Robot System Ready!")
await hub.display.text(f"{percentage:.0f}")
break
elif pressed == None:
continue
await wait(10)
# Run the main function
run_task(main())

View File

@@ -1,40 +0,0 @@
# config.py - Robot configuration shared across all modules
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor
from pybricks.parameters import Port
# Initialize hub
hub = PrimeHub()
# Robot hardware configuration
ROBOT_CONFIG = {
# Drive motors
'left_motor': Motor(Port.A),
'right_motor': Motor(Port.B),
# Attachment motors
'attachment_motor': Motor(Port.C),
'lift_motor': Motor(Port.D),
# Sensors
#'color_left': ColorSensor(Port.E),
'color_back': ColorSensor(Port.F),
'ultrasonic': UltrasonicSensor(Port.E),
# Hub reference
'hub': hub
}
# Speed and distance constants
SPEEDS = {
'FAST': 400,
'NORMAL': 250,
'SLOW': 100,
'PRECISE': 50
}
DISTANCES = {
'TILE_SIZE': 300, # mm per field tile
'ROBOT_LENGTH': 180, # mm
'ROBOT_WIDTH': 140 # mm
}

View File

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

View File

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

View File

@@ -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)
right_arm.run_angle(1000,450)
left_arm.run_angle(500,-90)
await drive_base.straight(200)
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(-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())

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

View File

@@ -0,0 +1,59 @@
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)
lazer_ranger = UltrasonicSensor(Port.E)
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)
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():
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()
)
run_task(main())

View File

@@ -1,50 +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, 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)
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)
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)
async def main():
await drive_base.straight(519)
await arm_motor_left.run_angle(-10000, 300)
await arm_motor_left.run_angle(10000, 600)
await drive_base.straight(160)
await drive_base.turn(-30)
await drive_base.straight(50)
await arm_motor.run_angle(3000, 3000)
await drive_base.straight(-150)
await drive_base.turn(135)
await drive_base.straight(50)
await arm_motor.run_angle(10000, -3000)
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)
run_task(main())

View File

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

View File

@@ -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)
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.turn(-55)
await drive_base.straight(900)
await drive_base.turn(92.5)
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 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())
await drive_base.straight(-100)
await drive_base.turn(90)
await drive_base.straight(800)
drive_base.brake()
run_task(main())

View File

@@ -1,4 +1,3 @@
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor
from pybricks.parameters import Port, Stop, Color, Direction

View File

@@ -1,4 +1,3 @@
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor
from pybricks.parameters import Port, Stop, Color, Direction

View File

@@ -1,27 +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 run_task, multitask
from pybricks.tools import wait, StopWatch
from pybricks.tools import run_task,multitask
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, Direction.COUNTERCLOCKWISE)
left_arm = Motor(Port.C)
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)
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)
first_run = True
WALL_DISTANCE = 200 # mm
async def main():
await drive_base.straight(750)
await drive_base.straight(-650)
run_task(main())
# Your code goes here
run_task(main())

View File

@@ -1,41 +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
hub = PrimeHub()
# Robot hardware configurationROBOT_CONFIG = { # Drive motors 'left_motor': Motor(Port.A), 'right_motor': Motor(Port.B), # Attachment motors 'attachment_motor': Motor(Port.C), 'lift_motor': Motor(Port.D), # Sensors 'color_left': ColorSensor(Port.E), 'color_right': ColorSensor(Port.F), 'ultrasonic': UltrasonicSensor(Port.S1), # Hub reference 'hub': hub}# Speed and distance constantsSPEEDS = { 'FAST': 400, 'NORMAL': 250, 'SLOW': 100, 'PRECISE': 50}DISTANCES = { 'TILE_SIZE': 300, # mm per field tile 'ROBOT_LENGTH': 180, # mm 'ROBOT_WIDTH': 140 # mm}
def mission_run_1():
print('Running missions in Run 1')
def mission_run_2():
print('Running missions in Run 2')
def mission_run_3():
print('Running missions in Run 3')
# In main.py - sensor-based navigation
def main(self):
"""Use color sensor to select runs"""
print("Place colored object in front of sensor:")
print("RED=Run1, GREEN=Run2, BLUE=Run3, YELLOW=Test")
while True:
color = ROBOT_CONFIG['color_left'].color()
if color == Color.RED:
mission_run_1()
break
elif color == Color.GREEN:
mission_run_2()
break
elif color == Color.BLUE:
mission_run_3()
break
elif color == Color.YELLOW:
self.test_mode()
break
wait(1000)
main()

View File

@@ -1,13 +0,0 @@
#Speed and distance constants
SPEEDS = {
'FAST': 400,
'NORMAL': 250,
'SLOW': 100,
'PRECISE': 50
}
DISTANCES = {
'TILE_SIZE': 300, # mm per field tile
'ROBOT_LENGTH': 180, # mm
'ROBOT_WIDTH': 140 # mm
}

View File

@@ -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
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=112)
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)
# Drive forward by 500mm (half a meter).
drive_base.straight(500)
# Turn around clockwise by 180 degrees.
drive_base.turn(180)
# Drive forward again to get back to the start.
drive_base.straight(500)
# Turn around counterclockwise.
drive_base.turn(-180)
arm_motor.run_angle(299,-90, Stop.HOLD)