Revision: 8345 http://playerstage.svn.sourceforge.net/playerstage/?rev=8345&view=rev Author: natepak Date: 2009-10-30 16:35:24 +0000 (Fri, 30 Oct 2009)
Log Message: ----------- Incorporated patches from John Hsu Modified Paths: -------------- code/gazebo/trunk/3rd_party/assimp/code/ColladaParser.cpp code/gazebo/trunk/cmake/SearchForStuff.cmake code/gazebo/trunk/libgazebo/Client.cc code/gazebo/trunk/libgazebo/bindings/ruby/CMakeLists.txt code/gazebo/trunk/server/CMakeLists.txt code/gazebo/trunk/server/Entity.cc code/gazebo/trunk/server/Global.hh code/gazebo/trunk/server/Model.cc code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/World.cc code/gazebo/trunk/server/World.hh code/gazebo/trunk/server/physics/Body.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/OgreCamera.cc code/gazebo/trunk/server/rendering/OgreCreator.cc code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc code/gazebo/trunk/server/sensors/ray/RaySensor.cc Modified: code/gazebo/trunk/3rd_party/assimp/code/ColladaParser.cpp =================================================================== --- code/gazebo/trunk/3rd_party/assimp/code/ColladaParser.cpp 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/3rd_party/assimp/code/ColladaParser.cpp 2009-10-30 16:35:24 UTC (rev 8345) @@ -76,7 +76,6 @@ if( !mReader) ThrowException( "Collada: Unable to open file."); - std::cout << "Read Contents\n"; // start reading ReadContents(); } Modified: code/gazebo/trunk/cmake/SearchForStuff.cmake =================================================================== --- code/gazebo/trunk/cmake/SearchForStuff.cmake 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/cmake/SearchForStuff.cmake 2009-10-30 16:35:24 UTC (rev 8345) @@ -13,6 +13,7 @@ SET (boost_include_dirs "" CACHE STRING "Boost include paths. Use this to override automatic detection.") SET (boost_library_dirs "" CACHE STRING "Boost library paths. Use this to override automatic detection.") SET (boost_libraries "" CACHE STRING "Boost libraries. Use this to override automatic detection.") +SET (threadpool_include_dirs "" CACHE STRING "Threadpool include paths. Use this to override automatic detection.") ######################################## # Find packages @@ -210,7 +211,12 @@ MESSAGE (STATUS "Boost Library Path: ${boost_library_dirs}") MESSAGE (STATUS "Boost Libraries: ${boost_libraries}") + ######################################## +# For Threadpool +message (STATUS "Threadpool Include Path: ${threadpool_include_dirs}") + +######################################## # Find avformat and avcodec IF (HAVE_FFMPEG) SET (libavformat_search_path Modified: code/gazebo/trunk/libgazebo/Client.cc =================================================================== --- code/gazebo/trunk/libgazebo/Client.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/libgazebo/Client.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -84,6 +84,7 @@ void Client::ConnectWait(int serverId, int clientId) { bool simulationIfaceIsValid = false; + gazebo::SimulationIface simulationIface; while (!simulationIfaceIsValid) { @@ -129,13 +130,12 @@ this->filename = stream.str(); - std::cout << "opening " << this->filename << "\n"; + //std::cout << "opening " << this->filename << "\n"; // Connect to gazebo::SimulationIface and check for changing realTime, // if simulationIface->data->realTime is not changing, the server might // be stale leftovers from previous gazebo crash, // disconnect and reconnect client - gazebo::SimulationIface simulationIface; try { simulationIface.Open(this,"default"); @@ -177,6 +177,7 @@ } } + simulationIface.Close(); } Modified: code/gazebo/trunk/libgazebo/bindings/ruby/CMakeLists.txt =================================================================== --- code/gazebo/trunk/libgazebo/bindings/ruby/CMakeLists.txt 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/libgazebo/bindings/ruby/CMakeLists.txt 2009-10-30 16:35:24 UTC (rev 8345) @@ -2,6 +2,8 @@ if(RUBY_LIBRARY AND RUBY_INCLUDE_PATH) SET(RUBY_FOUND TRUE) + message(STATUS "Found Ruby libraries: ${RUBY_LIBRARY}") + message(STATUS "Found Ruby includes: ${RUBY_INCLUDE_PATH}") endif (RUBY_LIBRARY AND RUBY_INCLUDE_PATH) IF(RUBY_FOUND) Modified: code/gazebo/trunk/server/CMakeLists.txt =================================================================== --- code/gazebo/trunk/server/CMakeLists.txt 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/CMakeLists.txt 2009-10-30 16:35:24 UTC (rev 8345) @@ -1,5 +1,6 @@ INCLUDE (${gazebo_cmake_dir}/GazeboUtils.cmake) +STRING (REPLACE " " ";" threadpool_include_dirs_split "${threadpool_include_dirs}") ######################################## # Include all the search paths for headers @@ -24,6 +25,7 @@ ${gazeboserver_include_dirs} ${boost_include_dirs} ${freeimage_include_dir} + ${threadpool_include_dirs_split} ${FLTK_INCLUDE_DIR} ) Modified: code/gazebo/trunk/server/Entity.cc =================================================================== --- code/gazebo/trunk/server/Entity.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/Entity.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -59,16 +59,16 @@ { this->parent->AddChild(this); -// if (Simulator::Instance()->GetRenderEngineEnabled()) + if (Simulator::Instance()->GetRenderEngineEnabled()) this->visualNode = OgreCreator::Instance()->CreateVisual( - visname.str(), this->parent->GetVisualNode(), this); + visname.str(), this->parent->GetVisualNode(), this); this->SetStatic(parent->IsStatic()); } else { - //if (Simulator::Instance()->GetRenderEngineEnabled()) - this->visualNode = OgreCreator::Instance()->CreateVisual( - visname.str(), NULL, this ); + if (Simulator::Instance()->GetRenderEngineEnabled()) + this->visualNode = OgreCreator::Instance()->CreateVisual( + visname.str(), NULL, this ); } // Add this to the phyic's engine @@ -83,8 +83,9 @@ World::Instance()->GetPhysicsEngine()->RemoveEntity(this); - if (this->visualNode) - OgreCreator::Instance()->DeleteVisual(this->visualNode); + if (Simulator::Instance()->GetRenderEngineEnabled()) + if (this->visualNode) + OgreCreator::Instance()->DeleteVisual(this->visualNode); this->visualNode = NULL; } Modified: code/gazebo/trunk/server/Global.hh =================================================================== --- code/gazebo/trunk/server/Global.hh 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/Global.hh 2009-10-30 16:35:24 UTC (rev 8345) @@ -80,6 +80,7 @@ #define ROUND(x) ( (int)( floor((x)+0.5) ) ) -//#define TIMING +#undef TIMING +#undef USE_THREADPOOL #endif Modified: code/gazebo/trunk/server/Model.cc =================================================================== --- code/gazebo/trunk/server/Model.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/Model.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -36,6 +36,7 @@ #include "GazeboMessage.hh" #include "XMLConfig.hh" #include "World.hh" +#include "Simulator.hh" #include "OgreCreator.hh" #include "Body.hh" #include "HingeJoint.hh" @@ -256,12 +257,10 @@ if (**this->staticP == false) this->SetGravityMode( **this->enableGravityP ); - //global fiducial and retro id this->SetLaserFiducialId(**this->laserFiducialP); this->SetLaserRetro(**this->laserRetroP); - // Create the graphics iface handler this->graphicsHandler = new GraphicsIfaceHandler(); this->graphicsHandler->Load(this->GetScopedName(), this); @@ -353,7 +352,8 @@ { if (!this->lightName.empty()) { - OgreCreator::SaveLight(p, this->lightName, stream); + if (Simulator::Instance()->GetRenderEngineEnabled()) + OgreCreator::SaveLight(p, this->lightName, stream); } } @@ -408,6 +408,10 @@ // Update the model void Model::Update() { +#ifdef USE_THREADPOOL + World::Instance()->GetPhysicsEngine()->InitForThread(); +#endif + std::map<std::string, Body* >::iterator bodyIter; std::map<std::string, Controller* >::iterator contIter; std::map<std::string, Joint* >::iterator jointIter; @@ -422,7 +426,11 @@ { if (bodyIter->second) { +#ifdef USE_THREADPOOL + World::Instance()->threadPool->schedule(boost::bind(&Body::Update,(bodyIter->second))); +#else bodyIter->second->Update(); +#endif } } @@ -434,9 +442,14 @@ for (contIter=this->controllers.begin(); contIter!=this->controllers.end(); contIter++) { - if (contIter->second) + { +#ifdef USE_THREADPOOL + World::Instance()->threadPool->schedule(boost::bind(&Controller::Update,(contIter->second))); +#else contIter->second->Update(); +#endif + } } #ifdef TIMING @@ -446,7 +459,11 @@ for (jointIter = this->joints.begin(); jointIter != this->joints.end(); jointIter++) { +#ifdef USE_THREADPOOL + World::Instance()->threadPool->schedule(boost::bind(&Joint::Update,(jointIter->second))); +#else jointIter->second->Update(); +#endif } #ifdef TIMING @@ -454,8 +471,6 @@ std::cout << " ALL Joints/canonical body (" << this->GetName() << ") DT (" << tmpT4-tmpT3 << ")" << std::endl; #endif - - // Call the model's python update function, if one exists /*if (this->pFuncUpdate) { @@ -481,16 +496,15 @@ this->xyzP->SetValue(this->pose.pos); this->rpyP->SetValue(this->pose.rot); } + + this->UpdateChild(); #ifdef TIMING - this->UpdateChild(); double tmpT5 = Simulator::Instance()->GetWallTime(); std::cout << " ALL child (" << this->GetName() << ") update DT (" << tmpT5-tmpT4 << ")" << std::endl; std::cout << " Models::Update() (" << this->GetName() << ") Total DT (" << tmpT5-tmpT1 << ")" << std::endl; -#else - this->UpdateChild(); #endif } @@ -1121,9 +1135,11 @@ body->SetPose(Pose3d()); this->bodies[body->GetName()] = body; - if ((childNode = node->GetChild("light"))) + if (Simulator::Instance()->GetRenderEngineEnabled() && + (childNode = node->GetChild("light"))) { - this->lightName = OgreCreator::CreateLight(childNode, body->GetVisualNode()); + this->lightName = OgreCreator::CreateLight(childNode, + body->GetVisualNode()); } } Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/Simulator.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -353,8 +353,10 @@ this->gui->Update(); World::Instance()->ProcessEntitiesToLoad(); - World::Instance()->GraphicsUpdate(); + if (this->renderEngineEnabled) + World::Instance()->GraphicsUpdate(); + currTime = this->GetWallTime(); if (currTime - lastTime < 1/freq) @@ -637,9 +639,18 @@ { boost::recursive_mutex::scoped_lock lock(*this->mutex); +#ifdef TIMING + double tmpT2 = Simulator::Instance()->GetWallTime(); + std::cout << " LOCK DT(" << tmpT2-tmpT1 << ")" << std::endl; +#endif world->Update(); } +#ifdef TIMING + double tmpT2 = Simulator::Instance()->GetWallTime(); + std::cout << " World::Update() DT(" << tmpT2-tmpT1 << ")" << std::endl; +#endif + currTime = this->GetRealTime(); // Set a default sleep time @@ -673,6 +684,11 @@ // Process all incoming messages from simiface world->UpdateSimulationIface(); +#ifdef TIMING + double tmpT3 = Simulator::Instance()->GetWallTime(); + std::cout << " World::UpdatSimulationIface() DT(" << tmpT3-tmpT2 << ")" << std::endl; +#endif + if (this->timeout > 0 && this->GetRealTime() > this->timeout) { this->userQuit = true; @@ -686,8 +702,8 @@ } #ifdef TIMING - double tmpT2 = this->GetWallTime(); - std::cout << " Simulator::PhysicsLoop() DT(" << tmpT2-tmpT1 + double tmpT4 = this->GetWallTime(); + std::cout << " Simulator::PhysicsLoop() DT(" << tmpT4-tmpT1 << ")" << std::endl; #endif } Modified: code/gazebo/trunk/server/World.cc =================================================================== --- code/gazebo/trunk/server/World.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/World.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -64,6 +64,12 @@ this->graphics = NULL; this->openAL = NULL; this->factory = NULL; + +#ifdef USE_THREADPOOL + Param::Begin(&this->parameters); + this->threadsP = new ParamT<int>("threads",2,0); + Param::End(); +#endif } //////////////////////////////////////////////////////////////////////////////// @@ -119,6 +125,12 @@ delete this->factory; this->factory = NULL; } + +#ifdef USE_THREADPOOL + delete this->threadsP; + delete this->threadPool; +#endif + } //////////////////////////////////////////////////////////////////////////////// @@ -152,8 +164,11 @@ this->factory = new Factory(); // Create the graphics iface handler - this->graphics = new GraphicsIfaceHandler(); - this->graphics->Load("default"); + if (Simulator::Instance()->GetRenderEngineEnabled()) + { + this->graphics = new GraphicsIfaceHandler(); + this->graphics->Load("default"); + } // Load OpenAL audio if (rootNode->GetChild("openal","audio")) @@ -176,6 +191,11 @@ this->physicsEngine->Load(rootNode); +#ifdef USE_THREADPOOL + // start a thread pool with X threads + this->threadsP->Load(rootNode); + this->threadPool = new boost::threadpool::pool(this->threadsP->GetValue()); +#endif } //////////////////////////////////////////////////////////////////////////////// @@ -221,7 +241,8 @@ this->toDeleteModels.clear(); this->toLoadEntities.clear(); - this->graphics->Init(); + if (Simulator::Instance()->GetRenderEngineEnabled()) + this->graphics->Init(); this->factory->Init(); } @@ -277,10 +298,19 @@ { if (*miter) { +#ifdef USE_THREADPOOL + this->threadPool->schedule(boost::bind(&Model::Update,(*miter))); +#else (*miter)->Update(); +#endif } } +#ifdef USE_THREADPOOL + this->threadPool->wait(); +#endif + + #ifdef TIMING double tmpT2 = Simulator::Instance()->GetWallTime(); std::cout << " World::Update() ALL Models update DT(" << tmpT2-tmpT1 << ")" << std::endl; @@ -292,7 +322,6 @@ this->physicsEngine->UpdatePhysics(); } - this->factory->Update(); #ifdef TIMING @@ -308,7 +337,7 @@ { std::vector< Model* >::iterator miter; - if (this->graphics) + if (Simulator::Instance()->GetRenderEngineEnabled() && this->graphics) delete this->graphics; // Finalize the models @@ -401,7 +430,6 @@ // Add a new entity to the world void World::InsertEntity( std::string xmlString) { - boost::recursive_mutex::scoped_lock lock(*Simulator::Instance()->GetMRMutex()); this->toLoadEntities.push_back( xmlString ); } @@ -409,31 +437,37 @@ // Load all the entities that have been queued void World::ProcessEntitiesToLoad() { - boost::recursive_mutex::scoped_lock lock(*Simulator::Instance()->GetMRMutex()); - std::vector< std::string >::iterator iter; - - for (iter = this->toLoadEntities.begin(); - iter != this->toLoadEntities.end(); iter++) + if (!this->toLoadEntities.empty()) { - // Create the world file - XMLConfig *xmlConfig = new XMLConfig(); + // maybe try try_lock here instead + boost::recursive_mutex::scoped_lock lock( + *Simulator::Instance()->GetMRMutex()); - // Load the XML tree from the given string - try + std::vector< std::string >::iterator iter; + + for (iter = this->toLoadEntities.begin(); + iter != this->toLoadEntities.end(); iter++) { - xmlConfig->LoadString( *iter ); + // Create the world file + XMLConfig *xmlConfig = new XMLConfig(); + + // Load the XML tree from the given string + try + { + xmlConfig->LoadString( *iter ); + } + catch (gazebo::GazeboError e) + { + gzerr(0) << "The world could not load the XML data [" << e << "]\n"; + continue; + } + + this->LoadEntities( xmlConfig->GetRootNode(), NULL, true); + delete xmlConfig; } - catch (gazebo::GazeboError e) - { - gzerr(0) << "The world could not load the XML data [" << e << "]\n"; - continue; - } - this->LoadEntities( xmlConfig->GetRootNode(), NULL, true); - delete xmlConfig; + this->toLoadEntities.clear(); } - - this->toLoadEntities.clear(); } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/World.hh =================================================================== --- code/gazebo/trunk/server/World.hh 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/World.hh 2009-10-30 16:35:24 UTC (rev 8345) @@ -31,10 +31,16 @@ #include <vector> #include <boost/tuple/tuple.hpp> +#ifdef USE_THREADPOOL +#include "boost/threadpool.hpp" +#include "boost/thread/mutex.hpp" +#endif + #include "SingletonT.hh" #include "Vector3.hh" #include "Pose3d.hh" #include "Entity.hh" +#include "Global.hh" namespace gazebo { @@ -234,6 +240,13 @@ private: OpenAL *openAL; +#ifdef USE_THREADPOOL + private: ParamT<int>* threadsP; + /// List of all the parameters + protected: std::vector<Param*> parameters; + public: boost::threadpool::pool* threadPool; +#endif + private: friend class DestroyerT<World>; private: friend class SingletonT<World>; Modified: code/gazebo/trunk/server/physics/Body.cc =================================================================== --- code/gazebo/trunk/server/physics/Body.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/physics/Body.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -432,6 +432,11 @@ // Update the body void Body::Update() { +#ifdef USE_THREADPOOL + // If calling Body::Update in threadpool + World::Instance()->GetPhysicsEngine()->InitForThread(); +#endif + std::vector< Sensor* >::iterator sensorIter; std::map< std::string, Geom* >::iterator geomIter; Vector3 vel; @@ -484,7 +489,11 @@ for (geomIter=this->geoms.begin(); geomIter!=this->geoms.end(); geomIter++) { +#ifdef USE_THREADPOOL + World::Instance()->threadpool->schedule(boost::bind(&Geom::Update, (geomIter->second))); +#else geomIter->second->Update(); +#endif } #ifdef TIMING @@ -495,7 +504,11 @@ for (sensorIter=this->sensors.begin(); sensorIter!=this->sensors.end(); sensorIter++) { +#ifdef USE_THREADPOOL + World::Instance()->threadpool->schedule(boost::bind(&Sensor::Update, (sensorIter))); +#else (*sensorIter)->Update(); +#endif } #ifdef TIMING Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -192,8 +192,8 @@ { this->sceneType= SCENE_EXT; //this->sceneMgr = this->root->createSceneManager(Ogre::ST_EXTERIOR_FAR); - //this->sceneMgr = this->root->createSceneManager(Ogre::ST_EXTERIOR_CLOSE); - this->sceneMgr = this->root->createSceneManager(Ogre::ST_GENERIC); + this->sceneMgr = this->root->createSceneManager(Ogre::ST_EXTERIOR_CLOSE); + //this->sceneMgr = this->root->createSceneManager(Ogre::ST_GENERIC); } // Load Resources @@ -233,7 +233,6 @@ this->sceneMgr->setShadowTextureSize(**(this->shadowTextureSizeP)); this->sceneMgr->setShadowIndexBufferSize(**(this->shadowIndexSizeP) ); - // Ambient lighting this->sceneMgr->setAmbientLight(ambient); @@ -318,8 +317,8 @@ plugins.push_back(path+"/RenderSystem_GL.so"); plugins.push_back(path+"/Plugin_ParticleFX.so"); - //plugins.push_back(path+"/Plugin_BSPSceneManager.so"); - //plugins.push_back(path+"/Plugin_OctreeSceneManager.so"); + plugins.push_back(path+"/Plugin_BSPSceneManager.so"); + plugins.push_back(path+"/Plugin_OctreeSceneManager.so"); for (piter=plugins.begin(); piter!=plugins.end(); piter++) { Modified: code/gazebo/trunk/server/rendering/OgreCamera.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreCamera.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/rendering/OgreCamera.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -112,7 +112,8 @@ void OgreCamera::LoadCam( XMLConfigNode *node ) { if (!Simulator::Instance()->GetRenderEngineEnabled()) - gzthrow("Cameras can not be used when running Gazebo without rendering engine"); + return; + //gzthrow("Cameras can not be used when running Gazebo without rendering engine"); this->visibilityMask = GZ_ALL_CAMERA; @@ -185,6 +186,9 @@ // Initialize the camera void OgreCamera::InitCam() { + if (!Simulator::Instance()->GetRenderEngineEnabled()) + return; + this->camera = OgreCreator::CreateCamera(this->cameraName, this->nearClipP->GetValue(), this->farClipP->GetValue(), *(this->hfovP->GetValue()), this->renderTarget ); // Create a scene node to control pitch motion @@ -208,6 +212,9 @@ // Update the drawing void OgreCamera::UpdateCam() { + if (!Simulator::Instance()->GetRenderEngineEnabled()) + return; + if (this->camera) { if (World::Instance()->GetWireframe()) @@ -258,6 +265,11 @@ // Render the camera void OgreCamera::Render() { + // disable rendering if "-r" option is given + if (!Simulator::Instance()->GetRenderEngineEnabled()) + return; + + // disable rendering if sensor not set to active if (!this->renderingEnabled) return; @@ -323,6 +335,9 @@ /// Set the global pose of the camera void OgreCamera::SetWorldPose(const Pose3d &pose) { + if (!Simulator::Instance()->GetRenderEngineEnabled()) + return; + this->pose = pose; this->sceneNode->setPosition( this->pose.pos.x, this->pose.pos.y, this->pose.pos.z); this->pitchNode->setOrientation( this->pose.rot.u, this->pose.rot.x, this->pose.rot.y, this->pose.rot.z); Modified: code/gazebo/trunk/server/rendering/OgreCreator.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/rendering/OgreCreator.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -800,9 +800,9 @@ (*iter)->Update(); } + if (!this->visuals.empty()) { boost::recursive_mutex::scoped_lock lock(*Simulator::Instance()->GetMRMutex()); - // Update the visuals for (viter = this->visuals.begin(); viter != this->visuals.end(); viter++) { Modified: code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -160,7 +160,9 @@ !this->saveFramesP->GetValue()) return; - this->UpdateCam(); + // Or skip if user sets camera to inactive + if (this->active) + this->UpdateCam(); } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/sensors/ray/RaySensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/ray/RaySensor.cc 2009-10-30 15:06:10 UTC (rev 8344) +++ code/gazebo/trunk/server/sensors/ray/RaySensor.cc 2009-10-30 16:35:24 UTC (rev 8345) @@ -383,7 +383,7 @@ // Update the sensor information void RaySensor::UpdateChild() { - // if (this->active) + if (this->active) { std::vector<RayGeom*>::iterator iter; Pose3d poseDelta; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference _______________________________________________ Playerstage-commit mailing list Playerstage-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/playerstage-commit