Update utils/MotorDiagnostics.py

This commit is contained in:
2025-12-09 00:03:12 +00:00
parent 5fc9e1f125
commit c92f53ea53

View File

@@ -40,11 +40,18 @@ class MotorDiagnostics:
# Stability: penalize deviation relative to desired
stability = max(0, 100 - (stdev_speed / desired) * 100)
max_speed, max_accel, max_torque = self.testmotor.control.limits()
# Load: penalize load percentage directly
load_pct = (avg_load / max_torque) * 100 if max_torque else 0
# Normalize load: map 1020 as baseline (≈0%), 200 as max (≈100%)
baseline = 15 # midpoint of idle range
max_observed = 200 # heavy load/stall
normalized_load = max(0, avg_load - baseline)
load_pct = min(100, (normalized_load / (max_observed - baseline)) * 100)
load_score = max(0, 100 - load_pct)
# Final score: average of the three
return (accuracy + stability + load_score) / 3
# Final score: average of the three
return (accuracy + stability + load_score) / 3
@@ -58,12 +65,24 @@ class MotorDiagnostics:
"Enter the port for the motor you would like to test (A, B, C, D, E, or F): "
).strip().upper()
if motorinput in valid_ports:
self.testmotor = Motor(self.port_map[motorinput])
print(f"Motor initialized on port {motorinput}.")
break # exit the loop once a valid port is entered
else:
print("Invalid port. Please enter A, B, C, D, or E, or F.")
try:
# Only create a new Motor if we don't already have one
if self.testmotor is None:
self.testmotor = Motor(self.port_map[motorinput])
print(f"Motor initialized on port {motorinput}.")
else:
print(f"Reusing existing motor on port {motorinput}.")
break
except OSError as e:
if e.errno == 16: # EBUSY
print(f"Port {motorinput} is already in use. Reusing existing motor.")
# Do not overwrite self.testmotor here — keep the existing reference
break
else:
print(f"Error initializing motor on port {motorinput}: {e}")
print("Make sure a motor is actually connected to this port.")
self.testmotor = None
def testSpeed(self, speed):
self.testmotor.reset_angle(0)
@@ -109,7 +128,7 @@ class MotorDiagnostics:
test180 = self.testSpeed(180)
test540 = self.testSpeed(540)
test1000 = self.testSpeed(1000)
print("FINAL MOTOR STATISTICS")
print("\n FINAL MOTOR STATISTICS")
final = (test180 + test540 + test1000) / 3
print("Final motor health score:", str(final) + "%")
if final < 80:
@@ -120,4 +139,4 @@ class MotorDiagnostics:
print("Your motor is in great condition!")
else:
print("Your motor is in AMAZING condition!!!")
self.testmotor.stop()