ros-visualization / rqt_tf_tree

http://wiki.ros.org/rqt_tf_tree
BSD 3-Clause "New" or "Revised" License
13 stars 20 forks source link

[ROS2] After closing rqt with ctrl+c, cant start rqt again #20

Open maity-kgz opened 4 years ago

maity-kgz commented 4 years ago

Steps to reproduce the problem:

  1. launch rqt in a console
  2. from GUI of rqt select Plugins-Visualization-TF Tree (only this plugin causes this issue, so far)
  3. immediately you start getting a message in a console "service not available, waiting again..."
  4. close rqt with ctrl+c (closing with GUI x-button does not cause this issue)
  5. you get traceback with errors.
  6. try to start rqt again

After this you cant start rqt, in console you get "service not available, waiting again..." messages only.

Ubuntu 18.04.4 LTS, ROS2 eqloquent

You get this in console

service not available, waiting again...
service not available, waiting again...
service not available, waiting again...
service not available, waiting again...
service not available, waiting again...
^C[INFO] [rclcpp]: signal_handler(signal_value=2)
PluginHandlerDirect._restore_settings() plugin "rqt_tf_tree/RosTfTree#1" raised an exception:
Traceback (most recent call last):
  File "/opt/ros/eloquent/lib/python3.6/site-packages/qt_gui/plugin_handler_direct.py", line 121, in _restore_settings
    self._plugin.restore_settings(plugin_settings_plugin, instance_settings_plugin)
  File "/opt/ros/eloquent/lib/python3.6/site-packages/rqt_tf_tree/tf_tree.py", line 131, in restore_settings
    self._refresh_tf_graph()
  File "/opt/ros/eloquent/lib/python3.6/site-packages/rqt_tf_tree/tf_tree.py", line 143, in _refresh_tf_graph
    self._update_graph_view(self._generate_dotcode())
  File "/opt/ros/eloquent/lib/python3.6/site-packages/rqt_tf_tree/tf_tree.py", line 150, in _generate_dotcode
    while not tf2_frame_client.wait_for_service(timeout_sec=1.0):
  File "/opt/ros/eloquent/lib/python3.6/site-packages/rclpy/client.py", line 164, in wait_for_service
    return self.service_is_ready()
  File "/opt/ros/eloquent/lib/python3.6/site-packages/rclpy/client.py", line 143, in service_is_ready
    with self.handle as capsule:
  File "/opt/ros/eloquent/lib/python3.6/site-packages/rclpy/handle.py", line 150, in __enter__
    return self._get_capsule()
  File "/opt/ros/eloquent/lib/python3.6/site-packages/rclpy/handle.py", line 132, in _get_capsule
    raise InvalidHandle('Tried to use a handle that has been destroyed.')
rclpy.handle.InvalidHandle: Tried to use a handle that has been destroyed.

Exception ignored in: <bound method DockWidgetTitleBar.__del__ of <qt_gui.dock_widget_title_bar.DockWidgetTitleBar object at 0x7f2c1bf7db88>>
Traceback (most recent call last):
  File "/opt/ros/eloquent/lib/python3.6/site-packages/qt_gui/dock_widget_title_bar.py", line 109, in __del__
    self._dock_widget.removeEventFilter(self)
RuntimeError: wrapped C/C++ object of type DockWidget has been deleted
PGotzmann commented 4 years ago

I have been experiencing the same issue (Ubuntu 18.04.4 LTS, ROS eloquent) and there are also related questions on ROS Answer describing similar behavior (e.g. this Question).

The issue of rqt GUI not starting after adding rqt_tf_tree can be easily overcome by resetting rqt to its default configuration by running it with --clear-config. However, the problem reappears when adding rqt_tf_tree again.

As far as I understand, some parts of the TF framework are still a work in progress in ROS2. Therefore, even though rqt_tf_tree has been released, I wonder if this should work at all at this stage or if it is really a bug/configuration problem.

EDIT: Looks link rqt_tf_tree relies on the tf2_frames service, which however is not jet available in the latest release of tf2_ros (0.12.5). This pending dependency is also pointed out here. However, the corresponding pull request to reactivate the frame graph service in tf2_ros (ros2/geometry2/pull/198), is still open.