Modifying GAZEBO_RESOURCE_PATH causes null pointer crash
Last week, my plugins were working. Without having changed anything, this week the visual plugin crashes. Does anyone have any insights into what's going on or how to fix this? Does anyone else get the same error on compiling the plugin and using it with the world file below?
[Edit Sept. 19 '16: I did change something, which I had forgotten about. As alluded to in the edited title of the question, I attempted to add a directory to the GAZEBO_RESOURCE_PATH in .bashrc -- see the issue URL in the comment below. This problem had nothing whatsoever to do with my visual plugin.]
Here's the error:
gzclient: /usr/include/boost/smart_ptr/shared_ptr.hpp:653: typename boost::detail::sp_member_access<T>::type boost::shared_ptr<T>::operator->() const [with T = gazebo::rendering::Camera; typename boost::detail::sp_member_access<T>::type = gazebo::rendering::Camera*]: Assertion `px != 0' failed.
Aborted (core dumped)
Here are the only files necessary to reproduce the crash:
Visual plugin:
#include <gazebo/gazebo.hh>
#include <gazebo/common/common.hh>
#include <gazebo/rendering/rendering.hh>
#include <stdio.h>
namespace gazebo
{ class SpacenavVisualPlugin : public VisualPlugin
{ public:
// Constructor
SpacenavVisualPlugin() : VisualPlugin()
{ printf( "SpacenavVisualPlugin started\n" ); // DEBUG
}
// Destructor
~SpacenavVisualPlugin() // : ~VisualPlugin()
{ printf( "SpacenavVisualPlugin stopped\n" ); // DEBUG
}
void Load( rendering::VisualPtr _visual, sdf::ElementPtr /*_sdf*/)
{ // === Turn off the SpaceNavigator's default camera control
rendering::ScenePtr scene = _visual->GetScene();
rendering::UserCameraPtr cam = scene->GetUserCamera( 0 );
cam->SetJoyPoseControl( false );
cam->SetJoyTwistControl( false );
}
};
// Register this plugin with the simulator
GZ_REGISTER_VISUAL_PLUGIN( SpacenavVisualPlugin )
};
World file:
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default">
<include>
<uri>model://ground_plane</uri>
</include>
<include>
<uri>model://sun</uri>
</include>
<!-- model just to hold plugin that turns off spacenav camera control -->
<model name="dummy_model">
<link name="dummy">
<collision name="collision">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</collision>
<visual name="visual">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
<plugin name="spacenavVisualPlugin" filename="/home/jason/libspacenavVisualPlugin.so"/>
</visual>
</link>
</model>
</world>
</sdf>
The commands I run are gzserver test.world
and, in a separate terminal window, gzclient
. The abort back to the prompt happens almost immediately after the second command, just a split second after the gazebo splash screen and the main window are drawn. Then I can quit the first command in its terminal window with CTRL-c.
Here is the question where I describe the need for the visual plugin. The problem seems to be related to this question; i.e., the plugin is somehow running before the rendering engine is initialized, but I don't know of any other way to turn off the Space Navigator other than the visual plugin.
I am not able to reproduce your problem, what Gazebo version are you using? The world loads fine and I see the "SpacenavVisualPlugin started" and "SpacenavVisualPlugin stopped" messages. You could try running it through gdb.
Thank you! It'll probably be next week before I can follow up, but I'll get back to you.
@chapulina Actually, I've realized that Gazebo doesn't even work when running `gzserver empty.world` with the presupplied empty.world and running `gzclient` in another terminal. The gzserver seems to work, but the gzclient loads the spash screen and the main window border, outputs the error I quoted in the question, and quits. Then I CTRL-c out of the gzserver. Gazebo works fine if launched via the launcher, however. The major version is 7, but I'm not sure what the minor and patch versions are.
That sounds like a bug... You could ticket an issue at Bitbucket detailing your computer specs and how you installed Gazebo. https://bitbucket.org/osrf/gazebo/issues/new
This is an odd error. The `gazebo` command just runs gzserver and gzclient in separate processes. If `gazebo` works, then separate invocations of `gzserver` and `gzclient` should as well. You might see this type of error if you have multiple (and different) versions of Gazebo installed.
Did anyone manage to solve this problem? I'm still seeing it.
@Omer Yeah, there's a fix at https://bitbucket.org/osrf/gazebo/issues/2044/gazebo-731-gzserver-gzclient-results-in that worked for me. I haven't typed up an answer here because I'd like to see how the issue discussion plays out.