Add bot driving slower

This commit is contained in:
root 2021-11-12 19:17:14 +00:00
parent b2d025002e
commit c5dd14fb1f
3 changed files with 53 additions and 0 deletions

View file

@ -13,6 +13,7 @@ API_URL_GET_MATERIAL = API_URL + "getMaterial"
API_URL_GET_GARBAGE = API_URL + "getGarbage" API_URL_GET_GARBAGE = API_URL + "getGarbage"
API_URL_GET_LIST_CARGO = API_URL + "listCargo" API_URL_GET_LIST_CARGO = API_URL + "listCargo"
API_URL_GET_CARGO = API_URL + "getCargo/" API_URL_GET_CARGO = API_URL + "getCargo/"
API_URL_GET_ROBOT_STATE = API_URL + "getRobotState"
API_URL_GET_POS = API_URL + "getPos" API_URL_GET_POS = API_URL + "getPos"
API_URL_GET_OP = API_URL + "getOp" API_URL_GET_OP = API_URL + "getOp"
@ -87,6 +88,12 @@ class Seeding:
Logging.get_logger().debug(f"Seeding.get_cargo {result}, status code = {res.status_code}") Logging.get_logger().debug(f"Seeding.get_cargo {result}, status code = {res.status_code}")
return result, res.status_code return result, res.status_code
@staticmethod
def get_robot_state() -> Tuple[Dict, int]:
res = requests.get(API_URL_GET_ROBOT_STATE)
result = json.loads(res.content)
Logging.get_logger().debug(f"Seeding.get_robot_state {result}, status code = {res.status_code}")
return result, res.status_code
class Position: class Position:
"""Datastructure for holding a position """Datastructure for holding a position
@ -209,3 +216,4 @@ class DoubleElim:
response = json.loads(res.content) response = json.loads(res.content)
Logging.get_logger().debug(f"DoubleElim.get_meteoroids = {response}, status code = {res.status_code}") Logging.get_logger().debug(f"DoubleElim.get_meteoroids = {response}, status code = {res.status_code}")
return response, res.status_code return response, res.status_code

View file

@ -10,6 +10,10 @@ MAX_MOTOR_SPEED = 65535
MOTOR_PERCENTAGE_MULT = MAX_MOTOR_SPEED / 100.0 MOTOR_PERCENTAGE_MULT = MAX_MOTOR_SPEED / 100.0
MOTOR_CURVE = [0.0, 0.0, 426.5, 692.0, 842.5, 953.5, 1032.5, 1090.5, 1135.5, 1171.0, 1203.5, 1230.0, 1249.5, 1268.0, 1283.0, 1298.5, 1308.0, 1320.0, 1332.0, 1339.5, 1352.5] MOTOR_CURVE = [0.0, 0.0, 426.5, 692.0, 842.5, 953.5, 1032.5, 1090.5, 1135.5, 1171.0, 1203.5, 1230.0, 1249.5, 1268.0, 1283.0, 1298.5, 1308.0, 1320.0, 1332.0, 1339.5, 1352.5]
SPEED_LOCK = False
SPEED_MULT = 1.0
class MotorMode(IntEnum): class MotorMode(IntEnum):
COAST = 0, COAST = 0,
FORWARD = 1, FORWARD = 1,
@ -29,6 +33,10 @@ class Motor(object):
:param mode: Motor mode. See enum MotorMode for more info :param mode: Motor mode. See enum MotorMode for more info
:raises: IndexError :raises: IndexError
""" """
if SPEED_LOCK:
return
if port <= 0 or port > MOTOR_COUNT: if port <= 0 or port > MOTOR_COUNT:
raise IndexError("Invalid Motor port specified!") raise IndexError("Invalid Motor port specified!")
@ -70,6 +78,7 @@ class Motor(object):
elif percent > 0: elif percent > 0:
mode = MotorMode.FORWARD mode = MotorMode.FORWARD
percent *= SPEED_MULT
pwm = percent * MOTOR_PERCENTAGE_MULT pwm = percent * MOTOR_PERCENTAGE_MULT
Motor.pwm(port, int(pwm), mode) Motor.pwm(port, int(pwm), mode)
@ -172,4 +181,38 @@ class Motor(object):
return Motor.__interpolateSpeed(curve, requiredSpeed) return Motor.__interpolateSpeed(curve, requiredSpeed)
@staticmethod
def robot_state_loop():
import time
from compLib.Api import Seeding
global SPEED_LOCK
global SPEED_MULT
while True:
try:
state, status = Seeding.get_robot_state()
SPEED_MULT = state["speed"] / 100.0
if state["left"] != -1 or state["right"] != -1:
Motor.power(1, state["right"])
Motor.power(4, state["left"])
SPEED_LOCK = True
time.sleep(state["time"])
SPEED_LOCK = False
Motor.power(1, 0)
Motor.power(4, 0)
else:
time.sleep(0.25)
except:
time.sleep(0.25)
pass
@staticmethod
def start_robot_state_loop():
from threading import Thread
robot_state_thread = Thread(target=Motor.robot_state_loop)
robot_state_thread.setDaemon(True)
robot_state_thread.start()
atexit.register(Motor.all_off) atexit.register(Motor.all_off)

View file

@ -29,12 +29,14 @@ if spi_found:
from compLib.Spi import Spi from compLib.Spi import Spi
from compLib.Reset import Reset from compLib.Reset import Reset
from compLib.Encoder import Encoder from compLib.Encoder import Encoder
from compLib.Motor import Motor
import logging import logging
print(f"\033[34mInitializing chipmunk board...\033[0m") print(f"\033[34mInitializing chipmunk board...\033[0m")
Reset.reset_bot() Reset.reset_bot()
Spi.health_check() Spi.health_check()
Spi.start_health_check_loop() Spi.start_health_check_loop()
Motor.start_robot_state_loop()
Encoder.clear_all() Encoder.clear_all()
print(f"\033[34mReady\033[0m\n") print(f"\033[34mReady\033[0m\n")
else: else: