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,8 +1,8 @@
|
||||
# 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:
|
||||
|
||||
|
||||
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