Skip to content
Snippets Groups Projects
Commit 1b7ed5b2 authored by Jiandong Chen's avatar Jiandong Chen
Browse files

add outdated policy

parent f6becd97
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,8 @@ from aismsg.msg import AISObjectStamped, AISObjectArray ...@@ -7,6 +7,8 @@ from aismsg.msg import AISObjectStamped, AISObjectArray
from ais2msg.object_helper import get_AISobj_from_decode_msg, decode_message from ais2msg.object_helper import get_AISobj_from_decode_msg, decode_message
QUEUE_SIZE = 1000 QUEUE_SIZE = 1000
OUTDATED_THRESHOLD_SEC = 20
OUTDATED_THRESHOLD_NANOSEC = OUTDATED_THRESHOLD_SEC * 1000000000
AIS_OBJECT_PUBLISHER_NAME = "AIS_Publisher" AIS_OBJECT_PUBLISHER_NAME = "AIS_Publisher"
AIS_OBJECT_PUBLISHER_PUB_TOPIC = "/AISObjectPub" AIS_OBJECT_PUBLISHER_PUB_TOPIC = "/AISObjectPub"
AIS_OBJECT_ARRAY_PUBLISHER_NAME = "AIS_Array_Publisher" AIS_OBJECT_ARRAY_PUBLISHER_NAME = "AIS_Array_Publisher"
...@@ -23,8 +25,12 @@ class AISObjectPublisher(Node): ...@@ -23,8 +25,12 @@ class AISObjectPublisher(Node):
self._ros_setup() self._ros_setup()
self.outdated_threshold_nanosec = OUTDATED_THRESHOLD_NANOSEC
self.counter = 0 self.counter = 0
self.last_mmsi = None self.last_mmsi = None
self.last_timestamp = None
self.mmsi_obj_dict = {} self.mmsi_obj_dict = {}
def publish_data(self, data): def publish_data(self, data):
...@@ -43,7 +49,6 @@ class AISObjectPublisher(Node): ...@@ -43,7 +49,6 @@ class AISObjectPublisher(Node):
aisobj = get_AISobj_from_decode_msg( aisobj = get_AISobj_from_decode_msg(
decode_msg, self.mmsi_obj_dict[self.last_mmsi]) decode_msg, self.mmsi_obj_dict[self.last_mmsi])
obj = aisobj.object obj = aisobj.object
obj.timestamp_last_update = self.get_clock().now().nanoseconds
self.get_logger().info(f"Update Exist mmsi: {self.last_mmsi}") self.get_logger().info(f"Update Exist mmsi: {self.last_mmsi}")
else: else:
# if mmsi not exist, create a new one # if mmsi not exist, create a new one
...@@ -51,13 +56,15 @@ class AISObjectPublisher(Node): ...@@ -51,13 +56,15 @@ class AISObjectPublisher(Node):
aisobj = get_AISobj_from_decode_msg(decode_msg) aisobj = get_AISobj_from_decode_msg(decode_msg)
obj = aisobj.object obj = aisobj.object
obj.timestamp_create = self.get_clock().now().nanoseconds obj.timestamp_create = self.get_clock().now().nanoseconds
obj.timestamp_last_update = self.get_clock().now().nanoseconds
self.mmsi_obj_dict[self.last_mmsi] = aisobj self.mmsi_obj_dict[self.last_mmsi] = aisobj
self.get_logger().info(f"Got New mmsi: {self.last_mmsi}") self.get_logger().info(f"Got New mmsi: {self.last_mmsi}")
aisobj.object.timestamp_last_update = self.get_clock().now(
).nanoseconds
aisobj.header.stamp = self.get_clock().now().to_msg() aisobj.header.stamp = self.get_clock().now().to_msg()
aisobj.header.frame_id = str(self.counter) aisobj.header.frame_id = str(self.counter)
self.counter += 1 self.counter += 1
self.last_timestamp = aisobj.object.timestamp_last_update
except RuntimeError: except RuntimeError:
self.get_logger().warning( self.get_logger().warning(
...@@ -65,15 +72,27 @@ class AISObjectPublisher(Node): ...@@ -65,15 +72,27 @@ class AISObjectPublisher(Node):
return return
self._publish() self._publish()
self._remove_outdated()
def _publish(self):
self.publisher.publish(self.mmsi_obj_dict[self.last_mmsi])
def _ros_setup(self): def _ros_setup(self):
self.publisher = self.create_publisher(AISObjectStamped, self.publisher = self.create_publisher(AISObjectStamped,
AIS_OBJECT_PUBLISHER_PUB_TOPIC, AIS_OBJECT_PUBLISHER_PUB_TOPIC,
QUEUE_SIZE) QUEUE_SIZE)
def _publish(self):
self.publisher.publish(self.mmsi_obj_dict[self.last_mmsi])
def _remove_outdated(self):
out_mmsi = [
k for k, v in self.mmsi_obj_dict.items() if self.last_timestamp -
v.object.timestamp_last_update > self.outdated_threshold_nanosec
]
for mmsi in out_mmsi:
self.mmsi_obj_dict.pop(mmsi)
self.get_logger().info(f"Remove outdated mmsi: {mmsi}")
class AISObjectArrayPublisher(AISObjectPublisher): class AISObjectArrayPublisher(AISObjectPublisher):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment