Coder Social home page Coder Social logo

gazebosim / gz-gui Goto Github PK

View Code? Open in Web Editor NEW
65.0 10.0 38.0 10.39 MB

Builds on top of Qt to provide widgets which are useful when developing robotics applications, such as a 3D view, plots, dashboard, etc, and can be used together in a convenient unified interface.

Home Page: https://gazebosim.org

License: Apache License 2.0

CMake 1.20% C++ 87.35% C 0.67% QML 10.06% Ruby 0.36% Shell 0.07% Objective-C++ 0.29%
ignition-gui widgets robotics-applications ignition-robotics gazebo robotics robotics-simulation gui graphical-user-interface qt

gz-gui's People

Contributors

acxz avatar adlarkin avatar ahcorde avatar amrelsersy avatar arjo129 avatar azeey avatar azulradio avatar blast545 avatar caguero avatar chapulina avatar clalancette avatar darksylinc avatar dhood avatar iche033 avatar j-rivero avatar jennuine avatar luca-della-vedova avatar mabelzhang avatar mayman99 avatar methyldragon avatar mjcarroll avatar mohamedsayed18 avatar mxgrey avatar nkoenig avatar peci1 avatar sarath18 avatar scpeters avatar sloretz avatar srmainwaring avatar traversaro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gz-gui's Issues

Remove tinyxml from public API

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


We're currently using tinyxml2::XMLElement pointers on some functions which handle configuration files, such as loadPlugin(const std::string &_filename, const tinyxml2::XMLElement *_pluginElem). It would be interesting not to make users create tinyxml elements to use Ignition GUI.

On another part of the API, we're passing an xml file as a string, see Plugin::ConfigStr(). It was done that way due to the fact it isn't straightforward to deep-copy tinyxml elements.

Now I'm leaning towards moving to std::string for passing configuration files everywhere. This way, each plugin can parse the string to the format of their choice. For example, if a plugin wants to use json, they can embed that into our XML:

<plugin filename="PluginThatUsesJson">
{
  "example": {
    "banana" : "raspberry"
  }
}
</plugin>

All Ignition GUI-specific configurations will need to be passed as arguments inside <plugin>. Currently, we handle nested elements like <title> or <title_bar> before passing the configuration forward to the plugin, these will become arguments.

gz11 - Missing: ignition-rendering1 (Components: ogre)

Original report (archived issue) by Pei JIA (Bitbucket: jiapei100).


  1. I successfully installed Ogre2.x (NOT Ogre1.x) .
pkgconfig ll ignition-rendering1*
-rw-r--r-- 1 root root 384 Jan 31 05:24 ignition-rendering1-ogre2.pc
-rw-r--r-- 1 root root 384 Jan 31 05:24 ignition-rendering1.pcpkgconfig pwd
/usr/local/lib/pkgconfigpkgconfig 
  1. However, still failed to build ign-gui, with the following ERROR message:
-- BUILD ERRORS: These must be resolved before compiling.
 -- Missing: ignition-rendering1 (Components: ogre)
 -- END BUILD ERRORS

 CMake Error at /usr/local/share/cmake/ignition-cmake2/cmake2/IgnConfigureBuild.cmake:66 (message):
   Errors encountered in build.  Please see BUILD ERRORS above.
 Call Stack (most recent call first):
   CMakeLists.txt:124 (ign_configure_build)

Did anybody meet the same issue? How to successfully build ign-gui (gz11) with Ogre2.x and without Ogre1.x ?

Example image.config is broken

Original report (archived issue) by Steve Peters (Bitbucket: Steven Peters, GitHub: scpeters).


Description

The example image.config is broken. It is currently causing test failures:

Steps to reproduce

Apply the following patch, build and run the test, which will only test image.config:

diff -r 83190ef569c4b4871bc1afa039232ddd5317d661 test/integration/Examples_TEST.cc
--- a/test/integration/Examples_TEST.cc	Thu Mar 07 11:14:34 2019 -0800
+++ b/test/integration/Examples_TEST.cc	Thu Mar 07 13:30:12 2019 -0800
@@ -40,9 +40,9 @@
   ignition::common::DirIter endIter;
   for (common::DirIter file(exampleConfigPath); file != endIter; ++file)
   {
-    // TODO(louise) Investigate why TopicEcho crashes on shutdown
-    if ((*file).find("pubsub") != std::string::npos)
-      return;
+    // only test image.config to observe failure
+    if ((*file).find("image") == std::string::npos)
+      continue;
 
     Application app(g_argc, g_argv);
     app.AddPluginPath(std::string(PROJECT_BINARY_PATH) + "/lib");

Expected behavior:

test passes

Actual behavior:

test fails

Reproduces how often:

100% of time

Versions

1.0.0

Make global shortcuts either opt-out or configurable

Original report (archived issue) by Andrés Fortier (Bitbucket: andres_fortier).


After merging https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-gui/pull-requests/43 and integrating it with another project, we realized that we may want to use those shortcuts for other actions in the app. After discussing a bit with @caguero and @nkoenig we concluded that it would be nice if either:

  • Defining those shortcuts could be configurable (just a boolean flag to opt in/out).
  • Let the application decide what shortcuts map to the config related actions.

Example config pubsub is broken

Original report (archived issue) by Steve Peters (Bitbucket: Steven Peters, GitHub: scpeters).


Description

The example pubsub.config is broken. It is currently disabled from testing in INTEGRATION_Examples_TEST; otherwise it causes a seg-fault.

Steps to reproduce

Apply the following patch, build and run the test, which will only test the pubsub.config:

diff -r 83190ef569c4b4871bc1afa039232ddd5317d661 test/integration/Examples_TEST.cc
--- a/test/integration/Examples_TEST.cc	Thu Mar 07 11:14:34 2019 -0800
+++ b/test/integration/Examples_TEST.cc	Thu Mar 07 13:30:12 2019 -0800
@@ -40,9 +40,9 @@
   ignition::common::DirIter endIter;
   for (common::DirIter file(exampleConfigPath); file != endIter; ++file)
   {
-    // TODO(louise) Investigate why TopicEcho crashes on shutdown
-    if ((*file).find("pubsub") != std::string::npos)
-      return;
+    // only test pubsub.config to observe failure
+    if ((*file).find("pubsub") == std::string::npos)
+      continue;
 
     Application app(g_argc, g_argv);
     app.AddPluginPath(std::string(PROJECT_BINARY_PATH) + "/lib");

Expected behavior:

test passes

Actual behavior:

test fails

Reproduces how often:

100% of time

Versions

1.0.0

Fail to find Plot plugin as child of window in OSX

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


Plot_TEST has been failing on OSX because it fails to find Plot as child of the main window, even though debug statements indicate the plugin was properly loaded.

I don't have a way to immediately test this on OSX to check if the plugin itself works, so I'm skipping the tests for now until this can be investigated.

materialTheme in MainWindow

Original report (archived issue) by mingfei sun (Bitbucket: mingfeisun).


It seems that the material theme for the main window is “Light”, which may cause the visibility issues. See

https://github.com/ignitionrobotics/ign-gui/blob/2dd4f0bf9bbcd90399ecbecddfe5a8cf46aa9f73/src/MainWindow.cc#L428

The visibility problems when displaying ign gazebo in Ubuntu Bionic:



I temporally changed the code as follows: this-&gt;materialTheme = “Dark”; after recompiling, it works ok. But it’s not flexible. May I ask if there are any solutions to solve this problem?

ign gui -v

Original report (archived issue) by Nate Koenig (Bitbucket: Nathan Koenig).


This causes an empty window to appear, when it should print out a help menu because the -v option is missing a value.

ign gui -v -c ../examples/config/topicInterface.config

Dock plugins on a left split

Plugins in Ignition GUI can be positioned in one of 2 ways:

  • Floating
  • Docked inside resizable splits

Currently, the only docked layout supported by Ignition GUI consists of a single vertical split, and multiple horizontal splits on the right, which is quite limited.

This issue is about adding a 2nd split to the left where plugins could also be docked.

Some plugins not properly loaded in debug mode

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


Description

[Description of the issue]

Steps to Reproduce

  1. Compile in debug mode
  2. Run the UNIT_WorldStats_TEST

Expected behavior:

Test passes

Actual behavior:

Test fails to find the rendering plugin:

[Dbg] [Application.cc:87] Initializing application.
[GUI] [Dbg] [Application.cc:404] Create main window
[GUI] [Msg] Loading plugin [WorldStats]
 loaded plugins : 0
[GUI] [Err] [Application.cc:334] Failed to load plugin [WorldStats] : couldn't load library on path [/home/ian/depot/ign_ws/build/ign_gui/lib/libWorldStats.so].
/home/ian/depot/ign_ws/src/ign-gui/src/plugins/WorldStats_TEST.cc:43: Failure
Value of: app.LoadPlugin("WorldStats")
  Actual: false
Expected: true

Reproduces how often:

💯 % of the time

Versions

ign-gui1

Additional Information

See discussion on pull request #186

Slow widget creation in TopicInterface plugin

Original report (archived issue) by Carlos Agüero (Bitbucket: caguero, GitHub: caguero).


I'm a publishing an Ignition.msgs.Scene message with a few models and links. It takes more than 10+ seconds to load all the fields in the TopicInterface plugin. My preliminary profiling points to MessageWidget::Parse().

Here's how to reproduce it:

Terminal 1:

#!c++

caguero@flaco:~/delphyne_ws/src/ign_gui$ ign gui -c examples/config/topicInterface.config

Terminal 2:
Paste the content of this snippet.

Allow placing plugins on top of main toolbar

Currently, floating plugins can only be placed below the toolbar.

It would be nice to also support adding small plugins, usually consisting of some buttons, on top of the toolbar. We may be able to do this with the current floating plugins, just making sure that's a valid XY position and that their Z can be above the toolbar.

Publish key presses to a topic

Gazebo-classic has the KeyboardGUIPlugin, which is a GUI plugin that filters all key presses on the main window and publishes them using transport. This is very convenient for other plugins to react to key presses.

The topic used on classic was ~/keyboard/keypress and the message type was msgs::Any with an integer value representing the key. This has confused users in the past, so we should be sure to document it well.

Style QFileDialog

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


All file dialogs are picking up the material design style but it isn't a good fit. I think it would be best for this dialog to just use the system style of each user.

I've tried adding the following to the end of style.qss in the hope that it would clear up the style for all its descendants, but that didn't seem to do the trick, so this will need some deeper investigating.

QFileDialog *
{
}

[Question] Non-detachable, non-closeable plugin widget?

Original report (archived issue) by Andrés Fortier (Bitbucket: andres_fortier).


I would like to create a layout that has a main widget (which is a plugin) that can't be detached nor closed, while leaving the rest of the widgets as they are by default (detachable and closeable). Is that possible? I'm ok if that requires either changing the code in the plugin or in the app (or both).

Undocked plugins have transparent background

Plugins in the main window, when undocked, have a transparent background which makes them less readable if they in front of some other plugin.
There are two possible implementations in my mind to solve them:

  1. Adding a color palette on the floating plugin toolbar. User can select the background color along with the transparency.
  2. Adding color palette with the transparency in plugin settings (right click -> settings).

The color palette option in the toolbar is easily accessible and noticeable but on the other hand color palette placed in the settings menu seems like the right way to do. I would like inputs on this issue to go ahead with the actual implementation.

Close plugin menu after a plugin has been added

Original report (archived issue) by Nate Koenig (Bitbucket: Nathan Koenig).


Summary

After inserting a plugin using the drop-down menu in the QTQuick version of ign-gui, I would expect the drop-down to close. Right now the menu stays open, and the user has to click away to close the menu.

Motivation

I think it feels more natural for the drop-down menu to close after a plugin has been inserted. The downside is that a user who wants to insert multiple plugins will need to click the drop-down menu multiple times.

Describe alternatives you've considered

We could keep the current behavior, where the menu stays open after a plugin is clicked. However, I think it's more likely that a user wants to insert a single plugin rather than multiple at any one time.

Additional context

drop-down-menu.gif

Notification snackbar

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


Summary

We often want to display information to users, and ideally that would be displayed in a unified way across the app. On material design terms, we should have a snackbar.

Motivation

Many plugins will want to display some text information to users, such as errors, warnings and other information. But if each plugin displays it in a different way, the user's experience is not as fluid. Having a central snackbar that can receive notifications from any plugin would be ideal.

Describe alternatives you've considered

Currently, plugins are either displaying all their notifications on the console, or opening dialogs.

Additional context

Additional references:

Display plugins meta-ticket

Original report (archived issue) by Deanna Hood (Bitbucket: d_hood).


Objective is a widget that lets you load various "displays" (something that paints on the render window, e.g. a grid). Each display will have some common properties (e.g. checkbox for toggling visibility), and potentially some custom properties specific to its plugin (e.g. colour of a grid).

Subtasks:

  • [✔] #137 DisplayPlugin base class, sample displays (grid, realtime factor), and minimal loader. Minimum functionality, not the most "beautiful" widget.
    • Limitations:
      • Piggybacking on loading of generic Plugins.
      • The list of displays to load can be specific in the config file, but not the configuration of the displays.
      • RealtimeFactorDisplay using MoveableText instead of an overlay of some form.
    • Issues:
      • [✔] Displays widget's layout (displays not aligning to top, not expanding correctly).
      • [✔] Correct size of Displays widget when using DisplayPlugins with expandable properties, e.g. displays can expand beyond the bottom of the screen. Should use scroll area, see #32 (#32).
      • [✔ ] RealtimeFactorDisplay disable not working.
      • [✔] RealtimeFactorDisplay crash on initialisation in some demos.
  • [✔] #144 Custom Plugin type/loading (so DisplayPlugins don't pollute the list of Plugins available).
  • [✔] #143 Call SetVisible on each display's root Visual when visibility checkbox is toggled (needs to be implemented in ign-rendering: #69 ✔).
  • [✔] #146 UI enhancements
  • [✔] #148 Loading initial properties of displays from config file.
  • [✔] #148 Saving/loading configuration of Displays widget.
  • #150 RTF Display using/mimicking Overlay instead of MoveableText. (Requires ability to attach visuals to camera in ign-rendering: #88 ✔)
  • Implement OriginDisplay (available downstream)

Properly terminate render engine

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


@iche033 mentioned on pull request #62 that we should call Fini on the ignition-rendering engine before terminating the program so it shuts down properly.

I tried calling fini when the engine has no more scenes like this:

diff -r 17c6c8bc83ab46edfadd765870d150e87d868e4e src/plugins/Scene3D.cc
--- a/src/plugins/Scene3D.cc	Tue Dec 26 08:53:22 2017 -0800
+++ b/src/plugins/Scene3D.cc	Tue Dec 26 09:27:22 2017 -0800
@@ -90,6 +90,8 @@
     engine->DestroyScene(scene);
 
     // TODO: If that was the last scene, terminate engine?
+    if (engine->SceneCount() == 0)
+      engine->Fini();
   }
 }

But if after doing this, we try to open a new scene plugin (i.e. re-init the engine), the program crashes with this backtrace:

/usr/local/lib/libignition-rendering-ogre.so.0(_ZN8ignition9rendering9OgreScene13CreateContextEv+0x75) [0x7f49e1e5c731] /home/louise/code/ign-rendering/src/ogre/OgreScene.cc:339
/usr/local/lib/libignition-rendering-ogre.so.0(_ZN8ignition9rendering9OgreScene8InitImplEv+0x3a) [0x7f49e1e57faa] /home/louise/code/ign-rendering/src/ogre/OgreScene.cc:124
/usr/local/lib/libignition-rendering-base.so.0(_ZN8ignition9rendering9BaseScene4InitEv+0x1d1) [0x7f49e18de6a7] /home/louise/code/ign-rendering/src/base/BaseScene.cc:70
/usr/local/lib/libignition-rendering-base.so.0(_ZN8ignition9rendering16BaseRenderEngine12PrepareSceneESt10shared_ptrINS0_5SceneEE+0xc8) [0x7f49e18daea6] /home/louise/code/ign-rendering/src/base/BaseRenderEngine.cc:214
/usr/local/lib/libignition-rendering-base.so.0(_ZN8ignition9rendering16BaseRenderEngine11CreateSceneEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x785) [0x7f49e18daae5] /home/louise/code/ign-rendering/src/base/BaseRenderEngine.cc:193
/usr/local/lib/libignition-rendering-base.so.0(_ZN8ignition9rendering16BaseRenderEngine11CreateSceneERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x86) [0x7f49e18da2e0] /home/louise/code/ign-rendering/src/base/BaseRenderEngine.cc:167
/usr/local/lib/ign-gui-0/plugins/libScene3D.so(_ZN8ignition3gui7plugins7Scene3D10LoadConfigEPKN8tinyxml210XMLElementE+0x1199) [0x7f49e24ed8e7] /home/louise/code/ign-gui/src/plugins/Scene3D.cc:170
/usr/local/lib/libignition-gui0.so(_ZN8ignition3gui6Plugin4LoadEPKN8tinyxml210XMLElementE+0x93d) [0x7f4a1557b765] /home/louise/code/ign-gui/src/Plugin.cc:100
/usr/local/lib/libignition-gui0.so(_ZN8ignition3gui10loadPluginERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKN8tinyxml210XMLElementE+0x15c8) [0x7f4a154cebe1] /home/louise/code/ign-gui/src/Iface.cc:553
/usr/local/lib/libignition-gui0.so(_ZN8ignition3gui10MainWindow11OnAddPluginE7QString+0x1d7) [0x7f4a154f041d] /home/louise/code/ign-gui/src/MainWindow.cc:268
/usr/local/lib/libignition-gui0.so(_ZN8ignition3gui10MainWindow18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv+0x19d) [0x7f4a1559fd97] /home/louise/code/ign-gui/build/include/ignition/gui/moc_MainWindow.cpp:88
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN11QMetaObject8activateEP7QObjectiiPPv+0x7ea) [0x7f4a1228fd2a]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN13QSignalMapper6mappedERK7QString+0x35) [0x7f4a1229a1a5]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN13QSignalMapper3mapEP7QObject+0x202) [0x7f4a1229b6f2]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN11QMetaObject8activateEP7QObjectiiPPv+0x7ea) [0x7f4a1228fd2a]
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5(_ZN7QAction9triggeredEb+0x42) [0x7f4a1309f412]
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5(_ZN7QAction8activateENS_11ActionEventE+0xf8) [0x7f4a130a1898]
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 [0x7f4a130a1e1f]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN7QObject5eventEP6QEvent+0xf1) [0x7f4a12290c01]
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5(_ZN7QAction5eventEP6QEvent+0x22) [0x7f4a130a2122]
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5(_ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent+0x8c) [0x7f4a130a905c]
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5(_ZN12QApplication6notifyEP7QObjectP6QEvent+0x256) [0x7f4a130ae516]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN16QCoreApplication14notifyInternalEP7QObjectP6QEvent+0xdb) [0x7f4a1226138b]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN23QCoreApplicationPrivate16sendPostedEventsEP7QObjectiP11QThreadData+0x2c6) [0x7f4a12263786]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5 [0x7f4a122b73c3]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_main_context_dispatch+0x2a7) [0x7f4a0f33f197]
/lib/x86_64-linux-gnu/libglib-2.0.so.0 [0x7f4a0f33f3f0]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_main_context_iteration+0x2c) [0x7f4a0f33f49c]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE+0x5f) [0x7f4a122b77cf]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE+0x10a) [0x7f4a1225eb4a]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN16QCoreApplication4execEv+0x9c) [0x7f4a12266bec]
/usr/local/lib/libignition-gui0.so(_ZN8ignition3gui13runMainWindowEv+0x205) [0x7f4a154d09bb] /home/louise/code/ign-gui/src/Iface.cc:659
/usr/local/lib/libignition-gui0.so(_ZN8ignition3gui9runConfigERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x3ee) [0x7f4a154c9be1] /home/louise/code/ign-gui/src/Iface.cc:226
/usr/local/lib/libignition-gui0.so(cmdConfig+0x81) [0x7f4a154eabe9] /home/louise/code/ign-gui/src/ign.cc:53
/usr/lib/x86_64-linux-gnu/libffi.so.6(ffi_call_unix64+0x4c) [0x7f4a158b2e40]
/usr/lib/x86_64-linux-gnu/libffi.so.6(ffi_call+0x2eb) [0x7f4a158b28ab]
/usr/lib/x86_64-linux-gnu/ruby/2.3.0/fiddle.so [0x7f4a15ab9758]
/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3 [0x7f4a180427ef]
/usr/lib/x86_64-linux-gnu/ruby/2.3.0/fiddle.so [0x7f4a15ab9585]
/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3 [0x7f4a1802450b]
/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3 [0x7f4a180324a3]
/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3 [0x7f4a180334d3]
/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3 [0x7f4a1802819c]
/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3 [0x7f4a1802d142]
/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3 [0x7f4a17f13cfd]
/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3(ruby_exec_node+0x1d) [0x7f4a17f156fd]
/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3(ruby_run_node+0x1e) [0x7f4a17f1783e]
/usr/bin/ruby [0x40087b]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0) [0x7f4a17b02830] ../csu/libc-start.c:291
/usr/bin/ruby(_start+0x29) [0x4008a9]

Migration guide

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


I'm getting deprecation warnings that 'Advertise' is deprecated, and I need to dig through the code to find out what's the substitute

ign test (CmdLine.list) failing on homebrew

Heirarchy widget replace nested collapsible

Original report (archived issue) by Nate Koenig (Bitbucket: Nathan Koenig).


We should not use nested collapsible widgets, as is found in Scene widget.

Instead, a child element should replace the parent element and offer a back button to return to the parent.

You can try this out on your android phone. Go to "settings" and start navigating down through the menu. Each child menu replaces the previous.

See also: https://material.io/guidelines/patterns/navigational-transitions.html#

Sporadic UNIT_VariablePillContainer_TEST failure

Original report (archived issue) by Nate Koenig (Bitbucket: Nathan Koenig).


This test mentioned in the title fails about 4 out of 10 times for me. Here is the output:

/data/ignition/ign-gui/src/VariablePillContainer_TEST.cc:185: Failure
Value of: var02->mapToGlobal(varCenter).y()
  Actual: 52
Expected: var02Global.y()
Which is: 15

Run tests without installing

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


From pull request #24:

It's a nice thing to support tests without installing. For example, installing may pollute my computer with a version of code that I don't want. However, I still want to review a pull request.

I think you can accomplish this with clever usage of path information. Gazebo's tests of its command line tools might be a place to look for an example.

Segfault on external plugin loading

Original report (archived issue) by Andrés Fortier (Bitbucket: andres_fortier).


Disclaimer: I know this is a weird issue and may be difficult to debug, esp. as I am the only one on a group of 4 devs seeing it. However I'm running out of ideas on what this may be, hence I created the issue. Any help will be much appreciated.

We have an application that defines a set of custom plugins. After updating ign_gui (and other dependencies) the plugin load procedure started to segfault. The details:

Plugin::Plugin() : dataPtr(new PluginPrivate)
{
  std::cout << "!!! INIT !!! " << std::endl;
}

and tested with different plugins. The result is that all the plugins shipped with ign_gui call the constructor, but those defined outside (i.e. in an app that use ign_gui as a library) don't call it.

  • Same as above happens for the destructors. When a ing_gui plugin is removed from the UI by hitting the X button the destructor is called. However, for "outside" plugins the destructor is not called.
  • The constructor not being called would explain dataPtr having garbage, as it is the only place where it is initialized.
  • Given that dataPtr is private I can't think on a workaround on our side to fix it.
  • Below is the gdb output as stacktrace:
$ gdb visualizer 
[...]
Reading symbols from visualizer...done.
(gdb) r
Starting program: /home/andres/OSRF/DrakeFrontEnd/delphyne_ws/install/bin/visualizer 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Msg] Visualizer 0.1.0
[New Thread 0x7fffde049700 (LWP 24813)]
[New Thread 0x7fffd408d700 (LWP 24814)]
[New Thread 0x7fffd3875700 (LWP 24815)]
[New Thread 0x7fffd3074700 (LWP 24816)]
[GUI] [Msg] Applying stylesheet [:/style.qss]
[GUI] [Msg] Loading plugin [libRenderWidget.so]
[New Thread 0x7fffc23b6700 (LWP 24818)]
[New Thread 0x7fffc1bb5700 (LWP 24819)]
[New Thread 0x7fffc13b4700 (LWP 24820)]
[New Thread 0x7fffc0bb3700 (LWP 24821)]
[New Thread 0x7fffbbfff700 (LWP 24822)]
Thread 1 "visualizer" received signal SIGSEGV, Segmentation fault.
ignition::gui::Plugin::DeleteLaterRequested (this=0x7250b0) at /home/andres/OSRF/DrakeFrontEnd/delphyne_ws/src/ign_gui/src/Plugin.cc:150
150       return this->dataPtr->deleteLaterRequested;
(gdb) bt
#0  ignition::gui::Plugin::DeleteLaterRequested (this=0x7250b0) at /home/andres/OSRF/DrakeFrontEnd/delphyne_ws/src/ign_gui/src/Plugin.cc:161
#1  0x00007ffff7b884e6 in ignition::gui::addPluginsToWindow () at /home/andres/OSRF/DrakeFrontEnd/delphyne_ws/src/ign_gui/src/Iface.cc:589
#2  0x00007ffff7b8e35b in ignition::gui::MainWindow::OnAddPlugin (this=<optimized out>, _plugin=...) at /home/andres/OSRF/DrakeFrontEnd/delphyne_ws/src/ign_gui/src/MainWindow.cc:269
#3  0x00007ffff7bba5a4 in ignition::gui::MainWindow::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
    at /home/andres/OSRF/DrakeFrontEnd/delphyne_ws/build/ign_gui/include/ignition/gui/moc_MainWindow.cpp:88
#4  0x00007ffff6fc7d2a in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007ffff6fd21a5 in QSignalMapper::mapped(QString const&) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007ffff6fd36f2 in QSignalMapper::map(QObject*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7  0x00007ffff6fc7d2a in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007ffff760b412 in QAction::triggered(bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#9  0x00007ffff760d898 in QAction::activate(QAction::ActionEvent) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#10 0x00007ffff778fe52 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#11 0x00007ffff77960ec in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#12 0x00007ffff779a060 in QMenu::mouseReleaseEvent(QMouseEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#13 0x00007ffff7657fc8 in QWidget::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#14 0x00007ffff779aab3 in QMenu::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#15 0x00007ffff761505c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#16 0x00007ffff761ac19 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#17 0x00007ffff6f9938b in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#18 0x00007ffff7619b32 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#19 0x00007ffff767291d in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#20 0x00007ffff7674b7b in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#21 0x00007ffff761505c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#22 0x00007ffff761a516 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#23 0x00007ffff6f9938b in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#24 0x00007ffff53ad4e1 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#25 0x00007ffff53af1a5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#26 0x00007ffff5392f08 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#27 0x00007ffff7ead200 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#28 0x00007ffff4a98197 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#29 0x00007ffff4a983f0 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#30 0x00007ffff4a9849c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#31 0x00007ffff6fef7cf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#32 0x00007ffff6f96b4a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#33 0x00007ffff6f9ebec in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#34 0x00007ffff7b86790 in ignition::gui::runMainWindow () at /home/andres/OSRF/DrakeFrontEnd/delphyne_ws/src/ign_gui/src/Iface.cc:659
#35 0x000000000040163e in main (argc=<optimized out>, argv=<optimized out>) at /home/andres/OSRF/DrakeFrontEnd/delphyne_ws/src/delphyne_gui/visualizer/visualizer.cc:102
  • Our class is defined as:
class RenderWidget : public ignition::gui::Plugin {
  Q_OBJECT

 public:
  /// \brief Default constructor.
  explicit RenderWidget(QWidget* parent = 0);
[...]
}

and

RenderWidget::RenderWidget(QWidget* parent)
    : Plugin(), initializedScene(false), engine(nullptr) {
[...]
}

And of course, let me know if you need more info. Any pointers / hints will be greatly appreciated.

[MessageWidget] Repeated field name doesn't handle name changes

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


The feature added on pull request #109 only works nicely if all subsequent messages maintain the number of repetitions, their order and their names. If either of these changes, the collapsible is not renamed and the widget becomes inconsistent.

A failing test case has been added and commented out. Possible solutions I can think of:

  1. Never reuse repeated widgets, always construct them new - this is very expensive computationally
  2. Always check the name and rename the widget if needed - this should be cheaper than #1 but will still have some impact

Error on xml parsing when loading a ".config" file with an empty stylesheet

Original report (archived issue) by Alexis Pojomovsky (Bitbucket: apojomovsky).


Hi guys,
this is my first appearance here so let me introduce myself. My name's Alexis Pojomovsky and I'm currently working in the Delphyne project, as part of the team from the external contractor Ekumen.

That being said, I'd like to report an issue we experimented when attempting to load a ".config" file that loads the system's default qt style.
To accomplish this, we found that we can use an empty stylesheet as part of the config file, but by doing that, we found that if we do this:

#!xml

...
  <stylesheet>
  </stylesheet>
...

the system fails with this: IOError: [Errno 11] Resource temporarily unavailable

On the other hand, if we add a comment line like this, the system works as expected:

#!xml

...
  <stylesheet>
     /* comment */
  </stylesheet>
...

It's not a big deal, and definitely does not prevent us from keep working, but we thought I'd be good to let you know about it (if you're not already aware of it).

FYI @clalancette

Plotting tool

Gazebo-classic has a featureful plotting tool so users can visualize various types of data coming from simulation.

We initially ported that tool to Ignition back in ign-gui0, when we were still using QWidgets. Since we moved to QML, we need a new plotting tool using QML's QtCharts.

User stories

Here are some user stories ordered from the most important to the least important. The users are defined as follows:

  • ign-gui user: someone running an application built on top of Ignition GUI which they didn’t necessarily write themselves
  • ign-gazebo user: someone running a simulation which they didn’t necessarily write themselves. All ign-gazebo users are ign-gui users.
  • ign-gui developer: someone writing new ign-gui plugins
  • ign-gazebo developer: someone writing new ign-gazebo plugins. Some ign-gazebo developers are also ign-gui developers (if they write ign-gazebo GUI plugins).

Some stories:

  1. As an ign-gazebo user, I want to plot the X position of my robot over sim time
  2. As an ign-gazebo user, I want to plot the acceleration data of my robot's IMU
  3. As an ign-gazebo user, I want to plot the angular velocities of all my robot’s wheels on the same plot
    1. I want to add new variables to an existing plot
    2. I want to remove variables from an existing plot
  4. As an ign-gazebo user, I want to different plots side-by-side
  5. As an ign-gazebo user, I want to be able to zoom into a plot
  6. As an ign-gui developer, I want to plot the value of an Ignition Transport topic over time
  7. As an ign-gazebo user, I want to plot the value of a built-in component over time
  8. As an ign-gazebo developer, I want to plot the value of a custom component over time
  9. As an ign-gui user, I want to hover over a plot and see the exact value at that point
  10. As an ign-gui user, I want to clear the current values in a plot
  11. As an ign-gui user, I want to export a plot as a CSV file to process it with a different application
  12. As an ign-gui user, I want to export a plot as a SVG file to display it on a presentation

Features

Based on the user stories above, here's a list of features to be implemented:

Ignition GUI

These features should be implemented on Ignition GUI, so they can be used by users that are not using Ignition Gazebo.

  • Plot messages and fields from ign-transport topics
    • User stories: 2, 6
  • List all topics and their “plottable” fields #69
    • User stories: 3
  • Add new variables to a plot, choosing from list
    • User stories: 3
  • Remove variables from a plot
    • User stories: 3
  • Multiple plot plugins can be instantiated at the same time
    • User stories: 4
  • Zoom
    • User stories: 5
  • Hover line and value
    • User stories: 9
  • Clear plot
    • User stories: 10
  • Export to CSV
    • User stories: 11
  • Export to SVG
    • User stories: 12

Ignition Gazebo

Additional features that are only needed in Ignition Gazebo.

Keeping track of them here just to have it all in one place.

  • List all components and their “plottable” fields (leverage Component Inspector)
    • User stories: 1, 3, 7, 8
  • Plot ign-gazebo components
    • User stories: 1, 3, 7, 8

Implementation

@AmrElsersy has started implementation at https://github.com/AmrElsersy/Ignition-plotting. That will be refactored and moved to ign-gazebo / ign-gui.

The current plan is to split the implementation into a few parts:

  • Ignition GUI
      • TopicViewer: An ign-gui plugin which lists all ign-transport topics currently published. #69
        • It's the same idea as ign-gui0's TopicViewer, see this PR:
          4211734814-topic_viewer
        • It's a regular ign-gui plugin.
      • PlottingInterface: A QML component that displays plots and provides an API to be updated.
        • It's installed with ign-gui and is not a plugin by itself, similar to IgnSpinBox, but including some C++ logic.
        • Most features should be here, like all the interactions (zoom, hover...), exporting to CSV, etc.
        • This is currently PlottingInterface on @claireyywang 's branch.
      • TopicPlotting: An ign-gui plugin which plots ign-transport topics.
        • It uses PlottingInterface
        • It accepts topics being dropped from TransportTopics.
        • It's a regular ign-gui plugin.
        • This is currently TopicPlotting on @claireyywang 's branch.
  • Ignition Gazebo
      • PlottingTool: An ign-gui plugin which plots ign-gazebo components.
        • It uses PlottingInterface
        • It accepts components being dropped from ComponentInspector.
        • It's an ign-gazebo GUI plugin (has access to components).
        • This is currently PlottingTool on @claireyywang 's branch.

Deprecation warning on homebrew from qt 5.13

Original report (archived issue) by Steve Peters (Bitbucket: Steven Peters, GitHub: scpeters).


There is a deprecation warning on homebrew with qt 5.13 complaining that QSortFilterProxyModel::filterChanged has been deprecated and that QSortFilterProxyModel::invalidateFilter should be used instead:

src/SearchModel.cc:152:9: warning: 'filterChanged' is deprecated: Use QSortFilterProxyModel::invalidateFilter [-Wdeprecated-declarations]
  this->filterChanged();
        ^
/usr/local/opt/qt/lib/QtCore.framework/Headers/qsortfilterproxymodel.h:143:5: note: 'filterChanged' has been explicitly marked deprecated here
    QT_DEPRECATED_X("Use QSortFilterProxyModel::invalidateFilter") void filterChanged();
    ^
/usr/local/opt/qt/lib/QtCore.framework/Headers/qglobal.h:294:33: note: expanded from macro 'QT_DEPRECATED_X'
#  define QT_DEPRECATED_X(text) Q_DECL_DEPRECATED_X(text)
                                ^
/usr/local/opt/qt/lib/QtCore.framework/Headers/qcompilerdetection.h:649:55: note: expanded from macro 'Q_DECL_DEPRECATED_X'
#    define Q_DECL_DEPRECATED_X(text) __attribute__ ((__deprecated__(text)))
                                                      ^
1 warning generated.

Build Status https://build.osrfoundation.org/job/ignition_gui-ci-ign-gui2-homebrew-amd64/3/warnings10Result/

[Scene3D] Memory leak on resize

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


When resizing the scene 3D plugin, I can see using top that the memory almost doubles each time the window is resized.

I traced it down to these lines on Scene3D. If I comment out SetImageWidth, SetImageHeight and SetAspectRatio, the issue doesn't happen.

The comment on the code, setting the size should cause the render texture to be rebuilt led me to OgreRenderTarget::RebuildImpl. There are some "destroy" functions which are not implemented there.

I started trying to implement them here (gazebosim/gz-rendering@1af343b), but the memory leak is still happening.

@iche033 , any tips?

Failure to compile 2x in a row

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


After running make for the first time, running it on the second time gives the following error:

doc/CMakeFiles/doc.dir/build.make:57: recipe for target 'doc/CMakeFiles/doc' failed
make[2]: *** [doc/CMakeFiles/doc] Error 1
CMakeFiles/Makefile2:181: recipe for target 'doc/CMakeFiles/doc.dir/all' failed
make[1]: *** [doc/CMakeFiles/doc.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

This is probably related to the doc changes done on pull request #61

Consider using Qt's plugin framework instead of ignition's

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


Qt provides its own plugin framework. It might be a good idea to use that instead of Ignition Common's, since in theory it is especially tailored for Qt.

There is some urgency sorting this out since there is a pull request landing into ign-common's default branch soon which will break compatibility with Ignition GUI.

Some things to be figured out:

  • Does Qt provide the same features as Ignition, such as:

    • Cross-platform support (yes)
    • Automatically unloading libraries when they are no longer in use (might require some work on our end?)
    • Libraries / plugins may offer more than one interface (looks like a yes)
    • Can discover / find new plugins at runtime (looks like a yes)
  • How much effort would it be to support the ign-gui case with ign-common's new plugin loader? Is it worth the trouble?

@mxgrey

Window is allowed to become larger than monitor

Original report (archived issue) by Deanna Hood (Bitbucket: d_hood).

The original report had attachments: scene3d_too_large.png


Sometimes windows are allowed to become taller than what the monitor can display. This cuts off the bottom of the window so you can't see the contents of some widgets, but more of an issue is that it cuts off the ability for the user to make the window smaller (for which you need to mouse-over the bottom of the window).

This can happen when collapsible widgets (e.g. Grid3D) are expanded, but it can also just happen if the default window size specified in the config file is too large. I've attached an example of the scene3d.config example which is too large for my laptop's builtin display of 1600x900.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.