I can see some gazebo topics, but not all of them...
I'm writing a matlab interface to gazebo. I have code that, when run from the command line, sees all of the gazebo topics I'm expecting, eg
gazebo::transport::get_master_uri(_master_host, _master_port);
std::cout << "Host: " << _master_host << "\tport: " << _master_port <<"\n";
topics_list = gazebo::transport::getAdvertisedTopics("");
for(std::list<std::string>::iterator topic=topics_list.begin(); topic!=topics_list.end(); topic++) {
std::cout << (*topic) << "\n";
}
gives the expected result, which is around fifty different topics. But that same code, when copied into a mex file (a specialized C++ plugin format for Matlab), and executed as a Matlab plugin, only returns a subset of the topics:
Host: localhost port: 11345
/gazebo/default/pose/local/info
/gazebo/default/pose/info
/gazebo/default/gui
/gazebo/default/response
/gazebo/default/world_stats
/gazebo/default/model/info
/gazebo/default/light/modify
/gazebo/default/physics/contacts
/gazebo/default/visual
/gazebo/default/request
/gazebo/default/joint
/gazebo/default/user_cmd_stats
/gazebo/default/world_control
/gazebo/default/model/modify
/gazebo/world/modify
/gazebo/default/diagnostics
/gazebo/default/log/status
/gazebo/default/undo_redo
/gazebo/default/factory
/gazebo/default/factory/light
/gazebo/default/selection
/gazebo/default/scene
/gazebo/default/physics
/gazebo/default/user_camera/pose
/gazebo/default/user_cmd
/gazebo/default/playback_control
/gazebo/default/log/control
/gazebo/server/control
Topics that do not show up include
/gazebo/default/user_camera/joy_pose
/gazebo/default/user_camera/joy_twist
/gazebo/default/ground_plane/link/wrench
/gazebo/default/gzclient_camera/cmd
/gazebo/default/skeleton_pose/info
/gazebo/default/sky
/gazebo/default/light
/gazebo/default/model/modify
I'm kind of at a loss. Is there anything special about these particular topics that would cause partially functioning code, or code that was being executed in a strange environment or with misconfigured environmental variables, to see them but not others?
Can you add the topics which are missing to your question? (at least a few of them)
None of the topics created by my robot plugin show up, eg
/gazebo/default/my_robot/joint_cmd
But there are others that don't show up either, including:/gazebo/default/user_camera/joy_pose /gazebo/default/user_camera/joy_twist /gazebo/default/ground_plane/link/wrench /gazebo/default/gzclient_camera/cmd /gazebo/default/skeleton_pose/info /gazebo/default/sky /gazebo/default/light /gazebo/default/model/modify
Mysterious... When you check on the command line with `gz topic -l`, do all of them show?
Yep. Every last one of them. I can also issue a "system" command inside Matlab, which issues a shell command, eg
system('\usr\local\bin\gz topic -l')
and that *also* returns all of the topics.One potentially pertinent fact: Matlab links against a bunch of the same libraries gazebo does, including boost and protobuf. But Matlab's versions are typically a couple of versions older than gazebo's. When building my MEX file I have tried both dynamically linking to dylibs and statically linking to .a files. Neither one seems to make any difference, but it's possible that I'm not seeing a dependency somewhere.