Gazebo resources: Tutorials | Q&A | Documentation | Blog

GSoC 2020: Project Plotting UI Ignition

Dear Gazebo community, Hope you are well :smiley: ,
I am Amr Elsersy, a 3rd year computer engineering student @ ASU, Egypt.
I am very interested in software robotics, and i am really excited to contribute in ignition , specially Plotting UI for Ignition Project , i have an experience in Qt C++ Framework in many projects in both (Qt Widget & Qt Quick, QML), i also have experience in ROS as i participated for 2 years in a ROV team that enters the ROV MATE Competition & we use ROS in our project.

And as i am interested in both robotics and qt applications, i felt that this project is the best choice for me.

This field is very interesting for me and i want to get that amazing experience of open source contributing in ignition.

i followed all the tutorials of ignition gui and i got familiar with it. also i learnt Qt Charts in QML and got familiar with it.

i want to know what is the next step that i can do ?
thank you very much for your time :smile:

kindly check my Github : https://github.com/AmrElsersy

1 Like

Hi Amr,

Thank you for your interest in the plotting project! I see you’ve already been playing with Ignition GUI and Qt Charts, which is great! That’s probably the best way you have get a feeling for what the project would be like!

That’s great! Ignition GUI also has some examples here which are not easy to find, be sure to check those out too. I’d also recommend you go over Ignition Gazebo’s tutorials and examples, because those will be important for you to know how to extract data from simulation.

Cheers

Hello Louise, hope you are fine :smile:
i have followed your suggestions for a while and that is what i did :

  • I followed the examples of the ign-gui and knew how to build a gui plugin
  • I followed the tutorials and examples of ign-gazebo and got familiar with it and with its
    entity component structure and learnt how to extract data from it via the ECM
  • I also followed the tutorials-examples of the ign-transport to get familiar with it

I tried to apply all that so i write a code to plot the x-coordinates of a car in ign-gazebo (i used the “levels.sdf” in the examples to get the car & “standalone keyboard” to control it)
and i make 2 plugins , a System plugin & Gui Plugin, the system plugin extracts the position of the car and publish it via ign-transport publisher to the gui plugin, and the gui plugin subscribes to that topic to get the data and plot it via Qt Charts

this is a part of the code, but you can see the whole code at https://github.com/AmrElsersy/Ignition-plotting

i want to ask about your opinion in what i did :smile:
is that is the best way to extract data from ign-gazebo ? via ign-transport ?
or it can be done only by the gui plugin ?
i tried to make the gui plugin and system plugin in one plugin (making the class inherits from Plugin, System and ISystemPostUpdate ) but i had i huge amount of CMake errors :sweat_smile: ,but i guess that they are 2 different types of plugins and cannot be merged, what do you think about that ?

thank you for your time Louise, i will be waiting for you :smile:

1 Like

this is a 30 seconds video shows what i did.

and kindly take a look at the results of the problem of Qt charts in ignition gazebo
https://answers.gazebosim.org/question/24669/qt-charts-with-ignition-gui-plugin/

thanks :smile:

1 Like

Nice, Amr! This is looking awesome!

That sounds like a great approach! Plotting values from Ignition Transport topics is definitely a very common use case that needs to be supported. I’m super impressed you got it to work so fast!

Your publisher system sounds similar to ignition::gazebo::systems::PosePublisher, did you see if there’s any overlap with that?

That’s definitely one of the ways. I think many users will be using that. The advantage of Ignition Transport is that it’s not limited to Ignition Gazebo. Other applications could be publishing on those topics and using your plugin to plot them.

Another use case, specific to Ignition Gazebo, is plotting data directly from components. See below.

I’m not sure if you’ve seen this, but there’s a plugin type in Ignition Gazebo which sounds like it does exactly what you want, ignition::gazebo::GuiSystem I’m adding an example on this pull request. That should give you access to components on the GUI. I think that would be the 2nd most common use case for the plot.

I just replied! You’re welcome to open a pull request against ign-gui's default branch with your changes! Be sure to update all other libraries according to this list. Thanks a lot!

1 Like

This is really very helpful :smile: :blue_heart:
no i didn’t see it before, this definitely solves the problem, i was using the ign-transport not for only plotting via topics, but also to plot via entities’s components ! , because i thought that i can’t do that in the gui plugin so i made a system plugin and connect it with the gui plugin with ign-transport as a bridge to transfer the entities and components data, but the GuiSystem plugin is a perfect solution ! thank you very much :smile:

I re-implemented the code to use the GuiSystem so that we will implement one plugin that has the logic of the plotting in 2 ways (via ignition transport and entities-components after we get access to the ECM ) and this is the code https://github.com/AmrElsersy/Ignition-plotting/tree/master/gui_system_plugin ,
of course it is hard coded to subscribe to a cretin topic, and access specific component, but the next step is to make the user choose them :love_you_gesture:

this is a 35 seconds video shows the plotting via car position and plotting via ign transport ( publishing via the terminal )


but i had a small problem, that the GuiSystem Plugin can run only via ign gazebo with ign-gui ! i can’t run it via only ign-gui, so how can the user use it outside ign-gazebo?
is that normal ??

my updates are in ign-gui only, what do you mean by updating other libraries ?

That sounds great!

Yes, that’s a good point. The GuiSystem only works with ign-gazebo. I think it would be great to:

  • have the bulk of the plotting code on ign-gui, outside a plugin
  • have a pure ign-gui plugin which implements the Ignition Transport interface on top of the plotting code
  • have an ignition::gazebo::GuiSystem which implements the components interface on top

What do you think?

Oh sorry, what I meant is that since this is targeting an unreleased Ignition version (Ignition Dome), you’ll need to build several libraries from source. I’d recommend you actually build them all from source, using the branches on the file linked above. You can find instructions here.

:v::fire:

1 Like

sounds a cool idea :smile:
i will work on that and will tell you once i finish :love_you_gesture:

thanks :smile:

1 Like