Gazebo | Ignition | Community
Ask Your Question
1

ros::init() needed for ROS Gazebo plugin?

asked 2013-02-22 02:51:46 -0600

bit-pirate gravatar image

After reading this thread on the Gazebo-list about plugins residing inside the Gazebo ROS node, I found out that my plugin is running fine without the ros::init() call.

The tutorials (e.g. here for 1.3) however make use of this initialisation. So now I wonder, if it is necessary or not?

Since, the plugin is loaded into the Gazebo node, it would make sense to me, that ros::init is not needed (similar to nodelets in ROS).

edit retag flag offensive close merge delete

3 Answers

Sort by » oldest newest most voted
2

answered 2013-03-07 22:38:27 -0600

nkoenig gravatar image

Gazebo does not call ros:init. It's up to one of your plugins (or a plugin that you load) to call ros::init.

edit flag offensive delete link more

Comments

Right, but the question is, if it is needed. My plugin for example has subs & pubs, but since it is loaded into gazebo, which is also acting as a ROS node, it works fine without calling ros::init(). So, I wonder in which case it is actually needed.

bit-pirate gravatar imagebit-pirate ( 2013-03-08 04:04:13 -0600 )edit
2

Gazebo is acting as a ROS node because someone inside the process called ros::init(). If it wasn't your plugin, some other plugin must have done it, as standalone Gazebo does not do it. So yes, it is needed to make your plugin robust to the case when it's the only ROS-enabled component inside the Gazebo process.

Adolfo Rodríguez T gravatar imageAdolfo Rodríguez T ( 2013-03-08 04:16:18 -0600 )edit

You should have posted this as an answer. :-) Anyway, if I remove all plugins I am using, Gazebo is still showing up as a ROS node and is publishing/subscribing to topics. AFAIK this requires a ros::init(). Am I missing something?

bit-pirate gravatar imagebit-pirate ( 2013-03-08 04:44:03 -0600 )edit

ROS wraps gazebo. So when you say you run gazebo, you're probably running a special gazebo script that loads in a plugin that in turn calls ros::init. Take a look in the simulator_gazebo package.

nkoenig gravatar imagenkoenig ( 2013-03-15 18:23:11 -0600 )edit
2

answered 2013-02-22 04:03:52 -0600

Boris gravatar image

I think in some cases it may fail. Most of the gazebo_ros_* plugins in ROS have the following code:

if (!ros::isInitialized())
{
  int argc = 0;
  char** argv = NULL;
  ros::init(argc, argv, "gazebo", ros::init_options::NoSigintHandler |
                                  ros::init_options::AnonymousName);
}

So, probably in your case ROS is just initialized already. Though, I am not sure what "initialized" means in this case.

Boris

edit flag offensive delete link more

Comments

This is no longer true, we have removed the fallback init() function from all gazebo plugins.

davetcoleman gravatar imagedavetcoleman ( 2013-07-29 11:52:36 -0600 )edit
2

answered 2013-07-26 18:10:00 -0600

davetcoleman gravatar image

updated 2017-02-20 18:46:39 -0600

The recommended way to check for ROS being initialized for all Gazebo plugins has been documented in this tutorial.

edit flag offensive delete link more

Comments

This contains useful background information. Thanks!

bit-pirate gravatar imagebit-pirate ( 2013-07-28 19:44:36 -0600 )edit

link is dead. Replace with http://gazebosim.org/tutorials?tut=ros_gzplugins probably

Peter Mitrano gravatar imagePeter Mitrano ( 2016-09-11 14:07:52 -0600 )edit

ive updated the link, thanks

davetcoleman gravatar imagedavetcoleman ( 2017-02-20 18:47:04 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2013-02-22 02:51:46 -0600

Seen: 5,342 times

Last updated: Feb 20 '17