Revision: 8686 http://playerstage.svn.sourceforge.net/playerstage/?rev=8686&view=rev Author: natepak Date: 2010-05-17 20:04:25 +0000 (Mon, 17 May 2010)
Log Message: ----------- Added ability to start gazebo with no world file Modified Paths: -------------- code/gazebo/trunk/server/GazeboMessage.cc code/gazebo/trunk/server/Param.hh code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/Simulator.hh code/gazebo/trunk/server/World.cc code/gazebo/trunk/server/XMLConfig.cc code/gazebo/trunk/server/gui/Gui.cc code/gazebo/trunk/server/main.cc code/gazebo/trunk/server/physics/ode/ODEPhysics.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc Modified: code/gazebo/trunk/server/GazeboMessage.cc =================================================================== --- code/gazebo/trunk/server/GazeboMessage.cc 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/GazeboMessage.cc 2010-05-17 20:04:25 UTC (rev 8686) @@ -74,11 +74,6 @@ { char logFilename[50]; - if (!node) - { - gzthrow("Null XMLConfig node"); - } - this->verbosityP->Load(node); this->logDataP->Load(node); Modified: code/gazebo/trunk/server/Param.hh =================================================================== --- code/gazebo/trunk/server/Param.hh 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/Param.hh 2010-05-17 20:04:25 UTC (rev 8686) @@ -152,8 +152,11 @@ std::ostringstream stream; stream << this->defaultValue; - std::string input = node->GetString(this->key, stream.str(), - this->required); + std::string input; + if (node) + input = node->GetString(this->key, stream.str(), this->required); + else + input = stream.str(); this->SetFromString( input ); } Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/Simulator.cc 2010-05-17 20:04:25 UTC (rev 8686) @@ -50,6 +50,47 @@ using namespace gazebo; +std::string Simulator::defaultWorld = +"<?xml version='1.0'?> <gazebo:world xmlns:xi='http://www.w3.org/2001/XInclude' xmlns:gazebo='http://playerstage.sourceforge.net/gazebo/xmlschema/#gz' xmlns:model='http://playerstage.sourceforge.net/gazebo/xmlschema/#model' xmlns:sensor='http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor' xmlns:body='http://playerstage.sourceforge.net/gazebo/xmlschema/#body' xmlns:geom='http://playerstage.sourceforge.net/gazebo/xmlschema/#geom' xmlns:joint='http://playerstage.sourceforge.net/gazebo/xmlschema/#joint' xmlns:interface='http://playerstage.sourceforge.net/gazebo/xmlschema/#interface' xmlns:rendering='http://playerstage.sourceforge.net/gazebo/xmlschema/#rendering' xmlns:renderable='http://playerstage.sourceforge.net/gazebo/xmlschema/#renderable' xmlns:controller='http://playerstage.sourceforge.net/gazebo/xmlschema/#controller' xmlns:physics='http://playerstage.sourceforge.net/gazebo/xmlschema/#physics' >\ + <physics:ode>\ + <stepTime>0.001</stepTime>\ + <gravity>0 0 -9.8</gravity>\ + <cfm>0.0000000001</cfm>\ + <erp>0.2</erp>\ + <quickStep>true</quickStep>\ + <quickStepIters>10</quickStepIters>\ + <quickStepW>1.3</quickStepW>\ + <contactMaxCorrectingVel>100.0</contactMaxCorrectingVel>\ + <contactSurfaceLayer>0.001</contactSurfaceLayer>\ + </physics:ode>\ + <rendering:gui>\ + <type>fltk</type>\ + <size>800 600</size>\ + <pos>0 0</pos>\ + </rendering:gui>\ + <rendering:ogre>\ + <ambient>1 1 1 1</ambient>\ + <shadowTechnique>stencilModulative</shadowTechnique>\ + <grid>false</grid>\ + </rendering:ogre>\ + <model:physical name=\"plane1_model\">\ + <xyz>0 0 0</xyz>\ + <rpy>0 0 0</rpy>\ + <static>true</static>\ + <body:plane name=\"plane1_body\">\ + <geom:plane name=\"plane1_geom\">\ + <normal>0 0 1</normal>\ + <size>100 100</size>\ + <segments>10 10</segments>\ + <uvTile>100 100</uvTile>\ + <material>Gazebo/GrayGrid</material>\ + <mu1>109999.0</mu1>\ + <mu2>1000.0</mu2>\ + </geom:plane>\ + </body:plane>\ + </model:physical>\ +</gazebo:world>"; + //////////////////////////////////////////////////////////////////////////////// // Constructor Simulator::Simulator() @@ -150,9 +191,13 @@ // Load the world file this->xmlFile=new gazebo::XMLConfig(); + try { - this->xmlFile->Load(worldFileName); + if (worldFileName.size()) + this->xmlFile->Load(worldFileName); + else + this->xmlFile->LoadString(defaultWorld); } catch (GazeboError e) { @@ -183,19 +228,23 @@ { try { - XMLConfigNode *childNode = rootNode->GetChild("gui"); + XMLConfigNode *childNode = NULL; + if (rootNode) + childNode = rootNode->GetChild("gui"); + int width, height, x, y; + if (childNode) { - int width = childNode->GetTupleInt("size", 0, 800); - int height = childNode->GetTupleInt("size", 1, 600); - int x = childNode->GetTupleInt("pos",0,0); - int y = childNode->GetTupleInt("pos",1,0); + width = childNode->GetTupleInt("size", 0, 800); + height = childNode->GetTupleInt("size", 1, 600); + x = childNode->GetTupleInt("pos",0,0); + y = childNode->GetTupleInt("pos",1,0); + } - //gzmsg(1) << "Creating GUI: Pos[" << x << " " << y - // << "] Size[" << width << " " << height << "]\n"; - // Create the GUI + if (childNode || !rootNode) + { this->gui = new Gui(x, y, width, height, "Gazebo"); this->gui->Load(childNode); Modified: code/gazebo/trunk/server/Simulator.hh =================================================================== --- code/gazebo/trunk/server/Simulator.hh 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/Simulator.hh 2010-05-17 20:04:25 UTC (rev 8686) @@ -254,6 +254,7 @@ private: friend class DestroyerT<Simulator>; private: friend class SingletonT<Simulator>; + private: static std::string defaultWorld; }; Modified: code/gazebo/trunk/server/World.cc =================================================================== --- code/gazebo/trunk/server/World.cc 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/World.cc 2010-05-17 20:04:25 UTC (rev 8686) @@ -196,19 +196,24 @@ } // Load OpenAL audio - if (rootNode->GetChild("openal","audio")) + if (rootNode && rootNode->GetChild("openal","audio")) { this->openAL = OpenAL::Instance(); this->openAL->Load(rootNode->GetChild("openal", "audio")); } - XMLConfigNode *physicsNode = rootNode->GetChildByNSPrefix("physics"); + XMLConfigNode *physicsNode = NULL; + if (rootNode ) + physicsNode = rootNode->GetChildByNSPrefix("physics"); + if (Simulator::Instance()->GetPhysicsEnabled() && physicsNode) { this->physicsEngine = PhysicsFactory::NewPhysicsEngine( physicsNode->GetName()); if (this->physicsEngine == NULL) gzthrow("Unable to create physics engine\n"); } + else + this->physicsEngine = PhysicsFactory::NewPhysicsEngine("ode"); // last bool is initModel, init model is not needed as Init() // is called separately from main.cc @@ -451,7 +456,7 @@ XMLConfigNode *cnode; Model *model = NULL; - if (node->GetNSPrefix() != "") + if (node && node->GetNSPrefix() != "") { // Check for model nodes if (node->GetNSPrefix() == "model") @@ -462,11 +467,9 @@ } // Load children - for (cnode = node->GetChild(); cnode != NULL; cnode = cnode->GetNext()) - { - this->LoadEntities( cnode, model, removeDuplicate, initModel); - } - + if (node) + for (cnode = node->GetChild(); cnode != NULL; cnode = cnode->GetNext()) + this->LoadEntities( cnode, model, removeDuplicate, initModel); } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/XMLConfig.cc =================================================================== --- code/gazebo/trunk/server/XMLConfig.cc 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/XMLConfig.cc 2010-05-17 20:04:25 UTC (rev 8686) @@ -390,7 +390,6 @@ { XMLConfigNode *tmp; - for (tmp = this->childFirst; tmp != NULL; tmp = tmp->GetNext() ) { if (tmp->xmlNode->name && name == (const char*)tmp->xmlNode->name) Modified: code/gazebo/trunk/server/gui/Gui.cc =================================================================== --- code/gazebo/trunk/server/gui/Gui.cc 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/gui/Gui.cc 2010-05-17 20:04:25 UTC (rev 8686) @@ -136,7 +136,10 @@ this->sizeP->Load(node); this->posP->Load(node); - this->frameMgr->Load( node->GetChild("frames") ); + if (node) + this->frameMgr->Load( node->GetChild("frames") ); + else + this->frameMgr->Load(NULL); } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/main.cc =================================================================== --- code/gazebo/trunk/server/main.cc 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/main.cc 2010-05-17 20:04:25 UTC (rev 8686) @@ -112,7 +112,7 @@ #include "Global.hh" // Command line options -const char *worldFileName; +std::string worldFileName = ""; const char *optLogFileName = NULL; unsigned int optServerId = 0; bool optServerForce = true; @@ -225,14 +225,15 @@ argc -= optind; argv += optind; - if (argc < 1) + /*if (argc < 1) { PrintUsage(); return -1; - } + }*/ // Get the world file name - worldFileName = argv[0]; + if (argc > 1) + worldFileName = argv[0]; return 0; } Modified: code/gazebo/trunk/server/physics/ode/ODEPhysics.cc =================================================================== --- code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2010-05-17 20:04:25 UTC (rev 8686) @@ -130,10 +130,11 @@ // Load the ODE engine void ODEPhysics::Load(XMLConfigNode *node) { - XMLConfigNode *cnode = node->GetChild("ode", "physics"); - if (cnode == NULL) - gzthrow("Must define a <physics:ode> node in the XML file"); + XMLConfigNode *cnode = NULL; + if (node) + cnode = node->GetChild("ode", "physics"); + this->gravityP->Load(cnode); this->stepTimeP->Load(cnode); this->updateRateP->Load(cnode); Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2010-05-17 18:14:43 UTC (rev 8685) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2010-05-17 20:04:25 UTC (rev 8686) @@ -245,10 +245,6 @@ /// Load the parameters for Ogre void OgreAdaptor::Load(XMLConfigNode *rootNode) { - XMLConfigNode *node; - - node = rootNode->GetChild("ogre", "rendering"); - // Make the root try { @@ -276,10 +272,11 @@ // Initialize ogre void OgreAdaptor::Init(XMLConfigNode *rootNode) { - XMLConfigNode *node; + XMLConfigNode *node = NULL; Ogre::ColourValue ambient; - node = rootNode->GetChild("ogre", "rendering"); + if (rootNode) + node = rootNode->GetChild("ogre", "rendering"); /// Create a dummy rendering context. /// This will allow gazebo to run headless. And it also allows OGRE to @@ -314,7 +311,7 @@ Ogre::TextureManager::getSingleton().setDefaultNumMipmaps( 5 ); // Get the SceneManager, in this case a generic one - if (node->GetChild("bsp")) + if (node && node->GetChild("bsp")) { this->sceneType= SCENE_BSP; this->sceneMgr = this->root->createSceneManager("BspSceneManager"); @@ -383,14 +380,15 @@ // Add a sky dome to our scene - if (node->GetChild("sky")) + if (node && node->GetChild("sky")) { this->skyMaterialP->Load(node->GetChild("sky")); OgreCreator::CreateSky(**(this->skyMaterialP)); } // Add fog. This changes the background color - OgreCreator::CreateFog(node->GetChild("fog")); + if (node) + OgreCreator::CreateFog(node->GetChild("fog")); if (**(this->drawGridP)) OgreCreator::DrawGrid(); @@ -398,7 +396,8 @@ // Set up the world geometry link if (this->sceneType==SCENE_BSP) { - this->worldGeometry = node->GetString("bsp","",1); + if (node) + this->worldGeometry = node->GetString("bsp","",1); try { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ _______________________________________________ Playerstage-commit mailing list Playerstage-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/playerstage-commit