Revision: 7350
          http://playerstage.svn.sourceforge.net/playerstage/?rev=7350&view=rev
Author:   natepak
Date:     2009-02-23 22:53:56 +0000 (Mon, 23 Feb 2009)

Log Message:
-----------
Updates to the pioneer2gripper controller

Modified Paths:
--------------
    code/gazebo/trunk/server/controllers/gripper/pioneer2/Pioneer2_Gripper.cc
    code/gazebo/trunk/server/controllers/gripper/pioneer2/Pioneer2_Gripper.hh
    code/gazebo/trunk/server/controllers/ptz/generic/Generic_PTZ.cc

Modified: 
code/gazebo/trunk/server/controllers/gripper/pioneer2/Pioneer2_Gripper.cc
===================================================================
--- code/gazebo/trunk/server/controllers/gripper/pioneer2/Pioneer2_Gripper.cc   
2009-02-23 18:42:00 UTC (rev 7349)
+++ code/gazebo/trunk/server/controllers/gripper/pioneer2/Pioneer2_Gripper.cc   
2009-02-23 22:53:56 UTC (rev 7350)
@@ -39,7 +39,7 @@
 
 GZ_REGISTER_STATIC_CONTROLLER("pioneer2_gripper", Pioneer2_Gripper);
 
-enum {RIGHT, LEFT};
+enum {LEFT, RIGHT, LIFT};
 
 
////////////////////////////////////////////////////////////////////////////////
 // Constructor
@@ -50,45 +50,102 @@
 
   if (!this->myParent)
     gzthrow("Pioneer2_Gripper controller requires a Model as its parent");
+
 }
 
 
////////////////////////////////////////////////////////////////////////////////
 // Destructor
 Pioneer2_Gripper::~Pioneer2_Gripper()
 {
+  for (int i=0; i<3; i++)
+  {
+    GZ_DELETE(this->jointNamesP[i]);
+    GZ_DELETE(this->gainsP[i]);
+    GZ_DELETE(this->forcesP[i]);
+  }
 }
 
 
////////////////////////////////////////////////////////////////////////////////
 // Load the controller
 void Pioneer2_Gripper::LoadChild(XMLConfigNode *node)
 {
+  int i;
+  XMLConfigNode *jNode;
   this->myIface = dynamic_cast<GripperIface*>(this->ifaces[0]);
 
   if (!this->myIface)
     gzthrow("Pioneer2_Gripper controller requires a GripperIface");
 
   Param::Begin(&this->parameters);
-  this->leftJointNameP = new ParamT<std::string>("leftJoint", "", 1);
-  this->rightJointNameP = new ParamT<std::string>("rightJoint", "", 1);
+  jNode = node->GetChild("leftJoint");
+  if (jNode)
+  {
+    this->jointNamesP[LEFT] = new ParamT<std::string>("name", "", 1); 
+    this->jointNamesP[LEFT]->Load(jNode);
+
+    this->forcesP[LEFT] = new ParamT<float>("force",0.01,0);
+    this->forcesP[LEFT]->Load(jNode);
+
+    this->gainsP[LEFT] = new ParamT<float>("gain",0.01,0);
+    this->gainsP[LEFT]->Load(jNode);
+
+    this->joints[LEFT] = 
dynamic_cast<SliderJoint*>(this->myParent->GetJoint(this->jointNamesP[LEFT]->GetValue()));
+  }
+
+  jNode = node->GetChild("rightJoint");
+  if (jNode)
+  {
+    this->jointNamesP[RIGHT] = new ParamT<std::string>("name", "", 1); 
+    this->jointNamesP[RIGHT]->Load(jNode);
+
+    this->forcesP[RIGHT] = new ParamT<float>("force",0.01,0);
+    this->forcesP[RIGHT]->Load(jNode);
+
+    this->gainsP[RIGHT] = new ParamT<float>("gain",0.01,0);
+    this->gainsP[RIGHT]->Load(jNode);
+
+    this->joints[RIGHT] = 
dynamic_cast<SliderJoint*>(this->myParent->GetJoint(this->jointNamesP[RIGHT]->GetValue()));
+  }
+
+  jNode = node->GetChild("liftJoint");
+  if (jNode)
+  {
+    this->jointNamesP[LIFT] = new ParamT<std::string>("name", "", 1); 
+    this->jointNamesP[LIFT]->Load(jNode);
+
+    this->forcesP[LIFT] = new ParamT<float>("force",0.01,0);
+    this->forcesP[LIFT]->Load(jNode);
+
+    this->gainsP[LIFT] = new ParamT<float>("gain",0.01,0);
+    this->gainsP[LIFT]->Load(jNode);
+
+    this->joints[LIFT] = 
dynamic_cast<SliderJoint*>(this->myParent->GetJoint(this->jointNamesP[LIFT]->GetValue()));
+  }
+
   Param::End();
 
-  this->joints[LEFT] = 
dynamic_cast<SliderJoint*>(this->myParent->GetJoint(this->leftJointNameP->GetValue()));
-  this->joints[RIGHT] = 
dynamic_cast<SliderJoint*>(this->myParent->GetJoint(this->rightJointNameP->GetValue()));
-
   if (!this->joints[LEFT])
     gzthrow("couldn't get left slider joint");
 
   if (!this->joints[RIGHT])
     gzthrow("couldn't get right slider joint");
 
+  if (!this->joints[LIFT])
+    gzthrow("couldn't get lift slider joint");
 }
 
 
////////////////////////////////////////////////////////////////////////////////
 /// Save the controller
 void Pioneer2_Gripper::SaveChild(std::string &prefix, std::ostream &stream)
 {
-  stream << prefix << *(this->leftJointNameP) << "\n";
-  stream << prefix << *(this->rightJointNameP) << "\n";
+  for (int i=0; i < 3; i++)
+  {
+    stream << prefix << "<joint name=\"" << this->jointNamesP[i]->GetValue() 
<< "\">\n";
+    stream << prefix << "  " << *(this->forcesP[i]) << "\n";
+    stream << prefix << "  " << *(this->gainsP[i]) << "\n";
+    stream << prefix << "</joint>\n";
+  }
+
 }
 
 
////////////////////////////////////////////////////////////////////////////////
@@ -115,19 +172,43 @@
   switch( this->myIface->data->cmd)
   {
     case GAZEBO_GRIPPER_CMD_OPEN:
-        this->joints[RIGHT]->SetParam(dParamVel,0.1);
-        this->joints[LEFT]->SetParam(dParamVel, -0.1);
+      this->joints[RIGHT]->SetParam(dParamVel,0.1);
+      this->joints[LEFT]->SetParam(dParamVel, -0.1);
       break;
 
     case GAZEBO_GRIPPER_CMD_CLOSE:
       this->joints[RIGHT]->SetParam(dParamVel,-0.1);
       this->joints[LEFT]->SetParam(dParamVel,0.1);
       break;
+
+    case GAZEBO_GRIPPER_CMD_STORE:
+      this->joints[LIFT]->SetParam(dParamVel, 0.2);
+      break;
+
+    case GAZEBO_GRIPPER_CMD_RETRIEVE:
+      this->joints[LIFT]->SetParam(dParamVel, -0.2);
+      break;
+
+    case GAZEBO_GRIPPER_CMD_STOP:
+      this->joints[RIGHT]->SetParam(dParamVel,0);
+      this->joints[LEFT]->SetParam(dParamVel,0);
+      this->joints[LIFT]->SetParam(dParamVel,0);
+      break;
+
+
+    /*default:
+      this->joints[RIGHT]->SetParam(dParamVel,0.0);
+      this->joints[LEFT]->SetParam(dParamVel,0.0);
+      this->joints[LIFT]->SetParam(dParamVel,0.0);
+      break;
+      */
   }
 
-  this->joints[LEFT]->SetParam(dParamFMax,.01);
-  this->joints[RIGHT]->SetParam(dParamFMax,.01);
 
+  this->joints[LEFT]->SetParam(dParamFMax, **(this->forcesP[LEFT]));
+  this->joints[RIGHT]->SetParam(dParamFMax, **(this->forcesP[RIGHT]));
+  this->joints[LIFT]->SetParam(dParamFMax, **(this->forcesP[LIFT]));
+
   this->myIface->Unlock();
 }
 

Modified: 
code/gazebo/trunk/server/controllers/gripper/pioneer2/Pioneer2_Gripper.hh
===================================================================
--- code/gazebo/trunk/server/controllers/gripper/pioneer2/Pioneer2_Gripper.hh   
2009-02-23 18:42:00 UTC (rev 7349)
+++ code/gazebo/trunk/server/controllers/gripper/pioneer2/Pioneer2_Gripper.hh   
2009-02-23 22:53:56 UTC (rev 7350)
@@ -93,10 +93,12 @@
   /// The parent Model
   private: Model *myParent;
 
-  private: SliderJoint *joints[2];
+  private: SliderJoint *joints[3];
 
-  private: ParamT<std::string> *leftJointNameP;
-  private: ParamT<std::string> *rightJointNameP;
+  private: ParamT<std::string> *jointNamesP[3];
+  private: ParamT<float> *gainsP[3];
+  private: ParamT<float> *forcesP[3];
+
 };
 
 /** \} */

Modified: code/gazebo/trunk/server/controllers/ptz/generic/Generic_PTZ.cc
===================================================================
--- code/gazebo/trunk/server/controllers/ptz/generic/Generic_PTZ.cc     
2009-02-23 18:42:00 UTC (rev 7349)
+++ code/gazebo/trunk/server/controllers/ptz/generic/Generic_PTZ.cc     
2009-02-23 22:53:56 UTC (rev 7350)
@@ -136,45 +136,55 @@
 // Update the controller
 void Generic_PTZ::UpdateChild()
 {
+  float tiltSpeed = 0;  
+  float panSpeed = 0; 
+
   this->ptzIface->Lock(1);
+  if (this->ptzIface->data->control_mode == GAZEBO_PTZ_POSITION_CONTROL)
+  {
+    this->cmdPan = this->ptzIface->data->cmd_pan;
+    this->cmdTilt = this->ptzIface->data->cmd_tilt;
+    //this->cmdZoom = this->hfov / this->ptzIface->data->cmd_zoom;
 
-  this->cmdPan = this->ptzIface->data->cmd_pan;
-  this->cmdTilt = this->ptzIface->data->cmd_tilt;
-  //this->cmdZoom = this->hfov / this->ptzIface->data->cmd_zoom;
+    // Apply joint limits to commanded pan/tilt angles
+    if (this->cmdTilt > M_PI*0.3)
+      this->cmdTilt = M_PI*0.3;
+    else if (this->cmdTilt < -M_PI*0.3)
+      this->cmdTilt = -M_PI*0.3;
 
-  this->ptzIface->Unlock();
+    if (this->cmdPan > M_PI*0.3)
+      this->cmdPan = M_PI*0.3;
+    else if (this->cmdPan < -M_PI*0.3)
+      this->cmdPan = -M_PI*0.3;
 
-  // Apply joint limits to commanded pan/tilt angles
-  if (this->cmdTilt > M_PI*0.3)
-    this->cmdTilt = M_PI*0.3;
-  else if (this->cmdTilt < -M_PI*0.3)
-    this->cmdTilt = -M_PI*0.3;
+    // Apply limits on commanded zoom
+    //if (this->cmdZoom < this->zoomMin)
+    // this->cmdZoom = this->zoomMin;
+    //if (this->cmdZoom > this->zoomMax)
+    // this->cmdZoom = this->zoomMax;
 
-  if (this->cmdPan > M_PI*0.3)
-    this->cmdPan = M_PI*0.3;
-  else if (this->cmdPan < -M_PI*0.3)
-    this->cmdPan = -M_PI*0.3;
+    // Set the pan and tilt motors; can't set angles so track cmds with
+    // a proportional control
+    tiltSpeed = this->cmdTilt - this->tiltJoint->GetAngle();
+    panSpeed = this->cmdPan - this->panJoint->GetAngle();
+  }
+  else
+  {
+    tiltSpeed = this->ptzIface->data->cmd_tilt_speed;
+    panSpeed = this->ptzIface->data->cmd_pan_speed;
+  }
 
-  // Apply limits on commanded zoom
-  //if (this->cmdZoom < this->zoomMin)
-   // this->cmdZoom = this->zoomMin;
-  //if (this->cmdZoom > this->zoomMax)
-   // this->cmdZoom = this->zoomMax;
+  this->ptzIface->Unlock();
 
-  // Set the pan and tilt motors; can't set angles so track cmds with
-  // a proportional control
-  float tilt = this->cmdTilt - this->tiltJoint->GetAngle();
-  float pan = this->cmdPan - this->panJoint->GetAngle();
-
-  if (fabs(tilt) > 0.01)
-    this->tiltJoint->SetParam( dParamVel, **(this->motionGainP) * tilt);
+  if (fabs(tiltSpeed) > 0.01)
+    this->tiltJoint->SetParam( dParamVel, **(this->motionGainP) * tiltSpeed);
   else
     this->tiltJoint->SetParam( dParamVel, 0);
 
   this->tiltJoint->SetParam( dParamFMax, **(this->forceP) );
 
-  if (fabs(pan) > 0.01)
-    this->panJoint->SetParam( dParamVel, **(this->motionGainP) * pan);
+  if (fabs(panSpeed) > 0.01)
+    this->panJoint->SetParam( dParamVel, **(this->motionGainP) * panSpeed);
   else
     this->panJoint->SetParam( dParamVel, 0);
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to