Revision: 6412
http://playerstage.svn.sourceforge.net/playerstage/?rev=6412&view=rev
Author: robotos
Date: 2008-05-10 03:33:22 -0700 (Sat, 10 May 2008)
Log Message:
-----------
Changing the updating algorithm to something not naive
Modified Paths:
--------------
code/gazebo/trunk/server/Simulator.cc
code/gazebo/trunk/server/Simulator.hh
Modified: code/gazebo/trunk/server/Simulator.cc
===================================================================
--- code/gazebo/trunk/server/Simulator.cc 2008-05-10 06:58:37 UTC (rev
6411)
+++ code/gazebo/trunk/server/Simulator.cc 2008-05-10 10:33:22 UTC (rev
6412)
@@ -68,8 +68,10 @@
this->xmlFile=NULL;
this->gazeboConfig=NULL;
- this->prevPhysicsTime=0.0;
- this->prevRenderTime=0.0;
+ this->checkpoint=0.0;
+ this->physicsUpdates=0;
+ this->renderUpdates=0;
+
}
////////////////////////////////////////////////////////////////////////////////
@@ -227,11 +229,21 @@
while (!this->userQuit)
{
bool updated=false;
+
+ //During 3 seconds we want to keep balance between how time pass and
update limits
+ //this is a time slot
+ if ((this->checkpoint + 3 )< this->GetRealTime())
+ {
+ this->checkpoint = this->GetRealTime();
+ this->physicsUpdates = 0;
+ this->renderUpdates = 0;
+ }
// Update the physics engine
- double currentPhysicsTime = this->GetRealTime();
-
- if ((currentPhysicsTime - this->prevPhysicsTime) >= maxPhysicsUpdateRate)
+ // maxPhysicsUpdateRate * physicsUpdates means how much we have
_advanced_ in this time slot so far.
+ // getRealTime - ckeckpoint means our +current point_ in the slot, we
only update if our current point has
+ // surpassed what we have already advanced.
+ if ((this->GetRealTime() - this->checkpoint) > (maxPhysicsUpdateRate *
this->physicsUpdates))
{
if (!this->GetUserPause() && !this->GetUserStep() ||
@@ -250,31 +262,28 @@
World::Instance()->Update(); //physics
- this->prevPhysicsTime = currentPhysicsTime;
+ this->physicsUpdates++;
updated=true;
}
// Update the rendering and gui
- double currentRenderTime = this->GetRealTime();
-
- if ((currentRenderTime - this->prevRenderTime) >= maxRenderUpdateRate)
+ if ((this->GetRealTime() - this->checkpoint) > (maxRenderUpdateRate *
this->renderUpdates))
{
gazebo::OgreAdaptor::Instance()->Render();
- this->prevRenderTime = currentRenderTime;
this->gui->Update();
- this->prevRenderTime = currentRenderTime;
+ this->renderUpdates++;
updated=true;
}
if (!updated)
{
double nextUpdate;
- nextUpdate=MAX(this->prevRenderTime+maxRenderUpdateRate,
this->prevPhysicsTime+maxPhysicsUpdateRate);
- int realStep = static_cast<int>(this->GetRealTime() - nextUpdate);
+ nextUpdate=MIN(this->renderUpdates+maxRenderUpdateRate,
this->renderUpdates+maxPhysicsUpdateRate);
+ int realStep = static_cast<int>(nextUpdate - this->GetRealTime());
struct timespec waiting;
waiting.tv_sec=0;
- waiting.tv_nsec=realStep *1000000; //TODO: binary
- nanosleep(&waiting,0);
+ waiting.tv_nsec=realStep *1000000000; //nanoseconds to seconds
+ //nanosleep(&waiting,0);
}
}
}
Modified: code/gazebo/trunk/server/Simulator.hh
===================================================================
--- code/gazebo/trunk/server/Simulator.hh 2008-05-10 06:58:37 UTC (rev
6411)
+++ code/gazebo/trunk/server/Simulator.hh 2008-05-10 10:33:22 UTC (rev
6412)
@@ -160,8 +160,13 @@
/// Current simulation time
private: double simTime, pauseTime, startTime;
- private: double prevPhysicsTime, prevRenderTime;
+ //upper limits on updating
+ //how many updates we have done in this slot
+ private: int physicsUpdates, renderUpdates;
+ // when the slot started
+ private: double checkpoint;
+
// UserIteractions
/// \brief Set to true to pause the simulation
private: bool userPause;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit