Don't allow client to specify zmq port.

This commit is contained in:
Piv
2020-04-20 22:26:52 +09:30
parent d9c2f2a143
commit 71eeaeb9cd
3 changed files with 14 additions and 12 deletions

View File

@@ -3,12 +3,7 @@ import os
def get_vehicle(motor_pin=19, steering_pin=18): def get_vehicle(motor_pin=19, steering_pin=18):
ENV_CAR = None ENV_CAR = None if 'CAR_VEHICLE' not in os.environ else os.environ['CAR_VEHICLE']
try:
ENV_CAR = os.environ['CAR_VEHICLE']
except KeyError:
print('Failed to find CAR_VEHICLE environment variable. Using mock.')
return MockVehicle()
if ENV_CAR == "CAR_2D": if ENV_CAR == "CAR_2D":
try: try:
from .vehicle import Vehicle from .vehicle import Vehicle
@@ -20,3 +15,4 @@ def get_vehicle(motor_pin=19, steering_pin=18):
return MockVehicle(motor_pin, steering_pin) return MockVehicle(motor_pin, steering_pin)
else: else:
print('No valid vehicle found. Have you set the CAR_VEHICLE environment variable?') print('No valid vehicle found. Have you set the CAR_VEHICLE environment variable?')
return None

View File

@@ -3,6 +3,7 @@ import car.slam.SlamController_pb2 as proto
import car.empty_pb2 as empty import car.empty_pb2 as empty
import car.slam.slam_streamer as slam import car.slam.slam_streamer as slam
from multiprocessing import Process from multiprocessing import Process
import os
class SlamServicer(grpc.SlamControlServicer): class SlamServicer(grpc.SlamControlServicer):
@@ -17,7 +18,8 @@ class SlamServicer(grpc.SlamControlServicer):
if self.slam_thread is None: if self.slam_thread is None:
print('initialising slam_thread') print('initialising slam_thread')
# Don't bother creating and starting slam more than once. # Don't bother creating and starting slam more than once.
self.slam.port = request.port self.slam.port = 50052 if "CAR_ZMQ_PORT" not in os.environ else os.environ[
'CAR_ZMQ_PORT']
self.slam.map_pixels = request.map_size_pixels self.slam.map_pixels = request.map_size_pixels
self.slam.map_meters = request.map_size_meters self.slam.map_meters = request.map_size_meters
self.slam_thread = Process(target=self.slam.start) self.slam_thread = Process(target=self.slam.start)

View File

@@ -7,6 +7,8 @@ import car.tracking.devices.factory as lidar_factory
from car.messaging import messages from car.messaging import messages
import car.tracking.algorithms as alg import car.tracking.algorithms as alg
import os
class LidarServicer(PersonTrackingServicer): class LidarServicer(PersonTrackingServicer):
@@ -16,26 +18,28 @@ class LidarServicer(PersonTrackingServicer):
self.cache = LidarCache(lidar_factory.get_lidar(), measurements=100) self.cache = LidarCache(lidar_factory.get_lidar(), measurements=100)
self.cache.add_groups_changed_listener(self) self.cache.add_groups_changed_listener(self)
self._mFactory = None self._mFactory = None
self._port = None self._port = 50052 if 'CAR_ZMQ_PORT' not in os.environ else os.environ[
'CAR_ZMQ_PORT']
self._vehicle = vehicle self._vehicle = vehicle
self._tracked_group = None self._tracked_group = None
def set_tracking_group(self, request, context): def set_tracking_group(self, request, context):
self._tracked_group = request.value # Invalid groups should stop tracking
self._tracked_group = None if request.value < 0 else request.value
def stop_tracking(self, request, context): def stop_tracking(self, request, context):
self.cache.stop_scanning() self.cache.stop_scanning()
def start_tracking(self, request, context): def start_tracking(self, request, context):
"""Starts the lidar cache, streaming on the provided port.""" """Starts the lidar cache, streaming on the provided port."""
self._port = request.value
self.cache.start_cache() self.cache.start_cache()
def onGroupsChanged(self, message): def onGroupsChanged(self, message):
if self._mFactory is None: if self._mFactory is None:
# Create the zmq socket in the thread that it will be used, just to be safe. # Create the zmq socket in the thread that it will be used, just to be safe.
self._mFactory = mf.getZmqPubSubStreamer(self._port) self._mFactory = mf.getZmqPubSubStreamer(self._port)
self._mFactory.send_message_topic("lidar_map", messages.ProtoMessage(message=message.SerializeToString())) self._mFactory.send_message_topic(
"lidar_map", messages.ProtoMessage(message=message.SerializeToString()))
if self._tracked_group is not None and self._vehicle is not None: if self._tracked_group is not None and self._vehicle is not None:
# Update vehicle to correctly follow the tracked group. # Update vehicle to correctly follow the tracked group.