Refactor python module structure

This commit is contained in:
Piv
2020-03-05 21:43:22 +10:30
parent 043c8783a4
commit 82a214c209
24 changed files with 20 additions and 120 deletions

61
tracking/lidar_cache.py Normal file
View File

@@ -0,0 +1,61 @@
import rplidar
from rplidar import RPLidar
from threading import Thread
from tracking import algorithms
import tracking.lidar_tracker_pb2 as tracker_pb
import zmq
import Messaging.message_factory as mf
import Messaging.messages as messages
class LidarCache():
'''
A class that retrieves scans from the lidar,
runs grouping algorithms between scans and
keeps a copy of the group data.
'''
run = True
tracking_group_number = -1
currentGroups = None
groupsChanged = []
port = None
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()
def do_scanning(self):
'''
Performs a scan for the given number of iterations.
'''
# Create the 0MQ socket first. This should not be passed between threads.
self._mFactory = mf.getZmqPubSubStreamer(self.port)
for i, scan in enumerate(self.lidar.iter_scans(min_len=self.measurements)):
print('%d: Got %d measurments' % (i, len(scan)))
if(not self.run):
break
# Now process the groups.
if self.currentGroups is not None:
self.currentGroups = algorithms.assign_groups(
self.currentGroups, algorithms.calc_groups(scan))
else:
self.currentGroups = algorithms.calc_groups(scan)
def fireGroupsChanged(self):
# Send the updated groups to 0MQ socket.
self._mFactory.send_message_topic("lidar_map", messages.ProtoMessage(
message=tracker_pb.PointScan(points=[]).SerializeToString()))
def stop_scanning(self):
self.run = False