From: <na...@us...> - 2008-03-25 18:04:00
|
Revision: 4439 http://playerstage.svn.sourceforge.net/playerstage/?rev=4439&view=rev Author: natepak Date: 2008-03-25 18:04:07 -0700 (Tue, 25 Mar 2008) Log Message: ----------- Adding in stereo vision Modified Paths: -------------- code/gazebo/trunk/server/Model.cc code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/World.cc code/gazebo/trunk/server/gui/Gui.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/OgreAdaptor.hh code/gazebo/trunk/server/rendering/OgreCreator.cc code/gazebo/trunk/server/rendering/OgreVisual.cc code/gazebo/trunk/server/sensors/camera/CameraSensor.cc code/gazebo/trunk/server/sensors/camera/CameraSensor.hh code/gazebo/trunk/server/sensors/camera/SConscript Added Paths: ----------- code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.hh code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.hh Modified: code/gazebo/trunk/server/Model.cc =================================================================== --- code/gazebo/trunk/server/Model.cc 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/Model.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -70,20 +70,20 @@ for (biter=this->bodies.begin(); biter != this->bodies.end(); biter++) { - delete biter->second; + GZ_DELETE(biter->second); } this->bodies.clear(); for (jiter = this->joints.begin(); jiter != this->joints.end(); jiter++) { - delete jiter->second; + GZ_DELETE( jiter->second ); } this->joints.clear(); for (citer = this->controllers.begin(); citer != this->controllers.end(); citer++) { - delete citer->second; + GZ_DELETE( citer->second ); } this->controllers.clear(); } Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/Simulator.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -82,11 +82,10 @@ if (!this->loaded) return; - GZ_DELETE (this->gui) // enough? - GZ_DELETE (this->xmlFile) //enough? + GZ_DELETE (this->gui) + GZ_DELETE (this->xmlFile) gazebo::World::Instance()->Close(); gazebo::OgreAdaptor::Instance()->Close(); - } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/World.cc =================================================================== --- code/gazebo/trunk/server/World.cc 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/World.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -73,7 +73,11 @@ for (miter = this->models.begin(); miter != this->models.end(); miter++) { - delete (*miter); + if (*miter) + { + delete (*miter); + (*miter) = NULL; + } } this->models.clear(); Modified: code/gazebo/trunk/server/gui/Gui.cc =================================================================== --- code/gazebo/trunk/server/gui/Gui.cc 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/gui/Gui.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -86,6 +86,8 @@ /// Destructor FLTKGui::~FLTKGui() { + this->hide(); + GZ_DELETE (this->glWindow) GZ_DELETE (this->toolbar) //delete this->statusbar; Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -81,7 +81,7 @@ //GZ_DELETE (this->logManager) // this->root->detachRenderTarget(this->window); // this->root->shutdown(); - GZ_DELETE (this->root) + //GZ_DELETE (this->root) // GZ_DELETE (this->sceneMgr) //this objects seems to be destroyed by root // GZ_DELETE (this->camera) // GZ_DELETE (this->viewport) @@ -93,8 +93,9 @@ void OgreAdaptor::Close() { GZ_DELETE (this->frameListener) - GZ_DELETE (this->root) // All Ogre things should be shutdown and freed with this + // This causes a seg fault. Need to fix + //GZ_DELETE (this->root) } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-03-26 01:04:07 UTC (rev 4439) @@ -134,6 +134,7 @@ private: friend class DestroyerT<OgreAdaptor>; private: friend class SingletonT<OgreAdaptor>; + }; /*/// \brief Modified: code/gazebo/trunk/server/rendering/OgreCreator.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -166,8 +166,8 @@ // Helper function to create a camera Ogre::Camera *OgreCreator::CreateCamera(const std::string &name, double nearClip, double farClip, double hfov, Ogre::RenderTarget *renderTarget) { - Ogre::Camera *camera; Ogre::Viewport *cviewport; + Ogre::Camera *camera; camera = OgreAdaptor::Instance()->sceneMgr->createCamera(name); @@ -196,7 +196,6 @@ return camera; } - //////////////////////////////////////////////////////////////////////////////// void OgreCreator::CreateFog(XMLConfigNode *node) { Modified: code/gazebo/trunk/server/rendering/OgreVisual.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -59,7 +59,10 @@ /// Destructor OgreVisual::~OgreVisual() { - this->parentNode->removeAndDestroyChild(this->sceneNode->getName()); + if (this->parentNode && this->sceneNode) + { + //this->parentNode->removeAndDestroyChild(this->sceneNode->getName()); + } } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/sensors/camera/CameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/CameraSensor.cc 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/sensors/camera/CameraSensor.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -42,14 +42,13 @@ using namespace gazebo; -GZ_REGISTER_STATIC_SENSOR("camera", CameraSensor); - ////////////////////////////////////////////////////////////////////////////// // Constructor CameraSensor::CameraSensor(Body *body) : Sensor(body) { this->imageWidth = this->imageHeight = 0; + this->textureWidth = this->textureHeight = 0; this->saveFrameBuffer = NULL; this->saveCount = 0; @@ -109,29 +108,6 @@ // Initialize the camera void CameraSensor::InitChild() { - this->ogreTextureName = this->GetName() + "_RttTex"; - this->ogreMaterialName = this->GetName() + "_RttMat"; - // Create the render texture - this->renderTexture = Ogre::TextureManager::getSingleton().createManual( - this->ogreTextureName, - Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - Ogre::TEX_TYPE_2D, - this->imageWidth, this->imageHeight, 0, - Ogre::PF_R8G8B8, - Ogre::TU_RENDERTARGET); - - this->renderTarget = this->renderTexture->getBuffer()->getRenderTarget(); - - // Create the camera - this->camera = OgreCreator::CreateCamera(this->GetName(), - this->nearClip, this->farClip, this->hfov, this->renderTarget); - - Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().create( - this->ogreMaterialName, - Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); - - Ogre::TextureUnitState *t = mat->getTechnique(0)->getPass(0)->createTextureUnitState(this->ogreTextureName); - this->sceneNode=this->GetVisualNode()->GetSceneNode(); // Create a scene node to control pitch motion this->pitchNode = this->sceneNode->createChildSceneNode(this->GetName() + "PitchNode"); @@ -151,7 +127,6 @@ // Update the drawing void CameraSensor::UpdateChild(UpdateParams ¶ms) { - if (World::Instance()->GetWireframe()) { this->camera->setPolygonMode(Ogre::PM_WIREFRAME); @@ -185,12 +160,6 @@ return this->pose; } -//////////////////////////////////////////////////////////////////////////////// -// Return the material the camera renders to -std::string CameraSensor::GetMaterialName() const -{ - return this->ogreMaterialName; -} //////////////////////////////////////////////////////////////////////////////// // Translate the camera @@ -217,13 +186,6 @@ } ////////////////////////////////////////////////////////////////////////////// -/// Get the width of the image -unsigned int CameraSensor::GetImageWidth() const -{ - return this->imageWidth; -} - -////////////////////////////////////////////////////////////////////////////// /// Get the horizontal field of view of the camera double CameraSensor::GetFOV() const { @@ -231,15 +193,10 @@ } ////////////////////////////////////////////////////////////////////////////// -// Get the width of the texture -unsigned int CameraSensor::GetTextureWidth() const +/// Get the width of the image +unsigned int CameraSensor::GetImageWidth() const { - Ogre::HardwarePixelBufferSharedPtr mBuffer; - - // Get access to the buffer and make an image and write it to file - mBuffer = this->renderTexture->getBuffer(0, 0); - - return mBuffer->getWidth(); + return this->imageWidth; } ////////////////////////////////////////////////////////////////////////////// @@ -250,17 +207,20 @@ } ////////////////////////////////////////////////////////////////////////////// -// Get the height of the texture -unsigned int CameraSensor::GetTextureHeight() const +/// Get the width of the texture +unsigned int CameraSensor::GetTextureWidth() const { - Ogre::HardwarePixelBufferSharedPtr mBuffer; + return this->textureWidth; +} - // Get access to the buffer and make an image and write it to file - mBuffer = this->renderTexture->getBuffer(0, 0); - - return mBuffer->getHeight(); +////////////////////////////////////////////////////////////////////////////// +/// \brief Get the height of the texture +unsigned int CameraSensor::GetTextureHeight() const +{ + return this->textureHeight; } + ////////////////////////////////////////////////////////////////////////////// // Get the image size in bytes size_t CameraSensor::GetImageByteSize() const @@ -268,46 +228,7 @@ return this->imageHeight * this->imageWidth * 3; } -////////////////////////////////////////////////////////////////////////////// -/// Get a pointer to the image data -const unsigned char *CameraSensor::GetImageData() -{ - Ogre::HardwarePixelBufferSharedPtr mBuffer; - size_t size; - // Get access to the buffer and make an image and write it to file - mBuffer = this->renderTexture->getBuffer(0, 0); - - size = this->imageWidth * this->imageHeight * 3; - - // Allocate buffer - if (!this->saveFrameBuffer) - this->saveFrameBuffer = new unsigned char[size]; - - mBuffer->lock(Ogre::HardwarePixelBuffer::HBL_READ_ONLY); - - int top = (int)((mBuffer->getHeight() - this->imageHeight) / 2.0); - int left = (int)((mBuffer->getWidth() - this->imageWidth) / 2.0); - int right = left + this->imageWidth; - int bottom = top + this->imageHeight; - - // Get the center of the texture in RGB 24 bit format - mBuffer->blitToMemory( - Ogre::Box(left, top, right, bottom), - - Ogre::PixelBox( - this->imageWidth, - this->imageHeight, - 1, - Ogre::PF_B8G8R8, - this->saveFrameBuffer) - ); - - mBuffer->unlock(); - - return this->saveFrameBuffer; -} - ////////////////////////////////////////////////////////////////////////////// // Enable or disable saving void CameraSensor::EnableSaveFrame(bool enable) @@ -322,63 +243,6 @@ this->saveFrames = !this->saveFrames; } - -////////////////////////////////////////////////////////////////////////////// -// Save the current frame to disk -void CameraSensor::SaveFrame() -{ - Ogre::HardwarePixelBufferSharedPtr mBuffer; - std::ostringstream sstream; - Ogre::ImageCodec::ImageData *imgData; - Ogre::Codec * pCodec; - size_t size, pos; - - this->GetImageData(); - - // Get access to the buffer and make an image and write it to file - mBuffer = this->renderTexture->getBuffer(0, 0); - - // Create image data structure - imgData = new Ogre::ImageCodec::ImageData(); - - imgData->width = this->imageWidth; - imgData->height = this->imageHeight; - imgData->depth = 1; - imgData->format = Ogre::PF_B8G8R8; - size = this->GetImageByteSize(); - - // Wrap buffer in a chunk - Ogre::MemoryDataStreamPtr stream(new Ogre::MemoryDataStream( this->saveFrameBuffer, size, false)); - - char tmp[1024]; - if (!this->savePathname.empty()) - { - sprintf(tmp, "%s/%s-%04d.jpg", this->savePathname.c_str(), - this->GetName().c_str(), this->saveCount); - } - else - { - sprintf(tmp, "%s-%04d.jpg", this->GetName().c_str(), this->saveCount); - } - - // Get codec - Ogre::String filename = tmp; - pos = filename.find_last_of("."); - Ogre::String extension; - - while (pos != filename.length() - 1) - extension += filename[++pos]; - - // Get the codec - pCodec = Ogre::Codec::getCodec(extension); - - // Write out - Ogre::Codec::CodecDataPtr codecDataPtr(imgData); - pCodec->codeToFile(stream, filename, codecDataPtr); - - this->saveCount++; -} - //////////////////////////////////////////////////////////////////////////////// /// Get a pointer to the ogre camera Ogre::Camera *CameraSensor::GetOgreCamera() const Modified: code/gazebo/trunk/server/sensors/camera/CameraSensor.hh =================================================================== --- code/gazebo/trunk/server/sensors/camera/CameraSensor.hh 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/sensors/camera/CameraSensor.hh 2008-03-26 01:04:07 UTC (rev 4439) @@ -29,6 +29,7 @@ #include <OgrePrerequisites.h> #include <OgreTexture.h> + #include "Pose3d.hh" #include "Sensor.hh" @@ -82,7 +83,7 @@ public: Pose3d GetWorldPose() const; /// \brief Return the material the camera renders to - public: std::string GetMaterialName() const; + public: virtual std::string GetMaterialName() const = 0; /// \brief Translate the camera public: void Translate( const Vector3 &direction ); @@ -93,9 +94,6 @@ /// \brief Rotate the camera around the pitch axis public: void RotatePitch( float angle ); - /// \brief Set the camera FOV (horizontal) - public: void SetFOV(double fov); - /// \brief Get the camera FOV (horizontal) public: double GetFOV() const; @@ -112,7 +110,7 @@ public: unsigned int GetTextureHeight() const; /// \brief Get a pointer to the image data - public: const unsigned char *GetImageData(); + public: virtual const unsigned char *GetImageData() = 0; /// \brief Get the image size in bytes public: size_t GetImageByteSize() const; @@ -134,32 +132,26 @@ public: Ogre::Camera *GetOgreCamera() const; // Save the camera frame - private: void SaveFrame(); + protected: virtual void SaveFrame() = 0; - private: double hfov; - private: double nearClip, farClip; - private: unsigned int imageWidth, imageHeight; + protected: double hfov; + protected: double nearClip, farClip; + protected: unsigned int imageWidth, imageHeight; + protected: unsigned int textureWidth, textureHeight; - private: Ogre::TexturePtr renderTexture; - private: Ogre::RenderTarget *renderTarget; - private: Ogre::Viewport *viewport; + protected: Ogre::Camera *camera; + protected: Ogre::SceneNode *pitchNode; - private: Ogre::Camera *camera; - private: Ogre::SceneNode *pitchNode; + protected: Pose3d pose; - private: std::string ogreTextureName; - private: std::string ogreMaterialName; - - private: Pose3d pose; - //access to our visual node (convenience member) - private: Ogre::SceneNode *sceneNode; + protected: Ogre::SceneNode *sceneNode; // Info for saving images - private: unsigned char *saveFrameBuffer; - private: unsigned int saveCount; - private: bool saveFrames; - private: std::string savePathname; + protected: unsigned char *saveFrameBuffer; + protected: unsigned int saveCount; + protected: bool saveFrames; + protected: std::string savePathname; }; /// \} Added: code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc (rev 0) +++ code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -0,0 +1,223 @@ +/* + * Gazebo - Outdoor Multi-Robot Simulator + * Copyright (C) 2003 + * Nate Koenig & Andrew Howard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +/* Desc: A camera sensor using OpenGL + * Author: Nate Koenig + * Date: 15 July 2003 + * CVS: $Id: MonoCameraSensor.cc 4436 2008-03-24 17:42:45Z robotos $ + */ + +#include <sstream> +#include <OgreImageCodec.h> +#include <Ogre.h> + +#include "Global.hh" +#include "World.hh" +#include "GazeboError.hh" +#include "Body.hh" +#include "OgreVisual.hh" +#include "OgreCreator.hh" +#include "OgreFrameListener.hh" + +#include "SensorFactory.hh" +#include "CameraManager.hh" +#include "MonoCameraSensor.hh" + +using namespace gazebo; + +GZ_REGISTER_STATIC_SENSOR("camera", MonoCameraSensor); + +////////////////////////////////////////////////////////////////////////////// +// Constructor +MonoCameraSensor::MonoCameraSensor(Body *body) + : CameraSensor(body) +{ +} + + +////////////////////////////////////////////////////////////////////////////// +// Destructor +MonoCameraSensor::~MonoCameraSensor() +{ +} + +////////////////////////////////////////////////////////////////////////////// +// Load the camera +void MonoCameraSensor::LoadChild( XMLConfigNode *node ) +{ + CameraSensor::LoadChild(node); +} + +////////////////////////////////////////////////////////////////////////////// +// Initialize the camera +void MonoCameraSensor::InitChild() +{ + + this->ogreTextureName = this->GetName() + "_RttTex"; + this->ogreMaterialName = this->GetName() + "_RttMat"; + + // Create the render texture + this->renderTexture = Ogre::TextureManager::getSingleton().createManual( + this->ogreTextureName, + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, + this->imageWidth, this->imageHeight, 0, + Ogre::PF_R8G8B8, + Ogre::TU_RENDERTARGET); + + this->renderTarget = this->renderTexture->getBuffer()->getRenderTarget(); + + // Create the camera + this->camera = OgreCreator::CreateCamera(this->GetName(), + this->nearClip, this->farClip, this->hfov, this->renderTarget); + + Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().create( + this->ogreMaterialName, + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + + + Ogre::HardwarePixelBufferSharedPtr mBuffer; + + // Get access to the buffer and make an image and write it to file + mBuffer = this->renderTexture->getBuffer(0, 0); + + this->textureWidth = mBuffer->getWidth(); + this->textureHeight = mBuffer->getHeight(); + + CameraSensor::InitChild(); +} + +////////////////////////////////////////////////////////////////////////////// +// Finalize the camera +void MonoCameraSensor::FiniChild() +{ + CameraSensor::FiniChild(); +} + +////////////////////////////////////////////////////////////////////////////// +// Update the drawing +void MonoCameraSensor::UpdateChild(UpdateParams ¶ms) +{ + CameraSensor::UpdateChild(params); +} + +//////////////////////////////////////////////////////////////////////////////// +// Return the material the camera renders to +std::string MonoCameraSensor::GetMaterialName() const +{ + return this->ogreMaterialName; +} + + +////////////////////////////////////////////////////////////////////////////// +/// Get a pointer to the image data +const unsigned char *MonoCameraSensor::GetImageData() +{ + Ogre::HardwarePixelBufferSharedPtr mBuffer; + size_t size; + + // Get access to the buffer and make an image and write it to file + mBuffer = this->renderTexture->getBuffer(0, 0); + + size = this->imageWidth * this->imageHeight * 3; + + // Allocate buffer + if (!this->saveFrameBuffer) + this->saveFrameBuffer = new unsigned char[size]; + + mBuffer->lock(Ogre::HardwarePixelBuffer::HBL_READ_ONLY); + + int top = (int)((mBuffer->getHeight() - this->imageHeight) / 2.0); + int left = (int)((mBuffer->getWidth() - this->imageWidth) / 2.0); + int right = left + this->imageWidth; + int bottom = top + this->imageHeight; + + // Get the center of the texture in RGB 24 bit format + mBuffer->blitToMemory( + Ogre::Box(left, top, right, bottom), + + Ogre::PixelBox( + this->imageWidth, + this->imageHeight, + 1, + Ogre::PF_B8G8R8, + this->saveFrameBuffer) + ); + + mBuffer->unlock(); + + return this->saveFrameBuffer; +} + +////////////////////////////////////////////////////////////////////////////// +// Save the current frame to disk +void MonoCameraSensor::SaveFrame() +{ + Ogre::HardwarePixelBufferSharedPtr mBuffer; + std::ostringstream sstream; + Ogre::ImageCodec::ImageData *imgData; + Ogre::Codec * pCodec; + size_t size, pos; + + this->GetImageData(); + + // Get access to the buffer and make an image and write it to file + mBuffer = this->renderTexture->getBuffer(0, 0); + + // Create image data structure + imgData = new Ogre::ImageCodec::ImageData(); + + imgData->width = this->imageWidth; + imgData->height = this->imageHeight; + imgData->depth = 1; + imgData->format = Ogre::PF_B8G8R8; + size = this->GetImageByteSize(); + + // Wrap buffer in a chunk + Ogre::MemoryDataStreamPtr stream(new Ogre::MemoryDataStream( this->saveFrameBuffer, size, false)); + + char tmp[1024]; + if (!this->savePathname.empty()) + { + sprintf(tmp, "%s/%s-%04d.jpg", this->savePathname.c_str(), + this->GetName().c_str(), this->saveCount); + } + else + { + sprintf(tmp, "%s-%04d.jpg", this->GetName().c_str(), this->saveCount); + } + + // Get codec + Ogre::String filename = tmp; + pos = filename.find_last_of("."); + Ogre::String extension; + + while (pos != filename.length() - 1) + extension += filename[++pos]; + + // Get the codec + pCodec = Ogre::Codec::getCodec(extension); + + // Write out + Ogre::Codec::CodecDataPtr codecDataPtr(imgData); + pCodec->codeToFile(stream, filename, codecDataPtr); + + this->saveCount++; +} Added: code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.hh =================================================================== --- code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.hh (rev 0) +++ code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.hh 2008-03-26 01:04:07 UTC (rev 4439) @@ -0,0 +1,101 @@ +/* + * Gazebo - Outdoor Multi-Robot Simulator + * Copyright (C) 2003 + * Nate Koenig & Andrew Howard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +/* Desc: A persepective X11 OpenGL Camera Sensor + * Author: Nate Koenig + * Date: 15 July 2003 + * CVS: $Id: CameraSensor.hh 208 2008-01-05 15:33:33Z robotos $ + */ + +#ifndef MONOCAMERASENSOR_HH +#define MONOCAMERASENSOR_HH + +#include <OgrePrerequisites.h> +#include <OgreTexture.h> + +#include "CameraSensor.hh" + +// Forward Declarations +namespace Ogre +{ + class TexturePtr; + class RenderTarget; + class Camera; + class Viewport; + class SceneNode; +} + +namespace gazebo +{ +/// \addtogroup gazebo_sensor +/// \brief Basic camera sensor +/// \{ +/// \defgroup gazebo_camera Camera +/// \brief Basic camera sensor +// \{ + + +/// \brief Basic camera sensor +/// +/// This sensor is used for simulating standard monocular cameras; is +/// is used by both camera models (e.g., SonyVID30) and user interface +/// models (e.g., ObserverCam). +class MonoCameraSensor : public CameraSensor +{ + /// \brief Constructor + public: MonoCameraSensor(Body *body); + + /// \brief Destructor + public: virtual ~MonoCameraSensor(); + + /// \brief Load the camera using parameter from an XMLConfig node + /// \param node The XMLConfig node + protected: virtual void LoadChild( XMLConfigNode *node ); + + /// \brief Initialize the camera + protected: virtual void InitChild(); + + /// \brief Update the sensor information + protected: virtual void UpdateChild(UpdateParams ¶ms); + + /// Finalize the camera + protected: virtual void FiniChild(); + + /// \brief Return the material the camera renders to + public: virtual std::string GetMaterialName() const; + + /// \brief Get a pointer to the image data + public: virtual const unsigned char *GetImageData(); + + // Save the camera frame + private: void SaveFrame(); + + private: Ogre::TexturePtr renderTexture; + private: Ogre::RenderTarget *renderTarget; + + private: std::string ogreTextureName; + private: std::string ogreMaterialName; +}; + +/// \} +/// \} +} +#endif + Modified: code/gazebo/trunk/server/sensors/camera/SConscript =================================================================== --- code/gazebo/trunk/server/sensors/camera/SConscript 2008-03-25 03:55:20 UTC (rev 4438) +++ code/gazebo/trunk/server/sensors/camera/SConscript 2008-03-26 01:04:07 UTC (rev 4439) @@ -1,7 +1,7 @@ #Import variable Import('env staticObjs sharedObjs') -sources = Split('CameraSensor.cc CameraManager.cc') +sources = Split('CameraSensor.cc MonoCameraSensor.cc CameraManager.cc StereoCameraSensor.cc') staticObjs.append(env.StaticObject(sources)) sharedObjs.append(env.SharedObject(sources)) Added: code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc (rev 0) +++ code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc 2008-03-26 01:04:07 UTC (rev 4439) @@ -0,0 +1,295 @@ +/* + * Gazebo - Outdoor Multi-Robot Simulator + * Copyright (C) 2003 + * Nate Koenig & Andrew Howard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +/* Desc: Stereo Camera Sensor + * Author: Nate Koenig + * Date: 25 March 2008 + * CVS: $Id:$ + */ + +#include <sstream> +#include <OgreImageCodec.h> +#include <Ogre.h> + +#include "Global.hh" +#include "World.hh" +#include "GazeboError.hh" +#include "Body.hh" +#include "OgreVisual.hh" +#include "OgreCreator.hh" +#include "OgreAdaptor.hh" +#include "OgreFrameListener.hh" + +#include "SensorFactory.hh" +#include "CameraManager.hh" +#include "StereoCameraSensor.hh" + +using namespace gazebo; + +GZ_REGISTER_STATIC_SENSOR("stereocamera", StereoCameraSensor); + +////////////////////////////////////////////////////////////////////////////// +// Constructor +StereoCameraSensor::StereoCameraSensor(Body *body) + : CameraSensor(body) +{ +} + + +////////////////////////////////////////////////////////////////////////////// +// Destructor +StereoCameraSensor::~StereoCameraSensor() +{ +} + +////////////////////////////////////////////////////////////////////////////// +// Load the camera +void StereoCameraSensor::LoadChild( XMLConfigNode *node ) +{ + CameraSensor::LoadChild(node); +} + +////////////////////////////////////////////////////////////////////////////// +// Initialize the camera +void StereoCameraSensor::InitChild() +{ + this->leftOgreTextureName = this->GetName() + "_LEFTRttTex"; + this->rightOgreTextureName = this->GetName() + "_RIGHTRttTex"; + + this->ogreMaterialName = this->GetName() + "_RttMat"; + + // Create the render texture + this->leftRenderTexture = Ogre::TextureManager::getSingleton().createManual( + this->leftOgreTextureName, + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, + this->imageWidth, this->imageHeight, 0, + Ogre::PF_R8G8B8, + Ogre::TU_RENDERTARGET); + + this->leftRenderTarget = this->leftRenderTexture->getBuffer()->getRenderTarget(); + + this->rightRenderTexture = Ogre::TextureManager::getSingleton().createManual( + this->rightOgreTextureName, + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, + this->imageWidth, this->imageHeight, 0, + Ogre::PF_R8G8B8, + Ogre::TU_RENDERTARGET); + + this->rightRenderTarget = this->rightRenderTexture->getBuffer()->getRenderTarget(); + + // Create the camera + this->camera = OgreCreator::CreateCamera(this->GetName(), + this->nearClip, this->farClip, this->hfov, this->leftRenderTarget); + + // Hack to make the camera use the right render target too + { + Ogre::Viewport *cviewport; + + // Setup the viewport to use the texture + cviewport = this->rightRenderTarget->addViewport(camera); + cviewport->setClearEveryFrame(true); + cviewport->setBackgroundColour( *OgreAdaptor::Instance()->backgroundColor ); + cviewport->setOverlaysEnabled(false); + } + + Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().create( + this->ogreMaterialName, + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + + Ogre::HardwarePixelBufferSharedPtr mBuffer; + + // Get access to the buffer and make an image and write it to file + mBuffer = this->leftRenderTexture->getBuffer(0, 0); + + this->textureWidth = mBuffer->getWidth(); + this->textureHeight = mBuffer->getHeight(); + + this->leftCameraListener.Init(this, true); + this->rightCameraListener.Init(this, false); + + this->leftRenderTarget->addListener(&this->leftCameraListener); + this->rightRenderTarget->addListener(&this->rightCameraListener); + + CameraSensor::InitChild(); +} + +////////////////////////////////////////////////////////////////////////////// +// Finalize the camera +void StereoCameraSensor::FiniChild() +{ +} + +////////////////////////////////////////////////////////////////////////////// +// Update the drawing +void StereoCameraSensor::UpdateChild(UpdateParams ¶ms) +{ + CameraSensor::UpdateChild(params); +} + +//////////////////////////////////////////////////////////////////////////////// +// Return the material the camera renders to +std::string StereoCameraSensor::GetMaterialName() const +{ + return this->ogreMaterialName; +} + +////////////////////////////////////////////////////////////////////////////// +/// Get a pointer to the image data +const unsigned char *StereoCameraSensor::GetImageData() +{ + Ogre::HardwarePixelBufferSharedPtr mBuffer; + size_t size; + + // Get access to the buffer and make an image and write it to file + mBuffer = this->leftRenderTexture->getBuffer(0, 0); + + size = this->imageWidth * this->imageHeight * 3; + + // Allocate buffer + if (!this->saveFrameBuffer) + this->saveFrameBuffer = new unsigned char[size]; + + mBuffer->lock(Ogre::HardwarePixelBuffer::HBL_READ_ONLY); + + int top = (int)((mBuffer->getHeight() - this->imageHeight) / 2.0); + int left = (int)((mBuffer->getWidth() - this->imageWidth) / 2.0); + int right = left + this->imageWidth; + int bottom = top + this->imageHeight; + + // Get the center of the texture in RGB 24 bit format + mBuffer->blitToMemory( + Ogre::Box(left, top, right, bottom), + + Ogre::PixelBox( + this->imageWidth, + this->imageHeight, + 1, + Ogre::PF_B8G8R8, + this->saveFrameBuffer) + ); + + mBuffer->unlock(); + + return this->saveFrameBuffer; +} + +////////////////////////////////////////////////////////////////////////////// +// Save the current frame to disk +void StereoCameraSensor::SaveFrame() +{ + Ogre::HardwarePixelBufferSharedPtr mBuffer; + std::ostringstream sstream; + Ogre::ImageCodec::ImageData *imgData; + Ogre::Codec * pCodec; + size_t size, pos; + + this->GetImageData(); + + // Get access to the buffer and make an image and write it to file + mBuffer = this->leftRenderTexture->getBuffer(0, 0); + + // Create image data structure + imgData = new Ogre::ImageCodec::ImageData(); + + imgData->width = this->imageWidth; + imgData->height = this->imageHeight; + imgData->depth = 1; + imgData->format = Ogre::PF_B8G8R8; + size = this->GetImageByteSize(); + + // Wrap buffer in a chunk + Ogre::MemoryDataStreamPtr stream(new Ogre::MemoryDataStream( this->saveFrameBuffer, size, false)); + + char tmp[1024]; + if (!this->savePathname.empty()) + { + sprintf(tmp, "%s/%s-%04d.jpg", this->savePathname.c_str(), + this->GetName().c_str(), this->saveCount); + } + else + { + sprintf(tmp, "%s-%04d.jpg", this->GetName().c_str(), this->saveCount); + } + + // Get codec + Ogre::String filename = tmp; + pos = filename.find_last_of("."); + Ogre::String extension; + + while (pos != filename.length() - 1) + extension += filename[++pos]; + + // Get the codec + pCodec = Ogre::Codec::getCodec(extension); + + // Write out + Ogre::Codec::CodecDataPtr codecDataPtr(imgData); + pCodec->codeToFile(stream, filename, codecDataPtr); + + this->saveCount++; +} + +void StereoCameraSensor::StereoCameraListener::Init( + StereoCameraSensor *cam, bool isLeft) +{ + this->sensor = cam; + this->camera = this->sensor->GetOgreCamera(); + this->isLeftCamera = isLeft; +} + +void StereoCameraSensor::StereoCameraListener::preViewportUpdate(const Ogre::RenderTargetViewportEvent &evt) +{ + if (this->isLeftCamera) + printf("Left Pre\n"); + else + printf("Rightt Pre\n"); + +/* if(evt.source != mViewport) + return; + Real offset = mStereoMgr->getEyesSpacing()/2; + if(mIsLeftEye) + { + offset = -offset; + } + mCamera->setFrustumOffset(-offset,0); + mPos = mCamera->getPosition(); + Vector3 pos = mPos; + pos += offset * mCamera->getRight(); + mCamera->setPosition(pos); + mStereoMgr->updateAllDependentRenderTargets(); + mStereoMgr->chooseDebugPlaneMaterial(mIsLeftEye); + */ + +} + +void StereoCameraSensor::StereoCameraListener::postViewportUpdate(const Ogre::RenderTargetViewportEvent &evt) +{ + if (this->isLeftCamera) + printf("Left Post\n"); + else + printf("Rightt Post\n"); + +/* mCamera->setFrustumOffset(0,0); + mCamera->setPosition(mPos); + */ + +} Added: code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.hh =================================================================== --- code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.hh (rev 0) +++ code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.hh 2008-03-26 01:04:07 UTC (rev 4439) @@ -0,0 +1,122 @@ +/* + * Gazebo - Outdoor Multi-Robot Simulator + * Copyright (C) 2003 + * Nate Koenig & Andrew Howard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +/* Desc: Stereo Camera Sensor + * Author: Nate Koenig + * Date: 25 March 2008 + * SVN: $Id:$ + */ + +#ifndef STEREOCAMERASENSOR_HH +#define STEREOCAMERASENSOR_HH + +#include <OgrePrerequisites.h> +#include <OgreTexture.h> + +#include "CameraSensor.hh" + +// Forward Declarations +namespace Ogre +{ + class TexturePtr; + class RenderTarget; + class Camera; + class Viewport; + class SceneNode; +} + +namespace gazebo +{ +/// \addtogroup gazebo_sensor +/// \brief Stereo camera sensor +/// \{ +/// \defgroup gazebo_stereo_camera Stereo Camera +/// \brief Stereo camera sensor +// \{ + + +/// \brief Stereo camera sensor +/// +/// This sensor is used for simulating a stereo camera. +class StereoCameraSensor : public CameraSensor +{ + + /// \brief Constructor + public: StereoCameraSensor(Body *body); + + /// \brief Destructor + public: virtual ~StereoCameraSensor(); + + /// \brief Load the camera using parameter from an XMLConfig node + /// \param node The XMLConfig node + protected: virtual void LoadChild( XMLConfigNode *node ); + + /// \brief Initialize the camera + protected: virtual void InitChild(); + + /// \brief Update the sensor information + protected: virtual void UpdateChild(UpdateParams ¶ms); + + /// Finalize the camera + protected: virtual void FiniChild(); + + /// \brief Return the material the camera renders to + public: virtual std::string GetMaterialName() const; + + /// \brief Get a pointer to the image data + public: virtual const unsigned char *GetImageData(); + + // Save the camera frame + protected: virtual void SaveFrame(); + + private: Ogre::TexturePtr leftRenderTexture; + private: Ogre::RenderTarget *leftRenderTarget; + private: Ogre::TexturePtr rightRenderTexture; + private: Ogre::RenderTarget *rightRenderTarget; + + + private: std::string leftOgreTextureName; + private: std::string rightOgreTextureName; + private: std::string ogreMaterialName; + + private: + class StereoCameraListener : public Ogre::RenderTargetListener + { + public: StereoCameraListener() : Ogre::RenderTargetListener() {} + public: void Init(StereoCameraSensor *sensor, bool isLeft); + public: void preViewportUpdate(const Ogre::RenderTargetViewportEvent &evt); + public: void postViewportUpdate(const Ogre::RenderTargetViewportEvent &evt); + + private: Ogre::Vector3 pos; + private: StereoCameraSensor *sensor; + private: Ogre::Camera *camera; + private: bool isLeftCamera; + }; + + + private: StereoCameraListener leftCameraListener; + private: StereoCameraListener rightCameraListener; +}; + +/// \} +/// \} +} +#endif + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2008-03-28 02:31:31
|
Revision: 4453 http://playerstage.svn.sourceforge.net/playerstage/?rev=4453&view=rev Author: robotos Date: 2008-03-28 02:31:36 -0700 (Fri, 28 Mar 2008) Log Message: ----------- Changes in the messaging system. As we are lazy and will not populate the code with gzlog() calls, add support for autologging of messages and errors. This turn out to be more difficult that it seemed, so I change the class and the calls. Take advantage of that to make the same with gzthrow() now calling to that method is far easier. Changes all over the code to accomodate/take advantage of the changes. Modified Paths: -------------- code/gazebo/trunk/server/GazeboError.hh code/gazebo/trunk/server/GazeboMessage.cc code/gazebo/trunk/server/GazeboMessage.hh 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/XMLConfig.cc code/gazebo/trunk/server/controllers/Controller.cc code/gazebo/trunk/server/controllers/factory/Factory.cc code/gazebo/trunk/server/physics/Body.cc code/gazebo/trunk/server/physics/HeightmapGeom.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/OgreCreator.cc code/gazebo/trunk/server/rendering/OgreVisual.cc code/gazebo/trunk/server/sensors/Sensor.cc code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc Modified: code/gazebo/trunk/server/GazeboError.hh =================================================================== --- code/gazebo/trunk/server/GazeboError.hh 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/GazeboError.hh 2008-03-28 09:31:36 UTC (rev 4453) @@ -34,27 +34,32 @@ namespace gazebo { - /// \addtogroup gazebo_server /// \brief Gazebo error class /// \{ + //TODO: global variable, static in the class would be better, if only the linker didn't oppose to it ... + static std::ostringstream throwStream; /// Throw an error - #define gzthrow(msg) throw gazebo::GazeboError(__FILE__,__LINE__,std::string(msg)) + #define gzthrow(msg) throwStream << "Exception: " << msg << std::endl << std::flush;\ + throw gazebo::GazeboError(__FILE__,__LINE__,throwStream.str()) + /// \brief Class to handle errors /// /** - Use <tt>gzthrow(std::string)</tt> to throw errors. + Use <tt>gzthrow(data1 << data2)</tt> to throw errors. Example: \verbatim + Recommended new way: + gzthrow("This is an error message of type[" << type << "]"); + Old way: std::ostringstream stream; stream << "This is an error message of type[" << type << "]\n"; gzthrow(stream.str()); - or if type is a string, simply: - gzthrow("This is an error message of type[" + type + "]\n"); + The final "\n" is not needed anymore, the code should be changed to the new type. \endverbatim */ @@ -86,7 +91,7 @@ /// \brief Return the error string /// \return The error string public: std::string GetErrorStr() const; - + /// \brief The error function private: std::string file; Modified: code/gazebo/trunk/server/GazeboMessage.cc =================================================================== --- code/gazebo/trunk/server/GazeboMessage.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/GazeboMessage.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -38,10 +38,7 @@ /// Default constructor GazeboMessage::GazeboMessage() { - this->msgStream = &std::cout; - this->errStream = &std::cerr; - - this->level = 0; + this->level = 2; } //////////////////////////////////////////////////////////////////////////////// @@ -70,7 +67,7 @@ gzthrow("Null XMLConfig node"); } - this->SetVerbose(node->GetInt("verbosity",0,0)); + this->SetVerbose(node->GetInt("verbosity",2,0)); this->logData = node->GetBool("logData",false); if (this->logData) @@ -99,17 +96,6 @@ { node->SetValue("verbosity", this->level); node->SetValue("logData", this->logData); - - /* - node->NewElement("verbosity", String(this->level)); //std::ostringstream << this->level); - - node->NewElement("logData", gazebo::String(this->logData)); - - if (this->logData) - node->NewElement("logData", std::ostringstream << "true"); - else - node->NewElement("logData", std::ostringstream << "true"); - */ } //////////////////////////////////////////////////////////////////////////////// @@ -121,24 +107,22 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the message stream -std::ostream &GazeboMessage::Msg( int msglevel ) +void GazeboMessage::Msg( int msglevel, std::string msg ) { - if (msglevel <= this->level) - return *this->msgStream; - else - return this->nullStream; -} -//////////////////////////////////////////////////////////////////////////////// -/// Get the error stream -std::ostream &GazeboMessage::Err( int msglevel ) -{ - if (msglevel <= this->level) - return *this->errStream; + if (msglevel >= this->level) + return; + + if (msglevel <0) + std::cerr << msg; else - return this->nullStream; + std::cout << msg; + + if (this->logData) + this->Log() << msg; } + //////////////////////////////////////////////////////////////////////////////// // Log a message std::ofstream &GazeboMessage::Log() Modified: code/gazebo/trunk/server/GazeboMessage.hh =================================================================== --- code/gazebo/trunk/server/GazeboMessage.hh 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/GazeboMessage.hh 2008-03-28 09:31:36 UTC (rev 4453) @@ -32,37 +32,51 @@ #include <fstream> #include <string> #include <sstream> +#include "XMLConfig.hh" namespace gazebo { + class XMLConfigNode; /// \addtogroup gazebo_server /// \brief Gazebo message class /// \{ - + /// Output a message - #define gzmsg(level) (gazebo::GazeboMessage::Instance()->Msg(level) << "[" << __FILE__ << ":" << __LINE__ << "]\n ") + static std::ostringstream messageStream; + + #define gzmsg(level, msg) messageStream << "[" << __FILE__ << ":" << __LINE__ << "]\n" << msg << std::endl << std::flush;\ + gazebo::GazeboMessage::Instance()->Msg(level, messageStream.str()) + #define gzerr(msg) gzmsg (-1, msg) + +/* +* */ - #define gzerr(level) (gazebo::GazeboMessage::Instance()->Err(level) << "Error: [" << __FILE__ << ":" << __LINE__ << "]\n ") - - /// Log a message - #define gzlog() (gazebo::GazeboMessage::Instance()->Log() << "[" << __FILE__ << ":" << __LINE__ << "] ") + /// Log a message : not used so far but who knows + #define gzlog() (gazebo::GazeboMessage::Instance()->Log() << "[" << __FILE__ << ":" << __LINE__ << "]\n ") - class XMLConfigNode; - + /// \brief Gazebo class for outputings messages /// /** - Use <tt>gzmsg(level)</tt> as an ostream to output messages, where level is + Use <tt>gzmsg(level, msg)</tt> being msg an ostream to output messages, where level is an integer priority level. Example: \verbatim - gzmsg(0) << "This is an important message"; - gzmsg(2) << "This is a less important message"; + gzmsg(0, "This is an important message"); + gzmsg(2, "This is a less important message"); \endverbatim - */ + + Currently levels correspond roughly to this: + -1 : errors that makes Gazebo finish (can't find a bsp, a model, etc.) + 0 : errors that affect how Gazebo works (can't find a texture, etc.) + 1 : General information (Gui Initialized) + 2 : Verbose information / Debugging + + gzerr is equivalent to gzmsg(-1) + */ class GazeboMessage { /// \brief Default constructor @@ -86,11 +100,11 @@ /// \brief Use this to output a message to the terminal /// \param level Level of the message - public: std::ostream &Msg( int level = 0 ); + public: void Msg( int level, std::string msg ); /// \brief Use this to output an error to the terminal /// \param level Level of the message - public: std::ostream &Err( int level = 0 ); +// public: std::ostream &Err( int level = 0 ); /// \brief Use this to output a message to a log file public: std::ofstream &Log(); @@ -101,11 +115,8 @@ /// \brief True if logging data private: bool logData; - private: std::ostringstream nullStream; - private: std::ostream *msgStream; - private: std::ostream *errStream; + /// \brief The logstream private: std::ofstream logStream; - /// Pointer to myself private: static GazeboMessage *myself; }; @@ -113,4 +124,6 @@ /// \} } + + #endif Modified: code/gazebo/trunk/server/Global.hh =================================================================== --- code/gazebo/trunk/server/Global.hh 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/Global.hh 2008-03-28 09:31:36 UTC (rev 4453) @@ -33,7 +33,9 @@ #include <list> #include <math.h> +#include <sstream> + #include "Pose3d.hh" #include "GazeboError.hh" #include "GazeboMessage.hh" @@ -116,7 +118,6 @@ */ class Global { - /// Paths gazebo install public: static std::list<std::string> gazeboPaths; Modified: code/gazebo/trunk/server/Model.cc =================================================================== --- code/gazebo/trunk/server/Model.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/Model.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -455,7 +455,7 @@ // Store this body if (this->bodies[body->GetName()]) - gzmsg(0) << "Body with name[" << body->GetName() << "] already exists!!\n"; + gzmsg(0, "Body with name[" << body->GetName() << "] already exists!!"); // Store the pointer to this body this->bodies[body->GetName()] = body; @@ -557,8 +557,7 @@ } catch (GazeboError e) { - std::cerr << "Error Loading Controller[" << controllerName - << "]\n" << e << std::endl; + gzerr("Error Loading Controller[" << controllerName << "]\n" << e) ; delete controller; return; } @@ -568,7 +567,7 @@ } else { - gzmsg(0) << "Unknown controller[" << controllerType << "]\n"; + gzmsg(0, "Unknown controller[" << controllerType << "]"); } } @@ -685,8 +684,7 @@ } catch (GazeboError e) { - std::cerr << "Error Loading body[" << childNode->GetString("name",std::string(), 0) << "]\n"; - std::cerr << e << std::endl; + gzmsg(0,"Error Loading body[" << childNode->GetString("name",std::string(), 0) << "]\n" << e ); childNode = childNode->GetNextByNSPrefix("body"); continue; } @@ -704,8 +702,7 @@ } catch (GazeboError e) { - std::cerr << "Error Loading Joint[" << childNode->GetString("name", std::string(), 0) << "]\n"; - std::cerr << e << std::endl; + gzmsg(0,"Error Loading Joint[" << childNode->GetString("name",std::string(), 0) << "]\n" << e ); childNode = childNode->GetNextByNSPrefix("joint"); continue; } Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/Simulator.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -101,17 +101,13 @@ // Load the world file this->xmlFile=new gazebo::XMLConfig(); - try { xmlFile->Load(worldFileName); } catch (GazeboError e) { - std::ostringstream stream; - stream << "The XML config file can not be loaded, please make sure is a correct file\n" - << e << "\n"; - gzthrow(stream.str()); + gzthrow("The XML config file can not be loaded, please make sure is a correct file\n" << e); } XMLConfigNode *rootNode(xmlFile->GetRootNode()); @@ -126,10 +122,7 @@ } catch (GazeboError e) { - std::ostringstream stream; - stream << "Error loading the GUI\n" - << e << "\n"; - gzthrow(stream.str()); + gzthrow( "Error loading the GUI\n" << e); } //Initialize RenderingEngine @@ -139,11 +132,8 @@ } catch (gazebo::GazeboError e) { - std::ostringstream stream; - stream << "Failed to Initialize the OGRE Rendering system\n" - << e << "\n"; - gzthrow(stream.str()); - } + gzthrow("Failed to Initialize the OGRE Rendering system\n" << e ); + } //Preload basic shapes that can be used anywhere OgreCreator::CreateBasicShapes(); @@ -155,10 +145,7 @@ } catch (GazeboError e) { - std::ostringstream stream; - stream << "Error loading the GUI\n" - << e << "\n"; - gzthrow(stream.str()); + gzthrow("Failed to load the GUI\n" << e); } this->loaded=true; @@ -178,10 +165,8 @@ if (xmlFile->Save(filename)<0) { - std::ostringstream stream; - stream << "The XML file coult not be written back to " << filename << std::endl; - gzthrow(stream.str()); - } + gzthrow("The XML file could not be written back to " << filename ); + } } @@ -377,7 +362,7 @@ int y = childNode->GetTupleInt("pos",1,0); std::string type = childNode->GetString("type","fltk",1); - gzmsg(1) << "Creating GUI:\n\tType[" << type << "] Pos[" << x << " " << y << "] Size[" << width << " " << height << "]\n"; + gzmsg(1, "Creating GUI:\n\tType[" << type << "] Pos[" << x << " " << y << "] Size[" << width << " " << height << "]"); if (type != "fltk") { gzthrow("The only GUI available is 'fltk', for no-GUI simulation, delete the 'gui' tag and its children"); @@ -393,7 +378,7 @@ else { // Create a dummy GUI - gzmsg(1) << "Creating a dummy GUI\n"; + gzmsg(1, "Creating a dummy GUI"); this->gui = GuiFactory::NewGui(std::string("dummy"), 0, 0, 0, 0, std::string()); } } Modified: code/gazebo/trunk/server/World.cc =================================================================== --- code/gazebo/trunk/server/World.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/World.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -230,7 +230,7 @@ } catch (std::string e) { - gzmsg(-1) << "Problem destroying simIface[" << e << "]\n"; + gzmsg(-1, "Problem destroying simIface[" << e << "]"); } this->server->Fini(); @@ -575,7 +575,7 @@ } else { - gzmsg(-1) << "Simulation Iface: Model[" << this->simIface->data->model_name << "] does not exist\n"; + gzmsg(-1, "Simulation Iface: Model[" << this->simIface->data->model_name << "] does not exist"); } strcpy((char*)this->simIface->data->model_name, ""); Modified: code/gazebo/trunk/server/XMLConfig.cc =================================================================== --- code/gazebo/trunk/server/XMLConfig.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/XMLConfig.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -65,7 +65,6 @@ // Load world from file void XMLConfig::Load( const std::string &filename ) { - std::ostringstream stream; this->filename = filename; // Enable line numbering @@ -75,8 +74,7 @@ this->xmlDoc = xmlParseFile( this->filename.c_str() ); if (xmlDoc == NULL) { - stream << "Unable to parse xml file: " << this->filename; - gzthrow(stream.str()); + gzthrow( "Unable to parse xml file: " << this->filename); } // Create xpath evaluation context @@ -97,8 +95,7 @@ this->root = this->CreateNodes( NULL, xmlDocGetRootElement(this->xmlDoc) ); if (this->root == NULL) { - stream << "Empty document [" << this->filename << "]"; - gzthrow(stream.str()); + gzthrow( "Empty document [" << this->filename << "]"); } } @@ -111,9 +108,7 @@ this->xmlDoc = xmlParseDoc( (xmlChar*)(str.c_str()) ); if (xmlDoc == NULL) { - std::ostringstream stream; - stream << "unable to parse [" << str << "]"; - gzthrow(stream.str()); + gzthrow("unable to parse [" << str << "]"); } // Create wrappers for all the nodes (recursive) @@ -122,9 +117,7 @@ if (this->root == NULL) { - std::ostringstream stream; - stream << "Empty document [" << str << "\n"; - gzthrow(stream.str()); + gzthrow( "Empty document [" << str<< "]") ; } } @@ -409,8 +402,7 @@ { XMLConfigNode *node; - std::cout << "name = [" << (const char*) this->xmlNode->name - << "]\n"; + gzmsg(2, "name = [" << (const char*) this->xmlNode->name << "]"); // Recurse for (node = this->childFirst; node != NULL; node = node->next) @@ -482,9 +474,7 @@ if (!value && require) { - std::ostringstream stream; - stream << "unable to find required string attribute[" << key << "] in world file node[" << this->GetName() << "]"; - gzthrow(stream.str()); + gzthrow( "unable to find required string attribute[" << key << "] in world file node[" << this->GetName() << "]"); } else if ( !value ) return def; @@ -501,9 +491,7 @@ if (!value && require) { - std::ostringstream stream; - stream << "unable to find required char attribute[" << key << "] in world file node[" << this->GetName() << "]"; - gzthrow(stream.str()); + gzthrow("unable to find required char attribute[" << key << "] in world file node[" << this->GetName() << "]"); } else if ( !value ) return def; @@ -553,9 +541,7 @@ if (!value && require) { - std::ostringstream stream; - stream << "unable to find required int attribute[" << key << "] in world file node[" << this->GetName() << "]"; - gzthrow(stream.str()); + gzthrow ("unable to find required int attribute[" << key << "] in world file node[" << this->GetName() << "]"); } else if ( !value ) return def; @@ -572,9 +558,7 @@ if (!value && require) { - std::ostringstream stream; - stream << "unable to find required double attribute[" << key << "] in world file node[" << this->GetName() << "]"; - gzthrow(stream.str()); + gzthrow( "unable to find required double attribute[" << key << "] in world file node[" << this->GetName() << "]"); } else if ( !value ) return def; @@ -590,9 +574,7 @@ if (!value && require) { - std::ostringstream stream; - stream << "unable to find required float attribute[" << key << "] in world file node[" << this->GetName() << "]"; - gzthrow(stream.str()); + gzthrow( "unable to find required float attribute[" << key << "] in world file node[" << this->GetName() << "]"); } else if ( !value ) return def; @@ -611,9 +593,7 @@ if (!value && require) { xmlFree(value); - std::ostringstream stream; - stream << "unable to find required bool attribute[" << key << "] in world file node[" << this->GetName() << "]"; - gzthrow(stream.str()); + gzthrow( "unable to find required bool attribute[" << key << "] in world file node[" << this->GetName() << "]"); } else if ( !value ) { @@ -925,9 +905,7 @@ newNode = xmlNewNode(0, (xmlChar*) key); //I hope we don't need namespaces here if (!newNode) { - std::ostringstream stream; - stream << "unable to create an element [" << key << "] in world file node[" << this->GetName() << "]"; - gzthrow(stream.str()); + gzthrow( "unable to create an element [" << key << "] in world file node[" << this->GetName() << "]"); } xmlNodeSetContent(newNode, (xmlChar*) value); xmlAddChild(this->xmlNode, newNode); Modified: code/gazebo/trunk/server/controllers/Controller.cc =================================================================== --- code/gazebo/trunk/server/controllers/Controller.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/controllers/Controller.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -90,7 +90,7 @@ } catch (...) //TODO: Show the exception text here (subclass exception?) { - gzmsg(1) << "No manager for the interface " << ifaceType << " found. Disabled.\n"; + gzmsg(0, "No manager for the interface " << ifaceType << " found. Disabled."); childNode = childNode->GetNextByNSPrefix("interface"); continue; } @@ -105,9 +105,7 @@ if (this->ifaces.size() <= 0) { - std::ostringstream stream; - stream << "No interface defined for " << this->name << " controller"; - gzthrow(stream.str()); + gzthrow( "No interface defined for " << this->name << " controller"); } this->LoadChild(node); Modified: code/gazebo/trunk/server/controllers/factory/Factory.cc =================================================================== --- code/gazebo/trunk/server/controllers/factory/Factory.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/controllers/factory/Factory.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -100,7 +100,7 @@ } catch (gazebo::GazeboError e) { - std::cerr << "The controlled factory could not load its XML data [" << e << "]\n"; + gzerr("The controlled factory could not load its XML data [" << e << "]"); return; } Modified: code/gazebo/trunk/server/physics/Body.cc =================================================================== --- code/gazebo/trunk/server/physics/Body.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/physics/Body.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -549,7 +549,7 @@ { if (!this->bodyId) { - gzmsg(0) << "Invalid ODE body\n"; + gzmsg(0, "Set velocity to an invalid ODE body"); } else dBodySetLinearVel(this->bodyId, vel.x, vel.y, vel.z); @@ -564,7 +564,7 @@ if (!this->bodyId) { - gzmsg(0) << "Invalid ODE body\n"; + gzmsg(0, "Invalid ODE body"); return vel; } @@ -583,7 +583,7 @@ { if (!this->bodyId) { - gzmsg(0) << "Invalid ODE body\n"; + gzmsg(0, "Invalid ODE body"); } else dBodySetAngularVel(this->bodyId, vel.x, vel.y, vel.z); @@ -598,7 +598,7 @@ if (!this->bodyId) { - gzmsg(0) << "Invalid ODE body\n"; + gzmsg(0, "Invalid ODE body"); return vel; } @@ -616,7 +616,7 @@ { if (!this->bodyId) { - gzmsg(0) << "Invalid ODE body\n"; + gzmsg(0, "Invalid ODE body"); } else dBodySetForce(this->bodyId, force.x, force.y, force.z); @@ -631,7 +631,7 @@ if (!this->bodyId) { - gzmsg(0) << "Invalid ODE body\n"; + gzmsg(0, "Invalid ODE body"); return force; } @@ -650,7 +650,7 @@ { if (!this->bodyId) { - gzmsg(0) << "Invalid ODE body\n"; + gzmsg(0, "Invalid ODE body"); } else dBodySetTorque(this->bodyId, torque.x, torque.y, torque.z); @@ -665,7 +665,7 @@ if (!this->bodyId) { - gzmsg(0) << "Invalid ODE body\n"; + gzmsg(0, "Invalid ODE body"); return torque; } Modified: code/gazebo/trunk/server/physics/HeightmapGeom.cc =================================================================== --- code/gazebo/trunk/server/physics/HeightmapGeom.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/physics/HeightmapGeom.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -30,6 +30,7 @@ #include <string.h> #include "GazeboError.hh" +#include "GazeboMessage.hh" #include "OgreAdaptor.hh" #include "Global.hh" #include "Body.hh" @@ -174,7 +175,7 @@ std::ostringstream stream; - std::cout << "Terrain Image[" << this->terrainImage << "] Size[" << this->terrainSize << "]\n"; + gzmsg(2, "Terrain Image[" << this->terrainImage << "] Size[" << this->terrainSize << "]"); stream << "WorldTexture=" << worldTexture << "\n"; //The detail texture Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -193,7 +193,8 @@ this->sceneMgr->setShadowTechnique( Ogre::SHADOWTYPE_TEXTURE_ADDITIVE ); else if (shadowTechnique == std::string("none")) this->sceneMgr->setShadowTechnique( Ogre::SHADOWTYPE_NONE ); - else gzthrow(std::string("Unsupported shadow technique: ") + shadowTechnique + "\n"); + else + gzthrow("Unsupported shadow technique:\n" << shadowTechnique); this->sceneMgr->setShadowTextureSelfShadow(true); this->sceneMgr->setShadowTextureSize(node->GetInt("shadowTextureSize", 512)); @@ -234,7 +235,7 @@ } catch (Ogre::Exception e) { - gzmsg(0) << "Unable to load BSP geometry." << e.getDescription() << "\n"; + gzmsg(-1, "Unable to load BSP geometry." << e.getDescription()) ; exit(0); } } Modified: code/gazebo/trunk/server/rendering/OgreCreator.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -289,7 +289,7 @@ } catch (int) { - gzmsg(0) << "Unable to set sky dome to material[" << material << "]\n"; + gzmsg(0, "Unable to set sky dome to material[" << material << "]"); } } Modified: code/gazebo/trunk/server/rendering/OgreVisual.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -194,15 +194,15 @@ } catch (Ogre::Exception e) { - gzmsg(0) << "Unable to get Material[" << materialName << "] for Geometry[" - << this->sceneNode->getName() << ". Object will appear white.\n"; + gzmsg(0, "Unable to get Material[" << materialName << "] for Geometry[" + << this->sceneNode->getName() << ". Object will appear white."); return; } if (this->origMaterial.isNull()) { - gzmsg(0) << "Unable to get Material[" << materialName << "] for Geometry[" - << this->sceneNode->getName() << ". Object will appear white\n"; + gzmsg(0, "Unable to get Material[" << materialName << "] for Geometry[" + << this->sceneNode->getName() << ". Object will appear white"); return; } @@ -243,8 +243,8 @@ } catch (Ogre::Exception e) { - gzmsg(0) << "Unable to set Material[" << myMaterialName << "] to Geometry[" - << this->sceneNode->getName() << ". Object will appear white.\n"; + gzmsg(0, "Unable to set Material[" << myMaterialName << "] to Geometry[" + << this->sceneNode->getName() << ". Object will appear white."); } } @@ -260,7 +260,7 @@ if (this->myMaterial.isNull()) { - gzmsg(0) << "The visual " << this->sceneNode->getName() << " can't set transparency for this geom without a material\n"; + gzmsg(0, "The visual " << this->sceneNode->getName() << " can't set transparency for this geom without a material"); return; } Modified: code/gazebo/trunk/server/sensors/Sensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/Sensor.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/sensors/Sensor.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -91,7 +91,7 @@ { if (!node) { - gzmsg(0) << this->GetName() << " sensor has no controller.\n"; + gzmsg(0, this->GetName() << " sensor has no controller."); return; } Modified: code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -133,7 +133,7 @@ const unsigned char *MonoCameraSensor::GetImageData(unsigned int i) { if (i!=0) - gzerr(0) << "Camera index must be zero for mono cam"; + gzmsg(0, "Camera index must be zero for mono cam"); Ogre::HardwarePixelBufferSharedPtr mBuffer; size_t size; Modified: code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc 2008-03-28 07:45:25 UTC (rev 4452) +++ code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc 2008-03-28 09:31:36 UTC (rev 4453) @@ -172,7 +172,7 @@ if (i > 1) { - gzerr(0) << "Camera index must be 0=Left or 1=Right for stereo camera\n"; + gzmsg(0, "Camera index must be 0=Left or 1=Right for stereo camera"); i = 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <na...@us...> - 2008-03-28 13:38:18
|
Revision: 4457 http://playerstage.svn.sourceforge.net/playerstage/?rev=4457&view=rev Author: natepak Date: 2008-03-28 13:38:22 -0700 (Fri, 28 Mar 2008) Log Message: ----------- Removed latest gazeboMessage update Modified Paths: -------------- code/gazebo/trunk/server/GazeboError.hh code/gazebo/trunk/server/GazeboMessage.cc code/gazebo/trunk/server/GazeboMessage.hh 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/XMLConfig.cc code/gazebo/trunk/server/controllers/Controller.cc code/gazebo/trunk/server/controllers/factory/Factory.cc code/gazebo/trunk/server/physics/Body.cc code/gazebo/trunk/server/physics/HeightmapGeom.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/OgreCreator.cc code/gazebo/trunk/server/rendering/OgreVisual.cc code/gazebo/trunk/server/sensors/Sensor.cc code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc Modified: code/gazebo/trunk/server/GazeboError.hh =================================================================== --- code/gazebo/trunk/server/GazeboError.hh 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/GazeboError.hh 2008-03-28 20:38:22 UTC (rev 4457) @@ -34,32 +34,27 @@ namespace gazebo { + /// \addtogroup gazebo_server /// \brief Gazebo error class /// \{ - //TODO: global variable, static in the class would be better, if only the linker didn't oppose to it ... - static std::ostringstream throwStream; /// Throw an error - #define gzthrow(msg) throwStream << "Exception: " << msg << std::endl << std::flush;\ - throw gazebo::GazeboError(__FILE__,__LINE__,throwStream.str()) - + #define gzthrow(msg) throw gazebo::GazeboError(__FILE__,__LINE__,std::string(msg)) /// \brief Class to handle errors /// /** - Use <tt>gzthrow(data1 << data2)</tt> to throw errors. + Use <tt>gzthrow(std::string)</tt> to throw errors. Example: \verbatim - Recommended new way: - gzthrow("This is an error message of type[" << type << "]"); - Old way: std::ostringstream stream; stream << "This is an error message of type[" << type << "]\n"; gzthrow(stream.str()); - The final "\n" is not needed anymore, the code should be changed to the new type. + or if type is a string, simply: + gzthrow("This is an error message of type[" + type + "]\n"); \endverbatim */ @@ -91,7 +86,7 @@ /// \brief Return the error string /// \return The error string public: std::string GetErrorStr() const; - + /// \brief The error function private: std::string file; Modified: code/gazebo/trunk/server/GazeboMessage.cc =================================================================== --- code/gazebo/trunk/server/GazeboMessage.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/GazeboMessage.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -38,7 +38,10 @@ /// Default constructor GazeboMessage::GazeboMessage() { - this->level = 2; + this->msgStream = &std::cout; + this->errStream = &std::cerr; + + this->level = 0; } //////////////////////////////////////////////////////////////////////////////// @@ -67,7 +70,7 @@ gzthrow("Null XMLConfig node"); } - this->SetVerbose(node->GetInt("verbosity",2,0)); + this->SetVerbose(node->GetInt("verbosity",0,0)); this->logData = node->GetBool("logData",false); if (this->logData) @@ -96,6 +99,17 @@ { node->SetValue("verbosity", this->level); node->SetValue("logData", this->logData); + + /* + node->NewElement("verbosity", String(this->level)); //std::ostringstream << this->level); + + node->NewElement("logData", gazebo::String(this->logData)); + + if (this->logData) + node->NewElement("logData", std::ostringstream << "true"); + else + node->NewElement("logData", std::ostringstream << "true"); + */ } //////////////////////////////////////////////////////////////////////////////// @@ -107,22 +121,24 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the message stream -void GazeboMessage::Msg( int msglevel, std::string msg ) +std::ostream &GazeboMessage::Msg( int msglevel ) { + if (msglevel <= this->level) + return *this->msgStream; + else + return this->nullStream; +} - if (msglevel >= this->level) - return; - - if (msglevel <0) - std::cerr << msg; +//////////////////////////////////////////////////////////////////////////////// +/// Get the error stream +std::ostream &GazeboMessage::Err( int msglevel ) +{ + if (msglevel <= this->level) + return *this->errStream; else - std::cout << msg; - - if (this->logData) - this->Log() << msg; + return this->nullStream; } - //////////////////////////////////////////////////////////////////////////////// // Log a message std::ofstream &GazeboMessage::Log() Modified: code/gazebo/trunk/server/GazeboMessage.hh =================================================================== --- code/gazebo/trunk/server/GazeboMessage.hh 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/GazeboMessage.hh 2008-03-28 20:38:22 UTC (rev 4457) @@ -32,51 +32,37 @@ #include <fstream> #include <string> #include <sstream> -#include "XMLConfig.hh" namespace gazebo { - class XMLConfigNode; /// \addtogroup gazebo_server /// \brief Gazebo message class /// \{ - + /// Output a message - static std::ostringstream messageStream; - - #define gzmsg(level, msg) messageStream << "[" << __FILE__ << ":" << __LINE__ << "]\n" << msg << std::endl << std::flush;\ - gazebo::GazeboMessage::Instance()->Msg(level, messageStream.str()) - #define gzerr(msg) gzmsg (-1, msg) - -/* -* */ + #define gzmsg(level) (gazebo::GazeboMessage::Instance()->Msg(level) << "[" << __FILE__ << ":" << __LINE__ << "]\n ") - /// Log a message : not used so far but who knows - #define gzlog() (gazebo::GazeboMessage::Instance()->Log() << "[" << __FILE__ << ":" << __LINE__ << "]\n ") + #define gzerr(level) (gazebo::GazeboMessage::Instance()->Err(level) << "Error: [" << __FILE__ << ":" << __LINE__ << "]\n ") + + /// Log a message + #define gzlog() (gazebo::GazeboMessage::Instance()->Log() << "[" << __FILE__ << ":" << __LINE__ << "] ") - + class XMLConfigNode; + /// \brief Gazebo class for outputings messages /// /** - Use <tt>gzmsg(level, msg)</tt> being msg an ostream to output messages, where level is + Use <tt>gzmsg(level)</tt> as an ostream to output messages, where level is an integer priority level. Example: \verbatim - gzmsg(0, "This is an important message"); - gzmsg(2, "This is a less important message"); + gzmsg(0) << "This is an important message"; + gzmsg(2) << "This is a less important message"; \endverbatim - - Currently levels correspond roughly to this: - -1 : errors that makes Gazebo finish (can't find a bsp, a model, etc.) - 0 : errors that affect how Gazebo works (can't find a texture, etc.) - 1 : General information (Gui Initialized) - 2 : Verbose information / Debugging - - gzerr is equivalent to gzmsg(-1) - */ + */ class GazeboMessage { /// \brief Default constructor @@ -100,11 +86,11 @@ /// \brief Use this to output a message to the terminal /// \param level Level of the message - public: void Msg( int level, std::string msg ); + public: std::ostream &Msg( int level = 0 ); /// \brief Use this to output an error to the terminal /// \param level Level of the message -// public: std::ostream &Err( int level = 0 ); + public: std::ostream &Err( int level = 0 ); /// \brief Use this to output a message to a log file public: std::ofstream &Log(); @@ -115,8 +101,11 @@ /// \brief True if logging data private: bool logData; - /// \brief The logstream + private: std::ostringstream nullStream; + private: std::ostream *msgStream; + private: std::ostream *errStream; private: std::ofstream logStream; + /// Pointer to myself private: static GazeboMessage *myself; }; @@ -124,6 +113,4 @@ /// \} } - - #endif Modified: code/gazebo/trunk/server/Global.hh =================================================================== --- code/gazebo/trunk/server/Global.hh 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/Global.hh 2008-03-28 20:38:22 UTC (rev 4457) @@ -33,9 +33,7 @@ #include <list> #include <math.h> -#include <sstream> - #include "Pose3d.hh" #include "GazeboError.hh" #include "GazeboMessage.hh" @@ -118,6 +116,7 @@ */ class Global { + /// Paths gazebo install public: static std::list<std::string> gazeboPaths; Modified: code/gazebo/trunk/server/Model.cc =================================================================== --- code/gazebo/trunk/server/Model.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/Model.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -455,7 +455,7 @@ // Store this body if (this->bodies[body->GetName()]) - gzmsg(0, "Body with name[" << body->GetName() << "] already exists!!"); + gzmsg(0) << "Body with name[" << body->GetName() << "] already exists!!\n"; // Store the pointer to this body this->bodies[body->GetName()] = body; @@ -557,7 +557,8 @@ } catch (GazeboError e) { - gzerr("Error Loading Controller[" << controllerName << "]\n" << e) ; + std::cerr << "Error Loading Controller[" << controllerName + << "]\n" << e << std::endl; delete controller; return; } @@ -567,7 +568,7 @@ } else { - gzmsg(0, "Unknown controller[" << controllerType << "]"); + gzmsg(0) << "Unknown controller[" << controllerType << "]\n"; } } @@ -684,7 +685,8 @@ } catch (GazeboError e) { - gzmsg(0,"Error Loading body[" << childNode->GetString("name",std::string(), 0) << "]\n" << e ); + std::cerr << "Error Loading body[" << childNode->GetString("name",std::string(), 0) << "]\n"; + std::cerr << e << std::endl; childNode = childNode->GetNextByNSPrefix("body"); continue; } @@ -702,7 +704,8 @@ } catch (GazeboError e) { - gzmsg(0,"Error Loading Joint[" << childNode->GetString("name",std::string(), 0) << "]\n" << e ); + std::cerr << "Error Loading Joint[" << childNode->GetString("name", std::string(), 0) << "]\n"; + std::cerr << e << std::endl; childNode = childNode->GetNextByNSPrefix("joint"); continue; } Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/Simulator.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -101,13 +101,17 @@ // Load the world file this->xmlFile=new gazebo::XMLConfig(); + try { xmlFile->Load(worldFileName); } catch (GazeboError e) { - gzthrow("The XML config file can not be loaded, please make sure is a correct file\n" << e); + std::ostringstream stream; + stream << "The XML config file can not be loaded, please make sure is a correct file\n" + << e << "\n"; + gzthrow(stream.str()); } XMLConfigNode *rootNode(xmlFile->GetRootNode()); @@ -122,7 +126,10 @@ } catch (GazeboError e) { - gzthrow( "Error loading the GUI\n" << e); + std::ostringstream stream; + stream << "Error loading the GUI\n" + << e << "\n"; + gzthrow(stream.str()); } //Initialize RenderingEngine @@ -132,8 +139,11 @@ } catch (gazebo::GazeboError e) { - gzthrow("Failed to Initialize the OGRE Rendering system\n" << e ); - } + std::ostringstream stream; + stream << "Failed to Initialize the OGRE Rendering system\n" + << e << "\n"; + gzthrow(stream.str()); + } //Preload basic shapes that can be used anywhere OgreCreator::CreateBasicShapes(); @@ -145,7 +155,10 @@ } catch (GazeboError e) { - gzthrow("Failed to load the GUI\n" << e); + std::ostringstream stream; + stream << "Error loading the GUI\n" + << e << "\n"; + gzthrow(stream.str()); } this->loaded=true; @@ -165,8 +178,10 @@ if (xmlFile->Save(filename)<0) { - gzthrow("The XML file could not be written back to " << filename ); - } + std::ostringstream stream; + stream << "The XML file coult not be written back to " << filename << std::endl; + gzthrow(stream.str()); + } } @@ -362,7 +377,7 @@ int y = childNode->GetTupleInt("pos",1,0); std::string type = childNode->GetString("type","fltk",1); - gzmsg(1, "Creating GUI:\n\tType[" << type << "] Pos[" << x << " " << y << "] Size[" << width << " " << height << "]"); + gzmsg(1) << "Creating GUI:\n\tType[" << type << "] Pos[" << x << " " << y << "] Size[" << width << " " << height << "]\n"; if (type != "fltk") { gzthrow("The only GUI available is 'fltk', for no-GUI simulation, delete the 'gui' tag and its children"); @@ -378,7 +393,7 @@ else { // Create a dummy GUI - gzmsg(1, "Creating a dummy GUI"); + gzmsg(1) << "Creating a dummy GUI\n"; this->gui = GuiFactory::NewGui(std::string("dummy"), 0, 0, 0, 0, std::string()); } } Modified: code/gazebo/trunk/server/World.cc =================================================================== --- code/gazebo/trunk/server/World.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/World.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -230,7 +230,7 @@ } catch (std::string e) { - gzmsg(-1, "Problem destroying simIface[" << e << "]"); + gzmsg(-1) << "Problem destroying simIface[" << e << "]\n"; } this->server->Fini(); @@ -575,7 +575,7 @@ } else { - gzmsg(-1, "Simulation Iface: Model[" << this->simIface->data->model_name << "] does not exist"); + gzmsg(-1) << "Simulation Iface: Model[" << this->simIface->data->model_name << "] does not exist\n"; } strcpy((char*)this->simIface->data->model_name, ""); Modified: code/gazebo/trunk/server/XMLConfig.cc =================================================================== --- code/gazebo/trunk/server/XMLConfig.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/XMLConfig.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -65,6 +65,7 @@ // Load world from file void XMLConfig::Load( const std::string &filename ) { + std::ostringstream stream; this->filename = filename; // Enable line numbering @@ -74,7 +75,8 @@ this->xmlDoc = xmlParseFile( this->filename.c_str() ); if (xmlDoc == NULL) { - gzthrow( "Unable to parse xml file: " << this->filename); + stream << "Unable to parse xml file: " << this->filename; + gzthrow(stream.str()); } // Create xpath evaluation context @@ -95,7 +97,8 @@ this->root = this->CreateNodes( NULL, xmlDocGetRootElement(this->xmlDoc) ); if (this->root == NULL) { - gzthrow( "Empty document [" << this->filename << "]"); + stream << "Empty document [" << this->filename << "]"; + gzthrow(stream.str()); } } @@ -108,7 +111,9 @@ this->xmlDoc = xmlParseDoc( (xmlChar*)(str.c_str()) ); if (xmlDoc == NULL) { - gzthrow("unable to parse [" << str << "]"); + std::ostringstream stream; + stream << "unable to parse [" << str << "]"; + gzthrow(stream.str()); } // Create wrappers for all the nodes (recursive) @@ -117,7 +122,9 @@ if (this->root == NULL) { - gzthrow( "Empty document [" << str<< "]") ; + std::ostringstream stream; + stream << "Empty document [" << str << "\n"; + gzthrow(stream.str()); } } @@ -402,7 +409,8 @@ { XMLConfigNode *node; - gzmsg(2, "name = [" << (const char*) this->xmlNode->name << "]"); + std::cout << "name = [" << (const char*) this->xmlNode->name + << "]\n"; // Recurse for (node = this->childFirst; node != NULL; node = node->next) @@ -474,7 +482,9 @@ if (!value && require) { - gzthrow( "unable to find required string attribute[" << key << "] in world file node[" << this->GetName() << "]"); + std::ostringstream stream; + stream << "unable to find required string attribute[" << key << "] in world file node[" << this->GetName() << "]"; + gzthrow(stream.str()); } else if ( !value ) return def; @@ -491,7 +501,9 @@ if (!value && require) { - gzthrow("unable to find required char attribute[" << key << "] in world file node[" << this->GetName() << "]"); + std::ostringstream stream; + stream << "unable to find required char attribute[" << key << "] in world file node[" << this->GetName() << "]"; + gzthrow(stream.str()); } else if ( !value ) return def; @@ -541,7 +553,9 @@ if (!value && require) { - gzthrow ("unable to find required int attribute[" << key << "] in world file node[" << this->GetName() << "]"); + std::ostringstream stream; + stream << "unable to find required int attribute[" << key << "] in world file node[" << this->GetName() << "]"; + gzthrow(stream.str()); } else if ( !value ) return def; @@ -558,7 +572,9 @@ if (!value && require) { - gzthrow( "unable to find required double attribute[" << key << "] in world file node[" << this->GetName() << "]"); + std::ostringstream stream; + stream << "unable to find required double attribute[" << key << "] in world file node[" << this->GetName() << "]"; + gzthrow(stream.str()); } else if ( !value ) return def; @@ -574,7 +590,9 @@ if (!value && require) { - gzthrow( "unable to find required float attribute[" << key << "] in world file node[" << this->GetName() << "]"); + std::ostringstream stream; + stream << "unable to find required float attribute[" << key << "] in world file node[" << this->GetName() << "]"; + gzthrow(stream.str()); } else if ( !value ) return def; @@ -593,7 +611,9 @@ if (!value && require) { xmlFree(value); - gzthrow( "unable to find required bool attribute[" << key << "] in world file node[" << this->GetName() << "]"); + std::ostringstream stream; + stream << "unable to find required bool attribute[" << key << "] in world file node[" << this->GetName() << "]"; + gzthrow(stream.str()); } else if ( !value ) { @@ -905,7 +925,9 @@ newNode = xmlNewNode(0, (xmlChar*) key); //I hope we don't need namespaces here if (!newNode) { - gzthrow( "unable to create an element [" << key << "] in world file node[" << this->GetName() << "]"); + std::ostringstream stream; + stream << "unable to create an element [" << key << "] in world file node[" << this->GetName() << "]"; + gzthrow(stream.str()); } xmlNodeSetContent(newNode, (xmlChar*) value); xmlAddChild(this->xmlNode, newNode); Modified: code/gazebo/trunk/server/controllers/Controller.cc =================================================================== --- code/gazebo/trunk/server/controllers/Controller.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/controllers/Controller.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -90,7 +90,7 @@ } catch (...) //TODO: Show the exception text here (subclass exception?) { - gzmsg(0, "No manager for the interface " << ifaceType << " found. Disabled."); + gzmsg(1) << "No manager for the interface " << ifaceType << " found. Disabled.\n"; childNode = childNode->GetNextByNSPrefix("interface"); continue; } @@ -105,7 +105,9 @@ if (this->ifaces.size() <= 0) { - gzthrow( "No interface defined for " << this->name << " controller"); + std::ostringstream stream; + stream << "No interface defined for " << this->name << " controller"; + gzthrow(stream.str()); } this->LoadChild(node); Modified: code/gazebo/trunk/server/controllers/factory/Factory.cc =================================================================== --- code/gazebo/trunk/server/controllers/factory/Factory.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/controllers/factory/Factory.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -100,7 +100,7 @@ } catch (gazebo::GazeboError e) { - gzerr("The controlled factory could not load its XML data [" << e << "]"); + std::cerr << "The controlled factory could not load its XML data [" << e << "]\n"; return; } Modified: code/gazebo/trunk/server/physics/Body.cc =================================================================== --- code/gazebo/trunk/server/physics/Body.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/physics/Body.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -549,7 +549,7 @@ { if (!this->bodyId) { - gzmsg(0, "Set velocity to an invalid ODE body"); + gzmsg(0) << "Invalid ODE body\n"; } else dBodySetLinearVel(this->bodyId, vel.x, vel.y, vel.z); @@ -564,7 +564,7 @@ if (!this->bodyId) { - gzmsg(0, "Invalid ODE body"); + gzmsg(0) << "Invalid ODE body\n"; return vel; } @@ -583,7 +583,7 @@ { if (!this->bodyId) { - gzmsg(0, "Invalid ODE body"); + gzmsg(0) << "Invalid ODE body\n"; } else dBodySetAngularVel(this->bodyId, vel.x, vel.y, vel.z); @@ -598,7 +598,7 @@ if (!this->bodyId) { - gzmsg(0, "Invalid ODE body"); + gzmsg(0) << "Invalid ODE body\n"; return vel; } @@ -616,7 +616,7 @@ { if (!this->bodyId) { - gzmsg(0, "Invalid ODE body"); + gzmsg(0) << "Invalid ODE body\n"; } else dBodySetForce(this->bodyId, force.x, force.y, force.z); @@ -631,7 +631,7 @@ if (!this->bodyId) { - gzmsg(0, "Invalid ODE body"); + gzmsg(0) << "Invalid ODE body\n"; return force; } @@ -650,7 +650,7 @@ { if (!this->bodyId) { - gzmsg(0, "Invalid ODE body"); + gzmsg(0) << "Invalid ODE body\n"; } else dBodySetTorque(this->bodyId, torque.x, torque.y, torque.z); @@ -665,7 +665,7 @@ if (!this->bodyId) { - gzmsg(0, "Invalid ODE body"); + gzmsg(0) << "Invalid ODE body\n"; return torque; } Modified: code/gazebo/trunk/server/physics/HeightmapGeom.cc =================================================================== --- code/gazebo/trunk/server/physics/HeightmapGeom.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/physics/HeightmapGeom.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -30,7 +30,6 @@ #include <string.h> #include "GazeboError.hh" -#include "GazeboMessage.hh" #include "OgreAdaptor.hh" #include "Global.hh" #include "Body.hh" @@ -175,7 +174,7 @@ std::ostringstream stream; - gzmsg(2, "Terrain Image[" << this->terrainImage << "] Size[" << this->terrainSize << "]"); + std::cout << "Terrain Image[" << this->terrainImage << "] Size[" << this->terrainSize << "]\n"; stream << "WorldTexture=" << worldTexture << "\n"; //The detail texture Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -193,8 +193,7 @@ this->sceneMgr->setShadowTechnique( Ogre::SHADOWTYPE_TEXTURE_ADDITIVE ); else if (shadowTechnique == std::string("none")) this->sceneMgr->setShadowTechnique( Ogre::SHADOWTYPE_NONE ); - else - gzthrow("Unsupported shadow technique:\n" << shadowTechnique); + else gzthrow(std::string("Unsupported shadow technique: ") + shadowTechnique + "\n"); this->sceneMgr->setShadowTextureSelfShadow(true); this->sceneMgr->setShadowTexturePixelFormat(Ogre::PF_FLOAT32_R); @@ -236,7 +235,7 @@ } catch (Ogre::Exception e) { - gzmsg(-1, "Unable to load BSP geometry." << e.getDescription()) ; + gzmsg(0) << "Unable to load BSP geometry." << e.getDescription() << "\n"; exit(0); } } Modified: code/gazebo/trunk/server/rendering/OgreCreator.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -289,7 +289,7 @@ } catch (int) { - gzmsg(0, "Unable to set sky dome to material[" << material << "]"); + gzmsg(0) << "Unable to set sky dome to material[" << material << "]\n"; } } Modified: code/gazebo/trunk/server/rendering/OgreVisual.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -194,15 +194,15 @@ } catch (Ogre::Exception e) { - gzmsg(0, "Unable to get Material[" << materialName << "] for Geometry[" - << this->sceneNode->getName() << ". Object will appear white."); + gzmsg(0) << "Unable to get Material[" << materialName << "] for Geometry[" + << this->sceneNode->getName() << ". Object will appear white.\n"; return; } if (this->origMaterial.isNull()) { - gzmsg(0, "Unable to get Material[" << materialName << "] for Geometry[" - << this->sceneNode->getName() << ". Object will appear white"); + gzmsg(0) << "Unable to get Material[" << materialName << "] for Geometry[" + << this->sceneNode->getName() << ". Object will appear white\n"; return; } @@ -243,8 +243,8 @@ } catch (Ogre::Exception e) { - gzmsg(0, "Unable to set Material[" << myMaterialName << "] to Geometry[" - << this->sceneNode->getName() << ". Object will appear white."); + gzmsg(0) << "Unable to set Material[" << myMaterialName << "] to Geometry[" + << this->sceneNode->getName() << ". Object will appear white.\n"; } } @@ -260,7 +260,7 @@ if (this->myMaterial.isNull()) { - gzmsg(0, "The visual " << this->sceneNode->getName() << " can't set transparency for this geom without a material"); + gzmsg(0) << "The visual " << this->sceneNode->getName() << " can't set transparency for this geom without a material\n"; return; } Modified: code/gazebo/trunk/server/sensors/Sensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/Sensor.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/sensors/Sensor.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -91,7 +91,7 @@ { if (!node) { - gzmsg(0, this->GetName() << " sensor has no controller."); + gzmsg(0) << this->GetName() << " sensor has no controller.\n"; return; } Modified: code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -133,7 +133,7 @@ const unsigned char *MonoCameraSensor::GetImageData(unsigned int i) { if (i!=0) - gzmsg(0) << "Camera index must be zero for mono cam"; + gzerr(0) << "Camera index must be zero for mono cam"; Ogre::HardwarePixelBufferSharedPtr mBuffer; size_t size; Modified: code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc 2008-03-28 20:32:57 UTC (rev 4456) +++ code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc 2008-03-28 20:38:22 UTC (rev 4457) @@ -262,7 +262,7 @@ if (i > 1) { - gzmsg(0) << "Camera index must be 0=Left or 1=Right for stereo camera"; + gzerr(0) << "Camera index must be 0=Left or 1=Right for stereo camera\n"; i = 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <na...@us...> - 2008-04-08 14:38:46
|
Revision: 6289 http://playerstage.svn.sourceforge.net/playerstage/?rev=6289&view=rev Author: natepak Date: 2008-04-08 14:38:51 -0700 (Tue, 08 Apr 2008) Log Message: ----------- More fixes for the stereoCamera Modified Paths: -------------- code/gazebo/trunk/server/main.cc code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc Modified: code/gazebo/trunk/server/main.cc =================================================================== --- code/gazebo/trunk/server/main.cc 2008-04-08 20:23:55 UTC (rev 6288) +++ code/gazebo/trunk/server/main.cc 2008-04-08 21:38:51 UTC (rev 6289) @@ -293,7 +293,6 @@ return -1; } - //Load the simulator try { @@ -331,8 +330,6 @@ return -1; } - printf("Finalize\n"); - // Finalization and clean up try { @@ -345,6 +342,5 @@ return -1; } - printf("Quit\n"); return 0; } Modified: code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc 2008-04-08 20:23:55 UTC (rev 6288) +++ code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc 2008-04-08 21:38:51 UTC (rev 6289) @@ -42,6 +42,8 @@ #include "CameraManager.hh" #include "StereoCameraSensor.hh" +#define PF_FLOAT Ogre::PF_FLOAT16_R + using namespace gazebo; GZ_REGISTER_STATIC_SENSOR("stereocamera", StereoCameraSensor); @@ -201,7 +203,7 @@ CameraSensor::UpdateChild(params); - //sceneMgr->_suppressRenderStateChanges(true); + sceneMgr->_suppressRenderStateChanges(true); // Get pointer to the material pass pass = this->depthMaterial->getBestTechnique()->getPass(0); @@ -215,23 +217,18 @@ vp = this->renderTarget[i]->getViewport(0); // Need this line to render the ground plane. No idea why it's necessary. - /*renderSys->_setViewport(vp); + renderSys->_setViewport(vp); sceneMgr->_setPass(pass, true, false); autoParamDataSource.setCurrentPass(pass); autoParamDataSource.setCurrentViewport(vp); autoParamDataSource.setCurrentRenderTarget(this->renderTarget[i]); autoParamDataSource.setCurrentSceneManager(sceneMgr); autoParamDataSource.setCurrentCamera(this->camera); - printf("8\n"); - //pass->_updateAutoParamsNoLights(autoParamDataSource); - printf("9\n"); + pass->_updateAutoParamsNoLights(autoParamDataSource); - printf("10\n"); // These two lines don't seem to do anything useful renderSys->_setProjectionMatrix(this->camera->getProjectionMatrixRS()); - printf("11\n"); renderSys->_setViewMatrix(this->camera->getViewMatrix(true)); - printf("12\n"); // NOTE: We MUST bind parameters AFTER updating the autos if (pass->hasVertexProgram()) @@ -248,12 +245,8 @@ pass->getFragmentProgramParameters()); } - */ - - printf("i[%d]\n",i); // Render the texture this->renderTarget[i]->update(); - printf("13\n"); // OgreSceneManager::_render function automatically sets farClip to 0. // Which normally equates to infinite distance. We don't want this. So @@ -261,9 +254,9 @@ this->camera->setFarClipDistance( this->farClip ); } - //sceneMgr->_suppressRenderStateChanges(false); + sceneMgr->_suppressRenderStateChanges(false); - //this->FillBuffers(); + this->FillBuffers(); } //////////////////////////////////////////////////////////////////////////////// @@ -298,22 +291,23 @@ void StereoCameraSensor::FillBuffers() { Ogre::HardwarePixelBufferSharedPtr hardwareBuffer; - int top, left, right, bottom, i; + int i; + Ogre::Box box; - top = (int)((hardwareBuffer->getHeight() - this->imageHeight) / 2.0); - left = (int)((hardwareBuffer->getWidth() - this->imageWidth) / 2.0); - right = left + this->imageWidth; - bottom = top + this->imageHeight; - - Ogre::Box box(left, top, right, bottom); - - for (i=0; i<4; i++) + for (i=2; i<3; i++) { + printf("1\n"); // Get access to the buffer and make an image and write it to file hardwareBuffer = this->renderTexture[i]->getBuffer(0, 0); - // hardwareBuffer->lock(Ogre::HardwarePixelBuffer::HBL_NORMAL); + hardwareBuffer->lock(Ogre::HardwarePixelBuffer::HBL_DISCARD); + box.top = (int)((hardwareBuffer->getHeight() - this->imageHeight) / 2.0); + box.left = (int)((hardwareBuffer->getWidth() - this->imageWidth) / 2.0); + box.right = box.left + this->imageWidth; + box.bottom = box.top + this->imageHeight; + + printf("2\n"); if (i < 2) { hardwareBuffer->blitToMemory ( box, @@ -325,12 +319,22 @@ { hardwareBuffer->blitToMemory (box, Ogre::PixelBox( this->imageWidth, this->imageHeight, - 1, Ogre::PF_FLOAT32_R, this->depthBuffer[i-2]) + 1, PF_FLOAT, this->depthBuffer[i-2]) ); } - //hardwareBuffer->unlock(); + printf("3\n"); + hardwareBuffer->unlock(); } + + printf("4\n"); + for (i=0; i<this->imageHeight; i++) + { + for (int j = 0; j<this->imageWidth; j++) + { + printf("%4.2f\n",*(this->depthBuffer[D_LEFT] + i*this->imageWidth+j)); + } + } } //////////////////////////////////////////////////////////////////////////////// @@ -398,7 +402,7 @@ if (i<2) imgData->format = Ogre::PF_B8G8R8; else - imgData->format = Ogre::PF_FLOAT32_R; + imgData->format = PF_FLOAT; size = this->GetImageByteSize(); @@ -501,7 +505,7 @@ Ogre::PixelFormat pf; if (depth) - pf = Ogre::PF_FLOAT32_R; + pf = PF_FLOAT; else pf = Ogre::PF_R8G8B8; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <na...@us...> - 2008-05-02 07:32:11
|
Revision: 6394 http://playerstage.svn.sourceforge.net/playerstage/?rev=6394&view=rev Author: natepak Date: 2008-05-02 07:32:17 -0700 (Fri, 02 May 2008) Log Message: ----------- Fix to gzthrow Modified Paths: -------------- code/gazebo/trunk/server/GazeboError.hh code/gazebo/trunk/server/Global.hh code/gazebo/trunk/server/World.cc code/gazebo/trunk/server/physics/ode/ODEPhysics.cc Modified: code/gazebo/trunk/server/GazeboError.hh =================================================================== --- code/gazebo/trunk/server/GazeboError.hh 2008-05-02 01:18:33 UTC (rev 6393) +++ code/gazebo/trunk/server/GazeboError.hh 2008-05-02 14:32:17 UTC (rev 6394) @@ -38,10 +38,8 @@ /// \brief Gazebo error class /// \{ - //TODO: global variable, static in the class would be better, if only the linker didn't oppose to it ... - static std::ostringstream throwStream; /// Throw an error - #define gzthrow(msg) {throwStream << "Exception: " << msg << std::endl << std::flush; throw gazebo::GazeboError(__FILE__,__LINE__,throwStream.str()); } + #define gzthrow(msg) {std::ostringstream throwStream; throwStream << "Exception: " << msg << std::endl << std::flush; throw gazebo::GazeboError(__FILE__,__LINE__,throwStream.str()); } /// \brief Class to handle errors Modified: code/gazebo/trunk/server/Global.hh =================================================================== --- code/gazebo/trunk/server/Global.hh 2008-05-02 01:18:33 UTC (rev 6393) +++ code/gazebo/trunk/server/Global.hh 2008-05-02 14:32:17 UTC (rev 6394) @@ -88,7 +88,7 @@ #define ROUND(x) ( (int)( floor((x)+0.5) ) ) -#define GZ_DELETE(p){ if(p) { delete (p); (p)=NULL; } } +#define GZ_DELETE(p) { if(p) { delete (p); (p)=NULL; } } namespace gazebo { Modified: code/gazebo/trunk/server/World.cc =================================================================== --- code/gazebo/trunk/server/World.cc 2008-05-02 01:18:33 UTC (rev 6393) +++ code/gazebo/trunk/server/World.cc 2008-05-02 14:32:17 UTC (rev 6394) @@ -55,6 +55,9 @@ this->showJoints = false; this->wireframe = false; this->showPhysics = false; + this->physicsEngine = NULL; + this->server = NULL; + this->simIface = NULL; } Modified: code/gazebo/trunk/server/physics/ode/ODEPhysics.cc =================================================================== --- code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2008-05-02 01:18:33 UTC (rev 6393) +++ code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2008-05-02 14:32:17 UTC (rev 6394) @@ -78,9 +78,12 @@ // Destructor ODEPhysics::~ODEPhysics() { - dSpaceDestroy(this->spaceId); - dWorldDestroy(this->worldId); + if (this->spaceId) + dSpaceDestroy(this->spaceId); + if (this->worldId) + dWorldDestroy(this->worldId); + this->spaceId = NULL; this->worldId = NULL; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <na...@us...> - 2008-05-02 10:11:37
|
Revision: 6395 http://playerstage.svn.sourceforge.net/playerstage/?rev=6395&view=rev Author: natepak Date: 2008-05-02 10:11:43 -0700 (Fri, 02 May 2008) Log Message: ----------- Throttled the rendering and physics update Modified Paths: -------------- code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/Simulator.hh code/gazebo/trunk/server/gui/Gui.cc code/gazebo/trunk/server/gui/StatusBar.cc Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-05-02 14:32:17 UTC (rev 6394) +++ code/gazebo/trunk/server/Simulator.cc 2008-05-02 17:11:43 UTC (rev 6395) @@ -189,41 +189,59 @@ gazebo::World::Instance()->Fini(); } -//////////////////////////////////////////////////////////////////////////////// -/// Update the simulation -void Simulator::Update() -{ - double step= World::Instance()->GetPhysicsEngine()->GetStepTime(); - this->simTime += step; - - // Update the physics engine - if (!this->GetUserPause() && !this->GetUserStep() || - (this->GetUserStep() && this->GetUserStepInc())) - { - this->iterations++; - this->pause=false; - this->SetUserStepInc(!this->GetUserStepInc()); - } - else - { - this->pauseTime += step; - this->pause=true; - } - -} - //////////////////////////////////////////////////////////////////////////////// /// Main simulation loop, when this loop ends the simulation finish void Simulator::MainLoop() { + double step= World::Instance()->GetPhysicsEngine()->GetStepTime(); + double currTime; + double elapsedTime; + while (!this->userQuit) { - this->Update(); //global simulation - World::Instance()->Update(); //physics + currTime = this->GetRealTime(); - gazebo::OgreAdaptor::Instance()->Render(); //rendering - this->gui->Update(); //GUI + if ((currTime - this->prevPhysicsTime) >= step) + { + this->simTime += step; + + // Update the physics engine + if (!this->GetUserPause() && !this->GetUserStep() || + (this->GetUserStep() && this->GetUserStepInc())) + { + this->iterations++; + this->pause=false; + this->SetUserStepInc(!this->GetUserStepInc()); + } + else + { + this->pauseTime += step; + this->pause=true; + } + + World::Instance()->Update(); //physics + + this->prevPhysicsTime = this->GetRealTime(); + } + + // Update the rendering + if (currTime - this->prevRenderTime > 0.02) + { + gazebo::OgreAdaptor::Instance()->Render(); + this->prevRenderTime = this->GetRealTime(); + } + + // Update the gui + this->gui->Update(); + + elapsedTime = (this->GetRealTime()-currTime)*2.0; + + // Wait if we're going too fast + if ( elapsedTime < 0.02 ) + { + usleep( (0.02 - elapsedTime) * 1e6 ); + } } } Modified: code/gazebo/trunk/server/Simulator.hh =================================================================== --- code/gazebo/trunk/server/Simulator.hh 2008-05-02 14:32:17 UTC (rev 6394) +++ code/gazebo/trunk/server/Simulator.hh 2008-05-02 17:11:43 UTC (rev 6395) @@ -71,9 +71,6 @@ /// \brief Finalize the simulation public: void Fini( ); - /// \brief Update the simulation - public: void Update(); - /// \brief Main simulation loop, when this loop ends the simulation finish public: void MainLoop(); @@ -157,6 +154,7 @@ /// Current simulation time private: double simTime, pauseTime, startTime; + private: double prevPhysicsTime, prevRenderTime; // UserIteractions /// \brief Set to true to pause the simulation Modified: code/gazebo/trunk/server/gui/Gui.cc =================================================================== --- code/gazebo/trunk/server/gui/Gui.cc 2008-05-02 14:32:17 UTC (rev 6394) +++ code/gazebo/trunk/server/gui/Gui.cc 2008-05-02 17:11:43 UTC (rev 6395) @@ -106,8 +106,8 @@ this->toolbar->Update(); this->statusbar->Update(); this->glWindow->Update(); - //Fl::check(); - Fl::wait(0.03); + Fl::check(); + //Fl::wait(0.03); } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/gui/StatusBar.cc =================================================================== --- code/gazebo/trunk/server/gui/StatusBar.cc 2008-05-02 14:32:17 UTC (rev 6394) +++ code/gazebo/trunk/server/gui/StatusBar.cc 2008-05-02 17:11:43 UTC (rev 6395) @@ -81,7 +81,10 @@ this->iterations->value(Simulator::Instance()->GetIterations()); this->fps->value(avgFPS); - this->realTime->value(Simulator::Instance()->GetRealTime()); + if (Simulator::Instance()->GetRealTime() - this->realTime->value() > 0.1) + { + this->realTime->value(Simulator::Instance()->GetRealTime()); + } this->simTime->value(Simulator::Instance()->GetSimTime()); this->pauseTime->value(Simulator::Instance()->GetPauseTime()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2008-05-08 05:15:57
|
Revision: 6402 http://playerstage.svn.sourceforge.net/playerstage/?rev=6402&view=rev Author: robotos Date: 2008-05-08 05:15:41 -0700 (Thu, 08 May 2008) Log Message: ----------- Integrate patch 1946172, I've done a new private method to avoid copy/paste Making a bunch of method const according to their true nature Modified Paths: -------------- code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/Simulator.hh code/gazebo/trunk/server/XMLConfig.cc code/gazebo/trunk/server/XMLConfig.hh Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-05-08 05:37:36 UTC (rev 6401) +++ code/gazebo/trunk/server/Simulator.cc 2008-05-08 12:15:41 UTC (rev 6402) @@ -247,7 +247,7 @@ //////////////////////////////////////////////////////////////////////////////// /// Gets our current GUI interface -Gui *Simulator::GetUI() +Gui *Simulator::GetUI() const { return this->gui; } @@ -262,7 +262,7 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the number of iterations of this simulation session -unsigned long Simulator::GetIterations() +unsigned long Simulator::GetIterations() const { return this->iterations; } @@ -327,7 +327,7 @@ } //////////////////////////////////////////////////////////////////////////////// -bool Simulator::GetUserPause() +bool Simulator::GetUserPause() const { return userPause; } @@ -339,7 +339,7 @@ } //////////////////////////////////////////////////////////////////////////////// -bool Simulator::GetUserStep() +bool Simulator::GetUserStep() const { return userStep; } @@ -351,7 +351,7 @@ } //////////////////////////////////////////////////////////////////////////////// -bool Simulator::GetUserStepInc() +bool Simulator::GetUserStepInc() const { return userStepInc; } Modified: code/gazebo/trunk/server/Simulator.hh =================================================================== --- code/gazebo/trunk/server/Simulator.hh 2008-05-08 05:37:36 UTC (rev 6401) +++ code/gazebo/trunk/server/Simulator.hh 2008-05-08 12:15:41 UTC (rev 6402) @@ -75,13 +75,13 @@ public: void MainLoop(); /// \brief Gets our current GUI interface - public: Gui *GetUI(); + public: Gui *GetUI() const; /// \brief Returns the state of the simulation true if paused public: bool IsPaused() const; /// \brief Get the number of iterations - public: unsigned long GetIterations(); + public: unsigned long GetIterations() const; /* /// \brief Set the number of iterations public: static void SetIterations(unsigned long count); @@ -118,19 +118,19 @@ public: void SetUserQuit(); /// \brief Return true if the user has pased - public: bool GetUserPause(); + public: bool GetUserPause() const; /// \brief Set whether the user has paused public: void SetUserPause(bool pause); /// \brief Return true if the user has stepped the simulation - public: bool GetUserStep(); + public: bool GetUserStep() const; /// \brief Set whether the user has stepped the simulation public: void SetUserStep( bool step ); /// \brief Return true if the step has incremented - public: bool GetUserStepInc(); + public: bool GetUserStepInc() const; /// \brief Set whether the step has incremented public: void SetUserStepInc(bool step); Modified: code/gazebo/trunk/server/XMLConfig.cc =================================================================== --- code/gazebo/trunk/server/XMLConfig.cc 2008-05-08 05:37:36 UTC (rev 6401) +++ code/gazebo/trunk/server/XMLConfig.cc 2008-05-08 12:15:41 UTC (rev 6402) @@ -72,31 +72,7 @@ // Load the file this->xmlDoc = xmlParseFile( this->filename.c_str() ); - if (xmlDoc == NULL) - { - gzthrow( "Unable to parse xml file: " << this->filename); - } - - // Create xpath evaluation context - this->xpathContex = xmlXPathNewContext(this->xmlDoc); - if (this->xpathContex == NULL) - { - gzthrow("Unable to create new XPath context"); - } - - // Apply the XInclude process. - if (xmlXIncludeProcess(this->xmlDoc) < 0) - { - //this will fail if the included file is not found, too strict? - gzthrow("XInclude process failed\n"); - } - - // Create wrappers for all the nodes (recursive) - this->root = this->CreateNodes( NULL, xmlDocGetRootElement(this->xmlDoc) ); - if (this->root == NULL) - { - gzthrow( "Empty document [" << this->filename << "]"); - } + this->FillDocumentNodes(); } void XMLConfig::LoadString( const std::string &str ) @@ -106,19 +82,7 @@ // Load the file this->xmlDoc = xmlParseDoc( (xmlChar*)(str.c_str()) ); - if (xmlDoc == NULL) - { - gzthrow("unable to parse [" << str << "]"); - } - - // Create wrappers for all the nodes (recursive) - this->root = this->CreateNodes( NULL, - xmlDocGetRootElement(this->xmlDoc) ); - - if (this->root == NULL) - { - gzthrow( "Empty document [" << str<< "]") ; - } + this->FillDocumentNodes(); } @@ -127,7 +91,7 @@ int XMLConfig::Save(const std::string &filename ) { int result=0; - if (filename==std::string()) + if (filename == std::string()) result=xmlSaveFileEnc(this->filename.c_str(), this->xmlDoc, "UTF-8"); else result=xmlSaveFileEnc(filename.c_str(), this->xmlDoc, "UTF-8"); @@ -143,7 +107,40 @@ } + //////////////////////////////////////////////////////////////////////////// +// Fills the document with information +void XMLConfig::FillDocumentNodes() +{ + if (xmlDoc == NULL) + { + gzthrow( "Unable to parse xml file: " << this->filename); + } + + // Create xpath evaluation context + this->xpathContex = xmlXPathNewContext(this->xmlDoc); + if (this->xpathContex == NULL) + { + gzthrow("Unable to create new XPath context"); + } + + // Apply the XInclude process. + if (xmlXIncludeProcess(this->xmlDoc) < 0) + { + //this will fail if the included file is not found, too strict? + gzthrow("XInclude process failed\n"); + } + + // Create wrappers for all the nodes (recursive) + this->root = this->CreateNodes( NULL, xmlDocGetRootElement(this->xmlDoc) ); + if (this->root == NULL) + { + gzthrow( "Empty document [" << this->filename << "]"); + } +} + + +//////////////////////////////////////////////////////////////////////////// // Create wrappers XMLConfigNode *XMLConfig::CreateNodes( XMLConfigNode *parent, xmlNodePtr xmlNode ) @@ -279,20 +276,19 @@ this->parent->childLast = this->prev; } - return; } //////////////////////////////////////////////////////////////////////////// // Get the node name -std::string XMLConfigNode::GetName() +std::string XMLConfigNode::GetName() const { return (const char*)(this->xmlNode->name); } //////////////////////////////////////////////////////////////////////////// // Get the Name Space Prefix -std::string XMLConfigNode::GetNSPrefix() +std::string XMLConfigNode::GetNSPrefix() const { if ( !this->xmlNode->ns ) return ""; @@ -302,14 +298,14 @@ //////////////////////////////////////////////////////////////////////////// // Get the next sibling of this node -XMLConfigNode *XMLConfigNode::GetNext() +XMLConfigNode *XMLConfigNode::GetNext() const { return this->next; } //////////////////////////////////////////////////////////////////////////// // Get the next sibling of this node -XMLConfigNode *XMLConfigNode::GetNext(const std::string &name, const std::string &prefix) +XMLConfigNode *XMLConfigNode::GetNext(const std::string &name, const std::string &prefix) const { XMLConfigNode *tmp; @@ -325,7 +321,7 @@ //////////////////////////////////////////////////////////////////////////// // Get the next sibling of this node according the namespace prefix -XMLConfigNode *XMLConfigNode::GetNextByNSPrefix(const std::string &prefix) +XMLConfigNode *XMLConfigNode::GetNextByNSPrefix(const std::string &prefix) const { XMLConfigNode *tmp; @@ -341,14 +337,14 @@ //////////////////////////////////////////////////////////////////////////// // Get the first child of this node -XMLConfigNode *XMLConfigNode::GetChild() +XMLConfigNode *XMLConfigNode::GetChild() const { return this->childFirst; } //////////////////////////////////////////////////////////////////////////// // Get the first child with the appropriate NS prefix -XMLConfigNode *XMLConfigNode::GetChildByNSPrefix(const std::string &prefix ) +XMLConfigNode *XMLConfigNode::GetChildByNSPrefix(const std::string &prefix ) const { XMLConfigNode *tmp; @@ -364,7 +360,7 @@ //////////////////////////////////////////////////////////////////////////// // Rewind the node pointer to the first siblind -XMLConfigNode *XMLConfigNode::Rewind() +XMLConfigNode *XMLConfigNode::Rewind() { XMLConfigNode *result = this; @@ -378,7 +374,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a child based on a name. Returns null if not found -XMLConfigNode *XMLConfigNode::GetChild( const std::string &name, const std::string &prefix ) +XMLConfigNode *XMLConfigNode::GetChild( const std::string &name, const std::string &prefix ) const { XMLConfigNode *tmp; for (tmp = this->childFirst; tmp != NULL; tmp = tmp->GetNext() ) @@ -417,7 +413,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a value associated with a node. -xmlChar* XMLConfigNode::GetNodeValue( const std::string &key ) +xmlChar* XMLConfigNode::GetNodeValue( const std::string &key ) const { xmlChar *value=NULL; @@ -460,7 +456,7 @@ //////////////////////////////////////////////////////////////////////////// // Get the value of this node -std::string XMLConfigNode::GetValue() +std::string XMLConfigNode::GetValue() const { return (const char*)xmlNodeListGetString(this->xmlDoc, this->xmlNode->xmlChildrenNode, 1); } @@ -468,7 +464,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a string value. -std::string XMLConfigNode::GetString( const std::string &key, const std::string &def, int require) +std::string XMLConfigNode::GetString( const std::string &key, const std::string &def, int require) const { xmlChar *value = this->GetNodeValue( key ); @@ -483,7 +479,7 @@ return (char *)value; } -unsigned char XMLConfigNode::GetChar( const std::string &key, char def, int require ) +unsigned char XMLConfigNode::GetChar( const std::string &key, char def, int require ) const { unsigned char result = ' '; @@ -506,7 +502,7 @@ /////////////////////////////////////////////////////////////////////////// // Get a file name. Always returns an absolute path. If the filename // is entered as a relative path, we prepend the world file path. -std::string XMLConfigNode::GetFilename( const std::string &key, const std::string &def, int require) +std::string XMLConfigNode::GetFilename( const std::string &key, const std::string &def, int require) const { std::string filename = this->GetString( key, def, require ); @@ -535,7 +531,7 @@ //////////////////////////////////////////////////////////////////////////// // Get an integer -int XMLConfigNode::GetInt( const std::string &key, int def, int require ) +int XMLConfigNode::GetInt( const std::string &key, int def, int require ) const { xmlChar *value = this->GetNodeValue( key ); @@ -552,7 +548,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a double -double XMLConfigNode::GetDouble( const std::string &key, double def, int require ) +double XMLConfigNode::GetDouble( const std::string &key, double def, int require ) const { xmlChar *value = this->GetNodeValue( key ); @@ -568,7 +564,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a float -float XMLConfigNode::GetFloat( const std::string &key, float def, int require ) +float XMLConfigNode::GetFloat( const std::string &key, float def, int require ) const { xmlChar *value = this->GetNodeValue( key ); @@ -585,7 +581,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a boolean -bool XMLConfigNode::GetBool( const std::string &key, bool def, int require ) +bool XMLConfigNode::GetBool( const std::string &key, bool def, int require ) const { bool result = false; xmlChar *value = this->GetNodeValue( key ); @@ -615,7 +611,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a length -double XMLConfigNode::GetLength( const std::string &key, double def, int require ) +double XMLConfigNode::GetLength( const std::string &key, double def, int require ) const { double length = this->GetDouble(key, def, require); @@ -627,7 +623,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a time -gazebo::Time XMLConfigNode::GetTime( const std::string &key, double def, int require ) +gazebo::Time XMLConfigNode::GetTime( const std::string &key, double def, int require ) const { gazebo::Time time(this->GetDouble(key, def, require)); return time; @@ -635,7 +631,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a position -Vector3 XMLConfigNode::GetVector3( const std::string &key, Vector3 def ) +Vector3 XMLConfigNode::GetVector3( const std::string &key, Vector3 def ) const { Vector3 v; @@ -651,7 +647,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a two dimensional double vector -Vector2<double> XMLConfigNode::GetVector2d( const std::string &key, Vector2<double> def ) +Vector2<double> XMLConfigNode::GetVector2d( const std::string &key, Vector2<double> def ) const { Vector2<double> v; @@ -666,7 +662,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a two dimensional int vector -Vector2<int> XMLConfigNode::GetVector2i( const std::string &key, Vector2<int> def ) +Vector2<int> XMLConfigNode::GetVector2i( const std::string &key, Vector2<int> def ) const { Vector2<int> v; @@ -682,7 +678,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a rotation -Quatern XMLConfigNode::GetRotation( const std::string &key, Quatern def ) +Quatern XMLConfigNode::GetRotation( const std::string &key, Quatern def ) const { Quatern q; Vector3 p; @@ -707,7 +703,7 @@ //////////////////////////////////////////////////////////////////////////// // Get a tuple string value. std::string XMLConfigNode::GetTupleString( const std::string &key, int index, - const std::string &def) + const std::string &def) const { xmlChar *value; std::string nvalue; @@ -782,7 +778,7 @@ //////////////////////////////////////////////////////////////////////////// // Get an attribute tuple double value -int XMLConfigNode::GetTupleInt( const std::string &key, int index, int def ) +int XMLConfigNode::GetTupleInt( const std::string &key, int index, int def ) const { std::string svalue; @@ -796,7 +792,7 @@ //////////////////////////////////////////////////////////////////////////// // Get an attribute tuple double value -double XMLConfigNode::GetTupleDouble( const std::string &key, int index, double def ) +double XMLConfigNode::GetTupleDouble( const std::string &key, int index, double def ) const { std::string svalue; @@ -810,7 +806,7 @@ //////////////////////////////////////////////////////////////////////////// // Get an tuple length value (return value in meters) -double XMLConfigNode::GetTupleLength( const std::string &key, int index, double def ) +double XMLConfigNode::GetTupleLength( const std::string &key, int index, double def ) const { std::string svalue; @@ -826,7 +822,7 @@ //////////////////////////////////////////////////////////////////////////// // Get an tuple angle value (return value in radians) -double XMLConfigNode::GetTupleAngle( const std::string &key, int index, double def ) +double XMLConfigNode::GetTupleAngle( const std::string &key, int index, double def ) const { std::string svalue; @@ -840,7 +836,7 @@ //////////////////////////////////////////////////////////////////////////// // Set the value associated with a node. -void XMLConfigNode::SetValue(const std::string &key, const StringValue &data, int require, int type) +void XMLConfigNode::SetValue(const std::string &key, const StringValue &data, int require, int type) { bool success; @@ -917,3 +913,5 @@ } } + + Modified: code/gazebo/trunk/server/XMLConfig.hh =================================================================== --- code/gazebo/trunk/server/XMLConfig.hh 2008-05-08 05:37:36 UTC (rev 6401) +++ code/gazebo/trunk/server/XMLConfig.hh 2008-05-08 12:15:41 UTC (rev 6402) @@ -68,7 +68,10 @@ /// \brief Get the root node public: XMLConfigNode *GetRootNode() const; - + + /// \brief Fill the document with information + private: void FillDocumentNodes(); + /// \brief Create wrappers private: XMLConfigNode *CreateNodes( XMLConfigNode *parent, xmlNodePtr xmlNode ); @@ -96,28 +99,28 @@ public: ~XMLConfigNode(); /// \brief Get the node name - public: std::string GetName(); + public: std::string GetName() const; /// \brief Get the name space prefix - public: std::string GetNSPrefix(); + public: std::string GetNSPrefix() const; /// \brief Get the next sibling of this node - public: XMLConfigNode *GetNext(); + public: XMLConfigNode *GetNext() const; /// \brief Get next by name - public: XMLConfigNode *GetNext(const std::string &name,const std::string &prefix=std::string()); + public: XMLConfigNode *GetNext(const std::string &name,const std::string &prefix=std::string()) const; /// \brief Get next node by namespace prefix - public: XMLConfigNode *GetNextByNSPrefix(const std::string &prefix); + public: XMLConfigNode *GetNextByNSPrefix(const std::string &prefix) const; /// \brief Get the first child of this node - public: XMLConfigNode *GetChild(); + public: XMLConfigNode *GetChild() const; /// \brief Get a child based on a name. Returns null if not found - public: XMLConfigNode *GetChild(const std::string &name, const std::string &prefix=std::string() ); + public: XMLConfigNode *GetChild(const std::string &name, const std::string &prefix=std::string() ) const; /// \brief Get the first child with the specified namespace prefix - public: XMLConfigNode *GetChildByNSPrefix(const std::string &prefix ); + public: XMLConfigNode *GetChildByNSPrefix(const std::string &prefix ) const; /// \brief Move child pointer back to beginning public: XMLConfigNode *Rewind(); @@ -126,66 +129,66 @@ public: void Print(); /// \brief Return the value of the current node - public: std::string GetValue(); + public: std::string GetValue() const; /// \brief Get an attribute string value public: std::string GetString( const std::string &key, const std::string &def, - int require = 0 ); + int require = 0 ) const; /// \brief Get a attribute character value - public: unsigned char GetChar( const std::string &key, char def, int require = 0 ); + public: unsigned char GetChar( const std::string &key, char def, int require = 0 ) const; /// \brief Get a file name. Always returns an absolute path. /// If the filename is entered as a relative path, we prepend the /// world file path. public: std::string GetFilename( const std::string &key, const std::string &def, - int require = 0); + int require = 0) const; /// \brief Get an integer - public: int GetInt( const std::string &key, int def, int require = 0 ); + public: int GetInt( const std::string &key, int def, int require = 0 ) const; /// \brief Get a double - public: double GetDouble( const std::string &key, double def, int require = 0 ); + public: double GetDouble( const std::string &key, double def, int require = 0 ) const; /// \brief Get a float - public: float GetFloat( const std::string &key, float def, int require = 0 ); + public: float GetFloat( const std::string &key, float def, int require = 0 ) const; /// \brief Get a boolean - public: bool GetBool( const std::string &key, bool def, int require = 0 ); + public: bool GetBool( const std::string &key, bool def, int require = 0 ) const; /// \brief Get an attribute length value (return value in meters) - public: double GetLength( const std::string &key, double def, int require = 0 ); + public: double GetLength( const std::string &key, double def, int require = 0 ) const; /// \brief Get an attribute time value (return value in seconds) - public: gazebo::Time GetTime( const std::string &key, double def, int require = 0 ); + public: gazebo::Time GetTime( const std::string &key, double def, int require = 0 ) const; /// \brief Get a position - public: Vector3 GetVector3( const std::string &key, Vector3 def ); + public: Vector3 GetVector3( const std::string &key, Vector3 def ) const; /// \brief Get a two dimensional double vector - public: Vector2<double> GetVector2d( const std::string &key, Vector2<double> def ); + public: Vector2<double> GetVector2d( const std::string &key, Vector2<double> def ) const; /// \brief Get a two dimensional int vector - public: Vector2<int> GetVector2i( const std::string &key, Vector2<int> def ); + public: Vector2<int> GetVector2i( const std::string &key, Vector2<int> def ) const; /// \brief Get a rotation - public: Quatern GetRotation( const std::string &key, Quatern def ); + public: Quatern GetRotation( const std::string &key, Quatern def ) const; /// \brief Get an attribute tuple value public: std::string GetTupleString( const std::string &key, int index, - const std::string &def ); + const std::string &def ) const; /// \brief Get an attribute tuple int value - public: int GetTupleInt( const std::string &key, int index, int def ); + public: int GetTupleInt( const std::string &key, int index, int def ) const; /// \brief Get an attribute tuple double value - public: double GetTupleDouble( const std::string &key, int index, double def ); + public: double GetTupleDouble( const std::string &key, int index, double def ) const; /// \brief Get an attribute tuple length value (return value in meters) - public: double GetTupleLength( const std::string &key, int index, double def ); + public: double GetTupleLength( const std::string &key, int index, double def ) const; /// \brief Get an attribute tuple angle value (return value in radians) - public: double GetTupleAngle( const std::string &key, int index, double def ); + public: double GetTupleAngle( const std::string &key, int index, double def ) const; /// \brief Set a node's value, either attribute or child node value, maybe create it /// \param key : the name of the element or attribute to write @@ -195,7 +198,7 @@ public: void SetValue(const std::string &key, const StringValue &data, int require =0, int type=0); /// \brief Get a node's value, which is either a attribute or child node value. - protected: xmlChar* GetNodeValue( const std::string &key ); + protected: xmlChar* GetNodeValue( const std::string &key ) const; /// \brief Set a node's value, either attribute or child node value (private) protected: bool SetNodeValue(const std::string& key,const std::string& value); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2008-05-08 06:40:14
|
Revision: 6403 http://playerstage.svn.sourceforge.net/playerstage/?rev=6403&view=rev Author: robotos Date: 2008-05-08 06:40:05 -0700 (Thu, 08 May 2008) Log Message: ----------- A new class to manage the Gazebo configuration file It is small, and use is only one place so it doesn't really matter where to put this code. Get almost rid of Global. Modified Paths: -------------- code/gazebo/trunk/server/Global.cc code/gazebo/trunk/server/Global.hh code/gazebo/trunk/server/SConscript code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/Simulator.hh code/gazebo/trunk/server/main.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc Added Paths: ----------- code/gazebo/trunk/server/GazeboConfig.cc code/gazebo/trunk/server/GazeboConfig.hh Added: code/gazebo/trunk/server/GazeboConfig.cc =================================================================== --- code/gazebo/trunk/server/GazeboConfig.cc (rev 0) +++ code/gazebo/trunk/server/GazeboConfig.cc 2008-05-08 13:40:05 UTC (rev 6403) @@ -0,0 +1,106 @@ +/* + * Gazebo - Outdoor Multi-Robot Simulator + * Copyright (C) 2003 + * Nate Koenig & Andrew Howard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +/* Desc: Local Gazebo configuration + * Author: Jordi Polo + * Date: 3 May 2008 + * SVN: $Id:$ + */ +#include <assert.h> +#include <iostream> +#include <fstream> +#include <sstream> + +#include "XMLConfig.hh" +#include "GazeboConfig.hh" + +using namespace gazebo; + +//////////////////////////////////////////////////////////////////////////////// +/// Constructor +GazeboConfig::GazeboConfig() +{ +} + +//////////////////////////////////////////////////////////////////////////////// +/// Destructor +GazeboConfig::~GazeboConfig() +{ +} + +//////////////////////////////////////////////////////////////////////////////// +/// Loads the configuration file +void GazeboConfig::Load() +{ + std::ifstream cfgFile; + + std::string rcFilename = getenv("HOME"); + rcFilename += "/.gazeborc"; + + cfgFile.open(rcFilename.c_str(), std::ios::in); + + if (cfgFile) + { + XMLConfig rc; + XMLConfigNode *node; + rc.Load(rcFilename); + + node = rc.GetRootNode()->GetChild("gazeboPath"); + while (node) + { + std::cout << "Gazebo Path[" << node->GetValue() << "]\n"; + this->gazeboPaths.push_back(node->GetValue()); + node = node->GetNext("gazeboPath"); + } + + node = rc.GetRootNode()->GetChild("ogrePath"); + while (node) + { + std::cout << "Ogre Path[" << node->GetValue() << "]\n"; + this->ogrePaths.push_back( node->GetValue() ); + node = node->GetNext("ogrePath"); + } + this->RTTMode = rc.GetRootNode()->GetString("RTTMode", "PBuffer"); + + } + else + { + std::cout << "Unable to find the file ~/.gazeborc. Using default paths. This may cause OGRE to fail.\n"; + this->gazeboPaths.push_back("/usr/local/share/gazebo"); + this->ogrePaths.push_back("/usr/local/lib/OGRE"); + this->ogrePaths.push_back("/usr/lib/OGRE"); + this->RTTMode="PBuffer"; + } +} + +std::list<std::string> GazeboConfig::GetGazeboPaths() const +{ + return this->gazeboPaths; +} + +std::list<std::string> GazeboConfig::GetOgrePaths() const +{ + return this->ogrePaths; +} + +std::string GazeboConfig::GetRTTMode() const +{ + return this->RTTMode; +} + Added: code/gazebo/trunk/server/GazeboConfig.hh =================================================================== --- code/gazebo/trunk/server/GazeboConfig.hh (rev 0) +++ code/gazebo/trunk/server/GazeboConfig.hh 2008-05-08 13:40:05 UTC (rev 6403) @@ -0,0 +1,72 @@ +/* + * Gazebo - Outdoor Multi-Robot Simulator + * Copyright (C) 2003 + * Nate Koenig & Andrew Howard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +/* Desc: Gazebo configuration on this computer + * Author: Jordi Polo + * Date: 3 May 2008 + * SVN: $Id:$ + */ + +#ifndef GAZEBOCONFIG_HH +#define GAZEBOCONFIG_HH + +#include <string> +#include <list> + +namespace gazebo +{ + +/// \addtogroup gazebo_server +/// \brief Local configuration on this computer about how gazebo server should work +/// \{ + + class GazeboConfig + { + /// \brief Constructor + public: GazeboConfig(); + + /// \brief destructor + public: ~GazeboConfig(); + + /// \brief True if the string is null + public: void Load(); + + /// \brief Get paths to Gazebo install + public: std::list<std::string> GetGazeboPaths() const; + + /// \brief Get paths to ogre install + public: std::list<std::string> GetOgrePaths() const; + + public: std::string GetRTTMode() const; + + /// Paths gazebo install + private: std::list<std::string> gazeboPaths; + + /// Paths to the ogre install + private: std::list<std::string> ogrePaths; + + private: std::string RTTMode; + + }; + + +/// \} +} + +#endif Modified: code/gazebo/trunk/server/Global.cc =================================================================== --- code/gazebo/trunk/server/Global.cc 2008-05-08 12:15:41 UTC (rev 6402) +++ code/gazebo/trunk/server/Global.cc 2008-05-08 13:40:05 UTC (rev 6403) @@ -26,15 +26,10 @@ #include "Global.hh" - using namespace gazebo; Pose3d Global::poseOffset; -std::list<std::string> Global::gazeboPaths; -std::list<std::string> Global::ogrePaths; -std::string Global::RTTMode; - //////////////////////////////////////////////////////////////////////////////// Global::Global() { Modified: code/gazebo/trunk/server/Global.hh =================================================================== --- code/gazebo/trunk/server/Global.hh 2008-05-08 12:15:41 UTC (rev 6402) +++ code/gazebo/trunk/server/Global.hh 2008-05-08 13:40:05 UTC (rev 6403) @@ -31,7 +31,6 @@ // Includes ///////////////////////////////////////////////////////////////////////////// -#include <list> #include <math.h> #include "Pose3d.hh" @@ -116,14 +115,6 @@ class Global { - /// Paths gazebo install - public: static std::list<std::string> gazeboPaths; - - /// Paths to the ogre install - public: static std::list<std::string> ogrePaths; - - public: static std::string RTTMode; - /// Global pose offset public: static Pose3d poseOffset; Modified: code/gazebo/trunk/server/SConscript =================================================================== --- code/gazebo/trunk/server/SConscript 2008-05-08 12:15:41 UTC (rev 6402) +++ code/gazebo/trunk/server/SConscript 2008-05-08 13:40:05 UTC (rev 6403) @@ -13,6 +13,7 @@ 'Pose3d.cc', 'World.cc', 'XMLConfig.cc', + 'GazeboConfig.cc', 'Time.cc', 'Entity.cc', 'GazeboError.cc', @@ -41,6 +42,7 @@ '#/server/Vector3.hh', '#/server/World.hh', '#/server/XMLConfig.hh' + '#/server/GazeboConfig.hh' ] ) staticObjs.append( env.StaticObject(sources) ) Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-05-08 12:15:41 UTC (rev 6402) +++ code/gazebo/trunk/server/Simulator.cc 2008-05-08 13:40:05 UTC (rev 6403) @@ -35,12 +35,13 @@ #include "Gui.hh" #include "DummyGui.hh" #include "XMLConfig.hh" -#include "Global.hh" +#include "GazeboConfig.hh" #include "gazebo.h" #include "PhysicsEngine.hh" #include "OgreAdaptor.hh" #include "OgreCreator.hh" #include "GazeboMessage.hh" +#include "Global.hh" #include "Simulator.hh" @@ -66,6 +67,7 @@ this->userStepInc = false; this->xmlFile=NULL; + this->gazeboConfig=NULL; } //////////////////////////////////////////////////////////////////////////////// @@ -84,6 +86,7 @@ GZ_DELETE (this->gui) GZ_DELETE (this->xmlFile) + GZ_DELETE (this->gazeboConfig) gazebo::World::Instance()->Close(); gazebo::OgreAdaptor::Instance()->Close(); } @@ -99,11 +102,23 @@ loaded=false; } + // load the configuration options + this->gazeboConfig=new gazebo::GazeboConfig(); + try + { + this->gazeboConfig->Load(); + } + catch (GazeboError e) + { + gzthrow("Error loading the Gazebo configuration file, check the .gazeborc file on your HOME directory \n" << e); + } + + // Load the world file this->xmlFile=new gazebo::XMLConfig(); try { - xmlFile->Load(worldFileName); + this->xmlFile->Load(worldFileName); } catch (GazeboError e) { @@ -253,6 +268,14 @@ } //////////////////////////////////////////////////////////////////////////////// +/// Gets local configuration for this computer +GazeboConfig *Simulator::GetGazeboConfig() const +{ + return this->gazeboConfig; +} + + +//////////////////////////////////////////////////////////////////////////////// // Return when this simulator is paused bool Simulator::IsPaused() const { Modified: code/gazebo/trunk/server/Simulator.hh =================================================================== --- code/gazebo/trunk/server/Simulator.hh 2008-05-08 12:15:41 UTC (rev 6402) +++ code/gazebo/trunk/server/Simulator.hh 2008-05-08 13:40:05 UTC (rev 6403) @@ -42,6 +42,7 @@ class SimulationIface; class XMLConfig; class XMLConfigNode; + class GazeboConfig; /// \brief The World /* @@ -77,6 +78,9 @@ /// \brief Gets our current GUI interface public: Gui *GetUI() const; + /// \brief Gets the local configuration for this computer + public: gazebo::GazeboConfig *GetGazeboConfig() const; + /// \brief Returns the state of the simulation true if paused public: bool IsPaused() const; @@ -137,11 +141,13 @@ ///pointer to the XML Data - private:gazebo::XMLConfig *xmlFile; + private: gazebo::XMLConfig *xmlFile; /// Pointer to the selected Gui private: Gui *gui; +/// Pointer to the selected Gui + private: gazebo::GazeboConfig *gazeboConfig; /// Flag to know if we have a simulation loaded private: bool loaded; Modified: code/gazebo/trunk/server/main.cc =================================================================== --- code/gazebo/trunk/server/main.cc 2008-05-08 12:15:41 UTC (rev 6402) +++ code/gazebo/trunk/server/main.cc 2008-05-08 13:40:05 UTC (rev 6403) @@ -104,10 +104,9 @@ #include <signal.h> #include <errno.h> #include <iostream> -#include "Global.hh" #include "Simulator.hh" -#include "XMLConfig.hh" #include "GazeboError.hh" +#include "Global.hh" // Command line options const char *worldFileName; @@ -230,53 +229,7 @@ return; } - //////////////////////////////////////////////////////////////////////////////// -// Loads the Gazebo configuration file -void LoadConfigFile() -{ - std::ifstream cfgFile; - - std::string rcFilename = getenv("HOME"); - rcFilename += "/.gazeborc"; - - cfgFile.open(rcFilename.c_str(), std::ios::in); - - if (cfgFile) - { - gazebo::XMLConfig rc; - gazebo::XMLConfigNode *node; - rc.Load(rcFilename); - - node = rc.GetRootNode()->GetChild("gazeboPath"); - while (node) - { - std::cout << "Gazebo Path[" << node->GetValue() << "]\n"; - gazebo::Global::gazeboPaths.push_back(node->GetValue()); - node = node->GetNext("gazeboPath"); - } - - node = rc.GetRootNode()->GetChild("ogrePath"); - while (node) - { - std::cout << "Ogre Path[" << node->GetValue() << "]\n"; - gazebo::Global::ogrePaths.push_back( node->GetValue() ); - node = node->GetNext("ogrePath"); - } - gazebo::Global::RTTMode = rc.GetRootNode()->GetString("RTTMode", "PBuffer"); - - } - else - { - std::cout << "Unable to find the file ~/.gazeborc. Using default paths. This may cause OGRE to fail.\n"; - gazebo::Global::gazeboPaths.push_back("/usr/local/share/gazebo"); - gazebo::Global::ogrePaths.push_back("/usr/local/lib/OGRE"); - gazebo::Global::ogrePaths.push_back("/usr/lib/OGRE"); - } -} - - -//////////////////////////////////////////////////////////////////////////////// // Main function int main(int argc, char **argv) { @@ -296,7 +249,6 @@ //Load the simulator try { - LoadConfigFile(); gazebo::Simulator::Instance()->Load(worldFileName, optServerId); } catch (gazebo::GazeboError e) Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-05-08 12:15:41 UTC (rev 6402) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-05-08 13:40:05 UTC (rev 6403) @@ -39,8 +39,8 @@ #include "Entity.hh" #include "GazeboError.hh" #include "GazeboMessage.hh" +#include "GazeboConfig.hh" #include "Global.hh" -#include "GazeboError.hh" #include "XMLConfig.hh" #include "Simulator.hh" #include "Gui.hh" @@ -300,8 +300,10 @@ std::string pluginStr; XMLConfigNode *pluginNode; std::list<std::string>::iterator iter; + - for (iter=Global::ogrePaths.begin(); iter!=Global::ogrePaths.end(); iter++) + for (iter=Simulator::Instance()->GetGazeboConfig()->GetOgrePaths().begin(); + iter!=Simulator::Instance()->GetGazeboConfig()->GetOgrePaths().end(); iter++) { DIR *dir; if ((dir=opendir((*iter).c_str())) == NULL) @@ -342,8 +344,8 @@ std::vector<std::string>::iterator aiter; std::list<std::string>::iterator iter; - for (iter=Global::gazeboPaths.begin(); - iter!=Global::gazeboPaths.end(); iter++) + for (iter=Simulator::Instance()->GetGazeboConfig()->GetGazeboPaths().begin(); + iter!=Simulator::Instance()->GetGazeboConfig()->GetGazeboPaths().end(); iter++) { DIR *dir; if ((dir=opendir((*iter).c_str())) == NULL) @@ -423,7 +425,7 @@ this->renderSys->setConfigOption("FSAA","2"); // Set the preferred RRT mode. Options are: "PBuffer", "FBO", and "Copy", can be set in the .gazeborc file - this->renderSys->setConfigOption("RTT Preferred Mode", Global::RTTMode); + this->renderSys->setConfigOption("RTT Preferred Mode", Simulator::Instance()->GetGazeboConfig()->GetRTTMode()); if (create && this->videoMode != "None") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2008-05-09 23:58:29
|
Revision: 6411 http://playerstage.svn.sourceforge.net/playerstage/?rev=6411&view=rev Author: robotos Date: 2008-05-09 23:58:37 -0700 (Fri, 09 May 2008) Log Message: ----------- Solved a weird error when loading ogre plugins Added updateRate tag to rendering and physics. This tag sets a upper limit on the updates. Modified Paths: -------------- code/gazebo/trunk/server/GazeboConfig.cc code/gazebo/trunk/server/GazeboConfig.hh code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/physics/PhysicsEngine.cc code/gazebo/trunk/server/physics/PhysicsEngine.hh code/gazebo/trunk/server/physics/ode/ODEPhysics.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/OgreAdaptor.hh Modified: code/gazebo/trunk/server/GazeboConfig.cc =================================================================== --- code/gazebo/trunk/server/GazeboConfig.cc 2008-05-10 06:29:12 UTC (rev 6410) +++ code/gazebo/trunk/server/GazeboConfig.cc 2008-05-10 06:58:37 UTC (rev 6411) @@ -29,6 +29,7 @@ #include "XMLConfig.hh" #include "GazeboConfig.hh" +#include "GazeboMessage.hh" using namespace gazebo; @@ -64,7 +65,7 @@ node = rc.GetRootNode()->GetChild("gazeboPath"); while (node) { - std::cout << "Gazebo Path[" << node->GetValue() << "]\n"; + gzmsg(1) << "Gazebo Path[" << node->GetValue() << "]\n"; this->gazeboPaths.push_back(node->GetValue()); node = node->GetNext("gazeboPath"); } @@ -72,7 +73,7 @@ node = rc.GetRootNode()->GetChild("ogrePath"); while (node) { - std::cout << "Ogre Path[" << node->GetValue() << "]\n"; + gzmsg(1) << "Ogre Path[" << node->GetValue() << "]\n"; this->ogrePaths.push_back( node->GetValue() ); node = node->GetNext("ogrePath"); } @@ -81,7 +82,7 @@ } else { - std::cout << "Unable to find the file ~/.gazeborc. Using default paths. This may cause OGRE to fail.\n"; + gzmsg(0) << "Unable to find the file ~/.gazeborc. Using default paths. This may cause OGRE to fail.\n"; this->gazeboPaths.push_back("/usr/local/share/gazebo"); this->ogrePaths.push_back("/usr/local/lib/OGRE"); this->ogrePaths.push_back("/usr/lib/OGRE"); @@ -89,17 +90,17 @@ } } -std::list<std::string> GazeboConfig::GetGazeboPaths() const +std::list<std::string> &GazeboConfig::GetGazeboPaths() { return this->gazeboPaths; } -std::list<std::string> GazeboConfig::GetOgrePaths() const +std::list<std::string> &GazeboConfig::GetOgrePaths() { return this->ogrePaths; } -std::string GazeboConfig::GetRTTMode() const +std::string &GazeboConfig::GetRTTMode() { return this->RTTMode; } Modified: code/gazebo/trunk/server/GazeboConfig.hh =================================================================== --- code/gazebo/trunk/server/GazeboConfig.hh 2008-05-10 06:29:12 UTC (rev 6410) +++ code/gazebo/trunk/server/GazeboConfig.hh 2008-05-10 06:58:37 UTC (rev 6411) @@ -48,12 +48,12 @@ public: void Load(); /// \brief Get paths to Gazebo install - public: std::list<std::string> GetGazeboPaths() const; + public: std::list<std::string>& GetGazeboPaths(); /// \brief Get paths to ogre install - public: std::list<std::string> GetOgrePaths() const; + public: std::list<std::string>& GetOgrePaths(); - public: std::string GetRTTMode() const; + public: std::string& GetRTTMode(); /// Paths gazebo install private: std::list<std::string> gazeboPaths; Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-05-10 06:29:12 UTC (rev 6410) +++ code/gazebo/trunk/server/Simulator.cc 2008-05-10 06:58:37 UTC (rev 6411) @@ -68,6 +68,8 @@ this->xmlFile=NULL; this->gazeboConfig=NULL; + this->prevPhysicsTime=0.0; + this->prevRenderTime=0.0; } //////////////////////////////////////////////////////////////////////////////// @@ -102,37 +104,35 @@ loaded=false; } - // load the configuration options - this->gazeboConfig=new gazebo::GazeboConfig(); + // Load the world file + this->xmlFile=new gazebo::XMLConfig(); try { - this->gazeboConfig->Load(); + this->xmlFile->Load(worldFileName); } catch (GazeboError e) { - gzthrow("Error loading the Gazebo configuration file, check the .gazeborc file on your HOME directory \n" << e); + gzthrow("The XML config file can not be loaded, please make sure is a correct file\n" << e); } + XMLConfigNode *rootNode(xmlFile->GetRootNode()); + // Load the messaging system + gazebo::GazeboMessage::Instance()->Load(rootNode); - // Load the world file - this->xmlFile=new gazebo::XMLConfig(); + // load the configuration options + this->gazeboConfig=new gazebo::GazeboConfig(); try { - this->xmlFile->Load(worldFileName); + this->gazeboConfig->Load(); } catch (GazeboError e) { - gzthrow("The XML config file can not be loaded, please make sure is a correct file\n" << e); + gzthrow("Error loading the Gazebo configuration file, check the .gazeborc file on your HOME directory \n" << e); } - XMLConfigNode *rootNode(xmlFile->GetRootNode()); - - // Load the messaging system - gazebo::GazeboMessage::Instance()->Load(rootNode); - + //Create and initialize the Gui try { - //Create and initialize the Gui this->LoadGui(rootNode); } catch (GazeboError e) @@ -140,7 +140,7 @@ gzthrow( "Error loading the GUI\n" << e); } - //Initialize RenderingEngine + //Initialize RenderingEngine try { gazebo::OgreAdaptor::Instance()->Init(rootNode); @@ -150,12 +150,12 @@ gzthrow("Failed to Initialize the OGRE Rendering system\n" << e ); } - //Preload basic shapes that can be used anywhere + //Preload basic shapes that can be used anywhere OgreCreator::CreateBasicShapes(); + //Create the world try { - //Create the world gazebo::World::Instance()->Load(rootNode, serverId); } catch (GazeboError e) @@ -209,22 +209,35 @@ /// Main simulation loop, when this loop ends the simulation finish void Simulator::MainLoop() { - double step= World::Instance()->GetPhysicsEngine()->GetStepTime(); - double currTime; - double elapsedTime; + double maxPhysicsUpdateRate = World::Instance()->GetPhysicsEngine()->GetUpdateRate(); + double maxRenderUpdateRate = OgreAdaptor::Instance()->GetUpdateRate(); + double step = World::Instance()->GetPhysicsEngine()->GetStepTime(); + + if (maxPhysicsUpdateRate == 0) + gzmsg(2) << "updating the physics at full speed"; + else + gzmsg(2) << "updating the physics " << 1/maxPhysicsUpdateRate << " times/seconds"; + if (maxRenderUpdateRate == 0) + gzmsg(2) << "updating the visualization at full speed"; + else + gzmsg(2) << "updating the visualization " << 1/maxRenderUpdateRate << " times/seconds"; + std::cout.flush(); + while (!this->userQuit) - { - currTime = this->GetRealTime(); + { + bool updated=false; - if ((currTime - this->prevPhysicsTime) >= step) + // Update the physics engine + double currentPhysicsTime = this->GetRealTime(); + + if ((currentPhysicsTime - this->prevPhysicsTime) >= maxPhysicsUpdateRate) { - this->simTime += step; - // Update the physics engine if (!this->GetUserPause() && !this->GetUserStep() || (this->GetUserStep() && this->GetUserStepInc())) { + this->simTime += step; this->iterations++; this->pause=false; this->SetUserStepInc(!this->GetUserStepInc()); @@ -237,25 +250,31 @@ World::Instance()->Update(); //physics - this->prevPhysicsTime = this->GetRealTime(); + this->prevPhysicsTime = currentPhysicsTime; + updated=true; } - // Update the rendering - if (currTime - this->prevRenderTime > 0.02) + // Update the rendering and gui + double currentRenderTime = this->GetRealTime(); + + if ((currentRenderTime - this->prevRenderTime) >= maxRenderUpdateRate) { gazebo::OgreAdaptor::Instance()->Render(); - this->prevRenderTime = this->GetRealTime(); + this->prevRenderTime = currentRenderTime; + this->gui->Update(); + this->prevRenderTime = currentRenderTime; + updated=true; } - // Update the gui - this->gui->Update(); - - elapsedTime = (this->GetRealTime()-currTime)*2.0; - - // Wait if we're going too fast - if ( elapsedTime < 0.02 ) + if (!updated) { - usleep( (0.02 - elapsedTime) * 1e6 ); + double nextUpdate; + nextUpdate=MAX(this->prevRenderTime+maxRenderUpdateRate, this->prevPhysicsTime+maxPhysicsUpdateRate); + int realStep = static_cast<int>(this->GetRealTime() - nextUpdate); + struct timespec waiting; + waiting.tv_sec=0; + waiting.tv_nsec=realStep *1000000; //TODO: binary + nanosleep(&waiting,0); } } } Modified: code/gazebo/trunk/server/physics/PhysicsEngine.cc =================================================================== --- code/gazebo/trunk/server/physics/PhysicsEngine.cc 2008-05-10 06:29:12 UTC (rev 6410) +++ code/gazebo/trunk/server/physics/PhysicsEngine.cc 2008-05-10 06:58:37 UTC (rev 6411) @@ -49,6 +49,13 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the time between each update cycle +double PhysicsEngine::GetUpdateRate() const +{ + return this->updateRate; +} + +//////////////////////////////////////////////////////////////////////////////// +/// Get the time between each update cycle double PhysicsEngine::GetStepTime() const { return this->stepTime; Modified: code/gazebo/trunk/server/physics/PhysicsEngine.hh =================================================================== --- code/gazebo/trunk/server/physics/PhysicsEngine.hh 2008-05-10 06:29:12 UTC (rev 6410) +++ code/gazebo/trunk/server/physics/PhysicsEngine.hh 2008-05-10 06:58:37 UTC (rev 6411) @@ -109,14 +109,23 @@ public: Vector3 GetGravity() const; /// \brief Get the time between each update cycle - /// \return Time in seconds + /// \return seconds between updates + public: double GetUpdateRate() const; + + /// \brief Get the physics time steps in the virtual world + /// \return step time public: double GetStepTime() const; /// The gravity vector protected: Vector3 gravity; - /// Time between each update cycle + /// time steps the physical engine will take + /// how much time will pass on each update protected: double stepTime; + + /// update rate of the physical engine, how many times + /// it is called + protected: double updateRate; }; /** \}*/ Modified: code/gazebo/trunk/server/physics/ode/ODEPhysics.cc =================================================================== --- code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2008-05-10 06:29:12 UTC (rev 6410) +++ code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2008-05-10 06:58:37 UTC (rev 6411) @@ -72,6 +72,7 @@ this->gravity.z = -9.80665; this->stepTime = 0.05; + this->updateRate = 0.0; } //////////////////////////////////////////////////////////////////////////////// @@ -98,6 +99,11 @@ this->gravity = cnode->GetVector3("gravity",this->gravity); this->stepTime = cnode->GetDouble("stepTime",this->stepTime); + int maxUpdatesSecond = cnode->GetInt("updateRate",0); + if (maxUpdatesSecond == 0) + this->updateRate = 0.0; + else + this->updateRate = 1.0/maxUpdatesSecond; this->globalCFM = cnode->GetDouble("cfm",1e-5,0); this->globalERP = cnode->GetDouble("erp",0.2,0); } Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-05-10 06:29:12 UTC (rev 6410) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-05-10 06:58:37 UTC (rev 6411) @@ -124,6 +124,12 @@ { gzthrow( "missing OGRE Rendering information" ); } + + int maxFPS = node->GetInt("updateRate", 0); + if (maxFPS == 0) + this->updateRate=0; + else + this->updateRate = 1.0/maxFPS; ambient.r = node->GetTupleDouble("ambient",0,1.0); ambient.g = node->GetTupleDouble("ambient",1,1.0); @@ -238,8 +244,8 @@ } catch (Ogre::Exception e) { - gzmsg(0) << "Unable to load BSP geometry." << e.getDescription() << "\n"; - exit(0); + gzmsg(-1) << "Unable to load BSP geometry." << e.getDescription() << "\n"; + exit(-1); } } @@ -296,17 +302,15 @@ // Load plugins void OgreAdaptor::LoadPlugins() { - std::string pathStr; - std::string pluginStr; - XMLConfigNode *pluginNode; std::list<std::string>::iterator iter; + std::list<std::string> ogrePaths=Simulator::Instance()->GetGazeboConfig()->GetOgrePaths(); - - for (iter=Simulator::Instance()->GetGazeboConfig()->GetOgrePaths().begin(); - iter!=Simulator::Instance()->GetGazeboConfig()->GetOgrePaths().end(); iter++) + for (iter=ogrePaths.begin(); + iter!=ogrePaths.end(); ++iter) { - DIR *dir; - if ((dir=opendir((*iter).c_str())) == NULL) + std::string path(*iter); + DIR *dir=opendir(path.c_str()); + if (dir == NULL) { continue; } @@ -315,10 +319,10 @@ std::vector<std::string> plugins; std::vector<std::string>::iterator piter; - plugins.push_back((*iter)+"/RenderSystem_GL.so"); - plugins.push_back((*iter)+"/Plugin_ParticleFX.so"); - plugins.push_back((*iter)+"/Plugin_BSPSceneManager.so"); - plugins.push_back((*iter)+"/Plugin_OctreeSceneManager.so"); + 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"); for (piter=plugins.begin(); piter!=plugins.end(); piter++) { @@ -326,10 +330,14 @@ { // Load the plugin into OGRE this->root->loadPlugin(*piter); + //gzmsg(2) << "Loaded plugin:" << (*piter); } catch (Ogre::Exception e) { - gzthrow("Unable to load Ogre Plugins.\nMake sure the plugins path in the world file is set correctly"); + std::string description("Unable to load Ogre Plugins on directory "); + description.append(path); + description.append("\n Make sure the plugins path in the gazebo configuration file are set correctly.\n"); + gzthrow( description + e.getDescription() ); } } } @@ -487,3 +495,8 @@ return 0; } +double OgreAdaptor::GetUpdateRate() const +{ + return this->updateRate; +} + Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-05-10 06:29:12 UTC (rev 6410) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-05-10 06:58:37 UTC (rev 6411) @@ -88,6 +88,9 @@ /// \brief Render a single frame public: int Render(); + /// \brief Gets the minimum time between renders, set by in the file to limit Framerate + public: double GetUpdateRate() const; + /// \brief Resize the rendering window public: void ResizeWindow(unsigned int w, unsigned int h); @@ -117,6 +120,8 @@ /// Pointer to the input reader public: Ogre::InputReader *inputDevice; + private: double updateRate; + private: Ogre::LogManager *logManager; // Our custom frame listener This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2008-05-10 03:33:19
|
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. |
From: <ro...@us...> - 2008-05-12 09:52:37
|
Revision: 6433 http://playerstage.svn.sourceforge.net/playerstage/?rev=6433&view=rev Author: robotos Date: 2008-05-12 09:51:48 -0700 (Mon, 12 May 2008) Log Message: ----------- Making gcc extra verbose helps finding unused variables and some bugs! Also relax the debugging level, gdb don't need so much information and we save 25% of file sizes, my HD will be happy... Modified Paths: -------------- code/gazebo/trunk/server/GazeboMessage.cc code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.cc code/gazebo/trunk/server/controllers/camera/generic/Generic_Camera.cc code/gazebo/trunk/server/controllers/laser/sicklms200/SickLMS200_Laser.cc code/gazebo/trunk/server/controllers/position2d/differential/Differential_Position2d.cc code/gazebo/trunk/server/controllers/ptz/generic/Generic_PTZ.cc code/gazebo/trunk/server/gui/Gui.cc code/gazebo/trunk/server/physics/Body.cc code/gazebo/trunk/server/physics/TrimeshGeom.cc code/gazebo/trunk/server/physics/UniversalJoint.cc code/gazebo/trunk/server/physics/ode/ODEPhysics.cc code/gazebo/trunk/server/rendering/MovableText.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/OgreCreator.cc code/gazebo/trunk/server/rendering/OgreDynamicRenderable.cc code/gazebo/trunk/server/rendering/OgreSimpleShape.cc code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc Modified: code/gazebo/trunk/server/GazeboMessage.cc =================================================================== --- code/gazebo/trunk/server/GazeboMessage.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/GazeboMessage.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -62,7 +62,6 @@ void GazeboMessage::Load(XMLConfigNode *node) { - bool logData; char logFilename[50]; if (!node) Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/Simulator.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -196,7 +196,7 @@ //Initialize the world if (gazebo::World::Instance()->Init() != 0) return -1; - + return 0; } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.cc =================================================================== --- code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -98,14 +98,13 @@ { HingeJoint *joint = NULL; float angle; - float hiStop, loStop; this->myIface->Lock(1); this->myIface->data->head.time = Simulator::Instance()->GetSimTime(); this->myIface->data->actuators_count = 16; - for (int i=0; i<16; i++) + for (unsigned int i=0; i<16; i++) { double cmdAngle = this->myIface->data->cmd_pos[i]; joint = dynamic_cast<HingeJoint*>(this->joints[i]); Modified: code/gazebo/trunk/server/controllers/camera/generic/Generic_Camera.cc =================================================================== --- code/gazebo/trunk/server/controllers/camera/generic/Generic_Camera.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/controllers/camera/generic/Generic_Camera.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -95,7 +95,6 @@ CameraData *data = this->cameraIface->data; const unsigned char *src; unsigned char *dst; - int i, j, k; Pose3d cameraPose; this->cameraIface->Lock(1); @@ -129,6 +128,7 @@ memcpy(dst, src, data->image_size); + //unsigned int i, j, k; // OGRE image data is A8 B8 G8 R8. Must convert to R8 G8 B8 /* for (i=0; i<data->height; i++) for (j=0; j<data->width; j++) Modified: code/gazebo/trunk/server/controllers/laser/sicklms200/SickLMS200_Laser.cc =================================================================== --- code/gazebo/trunk/server/controllers/laser/sicklms200/SickLMS200_Laser.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/controllers/laser/sicklms200/SickLMS200_Laser.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -196,10 +196,11 @@ double maxAngle = this->myParent->GetMaxAngle(); double minAngle = this->myParent->GetMinAngle(); - double maxRange = this->myParent->GetMaxRange(); +//TODO: implement max range and rangeCount +// double maxRange = this->myParent->GetMaxRange(); double minRange = this->myParent->GetMinRange(); int rayCount = this->myParent->GetRayCount(); - int rangeCount = this->myParent->GetRangeCount(); +// int rangeCount = this->myParent->GetRangeCount(); if (this->fiducialIface->Lock(1)) { Modified: code/gazebo/trunk/server/controllers/position2d/differential/Differential_Position2d.cc =================================================================== --- code/gazebo/trunk/server/controllers/position2d/differential/Differential_Position2d.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/controllers/position2d/differential/Differential_Position2d.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -133,8 +133,6 @@ // Update the controller void Differential_Position2d::UpdateChild(UpdateParams ¶ms) { - bool opened = false; - // TODO: Step should be in a parameter of this function double wd, ws; double d1, d2; Modified: code/gazebo/trunk/server/controllers/ptz/generic/Generic_PTZ.cc =================================================================== --- code/gazebo/trunk/server/controllers/ptz/generic/Generic_PTZ.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/controllers/ptz/generic/Generic_PTZ.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -165,7 +165,6 @@ void Generic_PTZ::PutPTZData() { PTZData *data = this->ptzIface->data; - int i, j, k; this->ptzIface->Lock(1); Modified: code/gazebo/trunk/server/gui/Gui.cc =================================================================== --- code/gazebo/trunk/server/gui/Gui.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/gui/Gui.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -48,8 +48,9 @@ //////////////////////////////////////////////////////////////////////////////// /// Constructor FLTKGui::FLTKGui (int x, int y, int width, int height, const std::string &t) - : Fl_Window(x, y, width+200, height+60, t.c_str()), Gui(x,y,width,height, t) -{ + : Gui(x,y,width,height, t), + Fl_Window(x, y, width+200, height+60, t.c_str()) + { this->windowId = -1; this->visual = NULL; this->display = NULL; @@ -57,7 +58,7 @@ Fl::scheme("plastic"); // Create a main menu - MainMenu *mainMenu = new MainMenu(0,0,w(),30,(char *)"MainMenu"); + new MainMenu(0,0,w(),30,(char *)"MainMenu"); // Create the Rendering window this->glWindow = new GLWindow(0, 30, w()-200, h()-60,"GL Window"); Modified: code/gazebo/trunk/server/physics/Body.cc =================================================================== --- code/gazebo/trunk/server/physics/Body.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/physics/Body.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -467,7 +467,6 @@ */ void Body::UpdateCoM() { - int i; const dMass *lmass; Pose3d oldPose, newPose, pose; std::vector< Geom* >::iterator giter; Modified: code/gazebo/trunk/server/physics/TrimeshGeom.cc =================================================================== --- code/gazebo/trunk/server/physics/TrimeshGeom.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/physics/TrimeshGeom.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -91,7 +91,7 @@ Ogre::SubMesh* subMesh; Ogre::MeshPtr mesh; - int i,j,k; + unsigned int i,j; unsigned int numVertices = 0; unsigned int numIndices = 0; const Ogre::VertexElement* elem; Modified: code/gazebo/trunk/server/physics/UniversalJoint.cc =================================================================== --- code/gazebo/trunk/server/physics/UniversalJoint.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/physics/UniversalJoint.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -68,7 +68,7 @@ // Perform this three step ordering to ensure the parameters are set // properly. This is taken from the ODE wiki. this->SetParam(dParamHiStop2, hiStop2); - this->SetParam(dParamLoStop2, loStop1); + this->SetParam(dParamLoStop2, loStop2); this->SetParam(dParamHiStop2, hiStop2); } Modified: code/gazebo/trunk/server/physics/ode/ODEPhysics.cc =================================================================== --- code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -257,8 +257,8 @@ else geom2 = (Geom*) dGeomGetData(o2); - - if (numc = dCollide (o1,o2,64, contactGeoms, sizeof(contactGeoms[0]))) + numc = dCollide(o1,o2,64, contactGeoms, sizeof(contactGeoms[0])); + if (numc == 0) { for (i=0; i<numc; i++) { Modified: code/gazebo/trunk/server/rendering/MovableText.cc =================================================================== --- code/gazebo/trunk/server/rendering/MovableText.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/rendering/MovableText.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -22,14 +22,14 @@ MovableText::MovableText() : camera(NULL), renderWindow(NULL) , + viewportAspectCoef (0.75), font(NULL) , spaceWidth(0) , updateColors(true) , + vertAlign(V_BELOW) , + horizAlign(H_LEFT) , onTop(false) , - horizAlign(H_LEFT) , - vertAlign(V_BELOW) , - baseline(0.0) , - viewportAspectCoef (0.75) + baseline(0.0) { this->renderOp.vertexData = NULL; } Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -291,8 +291,9 @@ rnode->SetValue("ambient", this->backgroundColor); //TODO: BSP (when bsp are definitely integrated) - - if (cnode=node->GetChild("fog")) + // + cnode = rnode->GetChild("fog"); + if (cnode) OgreCreator::SaveFog(cnode); } Modified: code/gazebo/trunk/server/rendering/OgreCreator.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -236,7 +236,7 @@ Ogre::ColourValue color=OgreAdaptor::Instance()->sceneMgr->getFogColour(); Ogre::Real start = OgreAdaptor::Instance()->sceneMgr->getFogStart(); Ogre::Real end = OgreAdaptor::Instance()->sceneMgr->getFogEnd(); - Ogre::Real density = OgreAdaptor::Instance()->sceneMgr->getFogDensity(); + //Ogre::Real density = OgreAdaptor::Instance()->sceneMgr->getFogDensity(); std::string fogMode=""; switch (OgreAdaptor::Instance()->sceneMgr->getFogMode()) @@ -251,6 +251,9 @@ //case default: fogMode="linear"; break; + case Ogre::FOG_NONE: + fogMode="none"; + break; } node->SetValue("type", fogMode); node->SetValue("color", &color); Modified: code/gazebo/trunk/server/rendering/OgreDynamicRenderable.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreDynamicRenderable.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/rendering/OgreDynamicRenderable.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -76,26 +76,28 @@ // Get the render operation type OgreDynamicRenderable::OperationType OgreDynamicRenderable::GetOperationType() const { + OperationType type = OT_POINT_LIST; switch (this->mRenderOp.operationType) { case Ogre::RenderOperation::OT_POINT_LIST: - return OT_POINT_LIST; + type = OT_POINT_LIST; case Ogre::RenderOperation::OT_LINE_LIST: - return OT_LINE_LIST; + type = OT_LINE_LIST; case Ogre::RenderOperation::OT_LINE_STRIP: - return OT_LINE_STRIP; + type = OT_LINE_STRIP; case Ogre::RenderOperation::OT_TRIANGLE_LIST: - return OT_TRIANGLE_LIST; + type = OT_TRIANGLE_LIST; case Ogre::RenderOperation::OT_TRIANGLE_STRIP: - return OT_TRIANGLE_STRIP; + type = OT_TRIANGLE_STRIP; case Ogre::RenderOperation::OT_TRIANGLE_FAN: - return OT_TRIANGLE_FAN; + type = OT_TRIANGLE_FAN; } + return type; } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/rendering/OgreSimpleShape.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreSimpleShape.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/rendering/OgreSimpleShape.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -173,7 +173,6 @@ float *vertices; unsigned short *indices; Vector3 vert, norm; - unsigned short verticeIndex = 0; size_t currOffset = 0; int i,j,k; @@ -351,7 +350,7 @@ Vector3 vert, norm; unsigned short verticeIndex = 0; size_t currOffset = 0; - int i,j; + unsigned int i,j; int ring, seg; float deltaSegAngle = (2.0 * M_PI / segments); Modified: code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc 2008-05-12 06:24:20 UTC (rev 6432) +++ code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc 2008-05-12 16:51:48 UTC (rev 6433) @@ -89,7 +89,6 @@ { Ogre::Viewport *cviewport; Ogre::MaterialPtr matPtr; - Ogre::TextureUnitState *texUnit; Ogre::HardwarePixelBufferSharedPtr mBuffer; int i; @@ -187,7 +186,6 @@ Ogre::Viewport *vp = NULL; Ogre::SceneManager *sceneMgr = adapt->sceneMgr; Ogre::Pass *pass; - Ogre::Pass *prev_pass; Ogre::SceneNode *gridNode = sceneMgr->getSceneNode("__OGRE_GRID_NODE__"); int i; @@ -351,13 +349,13 @@ fprintf( fp, "P6\n# Gazebo\n%d %d\n255\n", this->imageWidth, this->imageHeight); - for (int i = 0; i<this->imageHeight; i++) + for (unsigned int i = 0; i<this->imageHeight; i++) { - for (int j =0; j<this->imageWidth; j++) + for (unsigned int j =0; j<this->imageWidth; j++) { float f = this->depthBuffer[0][i*this->imageWidth+j]; - - unsigned char value = f * 255; + + unsigned char value = static_cast<unsigned char>((double)f * 255); fwrite( &value, 1, 1, fp ); fwrite( &value, 1, 1, fp ); fwrite( &value, 1, 1, fp ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2008-05-15 09:05:54
|
Revision: 6442 http://playerstage.svn.sourceforge.net/playerstage/?rev=6442&view=rev Author: robotos Date: 2008-05-15 09:05:54 -0700 (Thu, 15 May 2008) Log Message: ----------- Some silly optimizations recommended by valgrind. Modified Paths: -------------- code/gazebo/trunk/server/Entity.cc code/gazebo/trunk/server/Entity.hh code/gazebo/trunk/server/Quatern.cc code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/Simulator.hh Modified: code/gazebo/trunk/server/Entity.cc =================================================================== --- code/gazebo/trunk/server/Entity.cc 2008-05-15 03:00:00 UTC (rev 6441) +++ code/gazebo/trunk/server/Entity.cc 2008-05-15 16:05:54 UTC (rev 6442) @@ -36,13 +36,12 @@ Entity::Entity(Entity *parent) +: parent(parent), + id(++idCounter), + isStatic(false), + visualNode(0) { - // Set the parent and the id - this->parent = parent; - this->id = idCounter++; - this->isStatic = false; - this->visualNode=0; - + if (this->parent) { this->parent->AddChild(this); @@ -61,7 +60,6 @@ Entity::~Entity() { GZ_DELETE(this->visualNode); - World::Instance()->GetPhysicsEngine()->RemoveEntity(this); } @@ -100,7 +98,7 @@ } // Get all children -std::vector< Entity* > &Entity::GetChildren() +std::vector< Entity* > &Entity::GetChildren() { return this->children; } @@ -151,14 +149,14 @@ //////////////////////////////////////////////////////////////////////////////// // Return whether this entity is static -bool Entity::IsStatic() const +inline bool Entity::IsStatic() const { return this->isStatic; } //////////////////////////////////////////////////////////////////////////////// /// Returns true if the entities are the same. Checks only the name -bool Entity::operator==(const Entity &ent) +bool Entity::operator==(const Entity &ent) const { return ent.GetName() == this->GetName(); } Modified: code/gazebo/trunk/server/Entity.hh =================================================================== --- code/gazebo/trunk/server/Entity.hh 2008-05-15 03:00:00 UTC (rev 6441) +++ code/gazebo/trunk/server/Entity.hh 2008-05-15 16:05:54 UTC (rev 6442) @@ -75,7 +75,7 @@ /// \brief Get all children /// \return Vector of children entities - public: std::vector< Entity* > &GetChildren(); + public: std::vector< Entity* > &GetChildren(); /// \brief Return this entity's sceneNode /// \return Ogre scene node @@ -106,13 +106,13 @@ public: bool IsStatic() const; /// \brief Returns true if the entities are the same. Checks only the name - public: bool operator==(const Entity &ent); + public: bool operator==(const Entity &ent) const; /// \brief Parent of this entity protected: Entity *parent; /// \brief Children of this entity - public: std::vector< Entity* > children; + private: std::vector< Entity* > children; /// \brief This entities ID private: unsigned int id; @@ -120,16 +120,18 @@ /// \brief Used to automaticaly chose a unique ID on creation private: static unsigned int idCounter; - /// \brief OGRE stuff + // is this an static entity + private: bool isStatic; + + /// \brief Visual stuff protected: OgreVisual *visualNode; - /// \brief ODE Stuff + /// \brief ODE Stuff (should be go somewhere else) public: dSpaceID spaceId; /// \brief Name of the entity private: std::string name; - private: bool isStatic; }; /// \} Modified: code/gazebo/trunk/server/Quatern.cc =================================================================== --- code/gazebo/trunk/server/Quatern.cc 2008-05-15 03:00:00 UTC (rev 6441) +++ code/gazebo/trunk/server/Quatern.cc 2008-05-15 16:05:54 UTC (rev 6442) @@ -93,7 +93,7 @@ //////////////////////////////////////////////////////////////////////////////// // Get the inverse of this quaternion -Quatern Quatern::GetInverse() const +Quatern Quatern::GetInverse() const { Quatern q; Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-05-15 03:00:00 UTC (rev 6441) +++ code/gazebo/trunk/server/Simulator.cc 2008-05-15 16:05:54 UTC (rev 6442) @@ -50,28 +50,23 @@ //////////////////////////////////////////////////////////////////////////////// // Constructor Simulator::Simulator() +: xmlFile(NULL), + gui(NULL), + gazeboConfig(NULL), + loaded(false), + pause(false), + iterations(0), + simTime(0.0), + pauseTime(0.0), + startTime(0.0), + physicsUpdates(0), + checkpoint(0.0), + renderUpdates(0), + userPause(false), + userStep(false), + userStepInc(false), + userQuit(false) { - this->gui=NULL; - - this->loaded = false; - this->pause = false; - - this->iterations = 0; - this->pauseTime = 0.0; - this->startTime = 0.0; - this->simTime = 0.0; - - this->userQuit = false; - this->userPause = false; - this->userStep = false; - this->userStepInc = false; - - this->xmlFile=NULL; - this->gazeboConfig=NULL; - this->checkpoint=0.0; - this->physicsUpdates=0; - this->renderUpdates=0; - } //////////////////////////////////////////////////////////////////////////////// @@ -259,7 +254,7 @@ (this->GetUserStep() && this->GetUserStepInc())) { this->simTime += step; - this->iterations++; + ++this->iterations; this->pause=false; this->SetUserStepInc(!this->GetUserStepInc()); } @@ -271,7 +266,7 @@ World::Instance()->Update(); //physics - this->physicsUpdates++; + ++this->physicsUpdates; updated=true; } @@ -281,7 +276,7 @@ { gazebo::OgreAdaptor::Instance()->Render(); this->gui->Update(); - this->renderUpdates++; + ++this->renderUpdates; updated=true; } Modified: code/gazebo/trunk/server/Simulator.hh =================================================================== --- code/gazebo/trunk/server/Simulator.hh 2008-05-15 03:00:00 UTC (rev 6441) +++ code/gazebo/trunk/server/Simulator.hh 2008-05-15 16:05:54 UTC (rev 6442) @@ -163,10 +163,14 @@ //upper limits on updating //how many updates we have done in this slot - private: int physicsUpdates, renderUpdates; + private: int physicsUpdates; + // when the slot started private: double checkpoint; + // render updates + private: int renderUpdates; + // 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. |
From: <ro...@us...> - 2008-05-19 17:33:13
|
Revision: 6449 http://playerstage.svn.sourceforge.net/playerstage/?rev=6449&view=rev Author: robotos Date: 2008-05-19 17:33:20 -0700 (Mon, 19 May 2008) Log Message: ----------- Bye bye global runtime variables Modified Paths: -------------- code/gazebo/trunk/server/Global.hh code/gazebo/trunk/server/SConscript code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/gui/Toolbar.cc code/gazebo/trunk/server/physics/ode/ODEPhysics.hh code/gazebo/trunk/server/sensors/ray/RaySensor.cc Removed Paths: ------------- code/gazebo/trunk/server/Global.cc Deleted: code/gazebo/trunk/server/Global.cc =================================================================== --- code/gazebo/trunk/server/Global.cc 2008-05-19 01:18:04 UTC (rev 6448) +++ code/gazebo/trunk/server/Global.cc 2008-05-20 00:33:20 UTC (rev 6449) @@ -1,42 +0,0 @@ -/* - * Gazebo - Outdoor Multi-Robot Simulator - * Copyright (C) 2003 - * Nate Koenig & Andrew Howard - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -/* Desc: Generic Typedefs, macros, functions, etc - * Author: Nate Koenig - * Date: 21 July 2007 - * CVS: $Id$ - */ - -#include "Global.hh" - -using namespace gazebo; - -Pose3d Global::poseOffset; - -//////////////////////////////////////////////////////////////////////////////// -Global::Global() -{ -} - -//////////////////////////////////////////////////////////////////////////////// -Global::~Global() -{ -} - Modified: code/gazebo/trunk/server/Global.hh =================================================================== --- code/gazebo/trunk/server/Global.hh 2008-05-19 01:18:04 UTC (rev 6448) +++ code/gazebo/trunk/server/Global.hh 2008-05-20 00:33:20 UTC (rev 6449) @@ -33,7 +33,6 @@ #include <math.h> -#include "Pose3d.hh" #include "GazeboError.hh" #include "GazeboMessage.hh" @@ -89,40 +88,5 @@ #define GZ_DELETE(p) { if(p) { delete (p); (p)=NULL; } } -namespace gazebo -{ - /// \addtogroup gazebo_server - /// \brief Global attributes. - /// \{ - - /// \brief Class to hold global attributes - /** - The \c param:Global tag is used to specify certain global parameters - for the server. Set these parameters as needed in the world file E.g.: - - \verbatim - <param:Global> - <pause>true</pause> - </param:Global> - \endverbatim - - The parameters are as follows: - - pause (bool) - - Set to true to start the simulator in paused mode. - - Default: false - */ - class Global - { - - /// Global pose offset - public: static Pose3d poseOffset; - - private: Global(); - private: ~Global(); - }; - - /// \} -} - #endif Modified: code/gazebo/trunk/server/SConscript =================================================================== --- code/gazebo/trunk/server/SConscript 2008-05-19 01:18:04 UTC (rev 6448) +++ code/gazebo/trunk/server/SConscript 2008-05-20 00:33:20 UTC (rev 6449) @@ -7,7 +7,6 @@ SConscript('%s/SConscript' % subdir) sources = ['main.cc', - 'Global.cc', 'Vector3.cc', 'Quatern.cc', 'Pose3d.cc', Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-05-19 01:18:04 UTC (rev 6448) +++ code/gazebo/trunk/server/Simulator.cc 2008-05-20 00:33:20 UTC (rev 6449) @@ -276,7 +276,7 @@ else if (maxRenderUpdateTime > 0) gzmsg(2) << "updating the visualization " << 1/maxRenderUpdateTime << " times per second"; else - gzmsg(2) << "updating the visualization " << -1/maxRenderUpdateTime << " times per each physics updates"; + gzmsg(2) << "updating the visualization after " << -1/maxRenderUpdateTime << " physics updates" << std::endl; std::cout.flush(); while (!this->userQuit) Modified: code/gazebo/trunk/server/gui/Toolbar.cc =================================================================== --- code/gazebo/trunk/server/gui/Toolbar.cc 2008-05-19 01:18:04 UTC (rev 6448) +++ code/gazebo/trunk/server/gui/Toolbar.cc 2008-05-20 00:33:20 UTC (rev 6449) @@ -27,10 +27,10 @@ #include <stdio.h> #include <FL/Fl_Value_Output.H> -#include "Global.hh" #include "CameraManager.hh" #include "CameraSensor.hh" #include "Toolbar.hh" +#include "Global.hh" using namespace gazebo; @@ -122,7 +122,6 @@ } Pose3d pose = camera->GetWorldPose(); - pose -= Global::poseOffset; this->outputX->value(pose.pos.x); this->outputY->value(pose.pos.y); Modified: code/gazebo/trunk/server/physics/ode/ODEPhysics.hh =================================================================== --- code/gazebo/trunk/server/physics/ode/ODEPhysics.hh 2008-05-19 01:18:04 UTC (rev 6448) +++ code/gazebo/trunk/server/physics/ode/ODEPhysics.hh 2008-05-20 00:33:20 UTC (rev 6449) @@ -41,7 +41,6 @@ class CylinderGeom; class Entity; class XMLConfigNode; - /// \addtogroup gazebo_physics_engine /// \{ @@ -121,7 +120,7 @@ private: dJointGroupID contactGroup; /// List of all the entities - protected: std::map<int, Entity* > entities; + private: std::map<int, Entity* > entities; private: double globalCFM; private: double globalERP; Modified: code/gazebo/trunk/server/sensors/ray/RaySensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/ray/RaySensor.cc 2008-05-19 01:18:04 UTC (rev 6448) +++ code/gazebo/trunk/server/sensors/ray/RaySensor.cc 2008-05-20 00:33:20 UTC (rev 6449) @@ -67,9 +67,7 @@ { if (this->body == NULL) { - std::ostringstream stream; - stream << "Body is NULL"; - gzthrow(stream.str()); + gzthrow("Null body in the ray sensor"); } this->rayCount = node->GetInt("rayCount",0,1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2008-05-23 07:29:56
|
Revision: 6454 http://playerstage.svn.sourceforge.net/playerstage/?rev=6454&view=rev Author: robotos Date: 2008-05-23 07:29:35 -0700 (Fri, 23 May 2008) Log Message: ----------- Make them compile with GCC 4.3 Modified Paths: -------------- code/gazebo/trunk/server/GazeboMessage.cc code/gazebo/trunk/server/World.cc code/gazebo/trunk/server/XMLConfig.cc code/gazebo/trunk/server/main.cc code/gazebo/trunk/server/rendering/OgreSimpleShape.hh code/gazebo/trunk/server/rendering/OgreVisual.cc Modified: code/gazebo/trunk/server/GazeboMessage.cc =================================================================== --- code/gazebo/trunk/server/GazeboMessage.cc 2008-05-23 10:43:53 UTC (rev 6453) +++ code/gazebo/trunk/server/GazeboMessage.cc 2008-05-23 14:29:35 UTC (rev 6454) @@ -26,6 +26,7 @@ */ #include <time.h> +#include <string.h> #include "XMLConfig.hh" #include "GazeboError.hh" #include "GazeboMessage.hh" Modified: code/gazebo/trunk/server/World.cc =================================================================== --- code/gazebo/trunk/server/World.cc 2008-05-23 10:43:53 UTC (rev 6453) +++ code/gazebo/trunk/server/World.cc 2008-05-23 14:29:35 UTC (rev 6454) @@ -83,7 +83,6 @@ } } this->models.clear(); - this->geometries.clear(); GZ_DELETE (this->physicsEngine) Modified: code/gazebo/trunk/server/XMLConfig.cc =================================================================== --- code/gazebo/trunk/server/XMLConfig.cc 2008-05-23 10:43:53 UTC (rev 6453) +++ code/gazebo/trunk/server/XMLConfig.cc 2008-05-23 14:29:35 UTC (rev 6454) @@ -27,9 +27,9 @@ #include <assert.h> #include <float.h> #include <math.h> +#include <string.h> +#include <iostream> #include <sstream> -#include <string> -#include <iostream> #include <libxml/xinclude.h> #include <libxml/xpointer.h> Modified: code/gazebo/trunk/server/main.cc =================================================================== --- code/gazebo/trunk/server/main.cc 2008-05-23 10:43:53 UTC (rev 6453) +++ code/gazebo/trunk/server/main.cc 2008-05-23 14:29:35 UTC (rev 6454) @@ -101,6 +101,7 @@ //#include <python2.4/Python.h> #include <stdio.h> +#include <stdlib.h> #include <signal.h> #include <errno.h> #include <iostream> Modified: code/gazebo/trunk/server/rendering/OgreSimpleShape.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreSimpleShape.hh 2008-05-23 10:43:53 UTC (rev 6453) +++ code/gazebo/trunk/server/rendering/OgreSimpleShape.hh 2008-05-23 14:29:35 UTC (rev 6454) @@ -13,9 +13,6 @@ /// \brief Class used to render simple shapes class OgreSimpleShape { - /// \brief The type of shape - public: typedef enum Shape {CUBE, ROUNDED_CUBE, CYLINDER, SPHERE}; - /// \brief Constructor private: OgreSimpleShape(); Modified: code/gazebo/trunk/server/rendering/OgreVisual.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-05-23 10:43:53 UTC (rev 6453) +++ code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-05-23 14:29:35 UTC (rev 6454) @@ -78,7 +78,6 @@ this->xmlNode=node; std::string meshName = node->GetString("mesh","",1); - std::string materialName = node->GetString("material","",0); // Read the desired position and rotation of the mesh pose.pos = node->GetVector3("xyz", Vector3(0,0,0)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2008-06-05 04:01:42
|
Revision: 6475 http://playerstage.svn.sourceforge.net/playerstage/?rev=6475&view=rev Author: robotos Date: 2008-06-05 04:01:41 -0700 (Thu, 05 Jun 2008) Log Message: ----------- Very experimental RenderEngine class. It doesn't look good and we haven't agreed on that. I may revert that change. Other changes include moving the XML loading from OgreVisual (as that class is broader than just <visual>), moving GetUniqueName from Entity to OgreVisual, moving loading of the Gui to the Gui factory (I guess moving it to the Gui class would be better), all the CreateOgre methods have the same behaviour. My system is too unstable now to make extensive test on these changes, I upload it to try to work with other laptop. I hope it does not brake anything. Modified Paths: -------------- code/gazebo/trunk/server/Entity.cc code/gazebo/trunk/server/Entity.hh code/gazebo/trunk/server/Model.cc code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/Simulator.hh code/gazebo/trunk/server/World.cc code/gazebo/trunk/server/gui/DummyGui.cc code/gazebo/trunk/server/gui/Gui.hh code/gazebo/trunk/server/gui/GuiFactory.cc code/gazebo/trunk/server/gui/GuiFactory.hh code/gazebo/trunk/server/gui/StatusBar.cc code/gazebo/trunk/server/physics/Geom.cc code/gazebo/trunk/server/physics/Geom.hh code/gazebo/trunk/server/physics/HeightmapGeom.cc code/gazebo/trunk/server/physics/PlaneGeom.cc code/gazebo/trunk/server/physics/TrimeshGeom.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/OgreAdaptor.hh code/gazebo/trunk/server/rendering/OgreCreator.cc code/gazebo/trunk/server/rendering/OgreCreator.hh code/gazebo/trunk/server/rendering/OgreVisual.cc code/gazebo/trunk/server/rendering/OgreVisual.hh code/gazebo/trunk/server/rendering/SConscript Added Paths: ----------- code/gazebo/trunk/server/rendering/RenderEngine.cc code/gazebo/trunk/server/rendering/RenderEngine.hh Modified: code/gazebo/trunk/server/Entity.cc =================================================================== --- code/gazebo/trunk/server/Entity.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/Entity.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -129,16 +129,6 @@ return this->name; } -//////////////////////////////////////////////////////////////////////////////// -// Return an unique name for the entity -std::string Entity::GetUniqueName() const -{ - std::ostringstream str; - str << this->name; - str << "_"; - str << this->id; - return str.str(); -} //////////////////////////////////////////////////////////////////////////////// // Set whether this entity is static: immovable Modified: code/gazebo/trunk/server/Entity.hh =================================================================== --- code/gazebo/trunk/server/Entity.hh 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/Entity.hh 2008-06-05 11:01:41 UTC (rev 6475) @@ -93,10 +93,6 @@ /// \return Name of the entity public: std::string GetName() const; - /// \brief Return an unique name <name>_<id> for the entity - /// \return Unique name for the entity - public: std::string GetUniqueName() const; - /// \brief Set whether this entity is static: immovable /// \param s Bool, true = static public: void SetStatic(bool s); Modified: code/gazebo/trunk/server/Model.cc =================================================================== --- code/gazebo/trunk/server/Model.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/Model.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -384,8 +384,6 @@ origPose = this->pose; this->pose = setPose; - //OgreAdaptor::Instance()->SetSceneNodePose(this->sceneNode, this->pose); - for (iter=this->bodies.begin(); iter!=this->bodies.end(); iter++) { if (!iter->second) @@ -668,7 +666,7 @@ if ((childNode = node->GetChild("light"))) { - OgreCreator::CreateLight(childNode, body); + OgreCreator::CreateLight(childNode, body->GetVisualNode()); } } Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/Simulator.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -39,7 +39,7 @@ #include "gazebo.h" #include "PhysicsEngine.hh" #include "OgreAdaptor.hh" -#include "OgreCreator.hh" +#include "RenderEngine.hh" #include "GazeboMessage.hh" #include "Global.hh" @@ -52,6 +52,7 @@ Simulator::Simulator() : xmlFile(NULL), gui(NULL), + renderEngine(NULL), gazeboConfig(NULL), loaded(false), pause(false), @@ -88,6 +89,8 @@ GZ_DELETE (this->gazeboConfig) gazebo::World::Instance()->Close(); gazebo::OgreAdaptor::Instance()->Close(); + + //GZ_DELETE(this->renderEngine); } //////////////////////////////////////////////////////////////////////////////// @@ -127,29 +130,30 @@ gzthrow("Error loading the Gazebo configuration file, check the .gazeborc file on your HOME directory \n" << e); } - //Create and initialize the Gui + //Create and initialize the Gui try { - this->LoadGui(rootNode); + this->gui=GuiFactory::NewGui(rootNode); + this->gui->Init(); } catch (GazeboError e) { gzthrow( "Error loading the GUI\n" << e); } - //Initialize RenderingEngine + //Initialize RenderEngine //create factory + //this->renderEngine = new OgreAdaptor(); try { - gazebo::OgreAdaptor::Instance()->Init(rootNode); + OgreAdaptor::Instance()->Init(rootNode); + this->renderEngine = (RenderEngine *) OgreAdaptor::Instance(); + //this->renderEngine->Init(); } catch (gazebo::GazeboError e) { - gzthrow("Failed to Initialize the OGRE Rendering system\n" << e ); - } + gzthrow("Failed to Initialize the Rendering engine subsystem\n" << e ); + } - //Preload basic shapes that can be used anywhere - OgreCreator::CreateBasicShapes(); - //Create the world try { @@ -169,10 +173,10 @@ { // Saving in the preferred order XMLConfigNode* root=xmlFile->GetRootNode(); - gazebo::GazeboMessage::Instance()->Save(root); + GazeboMessage::Instance()->Save(root); World::Instance()->GetPhysicsEngine()->Save(root); + this->GetRenderEngine()->Save(root); this->SaveGui(root); - gazebo::OgreAdaptor::Instance()->Save(root); World::Instance()->Save(root); if (xmlFile->Save(filename)<0) @@ -200,7 +204,7 @@ { gazebo::World::Instance()->Fini(); } - +/* //////////////////////////////////////////////////////////////////////////////// /// Main simulation loop, when this loop ends the simulation finish void Simulator::MainLoop() @@ -242,7 +246,7 @@ // Update the rendering if (currTime - this->prevRenderTime > 0.02) { - gazebo::OgreAdaptor::Instance()->Render(); + this->GetRenderEngine()->Render(); this->prevRenderTime = this->GetRealTime(); } @@ -258,13 +262,13 @@ } } } - +*/ //////////////////////////////////////////////////////////////////////////////// /// Main simulation loop, when this loop ends the simulation finish -/*void Simulator::MainLoop() +void Simulator::MainLoop() { double maxPhysicsUpdateTime = World::Instance()->GetPhysicsEngine()->GetUpdateRate(); - double maxRenderUpdateTime = OgreAdaptor::Instance()->GetUpdateRate(); + double maxRenderUpdateTime = this->GetRenderEngine()->GetUpdateRate(); double step = World::Instance()->GetPhysicsEngine()->GetStepTime(); if (maxPhysicsUpdateTime == 0) @@ -303,11 +307,11 @@ // surpassed what we have already advanced. // If maxPhysicsUpdateTime is negative, we update if we are below the times rendering was updated * the multiplier of the userPause // note that the multiplier defined in the file is inverted when read so for instance -2 will become -0.5 - if ((maxPhysicsUpdateTime >= 0) && ((this->GetRealTime() - this->checkpoint) > (maxPhysicsUpdateTime * this->physicsUpdates)) || \ + if (((maxPhysicsUpdateTime >= 0) && ((this->GetRealTime() - this->checkpoint) > (maxPhysicsUpdateTime * this->physicsUpdates))) || \ ((maxPhysicsUpdateTime < 0) && (this->physicsUpdates < (-maxPhysicsUpdateTime * this->renderUpdates)))) { - if (!this->GetUserPause() && !this->GetUserStep() || + if ((!this->GetUserPause() && !this->GetUserStep()) || (this->GetUserStep() && this->GetUserStepInc())) { this->simTime += step; @@ -331,7 +335,7 @@ if (((maxRenderUpdateTime >= 0) && ((this->GetRealTime() - this->checkpoint) > (maxRenderUpdateTime * this->renderUpdates))) || \ ((maxRenderUpdateTime < 0) && (this->renderUpdates < (-maxRenderUpdateTime * this->physicsUpdates)))) { - gazebo::OgreAdaptor::Instance()->Render(); + this->GetRenderEngine()->Render(); this->gui->Update(); ++this->renderUpdates; updated=true; @@ -351,7 +355,7 @@ } } } -}*/ +} //////////////////////////////////////////////////////////////////////////////// /// Gets our current GUI interface @@ -367,6 +371,10 @@ return this->gazeboConfig; } +RenderEngine *Simulator::GetRenderEngine() const +{ + return this->renderEngine; +} //////////////////////////////////////////////////////////////////////////////// // Return when this simulator is paused @@ -479,45 +487,7 @@ } - - -//TODO: Move to Gui or create GuiEngine and move it there -void Simulator::LoadGui(XMLConfigNode *rootNode) -{ - gazebo::XMLConfigNode *childNode; - - childNode = rootNode->GetChild("gui"); - - if (childNode) - { - int width = childNode->GetTupleInt("size",0,640); - int height = childNode->GetTupleInt("size",1,480); - int x = childNode->GetTupleInt("pos",0,0); - int y = childNode->GetTupleInt("pos",1,0); - std::string type = childNode->GetString("type","fltk",1); - - gzmsg(1) << "Creating GUI:\n\tType[" << type << "] Pos[" << x << " " << y << "] Size[" << width << " " << height << "]\n"; - if (type != "fltk") - { - gzthrow("The only GUI available is 'fltk', for no-GUI simulation, delete the 'gui' tag and its children"); - } - - // Create the GUI - this->gui = GuiFactory::NewGui(type, x, y, width, height, type+"::Gazebo"); - - // Initialize the GUI - this->gui->Init(); - - } - else - { - // Create a dummy GUI - gzmsg(1) <<"Creating a dummy GUI"; - this->gui = GuiFactory::NewGui(std::string("dummy"), 0, 0, 0, 0, std::string()); - } -} - - +// Move to GuiFactory? void Simulator::SaveGui(XMLConfigNode *node) { Vector2<int> size; @@ -532,3 +502,4 @@ } } + Modified: code/gazebo/trunk/server/Simulator.hh =================================================================== --- code/gazebo/trunk/server/Simulator.hh 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/Simulator.hh 2008-06-05 11:01:41 UTC (rev 6475) @@ -43,6 +43,7 @@ class XMLConfig; class XMLConfigNode; class GazeboConfig; + class RenderEngine; /// \brief The World /* @@ -79,8 +80,11 @@ public: Gui *GetUI() const; /// \brief Gets the local configuration for this computer - public: gazebo::GazeboConfig *GetGazeboConfig() const; + public: GazeboConfig *GetGazeboConfig() const; + /// \brief Gets our current GUI interface + public: RenderEngine *GetRenderEngine() const; + /// \brief Returns the state of the simulation true if paused public: bool IsPaused() const; @@ -141,13 +145,14 @@ ///pointer to the XML Data - private: gazebo::XMLConfig *xmlFile; + private: XMLConfig *xmlFile; /// Pointer to the selected Gui private: Gui *gui; + private: RenderEngine *renderEngine; /// Pointer to the selected Gui - private: gazebo::GazeboConfig *gazeboConfig; + private: GazeboConfig *gazeboConfig; /// Flag to know if we have a simulation loaded private: bool loaded; Modified: code/gazebo/trunk/server/World.cc =================================================================== --- code/gazebo/trunk/server/World.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/World.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -48,9 +48,8 @@ // Private constructor World::World() { - this->server=0; - this->simIface=0; - + this->server = NULL; + this->simIface = NULL; this->showBoundingBoxes = false; this->showJoints = false; this->wireframe = false; Modified: code/gazebo/trunk/server/gui/DummyGui.cc =================================================================== --- code/gazebo/trunk/server/gui/DummyGui.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/gui/DummyGui.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ -/* Desc: FLTK Mainwindow +/* Desc: Dummy Mainwindow * Author: Renaud Barate * Date: 16 Feb 2008 */ Modified: code/gazebo/trunk/server/gui/Gui.hh =================================================================== --- code/gazebo/trunk/server/gui/Gui.hh 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/gui/Gui.hh 2008-06-05 11:01:41 UTC (rev 6475) @@ -48,10 +48,10 @@ /// \brief Destructor public: virtual ~Gui() { } - /// \brief Initalize the gui + /// \brief Initalize the gui public: virtual void Init()=0; - /// \brief Updates the gui + /// \brief Updates the gui public: virtual void Update()=0; /// \brief Get the width of the gui's rendering window @@ -71,6 +71,7 @@ /// \brief Get the display public: virtual Display *GetDisplay() const=0; + }; class GLWindow; Modified: code/gazebo/trunk/server/gui/GuiFactory.cc =================================================================== --- code/gazebo/trunk/server/gui/GuiFactory.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/gui/GuiFactory.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -24,12 +24,12 @@ * Date: 03 Aug 2007 * SVN info: $Id$ */ -#include <FL/Fl_Menu_Item.H> -#include <FL/Fl_Menu_Bar.H> #include "GazeboError.hh" +#include "GazeboMessage.hh" #include "Gui.hh" #include "GuiFactory.hh" +#include "XMLConfig.hh" using namespace gazebo; @@ -49,7 +49,7 @@ //////////////////////////////////////////////////////////////////////////////// // Create a new instance of a gui. -Gui *GuiFactory::NewGui(const std::string &classname, int x, int y, int w, int h, const std::string &label) +Gui *GuiFactory::CreateGui(const std::string &classname, int x, int y, int w, int h, const std::string &label) { if (guis[classname]) { @@ -57,11 +57,45 @@ } else { - std::ostringstream stream; - stream << "Unable to make a GUI of type " << classname; - gzthrow(stream.str()); + gzthrow("Unable to make a GUI of type " << classname); } return NULL; } +//////////////////////////////////////////////////////////////////////////////// +// Parse the XML config file and load the correct GUI with correct parameters +Gui* GuiFactory::NewGui(XMLConfigNode *rootNode) +{ + XMLConfigNode *childNode; + Gui *gui = NULL; + + childNode = rootNode->GetChild("gui"); + + if (childNode) + { + int width = childNode->GetTupleInt("size",0,640); + int height = childNode->GetTupleInt("size",1,480); + int x = childNode->GetTupleInt("pos",0,0); + int y = childNode->GetTupleInt("pos",1,0); + std::string type = childNode->GetString("type","fltk",1); + + gzmsg(1) << "Creating GUI:\n\tType[" << type << "] Pos[" << x << " " << y << "] Size[" << width << " " << height << "]\n"; + if (type != "fltk") + { + gzthrow("The only GUI available is 'fltk', for no-GUI simulation, delete the 'gui' tag and its children"); + } + + // Create the GUI + gui = GuiFactory::CreateGui(type, x, y, width, height, type+"::Gazebo"); + } + else + { + // Create a dummy GUI + gzmsg(1) <<"Creating a dummy GUI"; + gui = GuiFactory::CreateGui(std::string("dummy"), 0, 0, 0, 0, std::string()); + } + return gui; + +} + Modified: code/gazebo/trunk/server/gui/GuiFactory.hh =================================================================== --- code/gazebo/trunk/server/gui/GuiFactory.hh 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/gui/GuiFactory.hh 2008-06-05 11:01:41 UTC (rev 6475) @@ -50,8 +50,11 @@ GuiFactoryFn factoryfn); /// \brief Create a new instance of a gui. - public: static Gui *NewGui(const std::string &classname, int x, int y, int w, int h, const std::string &label); + public: static Gui *CreateGui(const std::string &classname, int x, int y, int w, int h, const std::string &label); + /// \brief Read from XML the correct gui configuration and create it + public: static Gui *NewGui(XMLConfigNode *rootNode); + /// \brief A list of registered classes private: static std::map<std::string, GuiFactoryFn> guis; }; Modified: code/gazebo/trunk/server/gui/StatusBar.cc =================================================================== --- code/gazebo/trunk/server/gui/StatusBar.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/gui/StatusBar.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -25,12 +25,11 @@ */ #include <stdio.h> -#include <Ogre.h> #include <FL/Fl_Value_Output.H> #include <FL/Fl_Output.H> #include "Simulator.hh" -#include "OgreAdaptor.hh" +#include "RenderEngine.hh" #include "StatusBar.hh" using namespace gazebo; @@ -75,9 +74,7 @@ /// Update the toolbar data void StatusBar::Update() { - float lastFPS, avgFPS, bestFPS, worstFPS; - OgreAdaptor::Instance()->window->getStatistics(lastFPS, avgFPS, bestFPS, worstFPS); - + float avgFPS = Simulator::Instance()->GetRenderEngine()->GetAverageFPS(); this->iterations->value(Simulator::Instance()->GetIterations()); this->fps->value(avgFPS); Modified: code/gazebo/trunk/server/physics/Geom.cc =================================================================== --- code/gazebo/trunk/server/physics/Geom.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/physics/Geom.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -27,6 +27,7 @@ #include <sstream> #include "OgreVisual.hh" +#include "OgreCreator.hh" #include "Global.hh" #include "GazeboMessage.hh" #include "ContactParams.hh" @@ -123,7 +124,7 @@ while (childNode) { OgreVisual *visual = new OgreVisual(this->visualNode); - visual->Load(childNode); + OgreCreator::CreateVisual(childNode,visual); this->visuals.push_back(visual); childNode = childNode->GetNext("visual"); } @@ -448,27 +449,6 @@ } //////////////////////////////////////////////////////////////////////////////// -/// Set the transparency -void Geom::SetTransparency( float trans ) -{ - std::vector<OgreVisual*>::iterator iter; - - for (iter = this->visuals.begin(); iter != this->visuals.end(); iter++) - { - (*iter)->SetTransparency(trans); - } - - this->transparency = trans; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Get the value of the transparency -float Geom::GetTransparency() const -{ - return this->transparency; -} - -//////////////////////////////////////////////////////////////////////////////// /// Set the visibility of the Bounding box of this geometry void Geom::ShowBoundingBox(bool show) { @@ -482,9 +462,9 @@ void Geom::ShowJoints(bool show) { if (show) - this->SetTransparency(0.6); + this->visualNode->SetTransparency(0.6); else - this->SetTransparency(0); + this->visualNode->SetTransparency(0); } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/physics/Geom.hh =================================================================== --- code/gazebo/trunk/server/physics/Geom.hh 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/physics/Geom.hh 2008-06-05 11:01:41 UTC (rev 6475) @@ -126,17 +126,11 @@ /// \brief Get the laser retro reflectiveness public: float GetLaserRetro() const; - - /// \brief Set the transparency - public: void SetTransparency( float trans ); - - /// \brief Get the value of the transparency - public: float GetTransparency() const; - -/// \brief Set the visibility of the bounding box + + /// \brief Set the visibility of the bounding box public: void ShowBoundingBox(bool show); -/// \brief Set the visibility of the joints + /// \brief Set the visibility of the joints public: void ShowJoints(bool show); /// \brief Set the visibility of the physical entity of this geom Modified: code/gazebo/trunk/server/physics/HeightmapGeom.cc =================================================================== --- code/gazebo/trunk/server/physics/HeightmapGeom.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/physics/HeightmapGeom.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -32,6 +32,8 @@ #include "GazeboError.hh" #include "OgreAdaptor.hh" +#include "Simulator.hh" +#include "RenderEngine.hh" #include "Global.hh" #include "Body.hh" #include "HeightmapGeom.hh" @@ -50,7 +52,8 @@ // Destructor HeightmapGeom::~HeightmapGeom() { - OgreAdaptor::Instance()->sceneMgr->destroyQuery(this->rayQuery); + OgreAdaptor *ogreAdaptor = (OgreAdaptor *) Simulator::Instance()->GetRenderEngine(); + ogreAdaptor->sceneMgr->destroyQuery(this->rayQuery); } ////////////////////////////////////////////////////////////////////////////// @@ -128,7 +131,15 @@ { Ogre::Image tmpImage; int tileSize; + OgreAdaptor *ogreAdaptor; + if (Simulator::Instance()->GetRenderEngine()->GetType() != "ogre") + { + gzthrow("Heighmaps are only supported by the Ogre renderer"); + } + else + ogreAdaptor = (OgreAdaptor *)(Simulator::Instance()->GetRenderEngine()); + std::string imageFilename = node->GetString("image","",1); std::string worldTexture = node->GetString("worldTexture","",0); std::string detailTexture = node->GetString("detailTexture","",0); @@ -143,7 +154,7 @@ // Width and height must be the same if (tmpImage.getWidth() != tmpImage.getHeight()) { - gzthrow("Hieghtmap image must be square\n"); + gzthrow("Heightmap image must be square\n"); } this->terrainVertSize = tmpImage.getWidth(); @@ -216,17 +227,17 @@ new Ogre::MemoryDataStream(mstr,strlen(mstr)) ); // Set the static terrain in Ogre - OgreAdaptor::Instance()->sceneMgr->setWorldGeometry(dataStream); + ogreAdaptor->sceneMgr->setWorldGeometry(dataStream); // HACK to make the terrain oriented properly - Ogre::SceneNode *tnode = OgreAdaptor::Instance()->sceneMgr->getSceneNode("Terrain"); + Ogre::SceneNode *tnode = ogreAdaptor->sceneMgr->getSceneNode("Terrain"); tnode->pitch(Ogre::Degree(90)); tnode->translate(Ogre::Vector3(-this->terrainSize.x*0.5, this->terrainSize.y*0.5, 0)); // Setup the ray scene query, which is used to determine the heights of // the vertices for ODE this->ray = Ogre::Ray(Ogre::Vector3::ZERO, Ogre::Vector3::NEGATIVE_UNIT_Y); - this->rayQuery = OgreAdaptor::Instance()->sceneMgr->createRayQuery(this->ray); + this->rayQuery = ogreAdaptor->sceneMgr->createRayQuery(this->ray); this->rayQuery->setQueryTypeMask(Ogre::SceneManager::WORLD_GEOMETRY_TYPE_MASK); this->rayQuery->setWorldFragmentType(Ogre::SceneQuery::WFT_SINGLE_INTERSECTION); Modified: code/gazebo/trunk/server/physics/PlaneGeom.cc =================================================================== --- code/gazebo/trunk/server/physics/PlaneGeom.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/physics/PlaneGeom.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -69,7 +69,7 @@ double altitude = 0; Vector3 normal = node->GetVector3("normal",Vector3(0,0,1)); - OgreCreator::CreatePlane(node,this); + OgreCreator::CreatePlane(node,this->GetVisualNode()); this->SetGeom(dCreatePlane(this->spaceId, normal.x, normal.y, normal.z, altitude),false); Modified: code/gazebo/trunk/server/physics/TrimeshGeom.cc =================================================================== --- code/gazebo/trunk/server/physics/TrimeshGeom.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/physics/TrimeshGeom.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -31,6 +31,8 @@ #include "Body.hh" #include "TrimeshGeom.hh" #include "GazeboError.hh" +#include "Simulator.hh" +#include "RenderEngine.hh" using namespace gazebo; @@ -107,6 +109,10 @@ int vindex = 0; int iindex = 0; + if (Simulator::Instance()->GetRenderEngine()->GetType() != "ogre") + { + gzthrow("Heighmaps are only supported by the Ogre renderer"); + } this->meshName = node->GetString("mesh","",1); Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -68,7 +68,7 @@ this->camera=NULL; this->viewport=NULL; this->root=NULL; - this->renderSys = NULL; + this->type = "ogre"; } @@ -249,6 +249,10 @@ } } + //Preload basic shapes that can be used anywhere + OgreCreator::LoadBasicShapes(); + + /* Ogre::ManualObject* myManualObject = this->sceneMgr->createManualObject("manual1"); Ogre::SceneNode* myManualObjectNode = this->sceneMgr->getRootSceneNode()->createChildSceneNode("manual1_node"); @@ -406,40 +410,43 @@ // Setup render system void OgreAdaptor::SetupRenderSystem(bool create) { + + Ogre::RenderSystem *renderSys; + // Set parameters of render system (window size, etc.) //if (!this->root->restoreConfig()) { Ogre::RenderSystemList *rsList = this->root->getAvailableRenderers(); int c = 0; - this->renderSys = NULL; + renderSys = NULL; do { if (c == (int)rsList->size()) break; - this->renderSys = rsList->at(c); + renderSys = rsList->at(c); c++; } - while (this->renderSys->getName().compare("OpenGL Rendering Subsystem")!= 0); + while (renderSys->getName().compare("OpenGL Rendering Subsystem")!= 0); - if (this->renderSys == NULL) + if (renderSys == NULL) { gzthrow( "unable to find rendering system" ); } - this->renderSys->setConfigOption("Full Screen","No"); - this->renderSys->setConfigOption("FSAA","2"); + renderSys->setConfigOption("Full Screen","No"); + renderSys->setConfigOption("FSAA","2"); // Set the preferred RRT mode. Options are: "PBuffer", "FBO", and "Copy", can be set in the .gazeborc file - this->renderSys->setConfigOption("RTT Preferred Mode", Simulator::Instance()->GetGazeboConfig()->GetRTTMode()); + renderSys->setConfigOption("RTT Preferred Mode", Simulator::Instance()->GetGazeboConfig()->GetRTTMode()); if (create && this->videoMode != "None") { - this->renderSys->setConfigOption("Video Mode",this->videoMode); - this->root->setRenderSystem(this->renderSys); + renderSys->setConfigOption("Video Mode",this->videoMode); + this->root->setRenderSystem(renderSys); } else { @@ -487,17 +494,18 @@ //////////////////////////////////////////////////////////////////////////////// // Render -int OgreAdaptor::Render() +void OgreAdaptor::Render() { OgreHUD::Instance()->Update(); - this->root->renderOneFrame(); - - return 0; } -double OgreAdaptor::GetUpdateRate() const +float OgreAdaptor::GetAverageFPS() const { - return this->updateRate; + float lastFPS, avgFPS, bestFPS, worstFPS; +// float avgFPS; + this->window->getStatistics(lastFPS, avgFPS, bestFPS, worstFPS); + return avgFPS; + } Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-06-05 11:01:41 UTC (rev 6475) @@ -31,7 +31,7 @@ #include <X11/Xutil.h> #include "SingletonT.hh" -#include "Pose3d.hh" +#include "RenderEngine.hh" namespace Ogre { @@ -64,7 +64,7 @@ class Entity; /// \brief Adptor to Ogre3d -class OgreAdaptor : public SingletonT<OgreAdaptor> +class OgreAdaptor : RenderEngine, public SingletonT<OgreAdaptor> { /// \brief Constructor @@ -86,14 +86,13 @@ /// \brief Initialize Ogre Rendering engine public: void Init(Display *display, XVisualInfo *visual, Window windowId, int width, int height); /// \brief Render a single frame - public: int Render(); + public: void Render(); - /// \brief Gets the minimum time between renders, set by in the file to limit Framerate - public: double GetUpdateRate() const; - /// \brief Resize the rendering window public: void ResizeWindow(unsigned int w, unsigned int h); + public: float GetAverageFPS() const; + private: void LoadPlugins(); private: void SetupResources(); private: void SetupRenderSystem(bool create); @@ -120,8 +119,6 @@ /// Pointer to the input reader public: Ogre::InputReader *inputDevice; - private: double updateRate; - private: Ogre::LogManager *logManager; // Our custom frame listener @@ -137,9 +134,9 @@ private: int sceneType; private: std::string worldGeometry; - private: Vector3 terrainSize; - private: unsigned int terrainVertSize; - private: std::string terrainImage; + //private: Vector3 terrainSize; + //private: unsigned int terrainVertSize; + //private: std::string terrainImage; private: friend class DestroyerT<OgreAdaptor>; private: friend class SingletonT<OgreAdaptor>; Modified: code/gazebo/trunk/server/rendering/OgreCreator.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -27,6 +27,7 @@ #include <Ogre.h> #include <iostream> +#include "Global.hh" #include "Entity.hh" #include "XMLConfig.hh" #include "GazeboError.hh" @@ -37,9 +38,10 @@ #include "OgreSimpleShape.hh" #include "OgreCreator.hh" - using namespace gazebo; +unsigned int OgreCreator::lightCounter = 0; + //////////////////////////////////////////////////////////////////////////////// // Constructor OgreCreator::OgreCreator() @@ -54,7 +56,7 @@ //////////////////////////////////////////////////////////////////////////////// // Create the basic shapes -void OgreCreator::CreateBasicShapes() +void OgreCreator::LoadBasicShapes() { // Create some basic shapes OgreSimpleShape::CreateSphere("unit_sphere",1.0, 32, 32); @@ -65,7 +67,7 @@ //////////////////////////////////////////////////////////////////////////////// // Create a plane -OgreVisual *OgreCreator::CreatePlane(XMLConfigNode *node, Entity *parent) +void OgreCreator::CreatePlane(XMLConfigNode *node, OgreVisual *parent) { Vector3 normal = node->GetVector3("normal",Vector3(0,1,0)); Vector2<double> size = node->GetVector2d("size",Vector2<double>(1000, 1000)); @@ -78,35 +80,113 @@ Vector3 perp = normal.GetPerpendicular(); Ogre::Plane plane(Ogre::Vector3(normal.x, normal.y, normal.z), 0); - - Ogre::MeshManager::getSingleton().createPlane(parent->GetUniqueName(), +//FIXME: only one plane per parent +//TODO:names and parents + Ogre::MeshManager::getSingleton().createPlane(parent->GetName() + "_PLANE", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, size.x, size.y, (int)segments.x, (int)segments.y, true,1, uvTile.x, uvTile.y, Ogre::Vector3(perp.x, perp.y, perp.z)); + + //OgreVisual *visual = new OgreVisual(parent); + parent->AttachMesh(parent->GetName() + "_PLANE"); + parent->SetMaterial(material); + parent->SetCastShadows(node->GetBool("castShadows",true,0)); - OgreVisual *visual = new OgreVisual(parent->GetVisualNode()); - visual->AttachMesh(parent->GetUniqueName()); - visual->SetMaterial(material); - visual->SetCastShadows(node->GetBool("castShadows",true,0)); - - return visual; + //return visual; } +void OgreCreator::CreateVisual(XMLConfigNode *node, OgreVisual *parent) +{ + std::ostringstream stream; + Pose3d pose; + Vector3 size; + Ogre::Vector3 meshSize; + Ogre::MovableObject *obj = NULL; + std::string meshName = node->GetString("mesh","",1); + // Read the desired position and rotation of the mesh + pose.pos = node->GetVector3("xyz", Vector3(0,0,0)); + pose.rot = node->GetRotation("rpy", Quatern()); + + try + { + // Create the entity + stream << parent->GetName() << "_ENTITY"; + obj = (Ogre::MovableObject*)parent->GetSceneNode()->getCreator()->createEntity(stream.str(), meshName); + } + catch (Ogre::Exception e) + { + std::cerr << "Ogre Error:" << e.getFullDescription() << "\n"; + gzthrow("Unable to create a mesh from " + meshName); + } + + // Set the pose of the scene node + parent->SetPose(pose); + + // Attach the entity to the node + if (obj) + { + parent->AttachObject(obj); + obj->setVisibilityFlags(GZ_ALL_CAMERA); + meshSize = obj->getBoundingBox().getSize(); + } + + // Get the desired size of the mesh + if (node->GetChild("size") != NULL) + size = node->GetVector3("size",Vector3(1,1,1)); + else + size = Vector3(meshSize.x, meshSize.y, meshSize.z); + + // Get and set teh desired scale of the mesh + if (node->GetChild("scale") != NULL) + { + Vector3 scale = node->GetVector3("scale",Vector3(1,1,1)); + parent->SetScale(scale); + } + else + { + parent->SetScale(Vector3(size.x/meshSize.x, size.y/meshSize.y, size.z/meshSize.z)); + } + + + // Set the material of the mesh + parent->SetMaterial(node->GetString("material",std::string(),1)); + + // Allow the mesh to cast shadows + parent->SetCastShadows(node->GetBool("castShadows",true,0)); + + parent->SetXML(node); +} + + //////////////////////////////////////////////////////////////////////////////// -/// Create a light source and attach it to the entity -void OgreCreator::CreateLight(XMLConfigNode *node, Entity *entity) +/// Create a light source and attach it to the visual node +/// Note that the properties here are not modified afterwards and thus, +/// we don't need a Light class. +void OgreCreator::CreateLight(XMLConfigNode *node, OgreVisual *parent) { Vector3 vec; double range,constant,linear,quad; + Ogre::Light *light; // Create the light - Ogre::Light *light(OgreAdaptor::Instance()->sceneMgr->createLight(entity->GetUniqueName())); - + std::ostringstream stream; + stream << parent->GetName() << "_LIGHT" << lightCounter; + lightCounter++; + try + { + light = OgreAdaptor::Instance()->sceneMgr->createLight(stream.str()); + } + catch (Ogre::Exception e) + { + gzthrow("Ogre Error:" << e.getFullDescription() << "\n" << \ + "Unable to create a light on " + parent->GetName()); + } + // Set the light type std::string lightType = node->GetString("type","point",0); if (lightType == "point") @@ -157,7 +237,7 @@ light->setSpotlightRange(Ogre::Radian(Ogre::Degree(vec.x)), Ogre::Radian(Ogre::Degree(vec.y)), vec.z); } - entity->GetVisualNode()->AttachObject(light); + parent->AttachObject(light); } Modified: code/gazebo/trunk/server/rendering/OgreCreator.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.hh 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/rendering/OgreCreator.hh 2008-06-05 11:01:41 UTC (rev 6475) @@ -55,15 +55,20 @@ /// \brief Destructor public: virtual ~OgreCreator(); - /// \brief Create some simple general shapes - public: static void CreateBasicShapes(); + /// \brief Load some simple shapes on the render engine + public: static void LoadBasicShapes(); - ///\brief Helper function to create a Plane - public: static OgreVisual *CreatePlane(XMLConfigNode *node, Entity *parent); + ///\brief Create a Plane + ///It adds itself to the Visual node parent, it will those change parent + ///properties if needed, to avoid this create a child visual node for the plane + public: static void CreatePlane(XMLConfigNode *node, OgreVisual *parent); + + ///\brief Create a visual entity + public: static void CreateVisual(XMLConfigNode *node, OgreVisual *parent); + + /// \brief Create a light source + public: static void CreateLight(XMLConfigNode *node, OgreVisual *parent); - /// \brief Create a light source and attach it to the entity - public: static void CreateLight(XMLConfigNode *node, Entity *entity); - /// \brief Helper function to create a camera public: static Ogre::Camera *CreateCamera(const std::string &name, double nearClip, double farClip, double hfov, Ogre::RenderTarget *renderTarget); @@ -77,6 +82,7 @@ public: static void CreateSky(XMLConfigNode *node); public: static void DrawGrid(); + private: static unsigned int lightCounter; /// \} Modified: code/gazebo/trunk/server/rendering/OgreVisual.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -47,7 +47,9 @@ this->sceneBlendType = Ogre::SBT_TRANSPARENT_ALPHA; // Create a unique name for the scene node + //FIXME: what if we add the capability to delete and add new children? stream << this->parentNode->getName() << "_VISUAL_" << this->parentNode->numChildren(); + // Create the scene node this->sceneNode = this->parentNode->createChildSceneNode( stream.str() ); @@ -67,7 +69,17 @@ } //////////////////////////////////////////////////////////////////////////////// +// Sets the XML we will save the data to +void OgreVisual::SetXML(XMLConfigNode *node) +{ + this->xmlNode=node; +} + + + +//////////////////////////////////////////////////////////////////////////////// // Load the visual +/* void OgreVisual::Load(XMLConfigNode *node) { std::ostringstream stream; @@ -133,6 +145,7 @@ // Allow the mesh to cast shadows this->SetCastShadows(node->GetBool("castShadows",true,0)); } +*/ void OgreVisual::Save() { @@ -141,7 +154,16 @@ //TODO: A lot of information! } + //////////////////////////////////////////////////////////////////////////////// +// Return an unique name for the Visual +std::string OgreVisual::GetName() const +{ + return this->sceneNode->getName(); +} + + +//////////////////////////////////////////////////////////////////////////////// /// Attach a renerable object to the visual void OgreVisual::AttachObject( Ogre::MovableObject *obj) { @@ -163,7 +185,7 @@ //////////////////////////////////////////////////////////////////////////////// /// Set the scale -void OgreVisual::SetScale( Vector3 scale ) +void OgreVisual::SetScale(const Vector3 &scale ) { Ogre::Vector3 vscale; vscale.x=scale.x; Modified: code/gazebo/trunk/server/rendering/OgreVisual.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreVisual.hh 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/rendering/OgreVisual.hh 2008-06-05 11:01:41 UTC (rev 6475) @@ -28,6 +28,7 @@ #define OGREVISUAL_HH #include <Ogre.h> +#include <string> #include "Pose3d.hh" #include "Quatern.hh" @@ -53,14 +54,18 @@ /// \brief Attach a mesh to this visual by name public: void AttachMesh( const std::string &meshName ); - /// \brief Load the visual - public: void Load(XMLConfigNode *node); + /// \brief Set the node we will save to. + public: void SetXML(XMLConfigNode *node); /// \brief Save the visual public: void Save(); + + /// \brief Return an unique name for this object + /// \return Unique name for the object + public: std::string GetName() const; /// \brief Set the scale - public: void SetScale( Vector3 scale ); + public: void SetScale( const Vector3 &scale ); /// \brief Get the scale public: Vector3 GetScale(); Added: code/gazebo/trunk/server/rendering/RenderEngine.cc =================================================================== --- code/gazebo/trunk/server/rendering/RenderEngine.cc (rev 0) +++ code/gazebo/trunk/server/rendering/RenderEngine.cc 2008-06-05 11:01:41 UTC (rev 6475) @@ -0,0 +1,51 @@ +/* + * Gazebo - Outdoor Multi-Robot Simulator + * Copyright (C) 2003 + * Nate Koenig & Andrew Howard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +/* Desc: Middleman between Rendering engine and Gazebo + * Author: Nate Koenig, Jordi Polo + * Date: 02 Jun 2008 + */ + +#include "RenderEngine.hh" + +using namespace gazebo; + +//////////////////////////////////////////////////////////////////////////////// +/// Constructor +RenderEngine::RenderEngine() +{ +} + +//////////////////////////////////////////////////////////////////////////////// +/// Destructor +RenderEngine::~RenderEngine() +{ +} + +double RenderEngine::GetUpdateRate() const +{ + return this->updateRate; +} + +std::string RenderEngine::GetType() const +{ + return this->type; +} + Added: code/gazebo/trunk/server/rendering/RenderEngine.hh =================================================================== --- code/gazebo/trunk/server/rendering/RenderEngine.hh (rev 0) +++ code/gazebo/trunk/server/rendering/RenderEngine.hh 2008-06-05 11:01:41 UTC (rev 6475) @@ -0,0 +1,81 @@ +/* + * Gazebo - Outdoor Multi-Robot Simulator + * Copyright (C) 2003 + * Nate Koenig & Andrew Howard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +/* Desc: Middleman between actual rendering engine and Gazebo + * Author: Nate Koenig, Jordi Polo + * Date: 02 Jun 2008 + */ + +#ifndef RENDERENGINE +#define RENDERENGINE + +#include <string> + +namespace gazebo +{ +/// \addtogroup gazebo_rendering +/// \{ + + +class XMLConfigNode; + +/// \brief Rendering engine for the simulation +class RenderEngine +{ + + /// \brief Constructor + public: RenderEngine(); + + /// \brief Destructor + public: virtual ~RenderEngine(); + + /// \brief Closes the present rendering engine, frees the resources + public: virtual void Close() = 0; + + /// \brief Default initialization. + /// Let the rendering engine create the window and rendering context + public: virtual void Init(XMLConfigNode *rootNode) = 0; + + /// \brief Save rendering engine settings + public: virtual void Save(XMLConfigNode *node) = 0; + + /// \brief Render a single frame + public: virtual void Render() = 0; + + /// \brief Resize the rendering window + public: virtual void ResizeWindow(unsigned int w, unsigned int h) = 0; + + /// \brief Gets the average frame per second rate achieved + public: virtual float GetAverageFPS() const = 0; + + /// \brief Gets the minimum time between renders, set by in the file to limit Framerate + public: double GetUpdateRate() const; + + /// \brief Gets the type (name) of this Rendering Engine + public: std::string GetType() const; + + protected: double updateRate; + protected: std::string type; + + +}; + +} +#endif Modified: code/gazebo/trunk/server/rendering/SConscript =================================================================== --- code/gazebo/trunk/server/rendering/SConscript 2008-06-05 06:29:49 UTC (rev 6474) +++ code/gazebo/trunk/server/rendering/SConscript 2008-06-05 11:01:41 UTC (rev 6475) @@ -1,10 +1,11 @@ #Import variable Import('env staticObjs sharedObjs headers') -sources = Split('OgreCreator.cc OgreAdaptor.cc OgreFrameListener.cc OgreDynamicRenderable.cc OgreDynamicLines.cc OgreSimpleShape.cc OgreHUD.cc MovableText.cc OgreVisual.cc') +sources = Split('RenderEngine.cc OgreCreator.cc OgreAdaptor.cc OgreFrameListener.cc OgreDynamicRenderable.cc OgreDynamicLines.cc OgreSimpleShape.cc OgreHUD.cc MovableText.cc OgreVisual.cc') headers.append( ['#/server/rendering/MovableText.hh', + '#/server/rendering/RenderEngine.hh', '#/server/rendering/OgreAdaptor.hh', '#/server/rendering/OgreCreator.hh', '#/server/rendering/OgreDynamicLines.hh', This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <na...@us...> - 2008-06-25 19:30:23
|
Revision: 6689 http://playerstage.svn.sourceforge.net/playerstage/?rev=6689&view=rev Author: natepak Date: 2008-06-25 19:30:22 -0700 (Wed, 25 Jun 2008) Log Message: ----------- Reimplementation of gui-less gazebo Modified Paths: -------------- code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/Simulator.hh code/gazebo/trunk/server/main.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/OgreAdaptor.hh code/gazebo/trunk/server/rendering/OgreCreator.cc code/gazebo/trunk/server/rendering/OgreCreator.hh Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-06-25 22:23:57 UTC (rev 6688) +++ code/gazebo/trunk/server/Simulator.cc 2008-06-26 02:30:22 UTC (rev 6689) @@ -64,7 +64,8 @@ userPause(false), userStep(false), userStepInc(false), - userQuit(false) + userQuit(false), + guiEnabled(true) { } @@ -133,30 +134,35 @@ OgreAdaptor::Instance()->Load(rootNode); // Create and initialize the Gui - try + if (this->guiEnabled) { - XMLConfigNode *childNode = rootNode->GetChild("gui"); - - if (childNode) + try { - int width = childNode->GetTupleInt("size",0,640); - int height = childNode->GetTupleInt("size",1,480); - int x = childNode->GetTupleInt("pos",0,0); - int y = childNode->GetTupleInt("pos",1,0); - std::string type = childNode->GetString("type","fltk",1); + XMLConfigNode *childNode = rootNode->GetChild("gui"); - gzmsg(1) << "Creating GUI:\n\tType[" << type - << "] Pos[" << x << " " << y - << "] Size[" << width << " " << height << "]\n"; + if (childNode) + { + int width = childNode->GetTupleInt("size",0,640); + int height = childNode->GetTupleInt("size",1,480); + int x = childNode->GetTupleInt("pos",0,0); + int y = childNode->GetTupleInt("pos",1,0); + std::string type = childNode->GetString("type","fltk",1); - // Create the GUI - this->gui = new Gui(x, y, width, height, type+"::Gazebo"); + gzmsg(1) << "Creating GUI:\n\tType[" << type + << "] Pos[" << x << " " << y + << "] Size[" << width << " " << height << "]\n"; + + // Create the GUI + this->gui = new Gui(x, y, width, height, type+"::Gazebo"); + } } + catch (GazeboError e) + { + gzthrow( "Error loading the GUI\n" << e); + } } - catch (GazeboError e) - { - gzthrow( "Error loading the GUI\n" << e); - } + else + this->gui = NULL; //Initialize RenderEngine try @@ -192,7 +198,6 @@ /// Initialize the simulation int Simulator::Init() { - this->startTime = this->GetWallTime(); //Initialize the world @@ -424,3 +429,18 @@ } +//////////////////////////////////////////////////////////////////////////////// +// True if the gui is to be used +void Simulator::SetGuiEnabled( bool enabled ) +{ + this->guiEnabled = enabled; +} + +//////////////////////////////////////////////////////////////////////////////// +/// Return true if the gui is enabled +bool Simulator::GetGuiEnabled() const +{ + return this->guiEnabled; +} + + Modified: code/gazebo/trunk/server/Simulator.hh =================================================================== --- code/gazebo/trunk/server/Simulator.hh 2008-06-25 22:23:57 UTC (rev 6688) +++ code/gazebo/trunk/server/Simulator.hh 2008-06-26 02:30:22 UTC (rev 6689) @@ -142,6 +142,12 @@ /// \brief Set whether the step has incremented public: void SetUserStepInc(bool step); + /// \brief True if the gui is to be used + public: void SetGuiEnabled( bool enabled ); + + /// \brief Return true if the gui is enabled + public: bool GetGuiEnabled() const; + ///pointer to the XML Data private: XMLConfig *xmlFile; @@ -190,6 +196,9 @@ //The user has somewhat signaled the end of the program private: bool userQuit; + /// True if the GUI is enabled + private: bool guiEnabled; + //Singleton implementation private: friend class DestroyerT<Simulator>; private: friend class SingletonT<Simulator>; Modified: code/gazebo/trunk/server/main.cc =================================================================== --- code/gazebo/trunk/server/main.cc 2008-06-25 22:23:57 UTC (rev 6688) +++ code/gazebo/trunk/server/main.cc 2008-06-26 02:30:22 UTC (rev 6689) @@ -114,6 +114,7 @@ const char *optLogFileName = NULL; unsigned int optServerId = 0; bool optServerForce = true; +bool optGuiEnabled = true; double optTimeout = -1; unsigned int optMsgLevel = 1; int optTimeControl = 1; @@ -129,6 +130,7 @@ fprintf(stderr, " -f : Force usage of the server id (use with caution)\n"); fprintf(stderr, " -d <-1:9> : Verbose mode: -1 = none, 0 = critical (default), 9 = all)\n"); fprintf(stderr, " -t <sec> : Timeout and quit after <sec> seconds\n"); + fprintf(stderr, " -g : Run without a GUI\n"); fprintf(stderr, " -l <logfile> : Log to indicated file.\n"); fprintf(stderr, " -n : Do not do any time control\n"); fprintf(stderr, " <worldfile> : load the the indicated world file\n"); @@ -153,7 +155,7 @@ { FILE *tmpFile; int ch; - char *flags = (char*)("l:hd:s:fg:xt:nq"); + char *flags = (char*)("l:hd:s:fgxt:nq"); // Get letter options while ((ch = getopt(argc, argv, flags)) != -1) @@ -184,10 +186,15 @@ // Timeout and quit after x seconds optTimeout = atof(optarg); break; + case 'n': optTimeControl = 0; break; + case 'g': + optGuiEnabled = false; + break; + case 'h': default: PrintUsage(); @@ -247,6 +254,8 @@ return -1; } + gazebo::Simulator::Instance()->SetGuiEnabled( optGuiEnabled ); + //Load the simulator try { Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-06-25 22:23:57 UTC (rev 6688) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-06-26 02:30:22 UTC (rev 6689) @@ -81,6 +81,13 @@ // GZ_DELETE (this->sceneMgr) //this objects seems to be destroyed by root // GZ_DELETE (this->viewport) + if (this->dummyDisplay) + { + glXDestroyContext(this->dummyDisplay, this->dummyContext); + XDestroyWindow(this->dummyDisplay, this->dummyWindowId); + XCloseDisplay(this->dummyDisplay); + } + } //////////////////////////////////////////////////////////////////////////////// @@ -156,6 +163,32 @@ node = rootNode->GetChild("ogre", "rendering"); + /// Create a dummy rendering context if the GUI is disabled + if (!Simulator::Instance()->GetGuiEnabled()) + { + this->dummyDisplay = XOpenDisplay(0); + if (!this->dummyDisplay) + gzthrow(std::string("Can't open display: ") + XDisplayName(0) + "\n"); + + int screen = DefaultScreen(this->dummyDisplay); + + int attribList[8] = {GLX_RGBA, GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, None}; + + this->dummyVisual = glXChooseVisual(this->dummyDisplay, screen, + (int *)attribList); + + this->dummyWindowId = XCreateSimpleWindow(this->dummyDisplay, + RootWindow(this->dummyDisplay, screen), 0, 0, 1, 1, 0, 0, 0); + + this->dummyContext = glXCreateContext(this->dummyDisplay, + this->dummyVisual, NULL, 1); + + glXMakeCurrent(this->dummyDisplay, this->dummyWindowId, this->dummyContext); + OgreCreator::CreateWindow((long)this->dummyDisplay, screen, + (long)this->dummyWindowId,1,1); + } + // Set default mipmap level (NB some APIs ignore this) Ogre::TextureManager::getSingleton().setDefaultNumMipmaps( 5 ); Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-06-25 22:23:57 UTC (rev 6688) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-06-26 02:30:22 UTC (rev 6689) @@ -29,6 +29,7 @@ #include <X11/Xlib.h> #include <X11/Xutil.h> +#include <GL/glx.h> #include "SingletonT.hh" @@ -87,9 +88,6 @@ /// \brief Save Ogre settings public: void Save(XMLConfigNode *node); - /// \brief Initialize Ogre Rendering engine - public: void Init(Display *display, XVisualInfo *visual, Window windowId, int width, int height); - /// \brief Get the desired update rate public: double GetUpdateRate(); @@ -135,22 +133,21 @@ private: friend class DestroyerT<OgreAdaptor>; private: friend class SingletonT<OgreAdaptor>; - + + /// ID for a dummy window. Used for gui-less operation + protected: Window dummyWindowId; + + /// Pointer to the dummy Xvisual.Used for gui-less operation + protected: XVisualInfo *dummyVisual; + + /// Pointer to the dummy display.Used for gui-less operation + protected: Display *dummyDisplay; + + /// GLX context used to render the scenes.Used for gui-less operation + protected: GLXContext dummyContext; }; - /*/// \brief - class OgreGLXWindowInterface - { - public: virtual ~OgreGLXWindowInterface() = 0; - - // Call this with true when the window is mapped/visible, false when the window is unmapped/invisible - public: virtual void exposed(bool active) = 0; - - // Call this to notify the window was resized - public: virtual void resized(size_t width, size_t height) = 0; - }; - */ - + /// \} } Modified: code/gazebo/trunk/server/rendering/OgreCreator.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-06-25 22:23:57 UTC (rev 6688) +++ code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-06-26 02:30:22 UTC (rev 6689) @@ -23,8 +23,9 @@ * Date: 27 Dec 2007 */ +#include <Ogre.h> + #include <math.h> -#include <Ogre.h> #include <iostream> #include <X11/Xlib.h> #include <X11/Xutil.h> @@ -490,30 +491,32 @@ // Create a window for Ogre Ogre::RenderWindow *OgreCreator::CreateWindow(Fl_Window *flWindow, unsigned int width, unsigned int height) { + if (flWindow) + return OgreCreator::CreateWindow( (long)fl_display, fl_visual->screen, + (long)(Fl_X::i(flWindow)->xid), width, height); + else + return NULL; +} + +//////////////////////////////////////////////////////////////////////////////// +// Create a window for Ogre +Ogre::RenderWindow *OgreCreator::CreateWindow(long display, int screen, + long winId, unsigned int width, + unsigned int height) +{ Ogre::StringVector paramsVector; Ogre::NameValuePairList params; Ogre::RenderWindow *window = NULL; - if (flWindow) - { - Display *display; - int screen; - Window winId; + params["parentWindowHandle"] = Ogre::StringConverter::toString(display) + ":" + Ogre::StringConverter::toString(screen) + ":" + Ogre::StringConverter::toString(winId); - display = fl_display; - screen = fl_visual->screen; - winId = Fl_X::i(flWindow)->xid; + std::ostringstream stream; + stream << "OgreWindow(" << windowCounter++ << ")"; - params["parentWindowHandle"] = Ogre::StringConverter::toString((long)display) + ":" + Ogre::StringConverter::toString(screen) + ":" + Ogre::StringConverter::toString((long)winId); + window = OgreAdaptor::Instance()->root->createRenderWindow( stream.str(), width, height, false, ¶ms); - std::ostringstream stream; - stream << "OgreWindow(" << windowCounter++ << ")"; + window->setActive(true); + window->setAutoUpdated(true); - window = OgreAdaptor::Instance()->root->createRenderWindow( stream.str(), width, height, false, ¶ms); - - window->setActive(true); - window->setAutoUpdated(true); - } - return window; } Modified: code/gazebo/trunk/server/rendering/OgreCreator.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.hh 2008-06-25 22:23:57 UTC (rev 6688) +++ code/gazebo/trunk/server/rendering/OgreCreator.hh 2008-06-26 02:30:22 UTC (rev 6689) @@ -26,6 +26,10 @@ #ifndef OGRECREATOR #define OGRECREATOR + +//#include <X11/Xlib.h> +//#include <X11/Xutil.h> + #include <string> namespace Ogre @@ -87,6 +91,14 @@ public: static Ogre::RenderWindow *CreateWindow(Fl_Window *flWindow, unsigned int width, unsigned int height); + + + /// \brief Create a window for Ogre + public: static Ogre::RenderWindow *CreateWindow(long display, + int screen, + long winId, + unsigned int width, + unsigned int height); /// \brief Draw the uniform grid pattern public: static void DrawGrid(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |