parameter_editor_widget.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import rospy
4 import actionlib
5 import std_msgs.msg
6 import vigir_footstep_planning_msgs.msg
7 
8 from rqt_gui_py.plugin import Plugin
9 from python_qt_binding.QtCore import Qt
10 from python_qt_binding.QtGui import QWidget, QSplitter, QVBoxLayout, QPushButton
11 
12 from vigir_generic_params.msg import SetParameterSetAction, SetParameterSetGoal, GetParameterSetAction, GetParameterSetGoal, GetParameterSetResult
13 from vigir_footstep_planning_msgs.msg import ErrorStatus
21 
22 
24 
25  def __init__(self, context):
26  super(ParameterEditorDialog, self).__init__(context)
27  self.setObjectName('ParameterEditorDialog')
28 
29  self._parent = QWidget()
31 
32  context.add_widget(self._parent)
33 
34  def shutdown_plugin(self):
35  self._widget.shutdown_plugin()
36 
37 
38 class ParameterEditorWidget(QObject):
39 
40  def __init__(self, context):
41  super(ParameterEditorWidget, self).__init__()
42 
43  # start widget
44  widget = context
45  vbox = QVBoxLayout()
46  error_status_widget = QErrorStatusWidget()
47  self.logger = Logger(error_status_widget)
48 
49  # parameter set selection
51  add_widget_with_frame(vbox, self.parameter_set_widget, "Parameter Set:")
52 
53  # start horizontal splitter
54  vsplitter = QSplitter()
55  vsplitter.setOrientation(Qt.Vertical)
56  vsplitter.setChildrenCollapsible(False)
57 
58  # parameter set editor
59  parameter_editor_widget = QParameterEditorWidget(logger=self.logger)
60  add_widget_with_frame(vsplitter, parameter_editor_widget, "Editor:")
61 
62  # add error status widget
63  add_widget_with_frame(vsplitter, error_status_widget, "Status:")
64 
65  # end horizontal splitter
66  vbox.addWidget(vsplitter)
67 
68  # end widget
69  widget.setLayout(vbox)
70  #context.add_widget(widget)
71 
72  # init parameter editor
73  self.parameter_set_widget.topic_changed_signal.connect(parameter_editor_widget.set_get_parameter_set_topic_name)
74  self.parameter_set_widget.param_changed_signal.connect(parameter_editor_widget.load_parameters)
75  self.parameter_set_widget.param_cleared_signal.connect(parameter_editor_widget.clear)
76 
77  def shutdown_plugin(self):
78  print "Shutting down ..."
79  print "Done!"
80 
81 
83 
84  parameter_set_name = str()
85 
86  def __init__(self, parent=None, logger=Logger()):
87  QWidgetWithLogger.__init__(self, parent, logger)
88 
89  # start widget
90  vbox = QVBoxLayout()
91  vbox.setMargin(0)
92  vbox.setContentsMargins(0, 0, 0, 0)
93 
94  # add layout which is dynamically filled
96  vbox.addWidget(self.parameter_tree_widget)
97 
98  # button panel
99  vbox_commands = QVBoxLayout()
100  hbox = QHBoxLayout()
101 
102  # upload topic
103  send_parameter_topic_widget = QTopicWidget(self, 'vigir_footstep_planning_msgs/SetParameterSetAction', True)
104  send_parameter_topic_widget.topic_changed_signal.connect(self._init_upload_paramater_set_client)
105  hbox.addWidget(send_parameter_topic_widget)
106 
107  # upload command
108  self.upload_command = QPushButton("Upload")
109  self.upload_command.clicked.connect(self.upload_parameters)
110  hbox.addWidget(self.upload_command)
111  vbox_commands.addLayout(hbox)
112 
113  # reload command
114  self.reload_command = QPushButton("Reload")
115  self.reload_command.clicked.connect(self.reload_parameters)
116  vbox_commands.addWidget(self.reload_command)
117 
118  # add button panel
119  vbox.addLayout(vbox_commands)
120 
121  # end widget
122  self.setLayout(vbox)
123 
124  # init
125  self.clear()
126  send_parameter_topic_widget.emit_topic_name()
127 
128  @Slot(str)
129  def _init_get_parameter_set_client(self, topic_name):
130  self.get_parameter_set_client = actionlib.SimpleActionClient(topic_name, GetParameterSetAction)
131  print "Parameter set topic changed: " + topic_name
132 
133  @Slot(str)
134  def _init_upload_paramater_set_client(self, topic_name):
135  if len(topic_name) > 0:
136  print "Upload parameter set topic changed: " + topic_name
137  self.upload_parameter_set_client = actionlib.SimpleActionClient(topic_name, SetParameterSetAction)
138 
139  @Slot(str)
140  def set_get_parameter_set_topic_name(self, topic_name):
141  # assume that there are no topic remaps
142  if len(topic_name) > 0:
143  self._init_get_parameter_set_client(topic_name[:-6])
144 
145  # clear current vis
146  @Slot()
147  def clear(self):
148  self.upload_command.setEnabled(False)
149  self.reload_command.setEnabled(False)
150  self.parameter_tree_widget.clear()
151 
152  @Slot()
153  def upload_parameters(self):
154  param_set_msg = self.parameter_tree_widget.get_parameter_set()
155 
156  if self.upload_parameter_set_client.wait_for_server(rospy.Duration(0.5)):
157  self.logger.log_info("Sending parameter set '" + param_set_msg.name.data + "'...")
158 
159  goal = SetParameterSetGoal()
160  goal.params = param_set_msg;
161  self.upload_parameter_set_client.send_goal(goal)
162 
163  if self.upload_parameter_set_client.wait_for_result(rospy.Duration(0.5)):
164  self.logger.log_info("Sent parameter set!")
165  result = self.upload_parameter_set_client.get_result()
166  self.logger.log(result.status)
167  else:
168  self.logger.log_error("Can't send parameter set. Check communcation!")
169  else:
170  self.logger.log_error("Can't connect to footstep parameter action server!")
171 
172  @Slot(str)
173  def load_parameters(self, name):
174  self.clear()
175 
176  if self.get_parameter_set_client.wait_for_server(rospy.Duration(0.5)):
177  self.logger.log_info("Requesting parameter set '" + name + "'...")
178 
179  goal = GetParameterSetGoal()
180  goal.name.data = name;
181  self.get_parameter_set_client.send_goal(goal)
182 
183  if self.get_parameter_set_client.wait_for_result(rospy.Duration(0.5)):
184  self.logger.log_info("Received parameter set!")
185  result = self.get_parameter_set_client.get_result()
187  self._visualize_parameters(result.params)
188  else:
189  self.logger.log_error("Didn't received parameter set. Check communcation!")
190  else:
191  self.logger.log_error("Can't connect to footstep parameter action server!")
192 
193  @Slot()
194  def reload_parameters(self):
196 
197  # get parameter set as msg
198  def _visualize_parameters(self, param_set_msg):
199  self.logger.log_info("Visualize parameter set with " + str(len(param_set_msg.params)) + " parameters.")
200  self.parameter_tree_widget.set_parameter_set(param_set_msg)
201  self.upload_command.setEnabled(True)
202  self.reload_command.setEnabled(True)


vigir_footstep_planning_widgets
Author(s): Alexander Stumpf
autogenerated on Mon Jun 10 2019 15:47:48