Stopping simulation during computations / model swings up [closed]

asked 2012-11-22 03:02:33 -0500

FTrommsdorff gravatar image

updated 2014-01-28 17:14:21 -0500

ngrennan gravatar image

I am using the update event mechanism to trigger my computations of additional forces in Gazebo, and I call the following line in the load function of my controller (which isn't really a controller, rather does compute simplified aerodynamics for a small blimp):

  this->update_connection_ = event::Events::ConnectWorldUpdateStart(
      boost::bind(&Blimp_FlightMechanics::UpdateChild, this));

In the UpdateChild() method, I am doing all the computational stuff. This takes some time, I used ros::WallTime to determine it. The problem is, I first read some model states, and then I do my math. When I want to apply the forces and torques, which can be seen as a response of the current model state, then some time is gone and the response isn't valid anymore. This effect swings up my model and leads to instability.

My question is: can I stop the simulation, read in the necessary state information, do the math, set the forces and then run the simulation again, until the next event alls my method UpdateChild()? I guess, the answer is "yes", but I didn't found the programmatic tools to do so.

EDIT: I tried the command ros::Duration(sleep_time).sleep(), but when using that, the simulation stops completely.

EDIT2: Using the command common::Time::MSleep(2) works for now. But maybe some workaround for switching the simulation "off" and "on" again does exist anyway?

edit retag flag offensive reopen merge delete

Closed for the following reason Gazebo Question: The Gazebo community prefers to answer questions at: by tfoote
close date 2015-06-29 02:17:02.426767