From 00166d6d51c7d0bb60aef42db02bbbd76bf72d63 Mon Sep 17 00:00:00 2001 From: Daniel Stonier Date: Thu, 7 Nov 2019 09:28:09 -0500 Subject: [PATCH] Namespaced blackboards (#122) * behaviour uprades * blackboard watcher on visited working * fix tree watching --- py_trees_ros/actions.py | 1 + py_trees_ros/battery.py | 5 ++++- py_trees_ros/blackboard.py | 6 +++--- py_trees_ros/subscribers.py | 12 ++++++++++-- py_trees_ros/trees.py | 6 ++++-- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/py_trees_ros/actions.py b/py_trees_ros/actions.py index df3fa01d..5ed61a74 100644 --- a/py_trees_ros/actions.py +++ b/py_trees_ros/actions.py @@ -179,6 +179,7 @@ def shutdown(self): """ Clean up the action client when shutting down. """ + print("Action Client Shutdown") self.action_client.destroy() ######################################## diff --git a/py_trees_ros/battery.py b/py_trees_ros/battery.py index 04e41d59..63da1a8a 100644 --- a/py_trees_ros/battery.py +++ b/py_trees_ros/battery.py @@ -59,7 +59,10 @@ def __init__(self, blackboard_variables={"battery": None}, clearing_policy=py_trees.common.ClearingPolicy.NEVER ) - self.blackboard.register_key(key="battery_low_warning", write=True) + self.blackboard.register_key( + key="battery_low_warning", + access=py_trees.common.Access.WRITE + ) self.blackboard.battery = sensor_msgs.BatteryState() self.blackboard.battery.percentage = 0.0 self.blackboard.battery.power_supply_status = sensor_msgs.BatteryState.POWER_SUPPLY_STATUS_UNKNOWN # noqa diff --git a/py_trees_ros/blackboard.py b/py_trees_ros/blackboard.py index d299f832..72cb9dd6 100644 --- a/py_trees_ros/blackboard.py +++ b/py_trees_ros/blackboard.py @@ -308,7 +308,7 @@ def inner(v, k): return variables - def post_tick_handler(self, visited_clients: typing.List[uuid.UUID]=None): + def post_tick_handler(self, visited_client_ids: typing.List[uuid.UUID]=None): """ Update blackboard watcher views, publish changes and clear the activity stream. Publishing is lazy, depending @@ -318,13 +318,13 @@ def post_tick_handler(self, visited_clients: typing.List[uuid.UUID]=None): :class:`py_trees_ros.trees.BehaviourTree`) after each and every tick. Args: - visited_clients: behaviour/blackboard client unique identifiers + visited_client_ids: blackboard client unique identifiers """ # update watcher views and publish if len(self.views) > 0: for view in self.views: if self.node.count_subscribers(view.topic_name) > 0: - if view.is_changed(visited_clients): # update in here + if view.is_changed(visited_client_ids): # update in here msg = std_msgs.String() if view.with_activity_stream: msg.data = console.green + "Blackboard Data\n" + console.reset diff --git a/py_trees_ros/subscribers.py b/py_trees_ros/subscribers.py index 3baab4b4..792e8168 100644 --- a/py_trees_ros/subscribers.py +++ b/py_trees_ros/subscribers.py @@ -374,6 +374,7 @@ def __init__(self, qos_profile=qos_profile, clearing_policy=clearing_policy ) + self.blackboard = self.attach_blackboard_client(name=self.name) self.logger = py_trees.logging.Logger("%s" % self.name) if isinstance(blackboard_variables, str): self.blackboard_variable_mapping = {blackboard_variables: None} @@ -390,7 +391,10 @@ def __init__(self, self.blackboard_initial_variable_mapping = initialise_variables # register the variables for name in self.blackboard_variable_mapping: - self.blackboard.register_key(key=name, write=True) + self.blackboard.register_key( + key=name, + access=py_trees.common.Access.WRITE + ) # initialise the variables for name, value in self.blackboard_initial_variable_mapping.items(): if not self.blackboard.set(name, value): @@ -460,7 +464,11 @@ def __init__(self, clearing_policy=py_trees.common.ClearingPolicy.ON_SUCCESS ) self.variable_name = variable_name - self.blackboard.register_key(key=self.variable_name, write=True) + self.blackboard = self.attach_blackboard_client(name=self.name) + self.blackboard.register_key( + key=self.variable_name, + access=py_trees.common.Access.WRITE + ) def update(self): """ diff --git a/py_trees_ros/trees.py b/py_trees_ros/trees.py index f6a843d7..62a38f8f 100644 --- a/py_trees_ros/trees.py +++ b/py_trees_ros/trees.py @@ -360,7 +360,9 @@ def _on_change_post_tick_handler(self, tree: py_trees.trees.BehaviourTree): # pass # check for blackboard watchers, update and publish if necessary, clear activity stream - self.blackboard_exchange.post_tick_handler(visited_clients=self.snapshot_visitor.visited.keys()) + self.blackboard_exchange.post_tick_handler( + visited_client_ids=self.snapshot_visitor.visited_blackboard_client_ids # .keys() + ) def _publish_serialised_tree(self): """" @@ -378,7 +380,7 @@ def _publish_serialised_tree(self): tree_message.behaviours.append(msg) # blackboard visited_keys = py_trees.blackboard.Blackboard.keys_filtered_by_clients( - client_ids=self.snapshot_visitor.visited.keys() + client_ids=self.snapshot_visitor.visited_blackboard_client_ids ) for key in visited_keys: try: