Rework lidar cache to support grpc streaming
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user