Revision: 8474
http://playerstage.svn.sourceforge.net/playerstage/?rev=8474&view=rev
Author: natepak
Date: 2009-12-18 17:26:23 +0000 (Fri, 18 Dec 2009)
Log Message:
-----------
Improved speed.
Modified Paths:
--------------
code/gazebo/trunk/server/Model.cc
code/gazebo/trunk/server/Model.hh
code/gazebo/trunk/server/Simulator.cc
code/gazebo/trunk/server/World.cc
code/gazebo/trunk/server/controllers/Controller.cc
code/gazebo/trunk/server/gui/Sidebar.cc
code/gazebo/trunk/server/gui/Sidebar.hh
code/gazebo/trunk/server/physics/Body.cc
code/gazebo/trunk/server/physics/Geom.cc
code/gazebo/trunk/server/physics/Geom.hh
code/gazebo/trunk/server/physics/ode/ODEPhysics.cc
code/gazebo/trunk/server/sensors/CMakeLists.txt
code/gazebo/trunk/server/sensors/Sensor.cc
code/gazebo/trunk/server/sensors/Sensor.hh
code/gazebo/trunk/server/sensors/SensorFactory.cc
code/gazebo/trunk/server/sensors/contact/ContactSensor.cc
code/gazebo/trunk/server/sensors/ray/RaySensor.cc
Added Paths:
-----------
code/gazebo/trunk/server/sensors/SensorManager.cc
code/gazebo/trunk/server/sensors/SensorManager.hh
Modified: code/gazebo/trunk/server/Model.cc
===================================================================
--- code/gazebo/trunk/server/Model.cc 2009-12-18 00:04:10 UTC (rev 8473)
+++ code/gazebo/trunk/server/Model.cc 2009-12-18 17:26:23 UTC (rev 8474)
@@ -395,7 +395,7 @@
if (this->controllers.size() == 0 && this->IsStatic())
return;
- DiagnosticTimer timer("Model[" + this->GetName() + "] Update ");
+ //DiagnosticTimer timer("Model[" + this->GetName() + "] Update ");
#ifdef USE_THREADPOOL
World::Instance()->GetPhysicsEngine()->InitForThread();
@@ -407,8 +407,10 @@
Pose3d bodyPose, newPose, oldPose;
+ //this->updateSignal();
+
{
- DiagnosticTimer timer("Model[" + this->GetName() + "] Bodies Update ");
+ //DiagnosticTimer timer("Model[" + this->GetName() + "] Bodies Update ");
for (bodyIter=this->bodies.begin();
bodyIter!=this->bodies.end(); bodyIter++)
@@ -426,8 +428,7 @@
}
{
- DiagnosticTimer timer("Model[" + this->GetName() + "] Controllers Update
");
-
+ //DiagnosticTimer timer("Model[" + this->GetName() + "] Controllers Update
");
for (contIter=this->controllers.begin();
contIter!=this->controllers.end(); contIter++)
{
@@ -443,12 +444,15 @@
}
+ if (World::Instance()->GetShowJoints())
{
- DiagnosticTimer timer("Model[" + this->GetName() + "] Joints Update ");
- for (jointIter = this->joints.begin(); jointIter != this->joints.end();
jointIter++)
+ //DiagnosticTimer timer("Model[" + this->GetName() + "] Joints Update ");
+ for (jointIter = this->joints.begin();
+ jointIter != this->joints.end(); jointIter++)
{
#ifdef USE_THREADPOOL
-
World::Instance()->threadPool->schedule(boost::bind(&Joint::Update,*jointIter));
+ World::Instance()->threadPool->schedule(
+ boost::bind(&Joint::Update,*jointIter));
#else
(*jointIter)->Update();
#endif
@@ -483,7 +487,7 @@
}*/
{
- DiagnosticTimer timer("Model[" + this->GetName() + "] Children Update ");
+ //DiagnosticTimer timer("Model[" + this->GetName() + "] Children Update ");
this->UpdateChild();
}
}
@@ -580,51 +584,6 @@
}
////////////////////////////////////////////////////////////////////////////////
-// Set the current pose
-/*void Model::SetPose(const Pose3d &setPose)
-{
- std::cout << "Set model[" << this->GetName() << "] Pose to["
<<setPose<<"]\n";
- Body *body;
- std::map<std::string, Body* >::iterator iter;
-
- Pose3d newPose, origPose;
-
- origPose = this->pose;
- this->pose = setPose;
-
- for (iter=this->bodies.begin(); iter!=this->bodies.end(); iter++)
- {
- if (!iter->second)
- continue;
-
- body = iter->second;
-
- // Compute the pose relative to the model
- newPose = body->GetPose() - origPose;
-
- // Compute the new pose
- newPose += this->pose;
-
- body->SetPose(newPose);
- }
-
- // Update the child models as well
- std::vector<Entity*>::iterator citer;
- for (citer = this->children.begin(); citer != this->children.end(); citer++)
- {
- Model *childModel = dynamic_cast<Model*>(*citer);
- if (childModel)
- {
- newPose = childModel->GetPose() - origPose;
- newPose += this->pose;
-
- childModel->SetPose(newPose);
- }
- }
-}*/
-
-
-////////////////////////////////////////////////////////////////////////////////
/// Set the linear velocity of the model
void Model::SetLinearVel( const Vector3 &vel )
{
Modified: code/gazebo/trunk/server/Model.hh
===================================================================
--- code/gazebo/trunk/server/Model.hh 2009-12-18 00:04:10 UTC (rev 8473)
+++ code/gazebo/trunk/server/Model.hh 2009-12-18 17:26:23 UTC (rev 8474)
@@ -29,6 +29,7 @@
//#include <python2.4/Python.h>
#include <boost/any.hpp>
+#include <boost/signal.hpp>
#include <map>
#include <string>
#include <vector>
@@ -203,6 +204,13 @@
/// \brief Get the list of interfaces e.g
"pioneer2dx_model1::laser::laser_iface0->laser"
public: void GetModelInterfaceNames(std::vector<std::string>& list) const;
+ /// \brief Connect a boost::slot the the model's update signal
+ public: template<typename T>
+ void ConnectUpdateSignal( T subscriber )
+ {
+ updateSignal.connect(subscriber);
+ }
+
/// \brief Load a body helper function
/// \param node XML Configuration node
private: void LoadBody(XMLConfigNode *node);
@@ -263,10 +271,13 @@
private: GraphicsIfaceHandler *graphicsHandler;
+ private: boost::signal<void ()> updateSignal;
+
/* private: PyObject *pName;
private: PyObject *pModule;
private: PyObject *pFuncUpdate;
*/
+
};
/// \}
}
Modified: code/gazebo/trunk/server/Simulator.cc
===================================================================
--- code/gazebo/trunk/server/Simulator.cc 2009-12-18 00:04:10 UTC (rev
8473)
+++ code/gazebo/trunk/server/Simulator.cc 2009-12-18 17:26:23 UTC (rev
8474)
@@ -333,7 +333,7 @@
{
this->state = RUN;
- DiagnosticTimer timer("--------------------------- START
Simulator::MainLoop() --------------------------");
+ //DiagnosticTimer timer("--------------------------- START
Simulator::MainLoop() --------------------------");
Time currTime = 0;
Time lastTime = 0;
struct timespec timeSpec;
@@ -630,7 +630,7 @@
while (!this->userQuit)
{
- DiagnosticTimer timer("PhysicsLoop Timer ");
+ //DiagnosticTimer timer("PhysicsLoop Timer ");
currTime = this->GetRealTime();
@@ -687,7 +687,7 @@
nanosleep(&req, &rem);
{
- DiagnosticTimer timer("PhysicsLoop UpdateSimIfaces ");
+ //DiagnosticTimer timer("PhysicsLoop UpdateSimIfaces ");
// Process all incoming messages from simiface
world->UpdateSimulationIface();
Modified: code/gazebo/trunk/server/World.cc
===================================================================
--- code/gazebo/trunk/server/World.cc 2009-12-18 00:04:10 UTC (rev 8473)
+++ code/gazebo/trunk/server/World.cc 2009-12-18 17:26:23 UTC (rev 8474)
@@ -39,6 +39,7 @@
#include "PhysicsFactory.hh"
#include "XMLConfig.hh"
#include "Model.hh"
+#include "SensorManager.hh"
#include "Simulator.hh"
#include "gazebo.h"
#include "World.hh"
@@ -325,7 +326,8 @@
{
- DiagnosticTimer timer("World::Update Models");
+ //DiagnosticTimer timer("World::Update Models");
+
// Update all the models
std::vector< Model* >::iterator miter;
for (miter=this->models.begin(); miter!=this->models.end(); miter++)
@@ -336,17 +338,21 @@
(*miter)->Update();
#endif
}
- }
#ifdef USE_THREADPOOL
this->threadPool->wait();
#endif
+ }
+
+ /// Update all the sensors
+ SensorManager::Instance()->Update();
+
if (!Simulator::Instance()->IsPaused() &&
Simulator::Instance()->GetPhysicsEnabled())
{
{
- DiagnosticTimer timer("World::Update Physics");
+ //DiagnosticTimer timer("World::Update Physics");
this->physicsEngine->UpdatePhysics();
}
Modified: code/gazebo/trunk/server/controllers/Controller.cc
===================================================================
--- code/gazebo/trunk/server/controllers/Controller.cc 2009-12-18 00:04:10 UTC
(rev 8473)
+++ code/gazebo/trunk/server/controllers/Controller.cc 2009-12-18 17:26:23 UTC
(rev 8474)
@@ -195,26 +195,19 @@
{
if (this->IsConnected() || **this->alwaysOnP)
{
- DiagnosticTimer timer("Controller[" + this->GetName() +"] Update Timer");
+ //DiagnosticTimer timer("Controller[" + this->GetName() +"] Update Timer");
+
// round time difference to this->physicsEngine->GetStepTime()
Time physics_dt = World::Instance()->GetPhysicsEngine()->GetStepTime();
- // if (this->GetName() == std::string("p3d_base_controller"))
- // std::cout << " sim update: " << this->GetName()
- // << " , " << Simulator::Instance()->GetSimTime() - lastUpdate
- // << " , " << lastUpdate
- // << " , " << updatePeriod
- // << " i1 " <<
round((Simulator::Instance()->GetSimTime()-lastUpdate)/physics_dt)
- // << " i2 " << round(updatePeriod/physics_dt)
- // << std::endl;
- timer.Start();
+ //timer.Start();
Time simTime = Simulator::Instance()->GetSimTime();
if ((simTime-lastUpdate-updatePeriod)/physics_dt >= 0)
{
this->UpdateChild();
lastUpdate = Simulator::Instance()->GetSimTime();
- timer.Report("Update() dt");
+ //timer.Report("Update() dt");
}
}
}
Modified: code/gazebo/trunk/server/gui/Sidebar.cc
===================================================================
--- code/gazebo/trunk/server/gui/Sidebar.cc 2009-12-18 00:04:10 UTC (rev
8473)
+++ code/gazebo/trunk/server/gui/Sidebar.cc 2009-12-18 17:26:23 UTC (rev
8474)
@@ -33,6 +33,7 @@
#include <FL/Fl_Value_Slider.H>
#include <boost/lexical_cast.hpp>
+#include <boost/bind.hpp>
#include "Gui.hh"
#include "World.hh"
@@ -107,6 +108,10 @@
this->resizable( this->entityBrowser );
this->resizable( this->paramBrowser );
+
+
+ World::Instance()->ConnectAddEntitySignal(
+ boost::bind(&Sidebar::AddEntityToBrowser, this, _1) );
}
////////////////////////////////////////////////////////////////////////////////
@@ -143,11 +148,11 @@
std::map<std::string, Body*>::const_iterator iter;
std::map<std::string, Geom*>::const_iterator giter;
- for (unsigned int i=0; i < model->GetJointCount(); i++)
+ /*for (unsigned int i=0; i < model->GetJointCount(); i++)
{
Joint *joint = model->GetJoint(i);
this->jointChoice->add(joint->GetName().c_str(),0,0);
- }
+ }*/
for (iter = bodies->begin(); iter != bodies->end(); iter++)
{
@@ -390,12 +395,17 @@
std::vector<Model*> models = World::Instance()->GetModels();
for (iter = models.begin(); iter != models.end(); iter++)
- {
- this->entityBrowser->add( (*iter)->GetName().c_str() );
- }
+ this->AddEntityToBrowser((*iter));
}
////////////////////////////////////////////////////////////////////////////////
+// Add an entity to the browser
+void Sidebar::AddEntityToBrowser(Entity *entity)
+{
+ this->entityBrowser->add( entity->GetName().c_str() );
+}
+
+////////////////////////////////////////////////////////////////////////////////
/// Joint choice callback
void Sidebar::JointChoiceCB( Fl_Widget *w, void *data )
{
Modified: code/gazebo/trunk/server/gui/Sidebar.hh
===================================================================
--- code/gazebo/trunk/server/gui/Sidebar.hh 2009-12-18 00:04:10 UTC (rev
8473)
+++ code/gazebo/trunk/server/gui/Sidebar.hh 2009-12-18 17:26:23 UTC (rev
8474)
@@ -53,6 +53,9 @@
/// \brief Update the toolbar data
public: void Update();
+ /// \brief Add an entity to the browser
+ public: void AddEntityToBrowser(Entity *model);
+
/// \brief Callback for the parameter browser
public: static void ParamBrowserCB( Fl_Widget * w, void *data);
Modified: code/gazebo/trunk/server/physics/Body.cc
===================================================================
--- code/gazebo/trunk/server/physics/Body.cc 2009-12-18 00:04:10 UTC (rev
8473)
+++ code/gazebo/trunk/server/physics/Body.cc 2009-12-18 17:26:23 UTC (rev
8474)
@@ -27,6 +27,7 @@
#include <sstream>
#include <float.h>
+#include "SensorManager.hh"
#include "XMLConfig.hh"
#include "Model.hh"
#include "GazeboMessage.hh"
@@ -107,12 +108,7 @@
this->geoms.clear();
for (siter = this->sensors.begin(); siter != this->sensors.end(); siter++)
- {
- if (*siter)
- delete (*siter);
- (*siter) = NULL;
- }
- this->sensors.clear();
+ SensorManager::Instance()->RemoveSensor(*siter);
if (this->cgVisual)
delete this->cgVisual;
@@ -206,6 +202,8 @@
}
World::Instance()->RegisterBody(this);
+
+ //this->GetModel()->ConnectUpdateSignal( boost::bind(&Body::Update, this) );
}
////////////////////////////////////////////////////////////////////////////////
@@ -245,11 +243,8 @@
void Body::Fini()
{
std::vector< Sensor* >::iterator siter;
-
for (siter = this->sensors.begin(); siter != this->sensors.end(); siter++)
- {
(*siter)->Fini();
- }
}
////////////////////////////////////////////////////////////////////////////////
@@ -336,11 +331,6 @@
if (this->geoms.size()==0 || **this->turnGravityOffP)
this->SetGravityMode(false);
- std::vector< Sensor* >::iterator siter;
-
- for (siter = this->sensors.begin(); siter != this->sensors.end(); siter++)
- (*siter)->Init();
-
// global-inertial damping is implemented in ode svn trunk
if(this->GetId() && this->dampingFactorP->GetValue() > 0)
{
@@ -348,6 +338,10 @@
this->SetAngularDamping(**this->dampingFactorP);
}
+ std::vector< Sensor* >::iterator siter;
+ for (siter = this->sensors.begin(); siter != this->sensors.end(); siter++)
+ (*siter)->Init();
+
this->linearAccel.Set(0,0,0);
this->angularAccel.Set(0,0,0);
@@ -393,14 +387,12 @@
// Update the body
void Body::Update()
{
- DiagnosticTimer timer("Body[" + this->GetName() +"] Update");
+ //DiagnosticTimer timer("Body[" + this->GetName() +"] Update");
#ifdef USE_THREADPOOL
// If calling Body::Update in threadpool
World::Instance()->GetPhysicsEngine()->InitForThread();
#endif
-
- std::vector< Sensor* >::iterator sensorIter;
std::map< std::string, Geom* >::iterator geomIter;
Vector3 vel;
Vector3 avel;
@@ -412,7 +404,7 @@
this->SetTorque(this->angularAccel);
{
- DiagnosticTimer timer("Body[" + this->GetName() +"] Update Geoms");
+ //DiagnosticTimer timer("Body[" + this->GetName() +"] Update Geoms");
for (geomIter=this->geoms.begin();
geomIter!=this->geoms.end(); geomIter++)
@@ -424,21 +416,6 @@
#endif
}
}
-
- {
- DiagnosticTimer timer("Body[" + this->GetName() +"] Update Sensors");
-
- for (sensorIter=this->sensors.begin();
- sensorIter!=this->sensors.end(); sensorIter++)
- {
-#ifdef USE_THREADPOOL
- World::Instance()->threadpool->schedule(boost::bind(&Sensor::Update,
(sensorIter)));
-#else
- (*sensorIter)->Update();
-#endif
- }
- }
-
}
////////////////////////////////////////////////////////////////////////////////
Modified: code/gazebo/trunk/server/physics/Geom.cc
===================================================================
--- code/gazebo/trunk/server/physics/Geom.cc 2009-12-18 00:04:10 UTC (rev
8473)
+++ code/gazebo/trunk/server/physics/Geom.cc 2009-12-18 17:26:23 UTC (rev
8474)
@@ -61,6 +61,8 @@
this->shape = NULL;
+ this->contactsEnabled = false;
+
Param::Begin(&this->parameters);
this->massP = new ParamT<double>("mass",0.001,0);
this->massP->Callback( &Geom::SetMass, this);
@@ -421,9 +423,26 @@
}
////////////////////////////////////////////////////////////////////////////////
+// Turn contact recording on or off
+void Geom::SetContactsEnabled(bool enable)
+{
+ this->contactsEnabled = enable;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Return true of contact recording is on
+bool Geom::GetContactsEnabled() const
+{
+ return this->contactsEnabled;
+}
+
+////////////////////////////////////////////////////////////////////////////////
/// Add an occurance of a contact to this geom
void Geom::AddContact(const Contact &contact)
{
+ if (!this->contactsEnabled)
+ return;
+
if (this->GetType() == Shape::RAY || this->GetType() == Shape::PLANE)
return;
Modified: code/gazebo/trunk/server/physics/Geom.hh
===================================================================
--- code/gazebo/trunk/server/physics/Geom.hh 2009-12-18 00:04:10 UTC (rev
8473)
+++ code/gazebo/trunk/server/physics/Geom.hh 2009-12-18 17:26:23 UTC (rev
8474)
@@ -147,6 +147,12 @@
/// \brief Get the attached shape
public: Shape *GetShape() const;
+ /// \brief Turn contact recording on or off
+ public: void SetContactsEnabled(bool enable);
+
+ /// \brief Return true of contact recording is on
+ public: bool GetContactsEnabled() const;
+
/// \brief Add an occurance of a contact to this geom
public: void AddContact(const Contact &contact);
@@ -206,6 +212,8 @@
protected: Shape *shape;
+ private: bool contactsEnabled;
+
public: boost::signal< void (const Contact &)> contactSignal;
};
Modified: code/gazebo/trunk/server/physics/ode/ODEPhysics.cc
===================================================================
--- code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2009-12-18 00:04:10 UTC
(rev 8473)
+++ code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2009-12-18 17:26:23 UTC
(rev 8474)
@@ -515,25 +515,31 @@
self->contactGroup, &contact);
// Store the contact info
- (*self->contactFeedbackIter).contact.depths.push_back(
- contact.geom.depth);
- (*self->contactFeedbackIter).contact.positions.push_back(
- Vector3(contact.geom.pos[0], contact.geom.pos[1],
- contact.geom.pos[2]) );
- (*self->contactFeedbackIter).contact.normals.push_back(
- Vector3(contact.geom.normal[0], contact.geom.normal[1],
- contact.geom.normal[2]) );
- (*self->contactFeedbackIter).contact.time =
- Simulator::Instance()->GetSimTime();
- dJointSetFeedback(c, &((*self->contactFeedbackIter).feedbacks[i]));
+ if (geom1->GetContactsEnabled() ||
+ geom2->GetContactsEnabled())
+ {
+ (*self->contactFeedbackIter).contact.depths.push_back(
+ contact.geom.depth);
+ (*self->contactFeedbackIter).contact.positions.push_back(
+ Vector3(contact.geom.pos[0], contact.geom.pos[1],
+ contact.geom.pos[2]) );
+ (*self->contactFeedbackIter).contact.normals.push_back(
+ Vector3(contact.geom.normal[0], contact.geom.normal[1],
+ contact.geom.normal[2]) );
+ (*self->contactFeedbackIter).contact.time =
+ Simulator::Instance()->GetSimTime();
+ dJointSetFeedback(c, &((*self->contactFeedbackIter).feedbacks[i]));
+ }
dJointAttach (c,b1,b2);
}
- self->contactFeedbackIter++;
- if (self->contactFeedbackIter == self->contactFeedbacks.end())
- self->contactFeedbacks.resize( self->contactFeedbacks.size() + 100);
-
+ if (geom1->GetContactsEnabled() || geom2->GetContactsEnabled())
+ {
+ self->contactFeedbackIter++;
+ if (self->contactFeedbackIter == self->contactFeedbacks.end())
+ self->contactFeedbacks.resize( self->contactFeedbacks.size() + 100);
+ }
}
}
}
Modified: code/gazebo/trunk/server/sensors/CMakeLists.txt
===================================================================
--- code/gazebo/trunk/server/sensors/CMakeLists.txt 2009-12-18 00:04:10 UTC
(rev 8473)
+++ code/gazebo/trunk/server/sensors/CMakeLists.txt 2009-12-18 17:26:23 UTC
(rev 8474)
@@ -8,10 +8,12 @@
SET (sources Sensor.cc
SensorFactory.cc
+ SensorManager.cc
)
SET (headers Sensor.hh
SensorFactory.hh
+ SensorManager.hh
)
#ADD_LIBRARY(gazebo_sensors STATIC ${gazebosensor_sources} ${sources})
Modified: code/gazebo/trunk/server/sensors/Sensor.cc
===================================================================
--- code/gazebo/trunk/server/sensors/Sensor.cc 2009-12-18 00:04:10 UTC (rev
8473)
+++ code/gazebo/trunk/server/sensors/Sensor.cc 2009-12-18 17:26:23 UTC (rev
8474)
@@ -49,6 +49,9 @@
this->controller = NULL;
this->active = true;
+ this->world = World::Instance();
+ this->simulator = Simulator::Instance();
+
Param::Begin(&this->parameters);
this->updateRateP = new ParamT<double>("updateRate", 0, 0);
Param::End();
@@ -119,20 +122,19 @@
/// Update the sensor
void Sensor::Update()
{
- DiagnosticTimer timer("Sensor[" + this->GetName() + "] Update");
+ //DiagnosticTimer timer("Sensor[" + this->GetName() + "] Update");
- Time physics_dt = World::Instance()->GetPhysicsEngine()->GetStepTime();
- if
(((Simulator::Instance()->GetSimTime()-this->lastUpdate-this->updatePeriod)/physics_dt)
>= 0)
+ Time physics_dt = this->world->GetPhysicsEngine()->GetStepTime();
+
+ if (((this->simulator->GetSimTime() - this->lastUpdate -
this->updatePeriod)/physics_dt) >= 0)
{
this->UpdateChild();
- this->lastUpdate = Simulator::Instance()->GetSimTime();
+ this->lastUpdate = this->simulator->GetSimTime();
}
// update any controllers that are children of sensors, e.g. ros_bumper
if (this->controller)
- {
this->controller->Update();
- }
}
////////////////////////////////////////////////////////////////////////////////
Modified: code/gazebo/trunk/server/sensors/Sensor.hh
===================================================================
--- code/gazebo/trunk/server/sensors/Sensor.hh 2009-12-18 00:04:10 UTC (rev
8473)
+++ code/gazebo/trunk/server/sensors/Sensor.hh 2009-12-18 17:26:23 UTC (rev
8474)
@@ -35,6 +35,8 @@
{
class XMLConfigNode;
class Body;
+ class World;
+ class Simulator;
class Controller;
/// \addtogroup gazebo_sensor
@@ -100,6 +102,8 @@
/// The body this sensor is attached to
protected: Body *body;
+ protected: World *world;
+ protected: Simulator *simulator;
/// \brief Pointer to the controller of the sensor
protected: Controller *controller;
Modified: code/gazebo/trunk/server/sensors/SensorFactory.cc
===================================================================
--- code/gazebo/trunk/server/sensors/SensorFactory.cc 2009-12-18 00:04:10 UTC
(rev 8473)
+++ code/gazebo/trunk/server/sensors/SensorFactory.cc 2009-12-18 17:26:23 UTC
(rev 8474)
@@ -26,6 +26,7 @@
*/
#include "Sensor.hh"
+#include "SensorManager.hh"
#include "Body.hh"
#include "SensorFactory.hh"
@@ -48,7 +49,9 @@
{
if (sensors[classname])
{
- return (sensors[classname]) (body);
+ Sensor *sensor = (sensors[classname]) (body);
+ SensorManager::Instance()->AddSensor(sensor);
+ return sensor;
}
return NULL;
Added: code/gazebo/trunk/server/sensors/SensorManager.cc
===================================================================
--- code/gazebo/trunk/server/sensors/SensorManager.cc
(rev 0)
+++ code/gazebo/trunk/server/sensors/SensorManager.cc 2009-12-18 17:26:23 UTC
(rev 8474)
@@ -0,0 +1,99 @@
+/*
+ * 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: Class to manager all sensors
+ * Author: Nate Koenig
+ * Date: 18 Dec 2009
+ * SVN info: $Id$
+ */
+
+#include "Sensor.hh"
+#include "SensorManager.hh"
+
+using namespace gazebo;
+
+////////////////////////////////////////////////////////////////////////////////
+/// Constructor
+SensorManager::SensorManager()
+{
+}
+
+////////////////////////////////////////////////////////////////////////////////
+/// Destructor
+SensorManager::~SensorManager()
+{
+ this->sensors.erase(this->sensors.begin(), this->sensors.end());
+}
+
+////////////////////////////////////////////////////////////////////////////////
+/// Update all the sensors
+void SensorManager::Update()
+{
+ std::list<Sensor*>::iterator iter;
+ for (iter = this->sensors.begin(); iter != this->sensors.end(); iter++)
+ (*iter)->Update();
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+/// Init all the sensors
+void SensorManager::Init()
+{
+ std::list<Sensor*>::iterator iter;
+ for (iter = this->sensors.begin(); iter != this->sensors.end(); iter++)
+ (*iter)->Init();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+/// Finalize all the sensors
+void SensorManager::Fini()
+{
+ std::list<Sensor*>::iterator iter;
+ for (iter = this->sensors.begin(); iter != this->sensors.end(); iter++)
+ (*iter)->Fini();
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+/// Add a sensor
+void SensorManager::AddSensor(Sensor *sensor)
+{
+ if (!sensor)
+ return;
+
+ this->sensors.push_back(sensor);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+/// Remove a sensor
+void SensorManager::RemoveSensor(Sensor *sensor)
+{
+ if (!sensor)
+ return;
+
+ std::list<Sensor*>::iterator iter;
+ for (iter = this->sensors.begin(); iter != this->sensors.end(); iter++)
+ if (*iter == sensor)
+ break;
+
+ if (iter != this->sensors.end())
+ this->sensors.erase(iter);
+}
Added: code/gazebo/trunk/server/sensors/SensorManager.hh
===================================================================
--- code/gazebo/trunk/server/sensors/SensorManager.hh
(rev 0)
+++ code/gazebo/trunk/server/sensors/SensorManager.hh 2009-12-18 17:26:23 UTC
(rev 8474)
@@ -0,0 +1,70 @@
+/*
+ * 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: Class to manager all sensors
+ * Author: Nate Koenig
+ * Date: 18 Dec 2009
+ * SVN info: $Id$
+ */
+
+#ifndef SENSORMANAGER_HH
+#define SENSORMANAGER_HH
+
+#include <list>
+
+#include "SingletonT.hh"
+
+namespace gazebo
+{
+ class Sensor;
+
+ /// \brief Class to manage and update all sensors
+ class SensorManager : public SingletonT<SensorManager>
+ {
+ /// \brief Constructor
+ public: SensorManager();
+
+ /// \brief Destructor
+ public: virtual ~SensorManager();
+
+ /// \brief Update all the sensors
+ public: void Update();
+
+ /// \brief Init all the sensors
+ public: void Init();
+
+ /// \brief Finalize all the sensors
+ public: void Fini();
+
+ /// \brief Add a sensor
+ public: void AddSensor(Sensor *sensor);
+
+ /// \brief Remove a sensor
+ public: void RemoveSensor(Sensor *sensor);
+
+ private: std::list<Sensor *> sensors;
+
+ private: friend class DestroyerT<SensorManager>;
+ private: friend class SingletonT<SensorManager>;
+ };
+}
+
+#endif
Modified: code/gazebo/trunk/server/sensors/contact/ContactSensor.cc
===================================================================
--- code/gazebo/trunk/server/sensors/contact/ContactSensor.cc 2009-12-18
00:04:10 UTC (rev 8473)
+++ code/gazebo/trunk/server/sensors/contact/ContactSensor.cc 2009-12-18
17:26:23 UTC (rev 8474)
@@ -99,6 +99,7 @@
{
// Get the geom from the body
Geom *geom = this->body->GetGeom( **(*iter) );
+ geom->SetContactsEnabled(true);
this->geoms.push_back(geom);
}
}
Modified: code/gazebo/trunk/server/sensors/ray/RaySensor.cc
===================================================================
--- code/gazebo/trunk/server/sensors/ray/RaySensor.cc 2009-12-18 00:04:10 UTC
(rev 8473)
+++ code/gazebo/trunk/server/sensors/ray/RaySensor.cc 2009-12-18 17:26:23 UTC
(rev 8474)
@@ -196,6 +196,6 @@
// Update the sensor information
void RaySensor::UpdateChild()
{
- //if (this->active)
+ if (this->active)
this->laserShape->Update();
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit