Prepare to test lidar tracker.
This commit is contained in:
@@ -13,6 +13,8 @@ from control.gpiozero.vehicle import Vehicle
|
|||||||
from control.gpiozero.mockvehicle import MockVehicle
|
from control.gpiozero.mockvehicle import MockVehicle
|
||||||
from slam.slam_servicer import SlamServicer
|
from slam.slam_servicer import SlamServicer
|
||||||
import slam.SlamController_pb2_grpc as SlamController_pb2_grpc
|
import slam.SlamController_pb2_grpc as SlamController_pb2_grpc
|
||||||
|
import tracking.lidar_tracker_pb2_grpc as lidar_tracker_pb2_grpc
|
||||||
|
from tracking.lidar_servicer import LidarServicer
|
||||||
|
|
||||||
|
|
||||||
class MotorServicer(motorService_pb2_grpc.CarControlServicer):
|
class MotorServicer(motorService_pb2_grpc.CarControlServicer):
|
||||||
@@ -54,6 +56,8 @@ class MotorServicer(motorService_pb2_grpc.CarControlServicer):
|
|||||||
motorService_pb2_grpc.add_CarControlServicer_to_server(self, server)
|
motorService_pb2_grpc.add_CarControlServicer_to_server(self, server)
|
||||||
SlamController_pb2_grpc.add_SlamControlServicer_to_server(
|
SlamController_pb2_grpc.add_SlamControlServicer_to_server(
|
||||||
self.create_slam_servicer(), server)
|
self.create_slam_servicer(), server)
|
||||||
|
lidar_tracker_pb2_grpc.add_PersonTrackingServicer_to_server(
|
||||||
|
self.create_lidar_servicer(), server)
|
||||||
# Disable tls for local testing.
|
# Disable tls for local testing.
|
||||||
# server.add_secure_port('[::]:50051', self.create_credentials())
|
# server.add_secure_port('[::]:50051', self.create_credentials())
|
||||||
server.add_insecure_port('[::]:50051')
|
server.add_insecure_port('[::]:50051')
|
||||||
@@ -64,6 +68,9 @@ class MotorServicer(motorService_pb2_grpc.CarControlServicer):
|
|||||||
def create_slam_servicer(self):
|
def create_slam_servicer(self):
|
||||||
return SlamServicer('/dev/ttyUSB0')
|
return SlamServicer('/dev/ttyUSB0')
|
||||||
|
|
||||||
|
def create_lidar_servicer(self):
|
||||||
|
return LidarServicer()
|
||||||
|
|
||||||
def create_credentials(self):
|
def create_credentials(self):
|
||||||
# Relativise this stuff.
|
# Relativise this stuff.
|
||||||
pvtKeyPath = '/home/pi/tls/device.key'
|
pvtKeyPath = '/home/pi/tls/device.key'
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ class LidarCache():
|
|||||||
self.run = True
|
self.run = True
|
||||||
self.tracking_group_number = -1
|
self.tracking_group_number = -1
|
||||||
self.currentGroups = None
|
self.currentGroups = None
|
||||||
self.groupsChanged = []
|
|
||||||
|
|
||||||
def start_cache(self, sender):
|
def start_cache(self, sender):
|
||||||
self.thread = Thread(target=self.do_scanning, args=[sender])
|
self.thread = Thread(target=self.do_scanning, args=[sender])
|
||||||
@@ -42,7 +41,11 @@ class LidarCache():
|
|||||||
# TODO: Implement custom batching, as iter_scans can be unreliable
|
# TODO: Implement custom batching, as iter_scans can be unreliable
|
||||||
for scan in self.lidar.iter_scans(min_len=self.measurements):
|
for scan in self.lidar.iter_scans(min_len=self.measurements):
|
||||||
print('Got %d measurments' % (len(scan)))
|
print('Got %d measurments' % (len(scan)))
|
||||||
if(not self.run):
|
if len(scan) < self.measurements:
|
||||||
|
# Poor scan, likely since it was the first scan.
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not self.run:
|
||||||
break
|
break
|
||||||
|
|
||||||
# Now process the groups.
|
# Now process the groups.
|
||||||
@@ -52,11 +55,19 @@ class LidarCache():
|
|||||||
else:
|
else:
|
||||||
self.currentGroups = algorithms.calc_groups(scan)
|
self.currentGroups = algorithms.calc_groups(scan)
|
||||||
|
|
||||||
|
self.fireGroupsChanged()
|
||||||
|
|
||||||
def fireGroupsChanged(self):
|
def fireGroupsChanged(self):
|
||||||
# Send the updated groups to 0MQ socket.
|
# 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)
|
# Rename this to be a generic listener method, rather than an explicit 'send' (even though it can be treated as such already)
|
||||||
self._mFactory.send_message_topic("lidar_map", messages.ProtoMessage(
|
pointScan = tracker_pb.PointScan()
|
||||||
message=tracker_pb.PointScan(points=[]).SerializeToString()))
|
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))
|
||||||
|
|
||||||
|
self._mFactory.send_message_topic(
|
||||||
|
"lidar_map", messages.ProtoMessage(message=pointScan.SerializeToString()))
|
||||||
|
|
||||||
def stop_scanning(self):
|
def stop_scanning(self):
|
||||||
self.run = False
|
self.run = False
|
||||||
|
|||||||
Reference in New Issue
Block a user