Page 1 of 1

Reset Simulation

Posted: Mon Jan 11, 2021 1:57 pm
by jtrautmann
Hello,

I want to run a Simulation experiment multiple times, until it is told by a ROS service call to stop. One experiment does not have a fixed length. It is also told by a ROS service call that it ended.

I know that I can reset everything that was set in my LoopFunctions class. For this, I can save the configuration node of the call of Init and use it once again when resetting. But I didn't find any way to reset the elements which were not declared in the configuration for the loop functions in the argos file. For example, if I declared boxes in the arena element with random positions, this way does not work to change their positions.
I also tried calling GetSimulator().Reset() in my LoopFunctions class (and defining the reset behaviour of the LoopFunctions class in its Reset() function), but this call results in an error.

Another way I tried was based on the galib example (https://github.com/ilpincy/argos3-examp ... b/main.cpp): I started the Simulator and executed and reset it in a loop basically like this:

Code: Select all

CSimulator& cSimulator = CSimulator::GetInstance(); cSimulator.SetExperimentFileName(file); cSimulator.LoadExperiment(); while (run) { cSimulator.Execute(); cSimulator.Reset(); }
To end one experiment execution, I implemented the IsExperimentFinished method of the LoopFunctions class and let it return true when one experiment instance should be stopped because a corresponding ROS service was called.
The problem is that the the call of cSimulator.Execute() keeps blocking even after IsExperimentFinished returns true. So the call of cSimulator.Reset() is only reached when closing the ARGoS window, which can not be done by a ROS service call.

Thank you in advance!

Re: Reset Simulation

Posted: Fri Jan 15, 2021 6:45 am
by pincy
The correct approach is to use the galib example. If you don't need the GUI, you can run ARGoS headless by simply commenting out the <qt-opengl/> section. If you need to reset from a node and, at the same time, keep the GUI open, try and use the Qt user functions.

https://github.com/ilpincy/argos3/blob/ ... unctions.h