From: <pat...@us...> - 2015-05-16 01:18:02
|
Revision: 394 http://sourceforge.net/p/simspark/svn/394 Author: patmac369 Date: 2015-05-16 01:17:59 +0000 (Sat, 16 May 2015) Log Message: ----------- Fixing bug where the server may hang on certain systems if beam effector noise (BeamNoiseXY and BeamNoiseAngle) are set to 0. This was happening due to trying to sample random values from a uniform distribution in the range (-0,0) which seems OK on certain systems (Ubuntu 12.04) but not others (Ubuntu 14.04). Modified Paths: -------------- trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h Modified: trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp 2015-05-15 18:23:24 UTC (rev 393) +++ trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp 2015-05-16 01:17:59 UTC (rev 394) @@ -37,8 +37,7 @@ BeamEffector::~BeamEffector() { - mXYRng.reset(); - mThetaRng.reset(); + mNoiseRng.reset(); } #ifdef __APPLE_CC__ @@ -57,8 +56,7 @@ (mBody.get() == 0) || (mGameState.get() == 0) || (mAgentState.get() == 0) || - (mXYRng.get() == 0) || - (mThetaRng.get() == 0) + (mNoiseRng.get() == 0) ) { return; @@ -82,10 +80,10 @@ || mGameState->GetPlayMode() == PM_Goal_Right) { Vector3f pos; - pos[0] = beamAction->GetPosX() + (*(mXYRng.get()))(); - pos[1] = beamAction->GetPosY() + (*(mXYRng.get()))(); + pos[0] = beamAction->GetPosX() + mBeamNoiseXY*(*(mNoiseRng.get()))(); + pos[1] = beamAction->GetPosY() + mBeamNoiseXY*(*(mNoiseRng.get()))(); - float angle = beamAction->GetXYAngle() + (*(mThetaRng.get()))(); + float angle = beamAction->GetXYAngle() + mBeamNoiseAngle*(*(mNoiseRng.get()))(); // reject nan or infinite numbers in the beam position if ( @@ -192,10 +190,8 @@ mBeamNoiseAngle = 10.0f; SoccerBase::GetSoccerVar(*this, "BeamNoiseAngle",mBeamNoiseAngle); - UniformRngPtr rng1(new salt::UniformRNG<>(-mBeamNoiseXY,mBeamNoiseXY)); - mXYRng = rng1; - UniformRngPtr rng2(new salt::UniformRNG<>(-mBeamNoiseAngle,mBeamNoiseAngle)); - mThetaRng = rng2; + UniformRngPtr rng1(new salt::UniformRNG<>(-1,1)); + mNoiseRng = rng1; } void @@ -204,7 +200,6 @@ mBody.reset(); mGameState.reset(); mAgentState.reset(); - mXYRng.reset(); - mThetaRng.reset(); + mNoiseRng.reset(); } Modified: trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h 2015-05-15 18:23:24 UTC (rev 393) +++ trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h 2015-05-16 01:17:59 UTC (rev 394) @@ -72,12 +72,9 @@ /** the cached agent radius */ float mAgentRadius; - /** random number generator for beam X and Y noise */ - UniformRngPtr mXYRng; + /** random number generator for noise */ + UniformRngPtr mNoiseRng; - /** random number generator for beam angle noise */ - UniformRngPtr mThetaRng; - /** amount of noise added to beam X and Y values */ float mBeamNoiseXY; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |