3D visualization tool for ROS.
rviz is a 3d visualization program for robots using ROS.
rviz can be extended by writing plugins. (See RViz Plugin Tutorials.)
librviz is a library for including rviz visualization capabilities in your own applications. (See Librviz Tutorial.)
Display Plugin Classes
The main classes relevant when writing display plugins are:
- rviz::Display This is the superclass of things that can be added to the list of displays. Subclasses generally subscribe to ROS messages and show 3D things in the visualization window.
- rviz::FrameManager subscribes to TF messages to know where all the coordinate frames are. It has a (settable) "Fixed Frame" and functions for finding the pose of any other frame relative to it. This is the main class to use when you need to know where something is in space.
Panel Plugin Classes
The main classes relevant when writing panel plugins are:
- rviz::Panel is the superclass of custom panels defined in plugins.
- rviz::Config represents a config file, which rviz::Panel subclasses need to use in order to save their custom data (since they don't use Property objects).
When writing an application using librviz, some additional important classes are:
- rviz::VisualizationPanel is a stripped-down RViz window (not used in the actual RViz executable) which has only the rviz::DisplaysPanel on the left and an rviz::RenderPanel on the right. This widget has no menu, no toolbar, and cannot have other widgets "dock" with it. This is a great widget to start with because hide the list of displays to see a "pure" 3D view in your application, but you can still show the display list and add or remove displays interactively if you need to. It also includes an rviz::VisualizationManager and a call to ros::init(), so there is less bookkeeping to do.
RViz uses several external libraries which show up in its API. Here are some of the major ones:
- ros::NodeHandle is one of the main ROS classes, used for subscribing and publishing on topics.
- tf::MessageFilter filters incoming ROS messages based on their coordinate frame header and the frame data currently available from TF.