From a968a4ce9712cbc983895214aef23ed769a679e4 Mon Sep 17 00:00:00 2001 From: Piv <18462828+Piv200@users.noreply.github.com> Date: Thu, 14 Nov 2019 20:48:46 +1030 Subject: [PATCH] Fix Motor Server and python controller --- MotorControl/MotorServer.py | 31 ++++++++++++-------------- MotorControl/PythonRemoteController.py | 9 ++++---- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/MotorControl/MotorServer.py b/MotorControl/MotorServer.py index fbceb20..7e0970f 100755 --- a/MotorControl/MotorServer.py +++ b/MotorControl/MotorServer.py @@ -3,6 +3,7 @@ from threading import Timer, Thread from gpiozero import Servo from concurrent import futures +import time import grpc @@ -11,14 +12,9 @@ import car.MotorControl.motorService_pb2_grpc as motorService_pb2_grpc from MotorControl.gpiozero.motor_session import Motor servo_pin = 18 -timeout_length = 3 - -motor = Motor() -servo = Servo(servo_pin) class MotorServicer(motorService_pb2_grpc.CarControlServicer): - def __init__(self): - global motor, servo + def __init__(self, motor, servo): self.motor = motor self.servo = servo self._timer = None @@ -29,15 +25,16 @@ class MotorServicer(motorService_pb2_grpc.CarControlServicer): # be sending values... throttleFailed = False for throttleRequest in request_iterator: - print('Setting throttle to: ' + throttleRequest.throttle) - self.set_timeout(timeout_length) + print('Setting throttle to: ' + str(throttleRequest.throttle)) + self.set_timeout(3) throttleFailed = self.motor.set_throttle(throttleRequest.throttle) - if throttleFailed: + if not throttleFailed: break return motorService_pb2.ThrottleResponse(throttleSet = throttleFailed) def SetSteering(self, request, context): # TODO: Fix this to use the motor object as well to check for bounds. + print('Setting steering to: ' + str(request.steering)) self.servo.value = request.steering return motorService_pb2.SteeringResponse(steeringSet = True) @@ -59,15 +56,15 @@ class MotorServicer(motorService_pb2_grpc.CarControlServicer): def start_server(self): server = grpc.server(futures.ThreadPoolExecutor(max_workers=8)) - motorService_pb2_grpc.add_CarControlServicer_to_server(MotorServicer(), server) + motorService_pb2_grpc.add_CarControlServicer_to_server(self, server) server.add_insecure_port('[::]:50051') server.start() + while True: + time.sleep(60*60) -servicer = MotorServicer() -servicer.start_server() +motor = Motor() +servo = Servo(servo_pin) +servicer = MotorServicer(motor, servo) -run = True -while run: - inp = input('Please press q to stop the server') - if inp == 'q' or inp == 'Q': - run = False +service_thread = Thread(target=servicer.start_server) +service_thread.start() diff --git a/MotorControl/PythonRemoteController.py b/MotorControl/PythonRemoteController.py index 4777853..4b2a5af 100644 --- a/MotorControl/PythonRemoteController.py +++ b/MotorControl/PythonRemoteController.py @@ -3,10 +3,10 @@ print("Connecting to pi") import grpc from concurrent import futures import motorService_pb2_grpc -from motorService_pb2 import ThrottleRequest +from motorService_pb2 import SteeringRequest, ThrottleRequest import time -throttle = 0 +throttle = 0.1 timer = None class ThrottleIterator: @@ -27,8 +27,7 @@ class ThrottleIterator: channel = grpc.insecure_channel('10.0.0.53:50051') stub = motorService_pb2_grpc.CarControlStub(channel) -stub.SetThrottle(ThrottleIterator()) +response = stub.SetThrottle(ThrottleIterator()) while True: - inp = int(input('Please enter a value for the throttle between -100 and 100')) - throttle = inp / 100 + throttle = int(input('Please enter a value for the throttle between -100 and 100'))