Revision: 6986
http://playerstage.svn.sourceforge.net/playerstage/?rev=6986&view=rev
Author: natepak
Date: 2008-08-28 15:49:20 +0000 (Thu, 28 Aug 2008)
Log Message:
-----------
Updates to the bandit model
Modified Paths:
--------------
code/gazebo/trunk/examples/libgazebo/position/position.cc
code/gazebo/trunk/server/controllers/Controller.cc
code/gazebo/trunk/server/controllers/Controller.hh
code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.cc
code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.hh
code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.cc
code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.hh
code/gazebo/trunk/server/physics/Body.cc
code/gazebo/trunk/server/physics/Body.hh
code/gazebo/trunk/server/physics/Joint.cc
code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc
code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc
code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.hh
code/gazebo/trunk/worlds/bandit.world
code/gazebo/trunk/worlds/models/bandit.model
code/gazebo/trunk/worlds/simpleshapes.world
Added Paths:
-----------
code/gazebo/trunk/Media/models/bandit/left_eyebrow.mesh
code/gazebo/trunk/Media/models/bandit/lowerlip.mesh
code/gazebo/trunk/Media/models/bandit/right_eyebrow.mesh
code/gazebo/trunk/Media/models/bandit/upperlip.mesh
code/gazebo/trunk/examples/libgazebo/bandit/
code/gazebo/trunk/examples/libgazebo/bandit/SConstruct
code/gazebo/trunk/examples/libgazebo/bandit/bandit.cc
Property changes on: code/gazebo/trunk/Media/models/bandit/left_eyebrow.mesh
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Property changes on: code/gazebo/trunk/Media/models/bandit/lowerlip.mesh
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Property changes on: code/gazebo/trunk/Media/models/bandit/right_eyebrow.mesh
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Property changes on: code/gazebo/trunk/Media/models/bandit/upperlip.mesh
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: code/gazebo/trunk/examples/libgazebo/bandit/SConstruct
===================================================================
--- code/gazebo/trunk/examples/libgazebo/bandit/SConstruct
(rev 0)
+++ code/gazebo/trunk/examples/libgazebo/bandit/SConstruct 2008-08-28
15:49:20 UTC (rev 6986)
@@ -0,0 +1,16 @@
+
+# 3rd party packages
+parseConfigs=['pkg-config --cflags --libs libgazebo',
+ 'pkg-config --cflags --libs libgazeboServer']
+
+
+env = Environment (
+ CC = 'g++',
+ CCFLAGS = Split ('-pthread -pipe -W -Wall -O2'),
+)
+
+# Parse all the package configurations
+for cfg in parseConfigs:
+ env.ParseConfig(cfg)
+
+env.Program('bandit','bandit.cc')
Added: code/gazebo/trunk/examples/libgazebo/bandit/bandit.cc
===================================================================
--- code/gazebo/trunk/examples/libgazebo/bandit/bandit.cc
(rev 0)
+++ code/gazebo/trunk/examples/libgazebo/bandit/bandit.cc 2008-08-28
15:49:20 UTC (rev 6986)
@@ -0,0 +1,59 @@
+#include <gazebo/gazebo.h>
+#include <gazebo/GazeboError.hh>
+
+int main()
+{
+ gazebo::Client *client = new gazebo::Client();
+ gazebo::SimulationIface *simIface = new gazebo::SimulationIface();
+ gazebo::ActarrayIface *actarrayIface = new gazebo::ActarrayIface();
+
+ int serverId = 0;
+
+ /// Connect to the libgazebo server
+ try
+ {
+ client->ConnectWait(serverId, GZ_CLIENT_ID_USER_FIRST);
+ }
+ catch (gazebo::GazeboError e)
+ {
+ std::cout << "Gazebo error: Unable to connect\n" << e << "\n";
+ return -1;
+ }
+
+ /// Open the Simulation Interface
+ try
+ {
+ simIface->Open(client, "default");
+ }
+ catch (gazebo::GazeboError e)
+ {
+ std::cout << "Gazebo error: Unable to connect to the sim interface\n" << e
<< "\n";
+ return -1;
+ }
+
+ /// Open the Actuator Array interface
+ try
+ {
+ actarrayIface->Open(client, "bandit_actarray_iface");
+ }
+ catch (std::string e)
+ {
+ std::cout << "Gazebo error: Unable to connect to the actarray interface\n"
+ << e << "\n";
+ return -1;
+ }
+
+ while (true)
+ {
+ actarrayIface->Lock(1);
+ actarrayIface->data->cmd_pos[16] = 0.3;
+ actarrayIface->data->cmd_pos[17] = -0.3;
+ actarrayIface->data->cmd_pos[18] = 0.3;
+ actarrayIface->data->cmd_pos[19] = -0.3;
+ actarrayIface->Unlock();
+
+ usleep(100000);
+ }
+ return 0;
+}
+
Modified: code/gazebo/trunk/examples/libgazebo/position/position.cc
===================================================================
--- code/gazebo/trunk/examples/libgazebo/position/position.cc 2008-08-28
01:30:51 UTC (rev 6985)
+++ code/gazebo/trunk/examples/libgazebo/position/position.cc 2008-08-28
15:49:20 UTC (rev 6986)
@@ -51,7 +51,7 @@
while (true)
{
posIface->Lock(1);
- posIface->data->cmdVelocity.pos.x += 10;
+ posIface->data->cmdVelocity.pos.x = 0.2;
posIface->Unlock();
usleep(100000);
Modified: code/gazebo/trunk/server/controllers/Controller.cc
===================================================================
--- code/gazebo/trunk/server/controllers/Controller.cc 2008-08-28 01:30:51 UTC
(rev 6985)
+++ code/gazebo/trunk/server/controllers/Controller.cc 2008-08-28 15:49:20 UTC
(rev 6986)
@@ -176,10 +176,13 @@
/// Update the controller. Called every cycle.
void Controller::Update()
{
- if (lastUpdate + updatePeriod <= Simulator::Instance()->GetSimTime())
+ if (this->IsConnected())
{
- this->UpdateChild();
- lastUpdate = Simulator::Instance()->GetSimTime();
+ if (lastUpdate + updatePeriod <= Simulator::Instance()->GetSimTime())
+ {
+ this->UpdateChild();
+ lastUpdate = Simulator::Instance()->GetSimTime();
+ }
}
}
@@ -200,6 +203,21 @@
}
////////////////////////////////////////////////////////////////////////////////
+/// Return true if an interface is open
+bool Controller::IsConnected() const
+{
+ std::vector<Iface*>::const_iterator iter;
+
+ for (iter=this->ifaces.begin(); iter!=this->ifaces.end(); iter++)
+ {
+ if ((*iter)->GetOpenCount() > 0)
+ return true;
+ }
+
+ return false;
+}
+
+////////////////////////////////////////////////////////////////////////////////
// Get the name of the controller
std::string Controller::GetName() const
{
Modified: code/gazebo/trunk/server/controllers/Controller.hh
===================================================================
--- code/gazebo/trunk/server/controllers/Controller.hh 2008-08-28 01:30:51 UTC
(rev 6985)
+++ code/gazebo/trunk/server/controllers/Controller.hh 2008-08-28 15:49:20 UTC
(rev 6986)
@@ -74,6 +74,9 @@
/// \brief Finialize the controller. Called once on completion.
public: void Fini();
+ /// \brief Return true if an interface is open
+ public: bool IsConnected() const;
+
/// \brief Load function for the child class
protected: virtual void LoadChild(XMLConfigNode * /*node*/) {return;}
Modified:
code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.cc
===================================================================
--- code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.cc
2008-08-28 01:30:51 UTC (rev 6985)
+++ code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.cc
2008-08-28 15:49:20 UTC (rev 6986)
@@ -55,7 +55,7 @@
// Destructor
Bandit_Actarray::~Bandit_Actarray()
{
- for (int i=0; i<16; i++)
+ for (int i=0; i<JOINTCNT; i++)
{
GZ_DELETE(this->jointNamesP[i]);
GZ_DELETE(this->forcesP[i]);
@@ -96,7 +96,7 @@
/// Save the controller.
void Bandit_Actarray::SaveChild(std::string &prefix, std::ostream &stream)
{
- for (int i=0; i<16; i++)
+ for (int i=0; i<JOINTCNT; i++)
{
stream << prefix << "<joint name=\"" << this->jointNamesP[i]->GetValue()
<< "\">\n";
stream << prefix << " " << *(this->forcesP[i]) << "\n";
@@ -109,7 +109,7 @@
// Initialize the controller
void Bandit_Actarray::InitChild()
{
- for (int i=0; i<16; i++)
+ for (int i=0; i<JOINTCNT; i++)
{
this->joints[i]->SetParam( dParamVel, 0.0);
this->joints[i]->SetParam( dParamFMax, **(this->forcesP[i]) );
@@ -126,9 +126,9 @@
this->myIface->Lock(1);
this->myIface->data->head.time = Simulator::Instance()->GetSimTime();
- this->myIface->data->actuators_count = 16;
+ this->myIface->data->actuators_count = JOINTCNT;
- for (unsigned int i=0; i<16; i++)
+ for (unsigned int i=0; i<JOINTCNT; i++)
{
double cmdAngle = this->myIface->data->cmd_pos[i];
double cmdSpeed = this->myIface->data->cmd_speed[i];
@@ -153,6 +153,7 @@
joint->SetParam( dParamVel, **(this->gainsP[i]) * angle);
joint->SetParam( dParamFMax, **(this->forcesP[i]) );
}
+
}
else if (this->myIface->data->joint_mode[i] ==
GAZEBO_ACTARRAY_JOINT_SPEED_MODE)
{
Modified:
code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.hh
===================================================================
--- code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.hh
2008-08-28 01:30:51 UTC (rev 6985)
+++ code/gazebo/trunk/server/controllers/actarray/bandit/Bandit_Actarray.hh
2008-08-28 15:49:20 UTC (rev 6986)
@@ -31,6 +31,8 @@
#include "Controller.hh"
#include "Entity.hh"
+#define JOINTCNT 20
+
namespace gazebo
{
class HingeJoint;
@@ -90,10 +92,10 @@
/// The parent Model
private: Model *myParent;
- private: Param<std::string> *jointNamesP[16];
- private: HingeJoint *joints[16];
- private: Param<float> *forcesP[16];
- private: Param<float> *gainsP[16];
+ private: Param<std::string> *jointNamesP[JOINTCNT];
+ private: HingeJoint *joints[JOINTCNT];
+ private: Param<float> *forcesP[JOINTCNT];
+ private: Param<float> *gainsP[JOINTCNT];
};
Modified: code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.cc
===================================================================
--- code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.cc
2008-08-28 01:30:51 UTC (rev 6985)
+++ code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.cc
2008-08-28 15:49:20 UTC (rev 6986)
@@ -103,6 +103,16 @@
}
////////////////////////////////////////////////////////////////////////////////
+/// True if a stereo iface is connected
+bool Stereo_Camera::StereoIfaceConnected() const
+{
+ if (this->stereoIface)
+ return this->stereoIface->GetOpenCount() > 0;
+ else
+ return false;
+}
+
+////////////////////////////////////////////////////////////////////////////////
// Update the controller
void Stereo_Camera::UpdateChild()
{
Modified: code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.hh
===================================================================
--- code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.hh
2008-08-28 01:30:51 UTC (rev 6985)
+++ code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.hh
2008-08-28 15:49:20 UTC (rev 6986)
@@ -30,6 +30,7 @@
#include <map>
+#include "Stereo_Camera.hh"
#include "Param.hh"
#include "Controller.hh"
@@ -75,6 +76,9 @@
/// \brief Destructor
public: virtual ~Stereo_Camera();
+ /// \brief True if a stereo iface is connected
+ public: bool StereoIfaceConnected() const;
+
/// \brief Load the controller
/// \param node XML config node
/// \return 0 on success
Modified: code/gazebo/trunk/server/physics/Body.cc
===================================================================
--- code/gazebo/trunk/server/physics/Body.cc 2008-08-28 01:30:51 UTC (rev
6985)
+++ code/gazebo/trunk/server/physics/Body.cc 2008-08-28 15:49:20 UTC (rev
6986)
@@ -213,12 +213,12 @@
std::vector< Sensor* >::iterator sensorIter;
std::vector< Geom* >::iterator geomIter;
+ this->UpdatePose();
+
if (!this->IsStatic())
{
- Pose3d pose = this->GetPose();
-
// Set the pose of the scene node
- this->visualNode->SetPose(pose);
+ this->visualNode->SetPose(this->pose);
}
for (geomIter=this->geoms.begin();
@@ -256,8 +256,9 @@
// Set the pose of the body
void Body::SetPose(const Pose3d &pose)
{
- Pose3d localPose;
+ this->pose = pose;
+
if (this->IsStatic())
{
Pose3d oldPose = this->staticPose;
@@ -279,8 +280,10 @@
}
else
{
+ Pose3d localPose;
+
// Compute pose of CoM
- localPose = this->comPose + pose;
+ localPose = this->comPose + this->pose;
this->SetPosition(localPose.pos);
this->SetRotation(localPose.rot);
@@ -291,21 +294,20 @@
// Return the pose of the body
Pose3d Body::GetPose() const
{
- Pose3d pose;
-
if (this->IsStatic())
- {
- pose = this->staticPose;
- }
+ return this->staticPose;
else
- {
- pose.pos = this->GetPosition();
- pose.rot = this->GetRotation();
+ return this->pose;
+}
- pose = this->comPose.CoordPoseSolve(pose);
- }
+////////////////////////////////////////////////////////////////////////////////
+// Update the pose of the body
+void Body::UpdatePose()
+{
+ this->pose.pos = this->GetPosition();
+ this->pose.rot = this->GetRotation();
- return pose;
+ this->pose = this->comPose.CoordPoseSolve(pose);
}
////////////////////////////////////////////////////////////////////////////////
Modified: code/gazebo/trunk/server/physics/Body.hh
===================================================================
--- code/gazebo/trunk/server/physics/Body.hh 2008-08-28 01:30:51 UTC (rev
6985)
+++ code/gazebo/trunk/server/physics/Body.hh 2008-08-28 15:49:20 UTC (rev
6986)
@@ -150,7 +150,10 @@
/// \brief Load a renderable
private: void LoadVisual(XMLConfigNode *node);
-
+
+ /// \brief Update the pose of the body
+ private: void UpdatePose();
+
/// List of geometries attached to this body
private: std::vector< Geom* > geoms;
@@ -167,6 +170,7 @@
private: Pose3d comPose;
private: Pose3d staticPose;
+ private: Pose3d pose;
private: Param<Vector3> *xyzP;
private: Param<Quatern> *rpyP;
Modified: code/gazebo/trunk/server/physics/Joint.cc
===================================================================
--- code/gazebo/trunk/server/physics/Joint.cc 2008-08-28 01:30:51 UTC (rev
6985)
+++ code/gazebo/trunk/server/physics/Joint.cc 2008-08-28 15:49:20 UTC (rev
6986)
@@ -42,7 +42,7 @@
this->nameP = new Param<std::string>("name","",1);
this->erpP = new Param<double>("erp",0.4,0);
- this->cfmP = new Param<double>("cfm",0.8,0);
+ this->cfmP = new Param<double>("cfm",10e-3,0);
this->suspensionCfmP = new Param<double>("suspensionCfm",0.0,0);
this->body1NameP = new Param<std::string>("body1",std::string(),1);
this->body2NameP = new Param<std::string>("body2",std::string(),1);
Modified: code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc
===================================================================
--- code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2008-08-28
01:30:51 UTC (rev 6985)
+++ code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2008-08-28
15:49:20 UTC (rev 6986)
@@ -131,6 +131,12 @@
// Update the drawing
void MonoCameraSensor::UpdateChild()
{
+ // Only continue if the controller has an active interface. Or frames need
+ // to be saved
+ if ( (this->controller && !this->controller->IsConnected()) &&
+ !this->saveFramesP->GetValue())
+ return;
+
this->UpdateCam();
this->renderTarget->update();
Modified: code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc
===================================================================
--- code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc
2008-08-28 01:30:51 UTC (rev 6985)
+++ code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.cc
2008-08-28 15:49:20 UTC (rev 6986)
@@ -140,6 +140,7 @@
this->renderTarget = this->renderTargets[D_LEFT];
this->InitCam();
+
// Hack to make the camera use the right render target too.
for (i=0; i<4; i++)
{
@@ -206,6 +207,12 @@
Ogre::SceneNode *gridNode = NULL;
int i;
+ // Only continue if the controller has an active interface. Or frames need
+ // to be saved
+ if ( (this->controller && !this->controller->IsConnected()) &&
+ !this->saveFramesP->GetValue())
+ return;
+
this->UpdateCam();
try
@@ -236,7 +243,6 @@
// we have to set the distance every time.
this->GetOgreCamera()->setFarClipDistance( this->farClipP->GetValue() );
-
Ogre::AutoParamDataSource autoParamDataSource;
vp = this->renderTargets[i]->getViewport(0);
Modified: code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.hh
===================================================================
--- code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.hh
2008-08-28 01:30:51 UTC (rev 6985)
+++ code/gazebo/trunk/server/sensors/camera/StereoCameraSensor.hh
2008-08-28 15:49:20 UTC (rev 6986)
@@ -120,7 +120,7 @@
private: double baseline;
private: Ogre::Camera *depthCamera;
-
+
/*private:
class StereoCameraListener : public Ogre::RenderTargetListener
{
Modified: code/gazebo/trunk/worlds/bandit.world
===================================================================
--- code/gazebo/trunk/worlds/bandit.world 2008-08-28 01:30:51 UTC (rev
6985)
+++ code/gazebo/trunk/worlds/bandit.world 2008-08-28 15:49:20 UTC (rev
6986)
@@ -19,17 +19,25 @@
<stepTime>0.3</stepTime>
<gravity>0 0 -9.8</gravity>
<cfm>10e-5</cfm>
- <erp>0.3</erp>
+ <erp>0.1</erp>
</physics:ode>
<rendering:gui>
<type>fltk</type>
<size>800 600</size>
<pos>0 0</pos>
+ <frames>
+ <row height="100%">
+ <camera width="100%">
+ <xyz>2.16 0.0 0.86</xyz>
+ <rpy>0 16.5 179.50</rpy>
+ </camera>
+ </row>
+ </frames>
</rendering:gui>
<rendering:ogre>
- <ambient>1.0 1.0 1.0 1.0</ambient>
+ <ambient>0.8 0.8 0.8 1.0</ambient>
<sky>
<material>Gazebo/CloudySky</material>
</sky>
@@ -58,7 +66,6 @@
<xi:include href="models/pioneer2dx.model" />
</include>
-
<model:physical name="box_model">
<xyz>0.15 0 0.125</xyz>
<static>false</static>
@@ -82,6 +89,7 @@
<model:physical name="bandit">
<xyz>0.02 0 0.49</xyz>
+ <static>false</static>
<attach>
<parentBody>box_body</parentBody>
@@ -135,11 +143,11 @@
<model:renderable name="directional_white">
<light>
<type>directional</type>
- <direction>0 -0.5 -0.5</direction>
- <diffuseColor>0.4 0.4 0.4</diffuseColor>
+ <direction>-1 1.0 -0.5</direction>
+ <diffuseColor>0.2 0.2 0.2</diffuseColor>
<specularColor>0.0 0.0 0.0</specularColor>
<attenuation>100 0.0 1.0 0.4</attenuation>
</light>
</model:renderable>
-
+
</gazebo:world>
Modified: code/gazebo/trunk/worlds/models/bandit.model
===================================================================
--- code/gazebo/trunk/worlds/models/bandit.model 2008-08-28 01:30:51 UTC
(rev 6985)
+++ code/gazebo/trunk/worlds/models/bandit.model 2008-08-28 15:49:20 UTC
(rev 6986)
@@ -484,9 +484,117 @@
<highStop>20</highStop>
</joint:hinge>
+ <body name="left_eyebrow_body">
+ <xyz>0.035 0.041 0.034</xyz>
+ <rpy>85 0 -70</rpy>
+
+ <geom:box name="left_eyebrow_geom">
+ <size>0.045 0.02 0.002</size>
+ <mass>0</mass>
+
+ <visual>
+ <size>0.045 0.02 0.002</size>
+ <mesh>bandit/right_eyebrow.mesh</mesh>
+ <material>Gazebo/Black</material>
+ </visual>
+ </geom:box>
+ </body>
+
+ <joint:hinge name="left_eyebrow_hinge">
+ <body1>head_body</body1>
+ <body2>left_eyebrow_body</body2>
+ <anchor>left_eyebrow_body</anchor>
+ <anchorOffset>-0.01 0.01 0</anchorOffset>
+ <axis>1 0 0</axis>
+ <lowStop>-70</lowStop>
+ <highStop>70</highStop>
+ </joint:hinge>
+
+ <body name="right_eyebrow_body">
+ <xyz>0.035 -0.041 0.034</xyz>
+ <rpy>95 16 -110</rpy>
+
+ <geom:box name="right_eyebrow_geom">
+ <size>0.045 0.02 0.002</size>
+ <mass>0</mass>
+ <visual>
+ <size>0.045 0.02 0.002</size>
+ <mesh>bandit/right_eyebrow.mesh</mesh>
+ <material>Gazebo/Black</material>
+ </visual>
+ </geom:box>
+ </body>
+
+ <joint:hinge name="right_eyebrow_hinge">
+ <body1>head_body</body1>
+ <body2>right_eyebrow_body</body2>
+ <anchor>right_eyebrow_body</anchor>
+ <anchorOffset>-0.01 -0.01 0</anchorOffset>
+ <axis>1 0 0</axis>
+ <lowStop>-70</lowStop>
+ <highStop>70</highStop>
+ </joint:hinge>
+
+ <body name="upperlip_body">
+ <xyz>0.044 -0.001 -0.05</xyz>
+ <rpy>0 0 0</rpy>
+
+ <geom:box name="upperlip_geom">
+ <size>0.02 0.08 0.014</size>
+ <mass>0</mass>
+ <visual>
+ <rpy>0 0 -91</rpy>
+ <xyz>0.006 -0.0015 0</xyz>
+ <scale>0.05 0.05 0.05</scale>
+ <mesh>bandit/upperlip.mesh</mesh>
+ <material>Gazebo/Red</material>
+ </visual>
+ </geom:box>
+ </body>
+
+ <joint:hinge name="upperlip_hinge">
+ <body1>head_body</body1>
+ <body2>upperlip_body</body2>
+ <anchor>upperlip_body</anchor>
+ <anchorOffset>0 -0.042 0.0</anchorOffset>
+ <axis>0 1 0</axis>
+ <lowStop>-20</lowStop>
+ <highStop>20</highStop>
+ </joint:hinge>
+
+ <body name="lowerlip_body">
+ <xyz>0.044 0.0 -0.06</xyz>
+ <rpy>0 0 0</rpy>
+
+ <geom:box name="lowerlip_geom">
+ <size>0.02 0.08 0.014</size>
+ <mass>0</mass>
+
+ <visual>
+ <rpy>90 0 90</rpy>
+ <xyz>0.01 0 -0.015</xyz>
+ <scale>0.09 0.1 0.1</scale>
+ <mesh>bandit/lowerlip.mesh</mesh>
+ <material>Gazebo/Red</material>
+ </visual>
+ </geom:box>
+ </body>
+
+ <joint:hinge name="lowerlip_hinge">
+ <body1>head_body</body1>
+ <body2>lowerlip_body</body2>
+ <anchor>lowerlip_body</anchor>
+ <anchorOffset>0.0 -0.042 0</anchorOffset>
+ <axis>0 1 0</axis>
+ <lowStop>-20</lowStop>
+ <highStop>20</highStop>
+ </joint:hinge>
+
+
+
<controller:bandit_actarray name="bandit_controller">
<joint name="head_neck_hinge">
- <force>2</force>
+ <force>1</force>
<gain>2</gain>
</joint>
@@ -565,6 +673,26 @@
<gain>2</gain>
</joint>
+ <joint name="left_eyebrow_hinge">
+ <force>1</force>
+ <gain>2</gain>
+ </joint>
+
+ <joint name="right_eyebrow_hinge">
+ <force>1</force>
+ <gain>2</gain>
+ </joint>
+
+ <joint name="lowerlip_hinge">
+ <force>1</force>
+ <gain>2</gain>
+ </joint>
+
+ <joint name="upperlip_hinge">
+ <force>1</force>
+ <gain>2</gain>
+ </joint>
+
<interface:actarray name="bandit_actarray_iface"/>
</controller:bandit_actarray>
Modified: code/gazebo/trunk/worlds/simpleshapes.world
===================================================================
--- code/gazebo/trunk/worlds/simpleshapes.world 2008-08-28 01:30:51 UTC (rev
6985)
+++ code/gazebo/trunk/worlds/simpleshapes.world 2008-08-28 15:49:20 UTC (rev
6986)
@@ -38,16 +38,17 @@
<model:physical name="sphere1_model">
<xyz>1 0 0.5</xyz>
<rpy>0.0 0.0 0.0</rpy>
- <static>true</static>
+ <static>false</static>
<body:sphere name="sphere1_body">
<geom:sphere name="sphere1_geom">
- <size>0.5</size>
+ <size>0.25</size>
<mass>0.0</mass>
<mu1>109999.0</mu1>
<visual>
+ <size>0.5 0.5 0.5</size>
<mesh>unit_sphere</mesh>
<material>Gazebo/Rocky</material>
</visual>
@@ -74,7 +75,6 @@
</body:box>
</model:physical>
- <!--
<model:physical name="cylinder1_model">
<xyz>1 -1.5 0.5</xyz>
<rpy>0.0 0.0 0.0</rpy>
@@ -92,7 +92,6 @@
</geom:cylinder>
</body:cylinder>
</model:physical>
- -->
<!-- Ground Plane -->
<model:physical name="plane1_model">
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