Compare commits
22 Commits
ffd89e5698
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 8441446e44 | |||
| 3efeafc55e | |||
| acbe26eb50 | |||
| 93d17833d1 | |||
| 35b3726f46 | |||
| 148d7a1c43 | |||
| f916a02d5a | |||
| 4a6cfc9974 | |||
| f28ec4994d | |||
| c1856220b1 | |||
| e6a2c24338 | |||
| 2500f3e09b | |||
| 979278d437 | |||
| e02c0a5591 | |||
| 116836b86d | |||
| f58372d166 | |||
| f688ef0cb3 | |||
| 19f735e7e2 | |||
| c2a7775d82 | |||
| 595cfdc6eb | |||
| 9f94a114ae | |||
| 6b6cfa11b4 |
@@ -1,10 +1,10 @@
|
||||
# Team 65266 Lego Dynamics - Pybricks Utils
|
||||
# Team 65266 Lego Dynamics - PYNAMICS - Pybricks Utilities
|
||||
|
||||
A collection of Pybricks utilities to assist in your FLL robot programming with Python. Created by FLL team 65266, Lego Dynamics.
|
||||
|
||||
<img src="https://codes.fll-65266.org/Arcmyx/pynamics-pybricks-utils/raw/branch/arcmyx-dev/pynamics-screenshot.png" alt="Pynamics screenshot" width="670">
|
||||
<img src="https://codes.fll-65266.org/Arcmyx/pynamics-pybricks-utils/raw/branch/main/pynamics-screenshot.png" alt="Pynamics screenshot" width="670">
|
||||
|
||||
How to use this
|
||||
How to use this:
|
||||
|
||||
- Download the repository by clicking on the "Code" tab, clicking the "< > Code" button, then downloading as a ZIP. Additionally, you can also use ```git clone https://codes.fll-65266.org/Arcmyx/pybricks-utils.git```. Unzip the archive and open code.pybricks.com. Then choose which folder you'd like to use, and open each file in pybricks by using the import button. For example, to use the diagnostics tool, simply open each program in the ```diagnostics``` folder into Pybricks. Then, follow the instructions for each utility.
|
||||
|
||||
|
||||
49
diagnostics-old/ColorSensorDiagnostics.py
Normal file
49
diagnostics-old/ColorSensorDiagnostics.py
Normal 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
|
||||
|
||||
hub = PrimeHub()
|
||||
class ColorSensorDiagnostics:
|
||||
def __init__(self):
|
||||
self.colorsensor = None
|
||||
self.port_map = {
|
||||
"A": Port.A,
|
||||
"B": Port.B,
|
||||
"C": Port.C,
|
||||
"D": Port.D,
|
||||
"E": Port.E,
|
||||
"F": Port.F,
|
||||
}
|
||||
def initializeColorSensor(self):
|
||||
valid_ports = {"A", "B", "C", "D", "E", "F"}
|
||||
while True:
|
||||
colorinput = input(
|
||||
"This will test your color sensor.\n"
|
||||
"Enter the port for the color sensor you would like to test (A, B, C, D, E, or F): "
|
||||
).strip().upper()
|
||||
if colorinput not in valid_ports:
|
||||
print("Invalid port. Please enter A-F.")
|
||||
continue
|
||||
try:
|
||||
if self.colorsensor is None:
|
||||
self.colorsensor = ColorSensor(self.port_map[colorinput])
|
||||
print(f"Color Sensor initialized on port {colorinput}.")
|
||||
else:
|
||||
print(f"Reusing existing color sensor on port {colorinput}.")
|
||||
break
|
||||
|
||||
except OSError as e:
|
||||
if e.errno == 16: # EBUSY
|
||||
print(f"Port {colorinput} is already in use. Reusing existing color sensor.")
|
||||
break
|
||||
else:
|
||||
print(f"Error initializing color sensor on port {colorinput}: {e}")
|
||||
print("Make sure a color sensor is actually connected to this port.")
|
||||
self.colorsensor = None
|
||||
self.colorsensor.detectable_colors(Color.RED, Color.YELLOW, Color.GREEN, Color.BLUE, Color.WHITE, Color.NONE)
|
||||
def printOutput(self):
|
||||
while True:
|
||||
print("HSV output:", self.colorsensor.hsv)
|
||||
print("Detected color:", self.colorsensor.color())
|
||||
49
diagnostics-old/DriveBaseDiagnostics.py
Normal file
49
diagnostics-old/DriveBaseDiagnostics.py
Normal file
@@ -0,0 +1,49 @@
|
||||
from pybricks.hubs import PrimeHub
|
||||
from pybricks.pupdevices import Motor
|
||||
from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
|
||||
from pybricks.robotics import DriveBase
|
||||
from pybricks.tools import wait, StopWatch
|
||||
|
||||
from usys import stdin
|
||||
from uselect import poll
|
||||
|
||||
hub = PrimeHub()
|
||||
port_map = {
|
||||
"A": Port.A,
|
||||
"B": Port.B,
|
||||
"C": Port.C,
|
||||
"D": Port.D,
|
||||
"E": Port.E,
|
||||
"F": Port.F,
|
||||
}
|
||||
leftmotorport = input("Enter the left motor port: ")
|
||||
left_motor = Motor(port_map[leftmotorport], Direction.COUNTERCLOCKWISE)
|
||||
rightmotorport = input("Enter the right motor port: ")
|
||||
right_motor = Motor(port_map[rightmotorport],Direction.CLOCKWISE) # Specify default direction
|
||||
|
||||
# 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)
|
||||
# Register the standard input so we can read keyboard presses.
|
||||
keyboard = poll()
|
||||
keyboard.register(stdin)
|
||||
|
||||
while True:
|
||||
# Check if a key has been pressed.
|
||||
if keyboard.poll(0):
|
||||
# Read the key and print it.
|
||||
key = stdin.read(1)
|
||||
print("You pressed:", key)
|
||||
if(key == "W"):
|
||||
print("Insert robot go forward code here")
|
||||
elif(key == "A"):
|
||||
print("Insert robot go left code here")
|
||||
elif(key == "S"):
|
||||
print("Insert robot go backwards code here")
|
||||
elif(key == "D"):
|
||||
print("Insert robot go right code here")
|
||||
else:
|
||||
print("That key doesn't do anything.")
|
||||
33
diagnostics-old/HubDiagnostics.py
Normal file
33
diagnostics-old/HubDiagnostics.py
Normal file
@@ -0,0 +1,33 @@
|
||||
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 import version
|
||||
from OtherFunctions import vprint
|
||||
import usys
|
||||
|
||||
print("Pybricks version information:", version)
|
||||
print("MicroPython information:", usys.implementation)
|
||||
print("MicroPython version:", usys.version)
|
||||
class HubDiagnostics:
|
||||
def __init__(self):
|
||||
self.hub = PrimeHub()
|
||||
self.port_map = {
|
||||
"A": Port.A,
|
||||
"B": Port.B,
|
||||
"C": Port.C,
|
||||
"D": Port.D,
|
||||
"E": Port.E,
|
||||
"F": Port.F,
|
||||
}
|
||||
def testLightSources(self, verbose):
|
||||
v = verbose
|
||||
hub.display.off()
|
||||
for x in range(5):
|
||||
for y in range(5):
|
||||
vprint(f"Turning on pixel at position {x}, {y}...", v)
|
||||
display.pixel(x, y, brightness=100)
|
||||
wait(100)
|
||||
vprint(f"Turning off pixel at position {x}, {y}...", v)
|
||||
display.pixel(x, y, brightness=0)
|
||||
@@ -41,7 +41,7 @@ class MotorDiagnostics:
|
||||
# Stability: penalize deviation relative to desired
|
||||
stability = max(0, 100 - (stdev_speed / desired) * 100)
|
||||
|
||||
# Normalize load: map 10–20 as baseline (≈0%), 200 as max (≈100%)
|
||||
# Normalize load: map 10 to 20 as baseline (around 0%), 200 as max (around 100%)
|
||||
baseline = 15 # midpoint of idle range
|
||||
max_observed = 200 # heavy load/stall
|
||||
normalized_load = max(0, avg_load - baseline)
|
||||
@@ -131,11 +131,11 @@ class MotorDiagnostics:
|
||||
print("\n FINAL MOTOR STATISTICS")
|
||||
final = (test180 + test540 + test1000) / 3
|
||||
print("Final motor health score:", str(final) + "%")
|
||||
if final < 80:
|
||||
if final < 65:
|
||||
print("Your motor is in need of attention. Make sure to clean it regularly and charge the Prime Hub.")
|
||||
elif final < 90:
|
||||
elif final < 85:
|
||||
print("Your motor is in OK condition. Make sure to clean it regularly and charge the Prime Hub.")
|
||||
elif final < 97:
|
||||
elif final < 95:
|
||||
print("Your motor is in great condition!")
|
||||
else:
|
||||
print("Your motor is in AMAZING condition!!!")
|
||||
2
diagnostics-old/OtherFunctions.py
Normal file
2
diagnostics-old/OtherFunctions.py
Normal file
@@ -0,0 +1,2 @@
|
||||
def vprint(string, verbose):
|
||||
print("[LOG (verbose enabled)]", string)
|
||||
Reference in New Issue
Block a user