142 lines
4.9 KiB
Python
142 lines
4.9 KiB
Python
import compLib.CompLib_pb2 as CompLib_pb2
|
|
from compLib.CompLibClient import CompLibClient
|
|
|
|
MOTOR_COUNT = 4
|
|
|
|
|
|
class Motor(object):
|
|
"""Klasse zum Ansteuern der Motoren
|
|
"""
|
|
|
|
@staticmethod
|
|
def power(port: int, percent: float):
|
|
"""Motor auf eine prozentuale Leistung der Höchstgeschwindigkeit einstellen
|
|
|
|
:param port: Port, an welchen der Motor angesteckt ist. 0-3
|
|
:param percent: Prozentsatz der Höchstgeschwindigkeit. zwischen -100 und 100
|
|
:raises: IndexError
|
|
"""
|
|
|
|
if port < 0 or port >= MOTOR_COUNT:
|
|
raise IndexError("Invalid Motor port specified!")
|
|
|
|
if percent < -100 or percent > 100:
|
|
raise IndexError(
|
|
"Invalid Motor speed specified! Speed is between -100 and 100 percent!")
|
|
|
|
request = CompLib_pb2.MotorSetPowerRequest()
|
|
request.header.message_type = request.DESCRIPTOR.full_name
|
|
request.port = port
|
|
request.power = percent
|
|
|
|
CompLibClient.send(request.SerializeToString(), request.ByteSize())
|
|
|
|
@staticmethod
|
|
def multiple_power(*arguments: tuple[int, float]):
|
|
"""Mehrere Motoren auf eine prozentuale Leistung der Höchstgeschwindigkeit einstellen
|
|
|
|
:param arguments: tuple von port, percentage
|
|
:raises: IndexError
|
|
"""
|
|
request = CompLib_pb2.MotorsSetPowerRequest()
|
|
request.header.message_type = request.DESCRIPTOR.full_name
|
|
|
|
for port, percent in arguments:
|
|
if port < 0 or port >= MOTOR_COUNT:
|
|
raise IndexError("Invalid Motor port specified!")
|
|
|
|
if percent < -100 or percent > 100:
|
|
raise IndexError(
|
|
"Invalid Motor speed specified! Speed is between -100 and 100 percent!")
|
|
|
|
inner_request = CompLib_pb2.MotorSetPowerRequest()
|
|
inner_request.port = port
|
|
inner_request.power = percent
|
|
|
|
request.requests.append(inner_request)
|
|
|
|
CompLibClient.send(request.SerializeToString(), request.ByteSize())
|
|
|
|
@staticmethod
|
|
def speed(port: int, speed: float):
|
|
"""Geschwindigkeit des Motors einstellen
|
|
|
|
:param port: Port, an welchen der Motor angesteckt ist. 0-3
|
|
:param speed: Drehzahl, mit der sich ein Motor dreht, in Radianten pro Sekunde (rad/s)
|
|
:raises: IndexError
|
|
"""
|
|
|
|
if port < 0 or port >= MOTOR_COUNT:
|
|
raise IndexError("Invalid Motor port specified!")
|
|
|
|
request = CompLib_pb2.MotorSetSpeedRequest()
|
|
request.header.message_type = request.DESCRIPTOR.full_name
|
|
request.port = port
|
|
request.speed = speed
|
|
|
|
CompLibClient.send(request.SerializeToString(), request.ByteSize())
|
|
|
|
@staticmethod
|
|
def multiple_speed(*arguments: tuple[int, float]):
|
|
"""Geschwindigkeit mehrerer Motoren einstellen
|
|
|
|
:param arguments: tuple von port, Geschwindigkeit in Radianten pro Sekunde (rad/s)
|
|
:raises: IndexError
|
|
"""
|
|
|
|
request = CompLib_pb2.MotorsSetSpeedRequest()
|
|
request.header.message_type = request.DESCRIPTOR.full_name
|
|
|
|
for port, speed in arguments:
|
|
if port < 0 or port >= MOTOR_COUNT:
|
|
raise IndexError("Invalid Motor port specified!")
|
|
|
|
inner_request = CompLib_pb2.MotorSetSpeedRequest()
|
|
inner_request.port = port
|
|
inner_request.speed = speed
|
|
|
|
request.requests.append(inner_request)
|
|
|
|
CompLibClient.send(request.SerializeToString(), request.ByteSize())
|
|
|
|
@staticmethod
|
|
def pulse_width(port: int, percent: float):
|
|
"""Setzen den Pulsbreite eines Motors in Prozent der Periode
|
|
|
|
:param port: Port, an welchen der Motor angesteckt ist. 0-3
|
|
:param percent: Prozent der Periode zwischen -100 und 100
|
|
:raises: IndexError
|
|
"""
|
|
|
|
if port < 0 or port >= MOTOR_COUNT:
|
|
raise IndexError("Invalid Motor port specified!")
|
|
|
|
request = CompLib_pb2.MotorSetPulseWidthRequest()
|
|
request.header.message_type = request.DESCRIPTOR.full_name
|
|
request.port = port
|
|
request.percent = percent
|
|
|
|
CompLibClient.send(request.SerializeToString(), request.ByteSize())
|
|
|
|
@staticmethod
|
|
def multiple_pulse_width(*arguments: tuple[int, float]):
|
|
"""Setzen den Pulsbreite mehrerer Motoren in Prozent der Periode
|
|
|
|
:param arguments: tuple von port, prozent
|
|
:raises: IndexError
|
|
"""
|
|
|
|
request = CompLib_pb2.MotorsSetPulseWidthRequest()
|
|
request.header.message_type = request.DESCRIPTOR.full_name
|
|
|
|
for port, percent in arguments:
|
|
if port < 0 or port >= MOTOR_COUNT:
|
|
raise IndexError("Invalid Motor port specified!")
|
|
|
|
inner_request = CompLib_pb2.MotorSetPulseWidthRequest()
|
|
inner_request.port = port
|
|
inner_request.percent = percent
|
|
|
|
request.requests.append(inner_request)
|
|
|
|
CompLibClient.send(request.SerializeToString(), request.ByteSize())
|