ros / ros-overlay

Gentoo Overlay for ROS packages
33 stars 30 forks source link

ros-kinetic/rviz-1.12.16 fails to build (Ogre related 'has no member named') #723

Open awesomebytes opened 5 years ago

awesomebytes commented 5 years ago

I just got into:

cd /home/user/gentoo/var/tmp/portage/ros-kinetic/rviz-1.12.16/work/rviz-1.12.16_build-python2_7/src/rviz && /tmp/gentoo/usr/bin/x86_64-pc-linux-gnu-g++ -DASSIMP_UNIFIED_HEADER_NAMES -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_WIDGETS_LIB -DROSCONSOLE_BACKEND_LOG4CXX -DROS_PACKAGE_NAME=\"rviz\" -DRVIZ_HAVE_YAMLCPP_05 -Drviz_EXPORTS -I/home/user/gentoo/var/tmp/portage/ros-kinetic/rviz-1.12.16/work/rviz-1.12.16_build-python2_7/src/rviz -I/home/user/gentoo/var/tmp/portage/ros-kinetic/rviz-1.12.16/work/rviz-1.12.16/src/rviz -I/home/user/gentoo/var/tmp/portage/ros-kinetic/rviz-1.12.16/work/rviz-1.12.16_build-python2_7/src/rviz/rviz_autogen/include -I/home/user/gentoo/var/tmp/portage/ros-kinetic/rviz-1.12.16/work/rviz-1.12.16/src -I/tmp/gentoo/opt/ros/kinetic/include -I/tmp/gentoo/opt/ros/kinetic/share/xmlrpcpp/cmake/../../../include/xmlrpcpp -I/home/user/gentoo/var/tmp/portage/ros-kinetic/rviz-1.12.16/work/rviz-1.12.16/src/rviz/. -isystem /tmp/gentoo/usr/include/eigen3 -isystem /tmp/gentoo/usr/include/OGRE/Overlay -isystem /tmp/gentoo/usr/include/OGRE -isystem /tmp/gentoo/usr/include/python2.7 -isystem /tmp/gentoo/usr/include/qt5 -isystem /tmp/gentoo/usr/include/qt5/QtWidgets -isystem /tmp/gentoo/usr/include/qt5/QtGui -isystem /tmp/gentoo/usr/include/qt5/QtCore -isystem /tmp/gentoo/usr/lib64/qt5/mkspecs/linux-g++   -DNDEBUG -O2 -pipe -O2 -pipe -std=c++11 -std=c++11 -fPIC   -std=c++11 -fPIC -std=gnu++11 -o CMakeFiles/rviz.dir/new_object_dialog.cpp.o -c /home/user/gentoo/var/tmp/portage/ros-kinetic/rviz-1.12.16/work/rviz-1.12.16/src/rviz/new_object_dialog.cpp
/home/user/gentoo/var/tmp/portage/ros-kinetic/rviz-1.12.16/work/rviz-1.12.16/src/rviz/image/ros_image_texture.cpp: In member function 'bool rviz::ROSImageTexture::update()':
/home/user/gentoo/var/tmp/portage/ros-kinetic/rviz-1.12.16/work/rviz-1.12.16/src/rviz/image/ros_image_texture.cpp:255:16: error: 'Ogre::DataStreamPtr' {aka 'class std::shared_ptr<Ogre::DataStream>'} has no member named 'bind'
   pixel_stream.bind(new Ogre::MemoryDataStream(imageDataPtr, imageDataSize));

Maybe related to https://github.com/ros/ros-overlay/issues/722 ?

awesomebytes commented 5 years ago

This looks interesting: https://github.com/ros-visualization/rviz/pull/1242

Even tho I don't think the problem really comes from there... Ogre::DataStreamPtr should have a bind method: https://ogrecave.github.io/ogre/api/1.10/class_ogre_1_1_shared_ptr.html

awesomebytes commented 5 years ago

Oh, just found out about bind:

this api will be dropped. use reset(T*) instead

I'd expect a deprecation warning not an error on compiling... After doing that substitution in the code, the next errors are:

home/user/rviz_ws/src/rviz/src/rviz/ogre_helpers/movable_text.h:175:24: error: 'const MaterialPtr' {aka 'const class std::shared_ptr<Ogre::Material>'} has no member named 'isNull'
     assert(!mpMaterial.isNull());

/home/user/rviz_ws/src/rviz/src/rviz/ogre_helpers/movable_text.cpp:113:69: error: 'Ogre::FontPtr' {aka 'class std::shared_ptr<Ogre::Font>'} has no member named 'getPointer'
         = (Font *) FontManager::getSingleton().getByName(mFontName).getPointer();

/home/user/rviz_ws/src/rviz/src/rviz/ogre_helpers/movable_text.cpp:122:18: error: 'Ogre::MaterialPtr' {aka 'class std::shared_ptr<Ogre::Material>'} has no member named 'setNull'
       mpMaterial.setNull();

Which seem to be the same than in Gazebo, I think.

awesomebytes commented 5 years ago

I kept drilling it and made a patch that successfully compiles Rviz:

https://gist.github.com/awesomebytes/c1ba75ec3329aa63d768320b43743e70

(I applied it by hand and it worked, now I'm trying emerging ros-kinetic/rviz with it in $EPREFIX/etc/portage/patches/ros-kinetic/rviz).

Note that for Gentoo Prefix I also needed to do before emerging:

export PATH=/tmp/gentoo/usr/lib64/qt5/bin:$PATH

It's needed cause SIP (which makes wrappers for python for Rviz) invokes the qmake binary, which by default is not in the path.

awesomebytes commented 5 years ago

The actual error of SIP:

qmake: could not find a Qt installation of '5'
Traceback (most recent call last):
  File "/tmp/gentoo/opt/ros/kinetic/share/python_qt_binding/cmake/sip_configure.py", line 51, in <module>
    config = Configuration()
  File "/tmp/gentoo/opt/ros/kinetic/share/python_qt_binding/cmake/sip_configure.py", line 18, in __init__
    [qmake_exe, '-query'], env=env, universal_newlines=True)
  File "/tmp/gentoo/usr/lib64/python2.7/subprocess.py", line 223, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['qmake', '-query']' returned non-zero exit status 1

Apparently $PATH is ignored when doing emerge, uhm.

awesomebytes commented 5 years ago

The trick for Gentoo Prefix for the SIP stuff:

cd $EPREFIX/usr/bin
# points to qtchooser, which fails
unlink qmake
ln -s $EPREFIX/usr/lib64/qt5/bin/qmake qmake
awesomebytes commented 5 years ago

Unfortunately once built we get a Runtime Error (adding all output on running it):

$ rviz
[ INFO] [1544761478.630221024]: rviz version 1.12.16
[ INFO] [1544761478.630271158]: compiled against Qt version 5.11.3
[ INFO] [1544761478.630287968]: compiled against OGRE version 1.10.12 (Xalafu)
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
[ INFO] [1544761478.763462659]: Stereo is NOT SUPPORTED
[ INFO] [1544761478.763545274]: OpenGl version: 3 (GLSL 1.3).
libpng warning: iCCP: known incorrect sRGB profile
[ERROR] [1544761478.848182862]: Could not load pixmap '/tmp/gentoo/opt/ros/kinetic/share/rviz/icons/rotate.svg'
[ERROR] [1544761478.848265435]: Could not load pixmap 'package://rviz/icons/rotate.svg' -- using default cursor instead.
[ERROR] [1544761478.848494611]: Could not load pixmap '/tmp/gentoo/opt/ros/kinetic/share/rviz/icons/rotate_cam.svg'
[ERROR] [1544761478.848534683]: Could not load pixmap 'package://rviz/icons/rotate_cam.svg' -- using default cursor instead.
[ERROR] [1544761478.848729828]: Could not load pixmap '/tmp/gentoo/opt/ros/kinetic/share/rviz/icons/move2d.svg'
[ERROR] [1544761478.848754728]: Could not load pixmap 'package://rviz/icons/move2d.svg' -- using default cursor instead.
[ERROR] [1544761478.848913423]: Could not load pixmap '/tmp/gentoo/opt/ros/kinetic/share/rviz/icons/move_z.svg'
[ERROR] [1544761478.848936817]: Could not load pixmap 'package://rviz/icons/move_z.svg' -- using default cursor instead.
[ERROR] [1544761478.849085110]: Could not load pixmap '/tmp/gentoo/opt/ros/kinetic/share/rviz/icons/zoom.svg'
[ERROR] [1544761478.849109121]: Could not load pixmap 'package://rviz/icons/zoom.svg' -- using default cursor instead.
[ERROR] [1544761478.849256354]: Could not load pixmap '/tmp/gentoo/opt/ros/kinetic/share/rviz/icons/crosshair.svg'
[ERROR] [1544761478.849280122]: Could not load pixmap 'package://rviz/icons/crosshair.svg' -- using default cursor instead.
[ERROR] [1544761478.850519429]: Could not load pixmap '/tmp/gentoo/opt/ros/kinetic/share/rviz/icons/cursor.svg'
[ERROR] [1544761478.870403407]: RuntimeAssertionException: name must not be empty in getSceneNode at /home/user/gentoo/var/tmp/portage/dev-games/ogre-1.10.12/work/ogre-1.10.12/OgreMain/src/OgreSceneManager.cpp (line 959)

If we check on v 1.10.12: https://github.com/OGRECave/ogre/blob/v1.10.12/OgreMain/src/OgreSceneManager.cpp#L953-L972

There is effectively that check. And checking Rviz code:

rviz $ grep -r getSceneNode .
./src/rviz/display.h:  Ogre::SceneNode* getSceneNode() const { return scene_node_; }
./src/rviz/frame_position_tracking_view_controller.h:   * updateTargetSceneNode(). */
./src/rviz/frame_position_tracking_view_controller.h:   * calls updateTargetSceneNode(). */
./src/rviz/frame_position_tracking_view_controller.h:   * change.  Calls updateTargetSceneNode() and
./src/rviz/frame_position_tracking_view_controller.h:  virtual void updateTargetSceneNode();
./src/rviz/default_plugin/pose_with_covariance_display.cpp:  coll_handler_->addTrackedObjects( arrow_->getSceneNode() );
./src/rviz/default_plugin/pose_with_covariance_display.cpp:  coll_handler_->addTrackedObjects( axes_->getSceneNode() );
./src/rviz/default_plugin/pose_with_covariance_display.cpp:    arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/pose_with_covariance_display.cpp:    axes_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/pose_with_covariance_display.cpp:    arrow_->getSceneNode()->setVisible( use_arrow );
./src/rviz/default_plugin/pose_with_covariance_display.cpp:    axes_->getSceneNode()->setVisible( !use_arrow );
./src/rviz/default_plugin/axes_display.cpp:  axes_->getSceneNode()->setVisible( isEnabled() );
./src/rviz/default_plugin/axes_display.cpp:  axes_->getSceneNode()->setVisible( true );
./src/rviz/default_plugin/axes_display.cpp:  axes_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/tf_display.cpp:  info->axes_->getSceneNode()->setVisible( show_axes_property_->getBool() );
./src/rviz/default_plugin/tf_display.cpp:  info->selection_handler_->addTrackedObjects( info->axes_->getSceneNode() );
./src/rviz/default_plugin/tf_display.cpp:  info->parent_arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/tf_display.cpp:    frame->parent_arrow_->getSceneNode()->setVisible(false);
./src/rviz/default_plugin/tf_display.cpp:    frame->axes_->getSceneNode()->setVisible(false);
./src/rviz/default_plugin/tf_display.cpp:    frame->axes_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/tf_display.cpp:    frame->parent_arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/tf_display.cpp:  frame->axes_->getSceneNode()->setVisible( show_axes_property_->getBool() && frame_enabled);
./src/rviz/default_plugin/tf_display.cpp:        frame->parent_arrow_->getSceneNode()->setVisible( show_arrows_property_->getBool() && frame_enabled );
./src/rviz/default_plugin/tf_display.cpp:        frame->parent_arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/tf_display.cpp:      frame->parent_arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/tf_display.cpp:    frame->parent_arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/tf_display.cpp:    axes_->getSceneNode()->setVisible( display_->show_axes_property_->getBool() && enabled );
./src/rviz/default_plugin/tf_display.cpp:      parent_arrow_->getSceneNode()->setVisible( display_->show_arrows_property_->getBool() && enabled );
./src/rviz/default_plugin/tf_display.cpp:      parent_arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/view_controllers/third_person_follower_view_controller.h:  virtual void updateTargetSceneNode();
./src/rviz/default_plugin/view_controllers/third_person_follower_view_controller.cpp:void ThirdPersonFollowerViewController::updateTargetSceneNode()
./src/rviz/default_plugin/odometry_display.cpp:    (*it)->getSceneNode()->setVisible( use_arrow );
./src/rviz/default_plugin/odometry_display.cpp:    (*it_axes)->getSceneNode()->setVisible( !use_arrow );
./src/rviz/default_plugin/odometry_display.cpp:  arrow->getSceneNode()->setVisible( use_arrow );
./src/rviz/default_plugin/odometry_display.cpp:  axes->getSceneNode()->setVisible( !use_arrow );
./src/rviz/default_plugin/interactive_marker_display.cpp:      int_marker_entry = im_map.insert( std::make_pair(marker.name, IMPtr ( new InteractiveMarker(getSceneNode(), context_) ) ) ).first;
./src/rviz/default_plugin/tools/pose_tool.cpp:  arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/tools/pose_tool.cpp:  arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/tools/pose_tool.cpp:        arrow_->getSceneNode()->setVisible( true );
./src/rviz/default_plugin/markers/arrow_marker.cpp:    handler_->addTrackedObjects( arrow_->getSceneNode() );
./src/rviz/default_plugin/markers/line_strip_marker.cpp:  handler_->addTrackedObjects( lines_->getSceneNode() );
./src/rviz/default_plugin/markers/line_list_marker.cpp:    handler_->addTrackedObjects( lines_->getSceneNode() );
./src/rviz/default_plugin/grid_display.cpp:  grid_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/grid_display.cpp:  grid_->getSceneNode()->setPosition( offset_property_->getVector() );
./src/rviz/default_plugin/grid_display.cpp:  grid_->getSceneNode()->setOrientation( orient );
./src/rviz/default_plugin/interactive_markers/interactive_marker.cpp:  axes_->getSceneNode()->setVisible( show );
./src/rviz/default_plugin/pose_display.cpp:  coll_handler_->addTrackedObjects( arrow_->getSceneNode() );
./src/rviz/default_plugin/pose_display.cpp:  coll_handler_->addTrackedObjects( axes_->getSceneNode() );
./src/rviz/default_plugin/pose_display.cpp:    arrow_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/pose_display.cpp:    axes_->getSceneNode()->setVisible( false );
./src/rviz/default_plugin/pose_display.cpp:    arrow_->getSceneNode()->setVisible( use_arrow );
./src/rviz/default_plugin/pose_display.cpp:    axes_->getSceneNode()->setVisible( !use_arrow );
./src/rviz/frame_position_tracking_view_controller.cpp:  updateTargetSceneNode();
./src/rviz/frame_position_tracking_view_controller.cpp:  updateTargetSceneNode();
./src/rviz/frame_position_tracking_view_controller.cpp:  updateTargetSceneNode();
./src/rviz/frame_position_tracking_view_controller.cpp:void FramePositionTrackingViewController::updateTargetSceneNode()
./src/rviz/robot/robot_joint.cpp:      axes_->getSceneNode()->setVisible( getEnabled() );
./src/rviz/robot/robot_joint.cpp:      axis_->getSceneNode()->setVisible( getEnabled() );
./src/rviz/robot/robot_link.cpp:      link_->axes_->getSceneNode()->setVisible( false );
./src/rviz/robot/robot_link.cpp:    axes_->getSceneNode()->setVisible( enabled && robot_->isVisible() );
./src/rviz/robot/robot_link.cpp:      axes_->getSceneNode()->setVisible( getEnabled() );
./src/rviz/ogre_helpers/arrow.h:  Ogre::SceneNode* getSceneNode() { return scene_node_; }
./src/rviz/ogre_helpers/axes.h:  Ogre::SceneNode* getSceneNode() { return scene_node_; }
./src/rviz/ogre_helpers/grid.h:  Ogre::SceneNode* getSceneNode() { return scene_node_; }
./src/rviz/ogre_helpers/billboard_line.h:  Ogre::SceneNode* getSceneNode() { return scene_node_; }

No single name given. If I check the OGRE code for 1.9.1 (which runs on my current ubuntu 16.04 box), the same function does not check for empty name: https://github.com/OGRECave/ogre/blob/v1.9.1/OgreMain/src/OgreSceneManager.cpp#L913-L925

Apparently there is a macro OGRE_NODE_STORAGE_LEGACY to enable the old behaviour.

To be continued... (Damn I was so happy to have Rviz compiled!)

Edit: Yeah, the ebuild contains explicitly: https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-games/ogre/ogre-1.10.12.ebuild#n96 -DOGRE_NODE_STORAGE_LEGACY=no

Given I have no clue where to start adding a name to put in those 65 instances of getSceneNode, I'm gonna try to build it with that flag to yes.

awesomebytes commented 5 years ago

That seemed to overcome that problem... for a very short time. Now I got a segmentation fault, here in gdb with the backtrace:

Thread 1 "rviz" received signal SIGSEGV, Segmentation fault.
0xf70fc318 in std::char_traits<char>::copy (__n=<optimized out>, __s2=<optimized out>, 
    __s1=<optimized out>)
    at /tmp/gentoo/var/tmp/portage/sys-devel/gcc-8.2.0-r5/work/build/i686-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h:350
350 /tmp/gentoo/var/tmp/portage/sys-devel/gcc-8.2.0-r5/work/build/i686-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h: No such file or directory.
(gdb) bt
#0  0xf70fc318 in std::char_traits<char>::copy (__n=<optimized out>, __s2=<optimized out>, 
    __s1=<optimized out>)
    at /tmp/gentoo/var/tmp/portage/sys-devel/gcc-8.2.0-r5/work/build/i686-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h:350
#1  std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_copy (
    __n=<optimized out>, __s=<optimized out>, __d=<optimized out>)
    at /tmp/gentoo/var/tmp/portage/sys-devel/gcc-8.2.0-r5/work/build/i686-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:340
#2  std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append
    (this=<optimized out>, __s=<optimized out>, __n=<optimized out>)
    at /tmp/gentoo/var/tmp/portage/sys-devel/gcc-8.2.0-r5/work/build/i686-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:367
#3  0xf7e5e45b in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
   from /tmp/gentoo/opt/ros/kinetic/lib/librviz.so
#4  0xf674d775 in Ogre::SceneManager::getSceneNode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const ()
   from /tmp/gentoo/usr/lib/libOgreMain.so.1.10.12
#5  0xf2b11cce in Ogre::OctreeSceneManager::destroySceneNode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
   from /tmp/gentoo/usr/lib/OGRE/Plugin_OctreeSceneManager.so.1.10.12
#6  0xf7ec8cc5 in rviz::Shape::~Shape() () from /tmp/gentoo/opt/ros/kinetic/lib/librviz.so
#7  0xf7ec8df2 in rviz::Shape::~Shape() () from /tmp/gentoo/opt/ros/kinetic/lib/librviz.so
#8  0xf7eafcec in rviz::Arrow::~Arrow() () from /tmp/gentoo/opt/ros/kinetic/lib/librviz.so
#9  0xf7eafda2 in rviz::Arrow::~Arrow() () from /tmp/gentoo/opt/ros/kinetic/lib/librviz.so
awesomebytes commented 5 years ago

Oops ignore my last comment. I forgot to re-compile rviz.

Now, observe this beauty:

screenshot from 2018-12-14 16-11-33

It works!

awesomebytes commented 5 years ago

@allenh1 How do we approach this?

Right now I'm just doing:

echo ">=dev-games/ogre-1.10.12 experimental" >> $EPREFIX/etc/portage/package.use
sed -i 's/-DOGRE_NODE_STORAGE_LEGACY=no/-DOGRE_NODE_STORAGE_LEGACY=yes/g' $EPREFIX/usr/portage/dev-games/ogre/ogre-1.10.12.ebuild
ebuild $EPREFIX/usr/portage/dev-games/ogre/ogre-1.10.12.ebuild manifest
emerge dev-games/ogre

In my docker image. Which is far from elegant. Where do we patch ogre for this? Do we bring it into ros-overlay? Do we ask the maintainers to add a USE flag?

allenh1 commented 5 years ago

I'm not sure... I didn't have to do any of that, actually. This could be a prefix thing. It works just fine as-is with my patch for it. Is this with or without that, btw?

awesomebytes commented 5 years ago

@allenh1 with your patch for rviz applied. How can it not happen to you? are you sure you are using the latest version of Ogre and rviz freshly recompiled? If you check the source code... there is no way it does not happen to you without adding -DOGRE_NODE_STORAGE_LEGACY=no.

allenh1 commented 5 years ago

there is no way it does not happen to you without adding -DOGRE_NODE_STORAGE_LEGACY=no.

You're gonna laugh. I sourced the wrong ROS workspace -___-

I'm going to add an ebuild for that version of OGRE to the ROS-Overlay in a moment. I'm adding a USE flag for it, naming it legacy-node-storage.

I'm also assuming you meant to write -DOGRE_NODE_STORAGE_LEGACY=yes.

allenh1 commented 5 years ago
 equery uses ogre::ros-overlay
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for dev-games/ogre-1.10.12:
 U I
 + + cache               : Enable GL state cache support
 - - cg                  : NVIDIA toolkit plugin
 - - doc                 : Add extra documentation (API, Javadoc, etc). It is
                           recommended to enable per package instead of
                           globally
 - - double-precision    : More precise calculations at the expense of speed
 - - egl                 : Use egl instead of glx
 - - examples            : Install examples, usually source code
 - - experimental        : Build experimental BETA component 'HLMS'
 + + freeimage           : Support images via media-libs/freeimage
 - - gles2               : (Restricted to >dev-games/ogre-1.10)
                           Build OpenGL ES 2.x RenderSystem plus ES 3.x
                           features if available. 
 + - legacy-node-storage : Enables Legacy node storage (see https://github.com/
                           ros/ros-overlay/issues/723#issuecomment-449163132). 
 + + opengl              : Add support for OpenGL (3D graphics)
 - - profile             : Add support for software performance analysis (will
                           likely vary from ebuild to ebuild)
 - - resman-pedantic     : Resource Manager PEDANTIC : require an explicit
                           resource group. Case sensitive lookup. Some demos
                           might not work with this setting. (default:
                           case-insensitive + sensitive lookup in all groups) 
 - - resman-strict       : Resource Manager STRICT : search in default group if
                           not specified otherwise. Case sensitive lookup. Some
                           demos might not work with this setting. (default:
                           case-insensitive + sensitive lookup in all groups) 
 - - tools               : Build and install helper tools

@awesomebytes just add

# required to make RVIZ work
dev-games/ogre::ros-overlay legacy-node-storage experimental

to your /etc/portage/package.use file and emerge dev-games/ogre::ros-overlay.