Revision: 7034
http://playerstage.svn.sourceforge.net/playerstage/?rev=7034&view=rev
Author: natepak
Date: 2008-09-22 02:50:29 +0000 (Mon, 22 Sep 2008)
Log Message:
-----------
Fixed missing directories
Modified Paths:
--------------
code/gazebo/trunk/server/Simulator.cc
code/gazebo/trunk/server/Simulator.hh
code/gazebo/trunk/server/gui/Toolbar.cc
code/gazebo/trunk/server/physics/Body.cc
code/gazebo/trunk/server/physics/Body.hh
code/gazebo/trunk/server/physics/Geom.cc
code/gazebo/trunk/server/physics/Geom.hh
Added Paths:
-----------
code/gazebo/trunk/server/controllers/imu/
code/gazebo/trunk/server/controllers/imu/Generic_Imu.cc
code/gazebo/trunk/server/controllers/imu/Generic_Imu.hh
code/gazebo/trunk/server/controllers/imu/SConscript
code/gazebo/trunk/server/sensors/imu/
code/gazebo/trunk/server/sensors/imu/ImuSensor.cc
code/gazebo/trunk/server/sensors/imu/ImuSensor.hh
code/gazebo/trunk/server/sensors/imu/SConscript
code/gazebo/trunk/worlds/models/imu.model
Modified: code/gazebo/trunk/server/Simulator.cc
===================================================================
--- code/gazebo/trunk/server/Simulator.cc 2008-09-21 22:55:45 UTC (rev
7033)
+++ code/gazebo/trunk/server/Simulator.cc 2008-09-22 02:50:29 UTC (rev
7034)
@@ -28,6 +28,8 @@
#include <fstream>
#include <sys/time.h>
+#include "Body.hh"
+#include "Geom.hh"
#include "Model.hh"
#include "Entity.hh"
#include "OgreVisual.hh"
@@ -507,4 +509,26 @@
return this->selectedEntity;
}
+////////////////////////////////////////////////////////////////////////////////
+/// Get the model that currently selected
+Model *Simulator::GetSelectedModel() const
+{
+ Model *model = NULL;
+ Body *body = NULL;
+ Geom *geom = NULL;
+ if (!this->selectedEntity)
+ return NULL;
+
+ if ( (model = dynamic_cast<Model*>(this->selectedEntity)) != NULL )
+ return model;
+ else
+ {
+ if ( (body = dynamic_cast<Body*>(this->selectedEntity)) != NULL )
+ model = body->GetModel();
+ else if ( (geom = dynamic_cast<Geom*>(this->selectedEntity)) != NULL )
+ model = geom->GetModel();
+ else
+ gzerr(0) << "Unknown type\n";
+ }
+}
Modified: code/gazebo/trunk/server/Simulator.hh
===================================================================
--- code/gazebo/trunk/server/Simulator.hh 2008-09-21 22:55:45 UTC (rev
7033)
+++ code/gazebo/trunk/server/Simulator.hh 2008-09-22 02:50:29 UTC (rev
7034)
@@ -45,6 +45,7 @@
class GazeboConfig;
class OgreAdaptor;
class Entity;
+ class Model;
/// \brief The World
/*
@@ -155,6 +156,9 @@
/// \brief Get the selected entity
public: Entity *GetSelectedEntity() const;
+ /// \brief Get the model that currently selected
+ public: Model *GetSelectedModel() const;
+
///pointer to the XML Data
private: XMLConfig *xmlFile;
@@ -162,7 +166,8 @@
private: Gui *gui;
private: OgreAdaptor *renderEngine;
-/// Pointer to the selected Gui
+
+ /// Pointer to the selected Gui
private: GazeboConfig *gazeboConfig;
/// Flag to know if we have a simulation loaded
Added: code/gazebo/trunk/server/controllers/imu/Generic_Imu.cc
===================================================================
--- code/gazebo/trunk/server/controllers/imu/Generic_Imu.cc
(rev 0)
+++ code/gazebo/trunk/server/controllers/imu/Generic_Imu.cc 2008-09-22
02:50:29 UTC (rev 7034)
@@ -0,0 +1,143 @@
+/*
+ * 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 IMU controller.
+ * Author: Matt Thompson
+ * Date: 07 September 2008
+ * SVN info: $Id: $
+ */
+
+#include <algorithm>
+#include <assert.h>
+
+#include "Global.hh"
+#include "XMLConfig.hh"
+#include "Model.hh"
+#include "World.hh"
+#include "gazebo.h"
+#include "GazeboError.hh"
+#include "ControllerFactory.hh"
+#include "Generic_Imu.hh"
+#include "ImuSensor.hh"
+
+using namespace gazebo;
+
+GZ_REGISTER_STATIC_CONTROLLER("generic_imu", Generic_Imu);
+
+////////////////////////////////////////////////////////////////////////////////
+// Constructor
+Generic_Imu::Generic_Imu(Entity *parent)
+ : Controller(parent)
+{
+ this->myParent = dynamic_cast<ImuSensor*>(this->parent);
+
+ if (!this->myParent)
+ gzthrow("GenericImu controller requires an IMU Sensor as its parent");
+
+ this->imuIface = NULL;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Destructor
+Generic_Imu::~Generic_Imu()
+{
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Load the controller
+void Generic_Imu::LoadChild(XMLConfigNode *node)
+{
+ std::vector<Iface*>::iterator iter;
+
+ for (iter = this->ifaces.begin(); iter != this->ifaces.end(); iter++)
+ {
+ if ((*iter)->GetType() == "imu")
+ this->imuIface = dynamic_cast<ImuIface*>(*iter);
+ }
+
+ if (!this->imuIface) gzthrow("GenericImu controller requires a ImuIface");
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Initialize the controller
+void Generic_Imu::InitChild()
+{
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Update the controller
+void Generic_Imu::UpdateChild()
+{
+ bool imuOpened = false;
+
+ if (this->imuIface->Lock(1))
+ {
+ imuOpened = this->imuIface->GetOpenCount() > 0;
+ this->imuIface->Unlock();
+ }
+
+ if (imuOpened)
+ {
+ this->myParent->SetActive(true);
+ this->PutImuData();
+ }
+
+ if (!imuOpened)
+ {
+ this->myParent->SetActive(false);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Finalize the controller
+void Generic_Imu::FiniChild()
+{
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Put IMU data to the interface
+void Generic_Imu::PutImuData()
+{
+
+ Pose3d velocity;
+ velocity = this->myParent->GetVelocity();
+
+ if (this->imuIface->Lock(1))
+ {
+ // Data timestamp
+ //this->imuIface->data->head.time = Simulator::Instance()->GetSimTime();
+
+ this->imuIface->data->velocity.pos.x = velocity.pos.x;
+ this->imuIface->data->velocity.pos.y = velocity.pos.y;
+ this->imuIface->data->velocity.pos.z = velocity.pos.z;
+ this->imuIface->data->velocity.roll = velocity.rot.x;
+ this->imuIface->data->velocity.pitch = velocity.rot.y;
+ this->imuIface->data->velocity.yaw = velocity.rot.z;
+
+ this->imuIface->Unlock();
+
+ // New data is available
+ this->imuIface->Post();
+ }
+}
+
+}
Added: code/gazebo/trunk/server/controllers/imu/Generic_Imu.hh
===================================================================
--- code/gazebo/trunk/server/controllers/imu/Generic_Imu.hh
(rev 0)
+++ code/gazebo/trunk/server/controllers/imu/Generic_Imu.hh 2008-09-22
02:50:29 UTC (rev 7034)
@@ -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: generic IMU controller.
+ * Author: Matt Thompson
+ * Date: 07 Sep 2008
+ * SVN: $Id: $
+ */
+
+#ifndef GENERIC_IMU_HH
+#define GENERIC_IMU_HH
+
+#include "Controller.hh"
+
+namespace gazebo
+{
+ class ImuIface;
+ class ImuSensor;
+
+class Generic_Imu : public Controller
+{
+ /// \brief Constructor
+ /// \param parent The parent entity, must be a Model or a Sensor
+ public: Generic_Imu(Entity *parent);
+
+ /// \brief Destructor
+ public: virtual ~Generic_Imu();
+
+ /// \brief Load the controller
+ /// \param node XML config node
+ /// \return 0 on success
+ protected: virtual void LoadChild(XMLConfigNode *node);
+
+ /// \brief Init the controller
+ /// \return 0 on success
+ protected: virtual void InitChild();
+
+ /// \brief Update the controller
+ /// \return 0 on success
+ protected: virtual void UpdateChild();
+
+ /// \brief Finalize the controller
+ /// \return 0 on success
+ protected: virtual void FiniChild();
+
+ /// \brief Put IMU data to the iface
+ private: void PutImuData();
+
+ /// The IMU interface
+ private: ImuIface *imuIface;
+
+ /// The parent sensor
+ private: ImuSensor *myParent;
+
+};
+
+/** /} */
+/// @}
+
+}
+
+#endif
+
Added: code/gazebo/trunk/server/controllers/imu/SConscript
===================================================================
--- code/gazebo/trunk/server/controllers/imu/SConscript
(rev 0)
+++ code/gazebo/trunk/server/controllers/imu/SConscript 2008-09-22 02:50:29 UTC
(rev 7034)
@@ -0,0 +1,6 @@
+#Import variable
+Import('env sharedObjs')
+
+sources = Split('Generic_Imu.cc')
+
+sharedObjs.append(env.SharedObject(sources))
Modified: code/gazebo/trunk/server/gui/Toolbar.cc
===================================================================
--- code/gazebo/trunk/server/gui/Toolbar.cc 2008-09-21 22:55:45 UTC (rev
7033)
+++ code/gazebo/trunk/server/gui/Toolbar.cc 2008-09-22 02:50:29 UTC (rev
7034)
@@ -98,49 +98,43 @@
if (this->entityBrowser->size() == 0)
this->UpdateEntityBrowser();
- Entity *entity = Simulator::Instance()->GetSelectedEntity();
+ Model *model = Simulator::Instance()->GetSelectedModel();
this->paramCount = 0;
- if (entity)
+ if (model)
{
std::string value = "@[EMAIL PROTECTED]@[EMAIL PROTECTED] ";
this->AddToParamBrowser(value);
- this->AddEntityToParamBrowser(entity, "");
+ this->AddEntityToParamBrowser(model, "");
- Model *model = dynamic_cast<Model*>(entity);
-
- if (model)
+ const std::map<std::string, Body *> *bodies = model->GetBodies();
+ const std::map<std::string, Geom *> *geoms;
+ std::map<std::string, Body*>::const_iterator iter;
+ std::map<std::string, Geom*>::const_iterator giter;
+
+ for (iter = bodies->begin(); iter != bodies->end(); iter++)
{
- const std::map<std::string, Body *> *bodies = model->GetBodies();
- const std::map<std::string, Geom *> *geoms;
- std::map<std::string, Body*>::const_iterator iter;
- std::map<std::string, Geom*>::const_iterator giter;
- std::string value;
+ value = "@[EMAIL PROTECTED]@s-Body:[EMAIL PROTECTED]@[EMAIL PROTECTED]"
+ iter->second->GetName();
+ this->AddToParamBrowser(value);
+ this->AddEntityToParamBrowser( iter->second, " " );
- for (iter = bodies->begin(); iter != bodies->end(); iter++)
+ geoms = iter->second->GetGeoms();
+
+ for (giter = geoms->begin(); giter != geoms->end(); giter++)
{
- value = "@[EMAIL PROTECTED]@s-Body:[EMAIL PROTECTED]@[EMAIL
PROTECTED]" + iter->second->GetName();
+ value = "@[EMAIL PROTECTED]@s -Geom:[EMAIL PROTECTED]@[EMAIL
PROTECTED]" + giter->second->GetName();
this->AddToParamBrowser(value);
- this->AddEntityToParamBrowser( iter->second, " " );
+ this->AddEntityToParamBrowser( giter->second, " " );
- geoms = iter->second->GetGeoms();
-
- for (giter = geoms->begin(); giter != geoms->end(); giter++)
+ for (unsigned int i=0; i < giter->second->GetVisualCount(); i++)
{
- value = "@[EMAIL PROTECTED]@s -Geom:[EMAIL PROTECTED]@[EMAIL
PROTECTED]" + giter->second->GetName();
+ OgreVisual *vis = giter->second->GetVisual(i);
+ std::ostringstream stream;
+ stream << vis->GetId();
+ value = "@[EMAIL PROTECTED]@s -Visual:[EMAIL PROTECTED]@[EMAIL
PROTECTED]" + stream.str();
this->AddToParamBrowser(value);
- this->AddEntityToParamBrowser( giter->second, " " );
-
- for (unsigned int i=0; i < giter->second->GetVisualCount(); i++)
- {
- OgreVisual *vis = giter->second->GetVisual(i);
- std::ostringstream stream;
- stream << vis->GetId();
- value = "@[EMAIL PROTECTED]@s -Visual:[EMAIL PROTECTED]@[EMAIL
PROTECTED]" + stream.str();
- this->AddToParamBrowser(value);
- this->AddEntityToParamBrowser( vis, " " );
- }
+ this->AddEntityToParamBrowser( vis, " " );
}
}
}
@@ -168,10 +162,32 @@
int endLbl = 0;
int beginValue = 0;
- if (lineText.find("-Body") != std::string::npos ||
- lineText.find("-Geom") != std::string::npos)
+ if (lineText.find("-Body") != std::string::npos)
{
+ /*beginLbl = lineText.rfind("@") + 2;
+
+ std::string bodyName = lineText.substr(beginLbl, lineText.size()-beginLbl);
+ std::cout << "Body Name[" << bodyName << "]\n";
+
+ Model *model = Simulator::Instance()->GetSelectedModel();
+ Body *body = model->GetBody(bodyName);
+ Simulator::Instance()->SetSelectedEntity(body);
+ */
+ }
+ else if (lineText.find("-Geom") != std::string::npos)
+ {
+ /*beginLbl = lineText.rfind("@") + 2;
+
+ std::string geomName = lineText.substr(beginLbl, lineText.size()-beginLbl);
+ std::cout << "Geom Name[" << geomName << "]\n";
+
+ Model *model = Simulator::Instance()->GetSelectedModel();
+ Geom *geom = model->GetGeom(geomName);
+ Simulator::Instance()->SetSelectedEntity(geom);
+
toolbar->paramInput->deactivate();
+ Simulator::Instance()->SetSelectedEntity( );
+ */
return;
}
else
Modified: code/gazebo/trunk/server/physics/Body.cc
===================================================================
--- code/gazebo/trunk/server/physics/Body.cc 2008-09-21 22:55:45 UTC (rev
7033)
+++ code/gazebo/trunk/server/physics/Body.cc 2008-09-22 02:50:29 UTC (rev
7034)
@@ -697,6 +697,13 @@
}
////////////////////////////////////////////////////////////////////////////////
+/// Get the model that this body belongs to
+Model *Body::GetModel() const
+{
+ return dynamic_cast<Model*>(this->GetParent());
+}
+
+////////////////////////////////////////////////////////////////////////////////
/// Get a geom by name
Geom *Body::GetGeom(const std::string &name) const
{
Modified: code/gazebo/trunk/server/physics/Body.hh
===================================================================
--- code/gazebo/trunk/server/physics/Body.hh 2008-09-21 22:55:45 UTC (rev
7033)
+++ code/gazebo/trunk/server/physics/Body.hh 2008-09-22 02:50:29 UTC (rev
7034)
@@ -39,6 +39,7 @@
namespace gazebo
{
+ class Model;
class Geom;
class Sensor;
@@ -145,6 +146,9 @@
/// \brief Get a geom by name
public: Geom *GetGeom(const std::string &name) const;
+
+ /// \brief Get the model that this body belongs to
+ public: Model *GetModel() const;
/// Load a new geom helper function
/// \param node XMLConfigNode used to load the geom
Modified: code/gazebo/trunk/server/physics/Geom.cc
===================================================================
--- code/gazebo/trunk/server/physics/Geom.cc 2008-09-21 22:55:45 UTC (rev
7033)
+++ code/gazebo/trunk/server/physics/Geom.cc 2008-09-22 02:50:29 UTC (rev
7034)
@@ -546,3 +546,17 @@
return NULL;
}
+
+////////////////////////////////////////////////////////////////////////////////
+/// Get the body this geom belongs to
+Body *Geom::GetBody() const
+{
+ return this->body;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+/// Get the model this geom belongs to
+Model *Geom::GetModel() const
+{
+ return this->body->GetModel();
+}
Modified: code/gazebo/trunk/server/physics/Geom.hh
===================================================================
--- code/gazebo/trunk/server/physics/Geom.hh 2008-09-21 22:55:45 UTC (rev
7033)
+++ code/gazebo/trunk/server/physics/Geom.hh 2008-09-22 02:50:29 UTC (rev
7034)
@@ -37,6 +37,7 @@
namespace gazebo
{
+ class Model;
class Body;
class ContactParams;
class XMLConfigNode;
@@ -152,8 +153,15 @@
/// \brief Get a visual by id
public: OgreVisual *GetVisualById( int id ) const;
+ /// \brief Get the body this geom belongs to
+ public: Body *GetBody() const;
+
+ /// \brief Get the model this geom belongs to
+ public: Model *GetModel() const;
+
/// Contact parameters
public: ContactParams *contact;
+
/// The body this geom belongs to
protected: Body *body;
Added: code/gazebo/trunk/server/sensors/imu/ImuSensor.cc
===================================================================
--- code/gazebo/trunk/server/sensors/imu/ImuSensor.cc
(rev 0)
+++ code/gazebo/trunk/server/sensors/imu/ImuSensor.cc 2008-09-22 02:50:29 UTC
(rev 7034)
@@ -0,0 +1,145 @@
+/*
+ * 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: IMU sensor
+ * Author: Matt Thompson
+ * Date: 6 September 2008
+ * SVN: $Id: $
+*/
+
+#include <assert.h>
+#include <float.h>
+#include <sstream>
+
+#include "SensorFactory.hh"
+#include "XMLConfig.hh"
+#include "Global.hh"
+#include "World.hh"
+#include "PhysicsEngine.hh"
+#include "GazeboError.hh"
+#include "ODEPhysics.hh"
+#include "XMLConfig.hh"
+#include "Controller.hh"
+#include "ImuSensor.hh"
+
+#include "Vector3.hh"
+
+using namespace gazebo;
+
+GZ_REGISTER_STATIC_SENSOR("imu", ImuSensor);
+
+//////////////////////////////////////////////////////////////////////////////
+// Constructor
+ImuSensor::ImuSensor(Body *body)
+ : Sensor(body)
+{
+ this->active = false;
+
+ this->typeName = "imu";
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// Destructor
+ImuSensor::~ImuSensor()
+{
+}
+
+//////////////////////////////////////////////////////////////////////////////
+/// Load the ray using parameter from an XMLConfig node
+void ImuSensor::LoadChild(XMLConfigNode *node)
+{
+ if (this->body == NULL)
+ {
+ gzthrow("Null body in the IMU sensor");
+ }
+
+}
+
+//////////////////////////////////////////////////////////////////////////////
+/// Save the sensor info in XML format
+void ImuSensor::SaveChild(std::string &prefix, std::ostream &stream)
+{
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Init the IMU
+void ImuSensor::InitChild()
+{
+ Pose3d bodyPose;
+ bodyPose = this->body->GetPose();
+ this->prevPose = bodyPose;
+}
+
+void ImuSensor::FiniChild()
+{
+}
+
+Pose3d ImuSensor::GetVelocity()
+{
+ return this->imuVel;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Update the sensor information
+void ImuSensor::UpdateChild()
+{
+// if (this->active)
+ {
+ Vector3 velocity;
+ Pose3d poseDelta;
+ double heading;
+ double v1;
+
+ double vlong, vlat;
+
+ //Quatern rot;
+ Vector3 rot;
+ Vector3 pose;
+
+ // Get the pose of the sensor body (global cs)
+ poseDelta = this->body->GetPose() - this->prevPose;
+ this->prevPose = this->body->GetPose();
+
+ velocity = this->body->GetLinearVel();
+ rot = this->body->GetRotation().GetAsEuler();
+ pose = this->body->GetPosition();
+
+ heading = atan2(velocity.y, velocity.x);
+
+ v1 = sqrt(pow(velocity.x,2) + pow(velocity.y,2));
+
+ vlong = v1 * cos(heading - rot.z);
+ vlat = v1 * sin(heading - rot.z);
+
+ this->imuVel.pos.x = vlong;
+ this->imuVel.pos.y = vlat;
+
+ this->imuVel.pos.z = 0;
+
+ velocity = this->body->GetAngularVel();
+ this->imuVel.rot.x = velocity.x;
+ this->imuVel.rot.y = velocity.y;
+ this->imuVel.rot.z = velocity.z;
+
+ }
+}
+
+}
Added: code/gazebo/trunk/server/sensors/imu/ImuSensor.hh
===================================================================
--- code/gazebo/trunk/server/sensors/imu/ImuSensor.hh
(rev 0)
+++ code/gazebo/trunk/server/sensors/imu/ImuSensor.hh 2008-09-22 02:50:29 UTC
(rev 7034)
@@ -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
+ *
+ */
+
+#ifndef IMUSENSOR_HH
+#define IMUSENSOR_HH
+
+#include <vector>
+
+#include "Sensor.hh"
+#include "Body.hh"
+
+namespace gazebo
+{
+
+class XMLConfigNode;
+class ImuSensor: public Sensor
+{
+ /// \brief Constructor
+ /// \param body The IMU sensor must be attached to a body.
+ public: ImuSensor(Body *body);
+
+ /// \brief Destructor
+ public: virtual ~ImuSensor();
+
+ /// \param node The XMLConfig node
+ protected: virtual void LoadChild(XMLConfigNode *node);
+
+ /// \brief Save the sensor info in XML format
+ protected: virtual void SaveChild(std::string &prefix, std::ostream &stream);
+
+ /// Initialize the ray
+ protected: virtual void InitChild();
+
+ /// Update sensed values
+ protected: virtual void UpdateChild();
+
+ /// Finalize the ray
+ protected: virtual void FiniChild();
+
+ public: Pose3d GetVelocity();
+
+ private: Pose3d prevPose;
+ private: Pose3d imuVel;
+/*
+ private: ParamT<int> *rayCountP;
+ private: ParamT<int> *rangeCountP;
+*/
+
+
+};
+
+#endif
Added: code/gazebo/trunk/server/sensors/imu/SConscript
===================================================================
--- code/gazebo/trunk/server/sensors/imu/SConscript
(rev 0)
+++ code/gazebo/trunk/server/sensors/imu/SConscript 2008-09-22 02:50:29 UTC
(rev 7034)
@@ -0,0 +1,6 @@
+#Import variable
+Import('env sharedObjs')
+
+sources = Split('ImuSensor.cc')
+
+sharedObjs.append(env.SharedObject(sources))
Added: code/gazebo/trunk/worlds/models/imu.model
===================================================================
--- code/gazebo/trunk/worlds/models/imu.model (rev 0)
+++ code/gazebo/trunk/worlds/models/imu.model 2008-09-22 02:50:29 UTC (rev
7034)
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+
+<model:physical name="default_generic_imu__model"
+ xmlns:model="http://playerstage.sourceforge.net/gazebo/xmlschema/#model"
+
xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"
+
xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"
+ xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"
+ xmlns:body="http://playerstage.sourceforge.net/gazebo/xmlschema/#body"
+ xmlns:geom="http://playerstage.sourceforge.net/gazebo/xmlschema/#geom"
+ xmlns:joint="http://playerstage.sourceforge.net/gazebo/xmlschema/#joint"
+ >
+
+ <xyz>0 0.0 0.0</xyz>
+ <rpy>0 0 0</rpy>
+ <canonicalBody>imu_body</canonicalBody>
+
+ <body:box name="imu_body">
+ <xyz>0.0 0.0 0.0</xyz>
+ <rpy>0.0 0.0 0.0</rpy>
+
+ <geom:box name="imu_geom1">
+ <xyz>0.0 0.0 0.0</xyz>
+ <rpy>0 0 90</rpy>
+ <size>0.1 0.1 0.1</size>
+ <mass>0.01</mass>
+
+ <visual>
+ <scale>0.07 0.07 0.1</scale>
+ <mesh>unit_box</mesh>
+ <material>Gazebo/Green</material>
+ </visual>
+ </geom:box>
+
+ <sensor:imu name="imu_1">
+ <controller:generic_imu name="imu_controller_1">
+ <interface:imu name="imu_iface_0"/>
+ </controller:generic_imu>
+ </sensor:imu>
+ </body:box>
+
+</model:physical>
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 Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit