Rework lidar cache to support grpc streaming

This commit is contained in:
Piv
2020-05-31 16:01:43 +09:30
parent 7750fa80d7
commit 31d6bed897
5 changed files with 105 additions and 30 deletions

View File

@@ -10,7 +10,7 @@ import time
class LidarCache():
"""
A class that retrieves scans from the lidar,
runs grouping algorithms between scans and
runs grouping algorithms on the scans and
keeps a copy of the group data.
"""
@@ -56,16 +56,10 @@ class LidarCache():
else:
self.currentGroups = algorithms.calc_groups(scan)
self.fireGroupsChanged()
self._fireGroupsChanged()
def fireGroupsChanged(self):
# Send the updated groups to 0MQ socket.
# Rename this to be a generic listener method, rather than an explicit 'send' (even though it can be treated as such already)
pointScan = tracker_pb.PointScan()
for group in self.currentGroups:
for point in group.get_points():
pointScan.points.append(tracker_pb.Point(
angle=point[1], distance=point[2], group_number=group.number))
def _fireGroupsChanged(self):
pointScan = self.current_scan
for listener in self._group_listeners:
listener(pointScan)
@@ -81,15 +75,33 @@ class LidarCache():
listener
An function that takes a PointScan proto object as its argument.
"""
self._group_listeners.append(listener)
if(listener not in self._group_listeners):
self._group_listeners.append(listener)
def clear_listeners(self):
"""
Clear all group change listeners.
"""
self._group_listeners = []
@property
def current_scan(self):
pointScan = tracker_pb.PointScan()
for group in self.currentGroups:
for point in group.get_points():
pointScan.points.append(tracker_pb.Point(
angle=point[1], distance=point[2], group_number=group.number))
return pointScan
def stop_scanning(self):
self.run = False
if __name__ == '__main__':
lidar = MockLidar(iter(lidar_loader.load_scans_bytes_file('car/src/car/tracking/out.pickle')))
lidar = MockLidar(iter(lidar_loader.load_scans_bytes_file(
'car/src/car/tracking/out.pickle')))
cache = LidarCache(lidar)
cache.add_groups_changed_listener(lambda a : print(a))
cache.add_groups_changed_listener(lambda a: print(a))
cache.start_cache()
time.sleep(1)
cache.stop_scanning()