tibi_dabo_hri_alg_node.cpp
Go to the documentation of this file.
00001 #include "tibi_dabo_hri_alg_node.h"
00002 
00003 TibiDaboHriAlgNode::TibiDaboHriAlgNode(void) :
00004   seqs_aserver_(public_node_handle_, "hri")
00005 {
00006   //init class attributes if necessary
00007   this->loop_rate_ = 40;//in [Hz]
00008 
00009   // [init publishers]
00010   facial_expression_publisher_ = public_node_handle_.advertise<std_msgs::String>("facial_expression", 100);
00011   
00012   // [init subscribers]
00013   
00014   // [init services]
00015   
00016   // [init clients]
00017   
00018   // [init action servers]
00019   seqs_aserver_.registerStartCallback(boost::bind(&TibiDaboHriAlgNode::startCallback, this, _1));
00020   seqs_aserver_.registerStopCallback(boost::bind(&TibiDaboHriAlgNode::stopCallback, this));
00021   seqs_aserver_.registerIsFinishedCallback(boost::bind(&TibiDaboHriAlgNode::isFinishedCallback, this));
00022   seqs_aserver_.registerHasSucceedCallback(boost::bind(&TibiDaboHriAlgNode::hasSucceedCallback, this));
00023   seqs_aserver_.registerGetResultCallback(boost::bind(&TibiDaboHriAlgNode::getResultCallback, this, _1));
00024   seqs_aserver_.registerGetFeedbackCallback(boost::bind(&TibiDaboHriAlgNode::getFeedbackCallback, this, _1));
00025 
00026   // [init action clients]
00027   this->tts_.client=new TtsClient("tts", true),
00028   this->tts_.active=false;
00029   this->tts_.succeeded=false;
00030   this->tts_.loaded=false;
00031   this->tts_.percentage=0.0;
00032   this->leds_.client=new SeqClient("leds",true);
00033   this->leds_.active=false;
00034   this->leds_.succeeded=false;
00035   this->leds_.loaded=false;
00036   this->leds_.percentage=0.0;
00037   this->head_.client=new SeqClient("head",true);
00038   this->head_.active=false;
00039   this->head_.succeeded=false;
00040   this->head_.loaded=false;
00041   this->head_.percentage=0.0;
00042   this->left_arm_.client=new SeqClient("left_arm",true);
00043   this->left_arm_.active=false;
00044   this->left_arm_.succeeded=false;
00045   this->left_arm_.loaded=false;
00046   this->left_arm_.percentage=0.0;
00047   this->right_arm_.client=new SeqClient("right_arm",true);
00048   this->right_arm_.active=false;
00049   this->right_arm_.succeeded=false;
00050   this->right_arm_.loaded=false;
00051   this->right_arm_.percentage=0.0;
00052   
00053   srand(ros::Time::now().toSec());
00054 
00055   empty_leds_sequence_       = true;
00056   tts_connected_             = false;
00057   leds_connected_            = false;
00058   head_connected_            = false;
00059   left_arm_connected_        = false;
00060   right_arm_connected_       = false;
00061 }
00062 
00063 TibiDaboHriAlgNode::~TibiDaboHriAlgNode(void)
00064 {
00065   alg_.lock();
00066   // stop any current actions
00067   if(this->seqs_aserver_.isActive())
00068   {
00069     this->cancelCurrentGoals();
00070     this->seqs_aserver_.setAborted();
00071   }
00072   delete this->tts_.client;
00073   delete this->leds_.client;
00074   delete this->head_.client;
00075   delete this->left_arm_.client;
00076   delete this->right_arm_.client;
00077   // [free dynamic memory]
00078   alg_.unlock();
00079 }
00080 
00081 void TibiDaboHriAlgNode::cancelCurrentGoals(void)
00082 {
00083   ROS_INFO("TibiDaboHriAlgNode::cancelCurrentGoals!");
00084   if(this->tts_.client->isServerConnected() && this->tts_.loaded && this->tts_.active )
00085   {
00086     this->tts_.active=false;
00087     this->tts_.loaded=false;
00088     this->tts_.client->cancelGoal();
00089   }
00090   if(this->leds_.client->isServerConnected() && this->leds_.loaded && this->leds_.active )
00091   {
00092     this->leds_.active=false;
00093     this->leds_.loaded=false;
00094     this->leds_.client->cancelGoal();
00095   }
00096   if(this->head_.client->isServerConnected() && this->head_.loaded && this->head_.active )
00097   {
00098     this->head_.active=false;
00099     this->head_.loaded=false;
00100     this->head_.client->cancelGoal();
00101   }
00102   if(this->left_arm_.client->isServerConnected() && this->left_arm_.loaded && this->left_arm_.active )
00103   {
00104     this->left_arm_.active=false;
00105     this->left_arm_.loaded=false;
00106     this->left_arm_.client->cancelGoal();
00107   }
00108   if(this->right_arm_.client->isServerConnected() && this->right_arm_.loaded && this->right_arm_.active )
00109   {
00110     this->right_arm_.active=false;
00111     this->right_arm_.loaded=false;
00112     this->right_arm_.client->cancelGoal();
00113   }
00114 }
00115 
00116 void TibiDaboHriAlgNode::speak(void)
00117 {
00118   static int count = 0;
00119   std_msgs::String msg;
00120  
00121   if(count==0)
00122   {
00123     count=rand() % 200 + 200;
00124     msg.data = "speak";
00125     facial_expression_publisher_.publish(msg);
00126   }
00127   else 
00128   {
00129     count-=10;
00130     if(count<0) count=0;
00131   }
00132 }
00133 
00134 void TibiDaboHriAlgNode::mainNodeThread(void)
00135 {
00136   alg_.lock();
00137   // check availability of all sequence clients
00138   //ROS_INFO("TibiDaboHriAlgNode::mainNodeThread: checking connected clients!"); 
00139 
00140   // update client actions state
00141   if(!this->tts_.client->isServerConnected())
00142     tts_connected_             = false;
00143   else
00144     tts_connected_             = true;
00145 
00146   if(!this->leds_.client->isServerConnected())
00147     leds_connected_            = false;
00148   else  
00149     leds_connected_            = true;
00150  
00151   if(!this->head_.client->isServerConnected())
00152     head_connected_            = false;
00153   else
00154     head_connected_            = true;
00155  
00156   if(!this->left_arm_.client->isServerConnected())
00157     left_arm_connected_        = false;
00158   else
00159     left_arm_connected_        = true;
00160 
00161   if(!this->right_arm_.client->isServerConnected())
00162     right_arm_connected_       = false;
00163   else
00164     right_arm_connected_       = true;
00165   
00166   // if any of the sequence clients or tts client are active
00167   if( tts_connected_ || leds_connected_ || head_connected_ || left_arm_connected_ || right_arm_connected_)
00168   {
00169     // allow incoming action requests
00170     if( !this->seqs_aserver_.isStarted() )
00171     {
00172       this->seqs_aserver_.start();
00173       ROS_INFO("TibiDaboHriAlgNode:: Server Started!"); 
00174     }
00175   }
00176   else  // all clients are not alive
00177   {
00178     // if action server is active 
00179     if( this->seqs_aserver_.isActive() )
00180     {
00181       //preempt clients' current goals
00182       this->cancelCurrentGoals();
00183 
00184       // disable incoming action requests
00185       this->seqs_aserver_.setAborted();
00186     }
00187 
00188     // if action server is started
00189     if( this->seqs_aserver_.isStarted() )
00190     {
00191       // shutdown until all clients are available again
00192       this->seqs_aserver_.shutdown();
00193       ROS_INFO("TibiDaboHriAlgNode:: Server Stop!"); 
00194     }
00195   }
00196   
00197   alg_.unlock();
00198   // [fill msg structures]
00199   
00200   // [fill srv structure and make request to the server]
00201   
00202   // [fill action structure and make request to the action server]
00203 
00204   // [publish messages]
00205   
00206   alg_.lock();
00207   if( this->tts_.active && empty_leds_sequence_ )
00208   {
00209     //ROS_INFO("TibiDaboHriAlgNode::mainNodeThread: Speaking!");
00210     this->speak();
00211   }
00212   alg_.unlock();
00213 }
00214 
00215 /*  [subscriber callbacks] */
00216 
00217 /*  [service callbacks] */
00218 
00219 /*  [action callbacks] */
00220 
00222 //   Sequence Action Server
00224 void TibiDaboHriAlgNode::startCallback(const tibi_dabo_msgs::sequenceGoalConstPtr& goal)
00225 {
00226   ROS_INFO("TibiDaboHriAlgNode::startCallback:");
00227   //lock access to driver if necessary
00228   alg_.lock();
00229   
00230   std::string goal_str("goal : {");
00231   for(unsigned int ii=0; ii<goal->sequence_file.size(); ii++)
00232   {
00233     goal_str += goal->sequence_file[ii] + ", ";
00234   }
00235   ROS_INFO("TibiDaboHriAlgNode::%s}", goal_str.c_str());
00236 
00237   if(goal->sequence_file.size() != NUM_CLIENTS)
00238   {
00239     std::stringstream ss;
00240     ss << "WRONG input Goal format. #items is " << goal->sequence_file.size() << " instead of " << NUM_CLIENTS;
00241     ROS_WARN("TibiDaboHriAlgNode::startCallback: %s", ss.str().c_str());
00242     tibi_dabo_msgs::sequenceResult res;//(std::vector<bool>(5, false),std::vector<std::string>(5, ss.str()));
00243     //res.successful = std::vector<bool>(5, false);
00244     //res.observations.push_back(ss.str());
00245     seqs_aserver_.setAborted(res, ss.str());
00246   }
00247   else
00248   {
00249     iri_common_drivers_msgs::ttsGoal tts_goal;
00250     tibi_dabo_msgs::sequenceGoal leds_goal;
00251     tibi_dabo_msgs::sequenceGoal head_goal;
00252     tibi_dabo_msgs::sequenceGoal left_arm_goal;
00253     tibi_dabo_msgs::sequenceGoal right_arm_goal;
00254   
00255     ROS_INFO("TibiDaboHriAlgNode::startCallback: load sequences}");
00256     // load sequences
00257     tts_goal.msg = goal->sequence_file[TTS_];
00258     leds_goal.sequence_file.push_back( goal->sequence_file[LEDS_] );
00259     head_goal.sequence_file.push_back( goal->sequence_file[HEAD_] );
00260     left_arm_goal.sequence_file.push_back( goal->sequence_file[LEFT_ARM_] );
00261     right_arm_goal.sequence_file.push_back( goal->sequence_file[RIGHT_ARM_] );
00262 
00263     ROS_INFO("TibiDaboHriAlgNode::startCallback: make requests}");
00264     // make requests to all action servers
00265     // if goal sequence is not empty
00266     if(tts_goal.msg.size() != 0 && tts_connected_)
00267     {
00268       ttsMakeActionRequest(tts_goal);
00269       this->tts_.loaded=true;
00270     }
00271 
00272     if(leds_goal.sequence_file[0].size() != 0 && leds_connected_)
00273     {
00274       ledsMakeActionRequest(leds_goal);
00275       empty_leds_sequence_ = false;
00276       this->leds_.loaded=true;
00277     }
00278     else
00279     {
00280       empty_leds_sequence_ = true;
00281     }
00282 
00283     if(head_goal.sequence_file[0].size() != 0 && head_connected_)
00284     {
00285       this->head_.loaded=true;
00286       headMakeActionRequest(head_goal);
00287     }
00288     
00289     if(left_arm_goal.sequence_file[0].size() != 0 && left_arm_connected_ )
00290     {
00291       this->left_arm_.loaded=true;
00292       leftArmMakeActionRequest(left_arm_goal);
00293     }
00294     
00295     if(right_arm_goal.sequence_file[0].size() != 0 && right_arm_connected_ )
00296     {
00297       this->right_arm_.loaded=true;
00298       rightArmMakeActionRequest(right_arm_goal);
00299     }
00300   }  
00301   //lock access to driver if necessary
00302   alg_.unlock();
00303 }
00304 
00305 void TibiDaboHriAlgNode::stopCallback(void)
00306 {
00307   ROS_INFO("TibiDaboHriAlgNode::stopCallback");
00308   alg_.lock();
00309   this->cancelCurrentGoals();
00310   alg_.unlock();
00311 }
00312 
00313 bool TibiDaboHriAlgNode::isFinishedCallback(void)
00314 {
00315   ROS_INFO("TibiDaboHriAlgNode::isFinishedCallback");
00316 
00317   bool finish = true;
00318 
00319   alg_.lock();
00320 
00321   if(this->tts_.loaded && this->tts_.active )
00322     finish=false;
00323   if(this->leds_.loaded && this->leds_.active )
00324     finish=false;
00325   if(this->head_.loaded && this->head_.active )
00326     finish=false;
00327   if(this->left_arm_.loaded && this->left_arm_.active )
00328     finish=false;
00329   if(this->right_arm_.loaded && this->right_arm_.active )
00330     finish=false;
00331 
00332   alg_.unlock();
00333 //   if(finish)
00334 //     ROS_INFO("TibiDaboHriAlgNode::isFinishedCallback - FINISHED!!!");
00335 //   else
00336 //     ROS_INFO("TibiDaboHriAlgNode::isFinishedCallback - NOT FINISHED YET!!!");
00337     
00338 
00339   return finish;
00340 }
00341 
00342 bool TibiDaboHriAlgNode::hasSucceedCallback(void)
00343 {
00344   ROS_INFO("TibiDaboHriAlgNode::hasSucceedCallback");
00345 
00346   bool succeed = true;
00347 
00348   alg_.lock();
00349 
00350   if(this->tts_.loaded && !this->tts_.succeeded )
00351   {
00352     succeed=false;
00353     this->tts_.loaded=false;
00354   }
00355   if(this->leds_.loaded && !this->leds_.succeeded )
00356   {
00357     succeed=false;
00358     this->leds_.loaded=false;
00359   }
00360   if(this->head_.loaded && !this->head_.succeeded )
00361   {
00362     succeed=false;
00363     this->head_.loaded=false;
00364   }
00365   if(this->left_arm_.loaded && !this->left_arm_.succeeded )
00366   {
00367     succeed=false;
00368     this->left_arm_.loaded=false;
00369   }
00370   if(this->right_arm_.loaded && !this->right_arm_.succeeded )
00371   {
00372     succeed=false;
00373     this->right_arm_.loaded=false;
00374   }
00375 
00376   alg_.unlock();
00377   
00378   return succeed;
00379 }
00380 
00381 void TibiDaboHriAlgNode::getResultCallback(tibi_dabo_msgs::sequenceResultPtr& result)
00382 {
00383   //lock access to driver if necessary
00384   alg_.lock();
00385 
00386   result->successful.push_back(this->tts_.succeeded);
00387   result->successful.push_back(this->leds_.succeeded);
00388   result->successful.push_back(this->head_.succeeded);
00389   result->successful.push_back(this->left_arm_.succeeded);
00390   result->successful.push_back(this->right_arm_.succeeded);
00391   
00392   //lock access to driver if necessary
00393   alg_.unlock();
00394 }
00395 
00396 void TibiDaboHriAlgNode::getFeedbackCallback(tibi_dabo_msgs::sequenceFeedbackPtr& feedback)
00397 {
00398   //lock access to driver if necessary
00399   alg_.lock();
00400   
00401   feedback->percentage.push_back(this->tts_.percentage);
00402   feedback->percentage.push_back(this->leds_.percentage);
00403   feedback->percentage.push_back(this->head_.percentage);
00404   feedback->percentage.push_back(this->left_arm_.percentage);
00405   feedback->percentage.push_back(this->right_arm_.percentage);
00406 
00407   //lock access to driver if necessary
00408   alg_.unlock();
00409 }
00410 
00412 //   Loquendo TTS Action Client
00414 void TibiDaboHriAlgNode::ttsDone(const actionlib::SimpleClientGoalState& state,
00415                                  const iri_common_drivers_msgs::ttsResultConstPtr& result) 
00416 {
00417   std_msgs::String expression;
00418 
00419   alg_.lock();
00420 
00421   ROS_INFO("TibiDaboHriAlgNode::ttsDone: Goal Achieved!"); 
00422   ROS_INFO("TibiDaboHriAlgNode::ttsDone: state=%s", state.toString().c_str()); 
00423 
00424   if( state.state_ == actionlib::SimpleClientGoalState::SUCCEEDED )
00425     this->tts_.succeeded=true;
00426   else 
00427     this->tts_.succeeded=false;
00428     
00429   this->tts_.active=false;
00430   if(this->empty_leds_sequence_)
00431   {
00432     expression.data="stand_by";
00433     this->facial_expression_publisher_.publish(expression);
00434   }
00435 
00436   alg_.unlock();
00437 } 
00438 
00439 void TibiDaboHriAlgNode::ttsActive(void) 
00440 { 
00441   ROS_INFO("TibiDaboHriAlgNode::ttsActive: Goal just went active!"); 
00442 } 
00443 
00444 void TibiDaboHriAlgNode::ttsFeedback(const iri_common_drivers_msgs::ttsFeedbackConstPtr& feedback) 
00445 {
00446   ROS_INFO("TibiDaboHriAlgNode::ttsFeedback: Got Feedback!"); 
00447   alg_.lock();
00448   if(feedback->busy)
00449     this->tts_.percentage=0.0;
00450   else
00451     this->tts_.percentage=100.0;
00452   alg_.unlock();
00453   ROS_INFO("TibiDaboHriAlgNode::ttsFeedback: busy=%d", feedback->busy); 
00454 }
00455 
00457 //   Head Leds Action Client
00459 void TibiDaboHriAlgNode::ledsDone(const actionlib::SimpleClientGoalState& state,
00460                                   const tibi_dabo_msgs::sequenceResultConstPtr& result)
00461 {
00462   alg_.lock();
00463   
00464   ROS_INFO("TibiDaboHriAlgNode::ledsDone: state=%s", state.toString().c_str());
00465 
00466   if( state.state_ == actionlib::SimpleClientGoalState::SUCCEEDED )
00467     this->leds_.succeeded=true;
00468   else
00469     this->leds_.succeeded=false;
00470 
00471   this->leds_.active=false;
00472   alg_.unlock();
00473 }
00474 
00475 void TibiDaboHriAlgNode::ledsActive(void)
00476 {
00477   ROS_INFO("TibiDaboHriAlgNode::ledsActive: Goal just went active!"); 
00478 }
00479 
00480 void TibiDaboHriAlgNode::ledsFeedback(const tibi_dabo_msgs::sequenceFeedbackConstPtr& feedback)
00481 {
00482   ROS_DEBUG("TibiDaboHriAlgNode::ledsFeedback: percentage=%f", feedback->percentage[0]); 
00483   alg_.lock();
00484   this->leds_.percentage=feedback->percentage[0];
00485   alg_.unlock();
00486 }
00487 
00489 //   Head Sequence Action Client
00491 
00492 void TibiDaboHriAlgNode::headDone(const actionlib::SimpleClientGoalState& state,
00493                                   const tibi_dabo_msgs::sequenceResultConstPtr& result)
00494 {
00495   alg_.lock();
00496  
00497   ROS_INFO("TibiDaboHriAlgNode::headDone: state=%s", state.toString().c_str());
00498 
00499   if( state.state_ == actionlib::SimpleClientGoalState::SUCCEEDED )
00500     this->head_.succeeded=true;
00501   else
00502     this->head_.succeeded=false;
00503 
00504   this->head_.active=false;
00505   alg_.unlock();
00506 }
00507 
00508 void TibiDaboHriAlgNode::headActive(void)
00509 {
00510   ROS_INFO("TibiDaboHriAlgNode::headActive: Goal just went active!"); 
00511 }
00512 
00513 void TibiDaboHriAlgNode::headFeedback(const tibi_dabo_msgs::sequenceFeedbackConstPtr& feedback)
00514 {
00515   ROS_DEBUG("TibiDaboHriAlgNode::headFeedback: percentage=%f", feedback->percentage[0]);
00516   alg_.lock();
00517   this->head_.percentage=feedback->percentage[0];
00518   alg_.unlock(); 
00519 }
00520 
00522 //   Left Arm Sequence Action Client
00524 void TibiDaboHriAlgNode::leftArmDone(const actionlib::SimpleClientGoalState& state, 
00525                                      const tibi_dabo_msgs::sequenceResultConstPtr& result)
00526 {
00527   alg_.lock();
00528   
00529   ROS_INFO("TibiDaboHriAlgNode::leftArmDone: state=%s", state.toString().c_str());
00530 
00531   if( state.state_ == actionlib::SimpleClientGoalState::SUCCEEDED )
00532     this->left_arm_.succeeded=true;
00533   else
00534     this->left_arm_.succeeded=false;
00535 
00536   this->left_arm_.active=false;
00537   alg_.unlock();
00538 }
00539 
00540 void TibiDaboHriAlgNode::leftArmActive(void)
00541 {
00542   ROS_INFO("TibiDaboHriAlgNode::leftArmActive: Goal just went active!"); 
00543 }
00544 
00545 void TibiDaboHriAlgNode::leftArmFeedback(const tibi_dabo_msgs::sequenceFeedbackConstPtr& feedback)
00546 {
00547   alg_.lock();
00548   ROS_DEBUG("TibiDaboHriAlgNode::leftArmFeedback: percentage=%f", feedback->percentage[0]);
00549   this->left_arm_.percentage=feedback->percentage[0];
00550   alg_.unlock();
00551 }
00552 
00554 //   Right Arm Sequence Action Client
00556 void TibiDaboHriAlgNode::rightArmDone(const actionlib::SimpleClientGoalState& state, 
00557                                       const tibi_dabo_msgs::sequenceResultConstPtr& result)
00558 {
00559   alg_.lock();
00560   
00561   ROS_INFO("TibiDaboHriAlgNode::rightArmDone: state=%s", state.toString().c_str());
00562 
00563   if( state.state_ == actionlib::SimpleClientGoalState::SUCCEEDED )
00564     this->right_arm_.succeeded=true;
00565   else
00566     this->right_arm_.succeeded=false;
00567 
00568   this->right_arm_.active=false;
00569   alg_.unlock();  
00570 }
00571 
00572 void TibiDaboHriAlgNode::rightArmActive(void)
00573 {
00574   ROS_INFO("TibiDaboHriAlgNode::rightArmActive: Goal just went active!"); 
00575 }
00576 
00577 void TibiDaboHriAlgNode::rightArmFeedback(const tibi_dabo_msgs::sequenceFeedbackConstPtr& feedback)
00578 {
00579   alg_.lock();
00580   ROS_DEBUG("TibiDaboHriAlgNode::rightArmFeedback: percentage=%f", feedback->percentage[0]);
00581   this->right_arm_.percentage=feedback->percentage[0];
00582   alg_.unlock();
00583 }
00584 
00585 /*  [action requests] */
00586 void TibiDaboHriAlgNode::ttsMakeActionRequest(const iri_common_drivers_msgs::ttsGoal & tts_goal)
00587 {
00588   ROS_INFO("TibiDaboHriAlgNode::ttsMakeActionRequest: Starting New Request!"); 
00589 
00590   //wait for the action server to start 
00591   //will wait for infinite time 
00592   this->tts_.client->waitForServer();  
00593   ROS_DEBUG("TibiDaboHriAlgNode::ttsMakeActionRequest: TTS Server is Available!"); 
00594 
00595   //send a goal to the action 
00596   tts_.client->sendGoal(tts_goal, 
00597              boost::bind(&TibiDaboHriAlgNode::ttsDone,     this, _1, _2), 
00598              boost::bind(&TibiDaboHriAlgNode::ttsActive,   this), 
00599              boost::bind(&TibiDaboHriAlgNode::ttsFeedback, this, _1)); 
00600   
00601   this->tts_.active=true;
00602 }
00603 
00604 void TibiDaboHriAlgNode::ledsMakeActionRequest(const tibi_dabo_msgs::sequenceGoal & leds_goal)
00605 {
00606   ROS_INFO("TibiDaboHriAlgNode::ledsMakeActionRequest: Starting New Request!"); 
00607   this->leds_.client->waitForServer();  
00608   ROS_DEBUG("TibiDaboHriAlgNode::ledsMakeActionRequest: Leds Server is Available!"); 
00609 
00610   //send a goal to the action 
00611   this->leds_.client->sendGoal(leds_goal, 
00612               boost::bind(&TibiDaboHriAlgNode::ledsDone,     this, _1, _2), 
00613               boost::bind(&TibiDaboHriAlgNode::ledsActive,   this), 
00614               boost::bind(&TibiDaboHriAlgNode::ledsFeedback, this, _1)); 
00615 
00616   this->leds_.active=true;
00617 }
00618 
00619 void TibiDaboHriAlgNode::headMakeActionRequest(const tibi_dabo_msgs::sequenceGoal & head_goal)
00620 {
00621   ROS_INFO("TibiDaboHriAlgNode::headMakeActionRequest: Starting New Request!"); 
00622   this->head_.client->waitForServer();  
00623   ROS_DEBUG("TibiDaboHriAlgNode::headMakeActionRequest: Head Server is Available!"); 
00624 
00625   //send a goal to the action 
00626   this->head_.client->sendGoal(head_goal, 
00627               boost::bind(&TibiDaboHriAlgNode::headDone,     this, _1, _2), 
00628               boost::bind(&TibiDaboHriAlgNode::headActive,   this), 
00629               boost::bind(&TibiDaboHriAlgNode::headFeedback, this, _1)); 
00630 
00631   this->head_.active=true;
00632 }
00633 
00634 void TibiDaboHriAlgNode::leftArmMakeActionRequest(const tibi_dabo_msgs::sequenceGoal & left_arm_goal)
00635 {
00636   ROS_INFO("TibiDaboHriAlgNode::leftArmMakeActionRequest: Starting New Request!"); 
00637   this->left_arm_.client->waitForServer();  
00638   ROS_DEBUG("TibiDaboHriAlgNode::headMakeActionRequest: Head Server is Available!"); 
00639 
00640   //send a goal to the action 
00641 
00642   this->left_arm_.client->sendGoal(left_arm_goal, 
00643               boost::bind(&TibiDaboHriAlgNode::leftArmDone,     this, _1, _2), 
00644               boost::bind(&TibiDaboHriAlgNode::leftArmActive,   this), 
00645               boost::bind(&TibiDaboHriAlgNode::leftArmFeedback, this, _1)); 
00646   this->left_arm_.active=true;
00647 }
00648 
00649 void TibiDaboHriAlgNode::rightArmMakeActionRequest(const tibi_dabo_msgs::sequenceGoal & right_arm_goal)
00650 {
00651   ROS_INFO("TibiDaboHriAlgNode::leftArmMakeActionRequest: Starting New Request!"); 
00652   this->right_arm_.client->waitForServer();  
00653   ROS_DEBUG("TibiDaboHriAlgNode::headMakeActionRequest: Head Server is Available!"); 
00654 
00655   //send a goal to the action 
00656   this->right_arm_.client->sendGoal(right_arm_goal, 
00657               boost::bind(&TibiDaboHriAlgNode::rightArmDone,     this, _1, _2), 
00658               boost::bind(&TibiDaboHriAlgNode::rightArmActive,   this), 
00659               boost::bind(&TibiDaboHriAlgNode::rightArmFeedback, this, _1)); 
00660   this->right_arm_.active=true;
00661 }
00662 
00663 void TibiDaboHriAlgNode::node_config_update(Config &config, uint32_t level)
00664 {
00665 }
00666 
00667 void TibiDaboHriAlgNode::addNodeDiagnostics(void)
00668 {
00669 }
00670 
00671 /* main function */
00672 int main(int argc,char *argv[])
00673 {
00674   return algorithm_base::main<TibiDaboHriAlgNode>(argc, argv, "tibi_dabo_hri_alg_node");
00675 }


tibi_dabo_hri_node
Author(s): Joan Perez, jnperez at iri.upc.edu
autogenerated on Fri Dec 6 2013 22:17:44