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

View File

@@ -1,27 +1,26 @@
import persontracking.lidar_tracker_pb2 as lidar_tracker_pb2
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):
lidar_thread = None
def __init__(self):
self.cache = LidarCache(measurements=100)
self.cache.do_scanning()
def set_tracking_group(self, request, context):
pass
def stop_tracking(self, request, context):
self.cache.stop_scanning()
def get_scan_data(self, request, context):
pass
self.lidar_thread.join()
self.lidar_thread = None
def start_tracking(self, request, context):
'''
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!
# source: lidar_tracker.proto
# source: persontracking/lidar_tracker.proto
import sys
_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(
name='lidar_tracker.proto',
name='persontracking/lidar_tracker.proto',
package='persontracking',
syntax='proto3',
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=[],
oneofs=[
],
serialized_start=39,
serialized_end=66,
serialized_start=54,
serialized_end=81,
)
@@ -76,8 +75,8 @@ _EMPTY = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=68,
serialized_end=75,
serialized_start=83,
serialized_end=90,
)
@@ -121,8 +120,8 @@ _POINT = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=77,
serialized_end=139,
serialized_start=92,
serialized_end=154,
)
@@ -152,8 +151,8 @@ _POINTSCAN = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=141,
serialized_end=191,
serialized_start=156,
serialized_end=206,
)
_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
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
Int32Value = _reflection.GeneratedProtocolMessageType('Int32Value', (_message.Message,), {
'DESCRIPTOR' : _INT32VALUE,
'__module__' : 'lidar_tracker_pb2'
Int32Value = _reflection.GeneratedProtocolMessageType('Int32Value', (_message.Message,), dict(
DESCRIPTOR = _INT32VALUE,
__module__ = 'persontracking.lidar_tracker_pb2'
# @@protoc_insertion_point(class_scope:persontracking.Int32Value)
})
))
_sym_db.RegisterMessage(Int32Value)
Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
'DESCRIPTOR' : _EMPTY,
'__module__' : 'lidar_tracker_pb2'
Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), dict(
DESCRIPTOR = _EMPTY,
__module__ = 'persontracking.lidar_tracker_pb2'
# @@protoc_insertion_point(class_scope:persontracking.Empty)
})
))
_sym_db.RegisterMessage(Empty)
Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), {
'DESCRIPTOR' : _POINT,
'__module__' : 'lidar_tracker_pb2'
Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), dict(
DESCRIPTOR = _POINT,
__module__ = 'persontracking.lidar_tracker_pb2'
# @@protoc_insertion_point(class_scope:persontracking.Point)
})
))
_sym_db.RegisterMessage(Point)
PointScan = _reflection.GeneratedProtocolMessageType('PointScan', (_message.Message,), {
'DESCRIPTOR' : _POINTSCAN,
'__module__' : 'lidar_tracker_pb2'
PointScan = _reflection.GeneratedProtocolMessageType('PointScan', (_message.Message,), dict(
DESCRIPTOR = _POINTSCAN,
__module__ = 'persontracking.lidar_tracker_pb2'
# @@protoc_insertion_point(class_scope:persontracking.PointScan)
})
))
_sym_db.RegisterMessage(PointScan)
@@ -200,8 +199,8 @@ _PERSONTRACKING = _descriptor.ServiceDescriptor(
file=DESCRIPTOR,
index=0,
serialized_options=None,
serialized_start=194,
serialized_end=419,
serialized_start=209,
serialized_end=436,
methods=[
_descriptor.MethodDescriptor(
name='set_tracking_group',
@@ -222,12 +221,12 @@ _PERSONTRACKING = _descriptor.ServiceDescriptor(
serialized_options=None,
),
_descriptor.MethodDescriptor(
name='get_scan_data',
full_name='persontracking.PersonTracking.get_scan_data',
name='start_tracking',
full_name='persontracking.PersonTracking.start_tracking',
index=2,
containing_service=None,
input_type=_EMPTY,
output_type=_POINTSCAN,
input_type=_INT32VALUE,
output_type=_EMPTY,
serialized_options=None,
),
])

View File

@@ -1,7 +1,7 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
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):
@@ -16,18 +16,18 @@ class PersonTrackingStub(object):
"""
self.set_tracking_group = channel.unary_unary(
'/persontracking.PersonTracking/set_tracking_group',
request_serializer=lidar__tracker__pb2.Int32Value.SerializeToString,
response_deserializer=lidar__tracker__pb2.Empty.FromString,
request_serializer=persontracking_dot_lidar__tracker__pb2.Int32Value.SerializeToString,
response_deserializer=persontracking_dot_lidar__tracker__pb2.Empty.FromString,
)
self.stop_tracking = channel.unary_unary(
'/persontracking.PersonTracking/stop_tracking',
request_serializer=lidar__tracker__pb2.Empty.SerializeToString,
response_deserializer=lidar__tracker__pb2.Empty.FromString,
request_serializer=persontracking_dot_lidar__tracker__pb2.Empty.SerializeToString,
response_deserializer=persontracking_dot_lidar__tracker__pb2.Empty.FromString,
)
self.get_scan_data = channel.unary_unary(
'/persontracking.PersonTracking/get_scan_data',
request_serializer=lidar__tracker__pb2.Empty.SerializeToString,
response_deserializer=lidar__tracker__pb2.PointScan.FromString,
self.start_tracking = channel.unary_unary(
'/persontracking.PersonTracking/start_tracking',
request_serializer=persontracking_dot_lidar__tracker__pb2.Int32Value.SerializeToString,
response_deserializer=persontracking_dot_lidar__tracker__pb2.Empty.FromString,
)
@@ -49,7 +49,7 @@ class PersonTrackingServicer(object):
context.set_details('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
pass
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -61,18 +61,18 @@ def add_PersonTrackingServicer_to_server(servicer, server):
rpc_method_handlers = {
'set_tracking_group': grpc.unary_unary_rpc_method_handler(
servicer.set_tracking_group,
request_deserializer=lidar__tracker__pb2.Int32Value.FromString,
response_serializer=lidar__tracker__pb2.Empty.SerializeToString,
request_deserializer=persontracking_dot_lidar__tracker__pb2.Int32Value.FromString,
response_serializer=persontracking_dot_lidar__tracker__pb2.Empty.SerializeToString,
),
'stop_tracking': grpc.unary_unary_rpc_method_handler(
servicer.stop_tracking,
request_deserializer=lidar__tracker__pb2.Empty.FromString,
response_serializer=lidar__tracker__pb2.Empty.SerializeToString,
request_deserializer=persontracking_dot_lidar__tracker__pb2.Empty.FromString,
response_serializer=persontracking_dot_lidar__tracker__pb2.Empty.SerializeToString,
),
'get_scan_data': grpc.unary_unary_rpc_method_handler(
servicer.get_scan_data,
request_deserializer=lidar__tracker__pb2.Empty.FromString,
response_serializer=lidar__tracker__pb2.PointScan.SerializeToString,
'start_tracking': grpc.unary_unary_rpc_method_handler(
servicer.start_tracking,
request_deserializer=persontracking_dot_lidar__tracker__pb2.Int32Value.FromString,
response_serializer=persontracking_dot_lidar__tracker__pb2.Empty.SerializeToString,
),
}
generic_handler = grpc.method_handlers_generic_handler(

View File

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