From 3c383dfc1a1685d839449b5bdeb948f7f3da7818 Mon Sep 17 00:00:00 2001 From: Ruichao Wu Date: Wed, 23 Aug 2023 22:04:39 +0200 Subject: [PATCH 1/5] format msg in node model --- ros2model/api/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ros2model/api/__init__.py b/ros2model/api/__init__.py index 2051841..5909997 100644 --- a/ros2model/api/__init__.py +++ b/ros2model/api/__init__.py @@ -219,9 +219,9 @@ def fix_topic_types(node_name: str, topics: Iterable[TopicInfo]): for topic in topics: if "/" not in topic.types[0]: topic.types[0] = '"' + topic.types[0] + '"' - topic.types[0] = topic.types[0].replace("/msg/", ".") - topic.types[0] = topic.types[0].replace("/srv/", ".") - topic.types[0] = topic.types[0].replace("/action/", ".") + # topic.types[0] = topic.types[0].replace("/msg/", ".") + # topic.types[0] = topic.types[0].replace("/srv/", ".") + # topic.types[0] = topic.types[0].replace("/action/", ".") # topic.name = topic.name.replace("node_name", "") # topic.name = topic.name.replace("/", "") From a014411fa0eea2468e9bbb592d68e7114412c2b8 Mon Sep 17 00:00:00 2001 From: Ruichao Wu Date: Wed, 23 Aug 2023 22:05:01 +0200 Subject: [PATCH 2/5] fix no action servers and clients --- ros2model/verb/running_node.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ros2model/verb/running_node.py b/ros2model/verb/running_node.py index b9d9de8..2eeccb3 100644 --- a/ros2model/verb/running_node.py +++ b/ros2model/verb/running_node.py @@ -104,8 +104,8 @@ def create_a_node_model(self, target_node_name, output, if_param_value, args): publishers: List[TopicInfo] = [] service_clients: List[TopicInfo] = [] service_servers: List[TopicInfo] = [] - actions_clients: List[TopicInfo] = [] - actions_servers: List[TopicInfo] = [] + action_clients: List[TopicInfo] = [] + action_servers: List[TopicInfo] = [] parameters: List[ParamInfo] = [] with NodeStrategy(args) as node: @@ -155,21 +155,21 @@ def create_a_node_model(self, target_node_name, output, if_param_value, args): fix_topic_types(node_name, service_clients) service_clients = fix_topic_names(node_name, service_clients) - actions_servers = get_action_server_info( + action_servers = get_action_server_info( node=node, remote_node_name=target_node_name, include_hidden=args.include_hidden, ) - fix_topic_types(node_name, actions_servers) - actions_servers = fix_topic_names(node_name, actions_servers) + fix_topic_types(node_name, action_servers) + action_servers = fix_topic_names(node_name, action_servers) - actions_clients = get_action_client_info( + action_clients = get_action_client_info( node=node, remote_node_name=target_node_name, include_hidden=args.include_hidden, ) - fix_topic_types(node_name, actions_clients) - actions_clients = fix_topic_names(node_name, actions_clients) + fix_topic_types(node_name, action_clients) + action_clients = fix_topic_names(node_name, action_clients) else: return "Unable to find node '" + target_node_name + "'" @@ -210,15 +210,15 @@ def create_a_node_model(self, target_node_name, output, if_param_value, args): publishers=publishers, service_clients=service_clients, service_servers=service_servers, - actions_clients=actions_clients, - actions_servers=actions_servers, + action_clients=action_clients, + action_servers=action_servers, parameters=parameters, has_subscribers=len(subscribers) > 0, has_publishers=len(publishers) > 0, has_service_clients=len(service_clients) > 0, has_service_servers=len(service_servers) > 0, - has_actions_clients=len(actions_clients) > 0, - has_actions_servers=len(actions_servers) > 0, + has_action_clients=len(action_clients) > 0, + has_action_servers=len(action_servers) > 0, has_parameters=len(parameters) > 0, if_parameter_value=if_param_value, ) From 237eed37b5c6f3e31ade4ecb6229fa811ca9775b Mon Sep 17 00:00:00 2001 From: Ruichao Wu Date: Wed, 23 Aug 2023 22:05:25 +0200 Subject: [PATCH 3/5] fix label names in node model --- templates/node_model.jinja | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/templates/node_model.jinja b/templates/node_model.jinja index eaacc37..8748228 100644 --- a/templates/node_model.jinja +++ b/templates/node_model.jinja @@ -17,28 +17,28 @@ {%- endfor %} {%- endif %} {%- if has_service_clients %} - serviceClients: + serviceclients: {%- for service in service_clients %} "{{ service.name.strip('/') }}": type: "{{ service.types[0] }}" {%- endfor %} {%- endif %} {%- if has_service_servers %} - serviceServers: + serviceservers: {%- for service in service_servers %} "{{ service.name.strip('/') }}": type: "{{ service.types[0] }}" {%- endfor %} {%- endif %} {%- if has_action_clients %} - actionClients: + actionclients: {%- for action in action_clients %} "{{ action.name.strip('/') }}": type: "{{ action.types[0] }}" {%- endfor %} {%- endif %} {%- if has_action_servers %} - actionServers: + actionservers: {%- for action in action_servers %} "{{ action.name.strip('/') }}": type: "{{ action.types[0] }}" @@ -54,6 +54,6 @@ {%- else %} type: {{ parameter.types }} {%- endif %} - default: {{ parameter.default |safe }} + value: {{ parameter.default |safe }} {%- endfor %} {%- endif %} From ef39fb16d1923ee4546ce6fd27b2e0490b1fca02 Mon Sep 17 00:00:00 2001 From: Ruichao Wu Date: Wed, 23 Aug 2023 22:57:14 +0200 Subject: [PATCH 4/5] add quota when parameter value in string --- templates/node_model.jinja | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/templates/node_model.jinja b/templates/node_model.jinja index 8748228..99e51ee 100644 --- a/templates/node_model.jinja +++ b/templates/node_model.jinja @@ -54,6 +54,10 @@ {%- else %} type: {{ parameter.types }} {%- endif %} + {%- if 'String' in parameter.types %} + value: "{{ parameter.default |safe }}" + {%- else %} value: {{ parameter.default |safe }} + {%- endif %} {%- endfor %} {%- endif %} From 186d018786d6b9bab7a121d72de6062bb46647ef Mon Sep 17 00:00:00 2001 From: Ruichao Wu Date: Wed, 23 Aug 2023 22:16:11 +0200 Subject: [PATCH 5/5] remove defaults --- ros2model/verb/running_node.py | 46 +++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/ros2model/verb/running_node.py b/ros2model/verb/running_node.py index 2eeccb3..0b0d5ef 100644 --- a/ros2model/verb/running_node.py +++ b/ros2model/verb/running_node.py @@ -1,6 +1,7 @@ import re import sys from collections import namedtuple +from itertools import filterfalse from pathlib import Path from typing import List @@ -25,6 +26,38 @@ ParamInfo = namedtuple("Topic", ("name", "types", "default")) +BlackList_Subscribers = [ + TopicInfo("/parameter_events", ["rcl_interfaces/msg/ParameterEvent"]) +] +BlackList_Publishers = [ + TopicInfo("~/transition_event", ["lifecycle_msgs/msg/TransitionEvent"]), + TopicInfo("/parameter_events", ["rcl_interfaces/msg/ParameterEvent"]), + TopicInfo("/rosout", ["rcl_interfaces/msg/Log"]), +] +BlackList_ServiceServers = [ + TopicInfo("~/change_state", ["lifecycle_msgs/srv/ChangeState"]), + TopicInfo("~/describe_parameters", + ["rcl_interfaces/srv/DescribeParameters"]), + TopicInfo("~/get_available_states", + ["lifecycle_msgs/srv/GetAvailableStates"]), + TopicInfo( + "~/get_available_transitions", [ + "lifecycle_msgs/srv/GetAvailableTransitions"] + ), + TopicInfo("~/get_parameter_types", + ["rcl_interfaces/srv/GetParameterTypes"]), + TopicInfo("~/get_parameters", ["rcl_interfaces/srv/GetParameters"]), + TopicInfo("~/get_state", ["lifecycle_msgs/srv/GetState"]), + TopicInfo("~/get_transition_graph", + ["lifecycle_msgs/srv/GetAvailableTransitions"]), + TopicInfo("~/list_parameters", ["rcl_interfaces/srv/ListParameters"]), + TopicInfo("~/set_parameters", ["rcl_interfaces/srv/SetParameters"]), + TopicInfo( + "~/set_parameters_atomically", [ + "rcl_interfaces/srv/SetParametersAtomically"] + ), +] + def call_list_parameters(*, node, node_name, timeout=None): # create client @@ -130,6 +163,10 @@ def create_a_node_model(self, target_node_name, output, if_param_value, args): ) fix_topic_types(node_name, subscribers) subscribers = fix_topic_names(node_name, subscribers) + subscribers = list( + filterfalse( + BlackList_Subscribers.__contains__, subscribers) + ) publishers = get_publisher_info( node=node, @@ -138,6 +175,9 @@ def create_a_node_model(self, target_node_name, output, if_param_value, args): ) fix_topic_types(node_name, publishers) publishers = fix_topic_names(node_name, publishers) + publishers = list( + filterfalse(BlackList_Publishers.__contains__, publishers) + ) service_servers = get_service_server_info( node=node, @@ -146,6 +186,10 @@ def create_a_node_model(self, target_node_name, output, if_param_value, args): ) fix_topic_types(node_name, service_servers) service_servers = fix_topic_names(node_name, service_servers) + service_servers = list( + filterfalse( + BlackList_ServiceServers.__contains__, service_servers) + ) service_clients = get_service_client_info( node=node, @@ -175,7 +219,7 @@ def create_a_node_model(self, target_node_name, output, if_param_value, args): with DirectNode(args) as node: response = call_list_parameters( - node=node, node_name=node_name, timeout=5.0) + node=node, node_name=node_name, timeout=1.0) if response is not None: sorted_names = sorted(response)