Tidy up lidar tracker and its protos

This commit is contained in:
Piv
2020-02-24 21:13:41 +10:30
parent 834aa5abfc
commit efe7b02099
5 changed files with 69 additions and 74 deletions

View File

@@ -4,6 +4,7 @@ from threading import Thread
from persontracking import algorithms from persontracking import algorithms
import zmq import zmq
class LidarCache(): class LidarCache():
''' '''
A class that retrieves scans from the lidar, A class that retrieves scans from the lidar,
@@ -14,15 +15,18 @@ class LidarCache():
tracking_group_number = -1 tracking_group_number = -1
currentGroups = None currentGroups = None
groupsChanged = [] groupsChanged = []
port = None
def __init__(self, port, measurements=100): def __init__(self, measurements=100):
self.port = port
self.lidar = RPLidar('/dev/ttyUSB0') self.lidar = RPLidar('/dev/ttyUSB0')
self.measurements = measurements self.measurements = measurements
print('Info: ' + self.lidar.get_info()) print('Info: ' + self.lidar.get_info())
print('Health: ' + self.lidar.get_health()) print('Health: ' + self.lidar.get_health())
def start_cache(self): def start_cache(self):
if self.port is None:
print('ERROR: Port has not been set!')
return
self.thread = Thread(target=self.do_scanning) self.thread = Thread(target=self.do_scanning)
self.thread.start() self.thread.start()
@@ -30,7 +34,6 @@ class LidarCache():
''' '''
Performs a scan for the given number of iterations. Performs a scan for the given number of iterations.
''' '''
# Create the 0MQ socket first. This should not be passed between threads. # Create the 0MQ socket first. This should not be passed between threads.
self._socket = self._create_socket() self._socket = self._create_socket()
self._socket.bind("tcp://*:" + str(self.port)) self._socket.bind("tcp://*:" + str(self.port))
@@ -42,7 +45,8 @@ class LidarCache():
# Now process the groups. # Now process the groups.
if self.currentGroups is not None: if self.currentGroups is not None:
self.currentGroups = algorithms.assign_groups(self.currentGroups, algorithms.calc_groups(scan)) self.currentGroups = algorithms.assign_groups(
self.currentGroups, algorithms.calc_groups(scan))
else: else:
self.currentGroups = algorithms.calc_groups(scan) self.currentGroups = algorithms.calc_groups(scan)
@@ -56,4 +60,3 @@ class LidarCache():
def _create_socket(self): def _create_socket(self):
return zmq.Context.instance().socket(zmq.PUB) return zmq.Context.instance().socket(zmq.PUB)

View File

@@ -1,27 +1,26 @@
import persontracking.lidar_tracker_pb2 as lidar_tracker_pb2 import persontracking.lidar_tracker_pb2 as lidar_tracker_pb2
from persontracking.lidar_tracker_pb2_grpc import PersonTrackingServicer from persontracking.lidar_tracker_pb2_grpc import PersonTrackingServicer
from persontracking.lidar_cache import LidarCache\ from persontracking.lidar_cache import LidarCache
from multiprocessing import Process
class LidarServicer(PersonTrackingServicer): class LidarServicer(PersonTrackingServicer):
lidar_thread = None
def __init__(self): def __init__(self):
self.cache = LidarCache(measurements=100) self.cache = LidarCache(measurements=100)
self.cache.do_scanning()
def set_tracking_group(self, request, context): def set_tracking_group(self, request, context):
pass pass
def stop_tracking(self, request, context): def stop_tracking(self, request, context):
self.cache.stop_scanning() self.cache.stop_scanning()
self.lidar_thread.join()
def get_scan_data(self, request, context): self.lidar_thread = None
pass
def start_tracking(self, request, context): def start_tracking(self, request, context):
''' '''
Starts the lidar cache. Starts the lidar cache.
''' '''
pass if self.lidar_thread is None:
self.lidar_thread = Process(target=self.cache.do_scanning)

View File

@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT! # Generated by the protocol buffer compiler. DO NOT EDIT!
# source: lidar_tracker.proto # source: persontracking/lidar_tracker.proto
import sys import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
@@ -16,11 +15,11 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor.FileDescriptor( DESCRIPTOR = _descriptor.FileDescriptor(
name='lidar_tracker.proto', name='persontracking/lidar_tracker.proto',
package='persontracking', package='persontracking',
syntax='proto3', syntax='proto3',
serialized_options=_b('\n\031com.example.carcontrollerB\021MotorServiceProtoP\001'), serialized_options=_b('\n\031com.example.carcontrollerB\021MotorServiceProtoP\001'),
serialized_pb=_b('\n\x13lidar_tracker.proto\x12\x0epersontracking\"\x1b\n\nInt32Value\x12\r\n\x05value\x18\x01 \x01(\x05\"\x07\n\x05\x45mpty\">\n\x05Point\x12\r\n\x05\x61ngle\x18\x01 \x01(\x01\x12\x10\n\x08\x64istance\x18\x02 \x01(\x05\x12\x14\n\x0cgroup_number\x18\x03 \x01(\x05\"2\n\tPointScan\x12%\n\x06points\x18\x01 \x03(\x0b\x32\x15.persontracking.Point2\xe1\x01\n\x0ePersonTracking\x12I\n\x12set_tracking_group\x12\x1a.persontracking.Int32Value\x1a\x15.persontracking.Empty\"\x00\x12?\n\rstop_tracking\x12\x15.persontracking.Empty\x1a\x15.persontracking.Empty\"\x00\x12\x43\n\rget_scan_data\x12\x15.persontracking.Empty\x1a\x19.persontracking.PointScan\"\x00\x42\x30\n\x19\x63om.example.carcontrollerB\x11MotorServiceProtoP\x01\x62\x06proto3') serialized_pb=_b('\n\"persontracking/lidar_tracker.proto\x12\x0epersontracking\"\x1b\n\nInt32Value\x12\r\n\x05value\x18\x01 \x01(\x05\"\x07\n\x05\x45mpty\">\n\x05Point\x12\r\n\x05\x61ngle\x18\x01 \x01(\x01\x12\x10\n\x08\x64istance\x18\x02 \x01(\x05\x12\x14\n\x0cgroup_number\x18\x03 \x01(\x05\"2\n\tPointScan\x12%\n\x06points\x18\x01 \x03(\x0b\x32\x15.persontracking.Point2\xe3\x01\n\x0ePersonTracking\x12I\n\x12set_tracking_group\x12\x1a.persontracking.Int32Value\x1a\x15.persontracking.Empty\"\x00\x12?\n\rstop_tracking\x12\x15.persontracking.Empty\x1a\x15.persontracking.Empty\"\x00\x12\x45\n\x0estart_tracking\x12\x1a.persontracking.Int32Value\x1a\x15.persontracking.Empty\"\x00\x42\x30\n\x19\x63om.example.carcontrollerB\x11MotorServiceProtoP\x01\x62\x06proto3')
) )
@@ -52,8 +51,8 @@ _INT32VALUE = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=39, serialized_start=54,
serialized_end=66, serialized_end=81,
) )
@@ -76,8 +75,8 @@ _EMPTY = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=68, serialized_start=83,
serialized_end=75, serialized_end=90,
) )
@@ -121,8 +120,8 @@ _POINT = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=77, serialized_start=92,
serialized_end=139, serialized_end=154,
) )
@@ -152,8 +151,8 @@ _POINTSCAN = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=141, serialized_start=156,
serialized_end=191, serialized_end=206,
) )
_POINTSCAN.fields_by_name['points'].message_type = _POINT _POINTSCAN.fields_by_name['points'].message_type = _POINT
@@ -163,32 +162,32 @@ DESCRIPTOR.message_types_by_name['Point'] = _POINT
DESCRIPTOR.message_types_by_name['PointScan'] = _POINTSCAN DESCRIPTOR.message_types_by_name['PointScan'] = _POINTSCAN
_sym_db.RegisterFileDescriptor(DESCRIPTOR) _sym_db.RegisterFileDescriptor(DESCRIPTOR)
Int32Value = _reflection.GeneratedProtocolMessageType('Int32Value', (_message.Message,), { Int32Value = _reflection.GeneratedProtocolMessageType('Int32Value', (_message.Message,), dict(
'DESCRIPTOR' : _INT32VALUE, DESCRIPTOR = _INT32VALUE,
'__module__' : 'lidar_tracker_pb2' __module__ = 'persontracking.lidar_tracker_pb2'
# @@protoc_insertion_point(class_scope:persontracking.Int32Value) # @@protoc_insertion_point(class_scope:persontracking.Int32Value)
}) ))
_sym_db.RegisterMessage(Int32Value) _sym_db.RegisterMessage(Int32Value)
Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), { Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), dict(
'DESCRIPTOR' : _EMPTY, DESCRIPTOR = _EMPTY,
'__module__' : 'lidar_tracker_pb2' __module__ = 'persontracking.lidar_tracker_pb2'
# @@protoc_insertion_point(class_scope:persontracking.Empty) # @@protoc_insertion_point(class_scope:persontracking.Empty)
}) ))
_sym_db.RegisterMessage(Empty) _sym_db.RegisterMessage(Empty)
Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), { Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), dict(
'DESCRIPTOR' : _POINT, DESCRIPTOR = _POINT,
'__module__' : 'lidar_tracker_pb2' __module__ = 'persontracking.lidar_tracker_pb2'
# @@protoc_insertion_point(class_scope:persontracking.Point) # @@protoc_insertion_point(class_scope:persontracking.Point)
}) ))
_sym_db.RegisterMessage(Point) _sym_db.RegisterMessage(Point)
PointScan = _reflection.GeneratedProtocolMessageType('PointScan', (_message.Message,), { PointScan = _reflection.GeneratedProtocolMessageType('PointScan', (_message.Message,), dict(
'DESCRIPTOR' : _POINTSCAN, DESCRIPTOR = _POINTSCAN,
'__module__' : 'lidar_tracker_pb2' __module__ = 'persontracking.lidar_tracker_pb2'
# @@protoc_insertion_point(class_scope:persontracking.PointScan) # @@protoc_insertion_point(class_scope:persontracking.PointScan)
}) ))
_sym_db.RegisterMessage(PointScan) _sym_db.RegisterMessage(PointScan)
@@ -200,8 +199,8 @@ _PERSONTRACKING = _descriptor.ServiceDescriptor(
file=DESCRIPTOR, file=DESCRIPTOR,
index=0, index=0,
serialized_options=None, serialized_options=None,
serialized_start=194, serialized_start=209,
serialized_end=419, serialized_end=436,
methods=[ methods=[
_descriptor.MethodDescriptor( _descriptor.MethodDescriptor(
name='set_tracking_group', name='set_tracking_group',
@@ -222,12 +221,12 @@ _PERSONTRACKING = _descriptor.ServiceDescriptor(
serialized_options=None, serialized_options=None,
), ),
_descriptor.MethodDescriptor( _descriptor.MethodDescriptor(
name='get_scan_data', name='start_tracking',
full_name='persontracking.PersonTracking.get_scan_data', full_name='persontracking.PersonTracking.start_tracking',
index=2, index=2,
containing_service=None, containing_service=None,
input_type=_EMPTY, input_type=_INT32VALUE,
output_type=_POINTSCAN, output_type=_EMPTY,
serialized_options=None, serialized_options=None,
), ),
]) ])

View File

@@ -1,7 +1,7 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc import grpc
import lidar_tracker_pb2 as lidar__tracker__pb2 from persontracking import lidar_tracker_pb2 as persontracking_dot_lidar__tracker__pb2
class PersonTrackingStub(object): class PersonTrackingStub(object):
@@ -16,18 +16,18 @@ class PersonTrackingStub(object):
""" """
self.set_tracking_group = channel.unary_unary( self.set_tracking_group = channel.unary_unary(
'/persontracking.PersonTracking/set_tracking_group', '/persontracking.PersonTracking/set_tracking_group',
request_serializer=lidar__tracker__pb2.Int32Value.SerializeToString, request_serializer=persontracking_dot_lidar__tracker__pb2.Int32Value.SerializeToString,
response_deserializer=lidar__tracker__pb2.Empty.FromString, response_deserializer=persontracking_dot_lidar__tracker__pb2.Empty.FromString,
) )
self.stop_tracking = channel.unary_unary( self.stop_tracking = channel.unary_unary(
'/persontracking.PersonTracking/stop_tracking', '/persontracking.PersonTracking/stop_tracking',
request_serializer=lidar__tracker__pb2.Empty.SerializeToString, request_serializer=persontracking_dot_lidar__tracker__pb2.Empty.SerializeToString,
response_deserializer=lidar__tracker__pb2.Empty.FromString, response_deserializer=persontracking_dot_lidar__tracker__pb2.Empty.FromString,
) )
self.get_scan_data = channel.unary_unary( self.start_tracking = channel.unary_unary(
'/persontracking.PersonTracking/get_scan_data', '/persontracking.PersonTracking/start_tracking',
request_serializer=lidar__tracker__pb2.Empty.SerializeToString, request_serializer=persontracking_dot_lidar__tracker__pb2.Int32Value.SerializeToString,
response_deserializer=lidar__tracker__pb2.PointScan.FromString, response_deserializer=persontracking_dot_lidar__tracker__pb2.Empty.FromString,
) )
@@ -49,7 +49,7 @@ class PersonTrackingServicer(object):
context.set_details('Method not implemented!') context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!') raise NotImplementedError('Method not implemented!')
def get_scan_data(self, request, context): def start_tracking(self, request, context):
# missing associated documentation comment in .proto file # missing associated documentation comment in .proto file
pass pass
context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -61,18 +61,18 @@ def add_PersonTrackingServicer_to_server(servicer, server):
rpc_method_handlers = { rpc_method_handlers = {
'set_tracking_group': grpc.unary_unary_rpc_method_handler( 'set_tracking_group': grpc.unary_unary_rpc_method_handler(
servicer.set_tracking_group, servicer.set_tracking_group,
request_deserializer=lidar__tracker__pb2.Int32Value.FromString, request_deserializer=persontracking_dot_lidar__tracker__pb2.Int32Value.FromString,
response_serializer=lidar__tracker__pb2.Empty.SerializeToString, response_serializer=persontracking_dot_lidar__tracker__pb2.Empty.SerializeToString,
), ),
'stop_tracking': grpc.unary_unary_rpc_method_handler( 'stop_tracking': grpc.unary_unary_rpc_method_handler(
servicer.stop_tracking, servicer.stop_tracking,
request_deserializer=lidar__tracker__pb2.Empty.FromString, request_deserializer=persontracking_dot_lidar__tracker__pb2.Empty.FromString,
response_serializer=lidar__tracker__pb2.Empty.SerializeToString, response_serializer=persontracking_dot_lidar__tracker__pb2.Empty.SerializeToString,
), ),
'get_scan_data': grpc.unary_unary_rpc_method_handler( 'start_tracking': grpc.unary_unary_rpc_method_handler(
servicer.get_scan_data, servicer.start_tracking,
request_deserializer=lidar__tracker__pb2.Empty.FromString, request_deserializer=persontracking_dot_lidar__tracker__pb2.Int32Value.FromString,
response_serializer=lidar__tracker__pb2.PointScan.SerializeToString, response_serializer=persontracking_dot_lidar__tracker__pb2.Empty.SerializeToString,
), ),
} }
generic_handler = grpc.method_handlers_generic_handler( generic_handler = grpc.method_handlers_generic_handler(

View File

@@ -24,16 +24,10 @@ message PointScan{
repeated Point points = 1; repeated Point points = 1;
} }
message TrackingInfo{
int32 port = 1;
}
service PersonTracking{ service PersonTracking{
rpc set_tracking_group(Int32Value) returns (Empty) {} rpc set_tracking_group(Int32Value) returns (Empty) {}
rpc stop_tracking(Empty) returns (Empty) {} rpc stop_tracking(Empty) returns (Empty) {}
rpc get_scan_data(Empty) returns (PointScan) {} rpc start_tracking(Int32Value) returns (Empty) {}
rpc start_tracking(TrackingInfo) returns (Empty) {}
} }