[Documentation] [TitleIndex] [WordIndex

GUI library

Customers

Current state

RViz uses the GUI library wxWidgets.

Problem Description

Why should we change the system / what is the problem?

Technical solution

Plugin Management System

Customers

Current state

RViz currently uses a custom mechanism for locating and loading plugins based directly on ros::package::getPlugins and dynlib.h, which comes with wxWidgets.

Problem Description

The non-standard way of doing plugins requires additional documentation, make the learning curve for plugin developers steeper and makes the knowledge about RViz plugins less transferable.

If RViz will stop using wx, then we will need a different plugin system anyway.

Proposed Solution

Alternative plugin system options and their pros/cons:

Plugin API

Customers

Current state

Plugins directly communicate with the RViz API and Ogre.

Problem Description

The process of how to create such a plugin is not well documented, as is the RViz API. There is no clear notion of what part of the RViz API should be accessible to Plugins. Changes to internal rviz source code can easily break plugins.

Proposed Solution

New displays

Customers

Current state

RViz contains a set of Displays which visualize certain types of data.

Problem Description

Several users have requested a way to display more data types

Currently, the only way to do this would be to write your own plugin or something that generates Marker messages for visualization.

Problems with that:

In summary, adding this feature to RViz would make it easier to visualize this kind of data and thus more attractive and useful to certain groups.

Technical solution

Write specialized displays that are able to directly subscribe to surfel/gaussian messages and visualize them.

TODO: What message types are to be visualized, link to related tickets

Interactive Markers: enforce joint limits

Customers

Current state

Interactive Markers can have controls that enable the user to move and rotate them in space. You can limit the degrees of freedom by only adding a subset of the possible controls.

If you want to restrict that movement to within certain intervals, you have to do that within the IM server.

Problem Description

Side effects of the current solution are:

Technical solution

Only complete this part if the above are finished and fully understood. Describe what needs to be changed to solve the issue.

OSX Build

Customers

Current state

Describe the current status of the system.

Problem Description

Why should we change the system / what is the problem?

Technical solution

Only complete this part if the above are finished and fully understood. Describe what needs to be changed to solve the issue.

Invocation of Ogre

Customers

Current state

RViz uses an Ogre release contained in a ROS package.

Problem Description

Downloading and compiling Ogre from source takes 20-30 minutes even on a fast machine. Having Ogre built from source as a ROS package which many things depend on means Willow Garage's build-and-test servers spend lots of time just building Ogre. If we used the standard package (libogre-dev) for Ubuntu, ROS release and test builds would be significantly faster.

Maintaining the Ogre build also takes developer time and attention which could be better spent making awesome robots.

Technical solution

Programatic control over RViz

Customers

Current state

It is not currently possible to change an rviz viewpoint except by one of these methods:

Problem Description

Developers writing an interactive graphical system using rviz with Interactive Markers would like to assist their users by writing code which automatically positions the viewpoint to focus on task objects. The only way currently is to write a plugin, which has its own problems.

Other developers have also asked how they can programmatically add and remove displays in rviz. That is a similar problem which could be solved in similar ways.

Technical solution

A simple solution to this is to add a feature to rviz where it listens for messages which control the viewpoint. Perhaps though, if writing plugins were simpler, that method would be more attractive. There is a python scripting capability in rviz which I don't know much about. Perhaps a python script could solve the problem without changing the rviz source.

Another direction to look into is inspired by the RVE code which Josh Faust worked on before he left. The idea was to separate the display and rendering code into a library. The GUI program that is rviz would then be a user of that library, but other applications could be written with the library as well, using whatever UI elements and interaction behaviors the developers needed.

Change request template

Customers

Current state

Describe the current status of the system.

Problem Description

Why should we change the system / what is the problem?

Technical solution

Only complete this part if the above are finished and fully understood. Describe what needs to be changed to solve the issue.


2022-05-28 12:36