From 111a134dd43d54ea65356153d681a6777d852bac Mon Sep 17 00:00:00 2001 From: Sachin Kumar Date: Fri, 16 Sep 2022 11:25:07 +0530 Subject: [PATCH 1/8] pygraphviz functions updated --- .../verb/view_controller_chains.py | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/ros2controlcli/ros2controlcli/verb/view_controller_chains.py b/ros2controlcli/ros2controlcli/verb/view_controller_chains.py index 2b630373ed..d13d22118d 100644 --- a/ros2controlcli/ros2controlcli/verb/view_controller_chains.py +++ b/ros2controlcli/ros2controlcli/verb/view_controller_chains.py @@ -21,7 +21,8 @@ from ros2controlcli.api import add_controller_mgr_parsers -import graphviz +import pygraphviz as pgz +# from PIL import Image def make_controller_node(s, controller_name, state_interfaces, command_interfaces, input_controllers, @@ -58,7 +59,7 @@ def make_controller_node(s, controller_name, state_interfaces, command_interface deliminator = '' outputs_str += '<{}> {} {} '.format("controller_start_" + output_controller, output_controller, deliminator) - s.node(controller_name, f'{controller_name}|{{{{{inputs_str}}}|{{{outputs_str}}}}}') + s.add_node(controller_name, label=f'{controller_name}|{{{{{inputs_str}}}|{{{outputs_str}}}}}') def make_command_node(s, command_interfaces): @@ -70,7 +71,7 @@ def make_command_node(s, command_interfaces): deliminator = '' outputs_str += '<{}> {} {} '.format("command_end_" + command_interface, command_interface, deliminator) - s.node("command_interfaces", '{}|{{{{{}}}}}'.format("command_interfaces", outputs_str)) + s.add_node("command_interfaces", label='{}|{{{{{}}}}}'.format("command_interfaces", outputs_str)) def make_state_node(s, state_interfaces): @@ -82,12 +83,14 @@ def make_state_node(s, state_interfaces): deliminator = '' inputs_str += '<{}> {} {} '.format("state_start_" + state_interface, state_interface, deliminator) - s.node("state_interfaces", '{}|{{{{{}}}}}'.format("state_interfaces", inputs_str)) + s.add_node("state_interfaces", label='{}|{{{{{}}}}}'.format("state_interfaces", inputs_str)) def show_graph(input_chain_connections, output_chain_connections, command_connections, state_connections, command_interfaces, state_interfaces, visualize): - s = graphviz.Digraph('g', filename='/tmp/controller_diagram.gv', node_attr={'shape': 'record', 'style': 'rounded'}) + s = pgz.AGraph(name='g', filename='/tmp/controller_diagram.gv', strict=False, directed=True, rankdir='LR') + s.node_attr["shape"] = "record" + s.node_attr["style"] = "rounded" port_map = dict() # get all controller names controller_names = set() @@ -107,19 +110,22 @@ def show_graph(input_chain_connections, output_chain_connections, command_connec for controller_name in controller_names: for connection in output_chain_connections[controller_name]: - s.edge('{}:{}'.format(controller_name, "controller_start_" + connection), + s.add_edge('{}:{}'.format(controller_name, "controller_start_" + connection), '{}:{}'.format(port_map['controller_end_' + connection], 'controller_end_' + connection)) for state_connection in state_connections[controller_name]: - s.edge('{}:{}'.format("state_interfaces", "state_start_" + state_connection), + s.add_edge('{}:{}'.format("state_interfaces", "state_start_" + state_connection), '{}:{}'.format(controller_name, 'state_end_' + state_connection)) for command_connection in command_connections[controller_name]: - s.edge('{}:{}'.format(controller_name, "command_start_" + command_connection), + s.add_edge('{}:{}'.format(controller_name, "command_start_" + command_connection), '{}:{}'.format("command_interfaces", 'command_end_' + command_connection)) - s.attr(ranksep='2') - s.attr(rankdir="LR") + s.graph_attr.update(ranksep='2') + s.layout(prog='dot') if visualize: - s.view() + s.draw('g.pdf', format='pdf') + # s.draw('g.png') + # img = Image.open('g.png') + # img.show() def parse_response(list_controllers_response, list_hardware_response, visualize=True): From 08cf5e49670957e148c0b2cc55fbd8b5aeb14218 Mon Sep 17 00:00:00 2001 From: Sachin Kumar Date: Fri, 16 Sep 2022 12:18:53 +0530 Subject: [PATCH 2/8] dependencies updated --- ros2controlcli/package.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ros2controlcli/package.xml b/ros2controlcli/package.xml index c08e358f06..6414eb478e 100644 --- a/ros2controlcli/package.xml +++ b/ros2controlcli/package.xml @@ -18,8 +18,8 @@ controller_manager controller_manager_msgs rosidl_runtime_py - python-graphviz-pip - graphviz + python-pygraphviz-pip + pygraphviz ament_copyright ament_flake8 From 56e335d78f11f026537fc5af093948d3b6311563 Mon Sep 17 00:00:00 2001 From: Sachin Kumar Date: Fri, 16 Sep 2022 12:21:54 +0530 Subject: [PATCH 3/8] minor change --- ros2controlcli/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2controlcli/package.xml b/ros2controlcli/package.xml index 6414eb478e..1d12c4e87e 100644 --- a/ros2controlcli/package.xml +++ b/ros2controlcli/package.xml @@ -19,7 +19,7 @@ controller_manager_msgs rosidl_runtime_py python-pygraphviz-pip - pygraphviz + ament_copyright ament_flake8 From 4c639a59727a7f3f6551c7ca2dddf0ee2a37d2d9 Mon Sep 17 00:00:00 2001 From: Bence Magyar Date: Sat, 17 Sep 2022 13:41:43 +0100 Subject: [PATCH 4/8] Specify apt dependency from rosdep --- ros2controlcli/package.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ros2controlcli/package.xml b/ros2controlcli/package.xml index 1d12c4e87e..eea2396037 100644 --- a/ros2controlcli/package.xml +++ b/ros2controlcli/package.xml @@ -18,8 +18,7 @@ controller_manager controller_manager_msgs rosidl_runtime_py - python-pygraphviz-pip - + python-pygraphviz ament_copyright ament_flake8 From f9ee99ca992a73e7ad0120646992a897c3555a6d Mon Sep 17 00:00:00 2001 From: Bence Magyar Date: Sat, 17 Sep 2022 19:57:55 +0100 Subject: [PATCH 5/8] Should have gone for python3 from the start --- ros2controlcli/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2controlcli/package.xml b/ros2controlcli/package.xml index eea2396037..8a7c89957e 100644 --- a/ros2controlcli/package.xml +++ b/ros2controlcli/package.xml @@ -18,7 +18,7 @@ controller_manager controller_manager_msgs rosidl_runtime_py - python-pygraphviz + python3-pygraphviz ament_copyright ament_flake8 From 6f5f1c0e675d618c504bcca19de5faba14e10dd6 Mon Sep 17 00:00:00 2001 From: Bence Magyar Date: Sun, 18 Sep 2022 08:32:40 +0100 Subject: [PATCH 6/8] Fix flake8 under-indent warnings --- .../ros2controlcli/verb/view_controller_chains.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ros2controlcli/ros2controlcli/verb/view_controller_chains.py b/ros2controlcli/ros2controlcli/verb/view_controller_chains.py index d13d22118d..44f0d1d6dd 100644 --- a/ros2controlcli/ros2controlcli/verb/view_controller_chains.py +++ b/ros2controlcli/ros2controlcli/verb/view_controller_chains.py @@ -111,13 +111,13 @@ def show_graph(input_chain_connections, output_chain_connections, command_connec for controller_name in controller_names: for connection in output_chain_connections[controller_name]: s.add_edge('{}:{}'.format(controller_name, "controller_start_" + connection), - '{}:{}'.format(port_map['controller_end_' + connection], 'controller_end_' + connection)) + '{}:{}'.format(port_map['controller_end_' + connection], 'controller_end_' + connection)) for state_connection in state_connections[controller_name]: s.add_edge('{}:{}'.format("state_interfaces", "state_start_" + state_connection), - '{}:{}'.format(controller_name, 'state_end_' + state_connection)) + '{}:{}'.format(controller_name, 'state_end_' + state_connection)) for command_connection in command_connections[controller_name]: s.add_edge('{}:{}'.format(controller_name, "command_start_" + command_connection), - '{}:{}'.format("command_interfaces", 'command_end_' + command_connection)) + '{}:{}'.format("command_interfaces", 'command_end_' + command_connection)) s.graph_attr.update(ranksep='2') s.layout(prog='dot') From 4fca06eae606fca9489e924cde1f69ce360cffa3 Mon Sep 17 00:00:00 2001 From: Sachin Kumar Date: Sun, 18 Sep 2022 16:56:27 +0530 Subject: [PATCH 7/8] minor changes --- ros2controlcli/ros2controlcli/verb/view_controller_chains.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ros2controlcli/ros2controlcli/verb/view_controller_chains.py b/ros2controlcli/ros2controlcli/verb/view_controller_chains.py index 44f0d1d6dd..6dcc64c918 100644 --- a/ros2controlcli/ros2controlcli/verb/view_controller_chains.py +++ b/ros2controlcli/ros2controlcli/verb/view_controller_chains.py @@ -88,7 +88,7 @@ def make_state_node(s, state_interfaces): def show_graph(input_chain_connections, output_chain_connections, command_connections, state_connections, command_interfaces, state_interfaces, visualize): - s = pgz.AGraph(name='g', filename='/tmp/controller_diagram.gv', strict=False, directed=True, rankdir='LR') + s = pgz.AGraph(name='g', strict=False, directed=True, rankdir='LR') s.node_attr["shape"] = "record" s.node_attr["style"] = "rounded" port_map = dict() @@ -121,11 +121,12 @@ def show_graph(input_chain_connections, output_chain_connections, command_connec s.graph_attr.update(ranksep='2') s.layout(prog='dot') + s.draw('/tmp/controller_diagram.gv.pdf', format='pdf') if visualize: - s.draw('g.pdf', format='pdf') # s.draw('g.png') # img = Image.open('g.png') # img.show() + pass def parse_response(list_controllers_response, list_hardware_response, visualize=True): From 6422f6c1ee576e86b9a185e29d786203fdfbbe48 Mon Sep 17 00:00:00 2001 From: Sachin Kumar Date: Sun, 18 Sep 2022 20:25:29 +0530 Subject: [PATCH 8/8] commented code removed --- .../ros2controlcli/verb/view_controller_chains.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ros2controlcli/ros2controlcli/verb/view_controller_chains.py b/ros2controlcli/ros2controlcli/verb/view_controller_chains.py index 6dcc64c918..891ee7c088 100644 --- a/ros2controlcli/ros2controlcli/verb/view_controller_chains.py +++ b/ros2controlcli/ros2controlcli/verb/view_controller_chains.py @@ -22,7 +22,6 @@ from ros2controlcli.api import add_controller_mgr_parsers import pygraphviz as pgz -# from PIL import Image def make_controller_node(s, controller_name, state_interfaces, command_interfaces, input_controllers, @@ -121,12 +120,8 @@ def show_graph(input_chain_connections, output_chain_connections, command_connec s.graph_attr.update(ranksep='2') s.layout(prog='dot') - s.draw('/tmp/controller_diagram.gv.pdf', format='pdf') if visualize: - # s.draw('g.png') - # img = Image.open('g.png') - # img.show() - pass + s.draw('/tmp/controller_diagram.gv.pdf', format='pdf') def parse_response(list_controllers_response, list_hardware_response, visualize=True):