Go to the documentation of this file.00001 #include "dynamixel_no_gripper_driver_node.h"
00002
00003 DynamixelNoGripperDriverNode::DynamixelNoGripperDriverNode(ros::NodeHandle &nh) :
00004 iri_base_driver::IriBaseNodeDriver<DynamixelNoGripperDriver>(nh),
00005 is_opened_(false),
00006 is_closed_(false),
00007 tool_open_aserver_(public_node_handle_, "tool_open_action"),
00008 tool_close_aserver_(public_node_handle_, "tool_close_action")
00009 {
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 tool_open_aserver_.registerStartCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_openStartCallback, this, _1));
00023 tool_open_aserver_.registerStopCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_openStopCallback, this));
00024 tool_open_aserver_.registerIsFinishedCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_openIsFinishedCallback, this));
00025 tool_open_aserver_.registerHasSucceedCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_openHasSucceedCallback, this));
00026 tool_open_aserver_.registerGetResultCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_openGetResultCallback, this, _1));
00027 tool_open_aserver_.registerGetFeedbackCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_openGetFeedbackCallback, this, _1));
00028 tool_open_aserver_.start();
00029
00030 tool_close_aserver_.registerStartCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_closeStartCallback, this, _1));
00031 tool_close_aserver_.registerStopCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_closeStopCallback, this));
00032 tool_close_aserver_.registerIsFinishedCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_closeIsFinishedCallback, this));
00033 tool_close_aserver_.registerHasSucceedCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_closeHasSucceedCallback, this));
00034 tool_close_aserver_.registerGetResultCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_closeGetResultCallback, this, _1));
00035 tool_close_aserver_.registerGetFeedbackCallback(boost::bind(&DynamixelNoGripperDriverNode::tool_closeGetFeedbackCallback, this, _1));
00036 tool_close_aserver_.start();
00037
00038
00039 }
00040
00041 void DynamixelNoGripperDriverNode::mainNodeThread(void)
00042 {
00043
00044 this->driver_.lock();
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 this->driver_.unlock();
00060 }
00061
00062
00063
00064
00065
00066
00067 void DynamixelNoGripperDriverNode::tool_openStartCallback(const iri_common_drivers_msgs::tool_openGoalConstPtr& goal)
00068 {
00069 driver_.lock();
00070
00071 try
00072 {
00073 if (!driver_.open_gripper())
00074 {
00075 ROS_ERROR("Unable to open gripper");
00076 is_opened_ = false;
00077 }
00078 is_opened_ = true;
00079 }
00080 catch(...)
00081 {
00082 ROS_WARN("Uncatched exception");
00083 }
00084
00085 driver_.unlock();
00086 }
00087
00088 void DynamixelNoGripperDriverNode::tool_openStopCallback(void)
00089 {
00090 driver_.lock();
00091
00092 try{
00093 driver_.stop_gripper();
00094 }catch(...){
00095 ROS_WARN("Uncatched exception");
00096 }
00097 driver_.unlock();
00098 }
00099
00100 bool DynamixelNoGripperDriverNode::tool_openIsFinishedCallback(void)
00101 {
00102 bool ret = false;
00103
00104 driver_.lock();
00105
00106 if (driver_.is_at_max_angle())
00107 {
00108 ret = true;
00109 }
00110
00111 driver_.unlock();
00112
00113 return ret;
00114 }
00115
00116 bool DynamixelNoGripperDriverNode::tool_openHasSucceedCallback(void)
00117 {
00118 bool ret = false;
00119
00120 driver_.lock();
00121
00122 driver_.disable_gripper();
00123 ret = true;
00124 driver_.unlock();
00125
00126 return ret;
00127 }
00128
00129 void DynamixelNoGripperDriverNode::tool_openGetResultCallback(iri_common_drivers_msgs::tool_openResultPtr& result)
00130 {
00131 driver_.lock();
00132
00133 result->successful = is_opened_;
00134 driver_.unlock();
00135 }
00136
00137 void DynamixelNoGripperDriverNode::tool_openGetFeedbackCallback(iri_common_drivers_msgs::tool_openFeedbackPtr& feedback)
00138 {
00139 driver_.lock();
00140 try
00141 {
00142 feedback->angle = driver_.get_current_angle();
00143 feedback->effort = driver_.get_current_effort();
00144 ROS_INFO("[angle]: %f, [effort]: %f", feedback->angle, feedback->effort);
00145 }
00146 catch(...)
00147 {
00148 ROS_WARN("Uncatched exception");
00149 }
00150 driver_.unlock();
00151 }
00152 void DynamixelNoGripperDriverNode::tool_closeStartCallback(const iri_common_drivers_msgs::tool_closeGoalConstPtr& goal)
00153 {
00154 driver_.lock();
00155
00156 try
00157 {
00158 is_closed_ = true;
00159
00160 if (!driver_.close_gripper())
00161 {
00162 ROS_ERROR("Unable to close gripper");
00163 is_closed_ = false;
00164 }
00165 }
00166 catch(...)
00167 {
00168 ROS_WARN("Uncatched exception");
00169 }
00170
00171 driver_.unlock();
00172 }
00173
00174 void DynamixelNoGripperDriverNode::tool_closeStopCallback(void)
00175 {
00176 driver_.lock();
00177
00178 try{
00179 driver_.stop_gripper();
00180 }catch(...){
00181 ROS_WARN("Uncatched exception");
00182 }
00183 driver_.unlock();
00184 }
00185
00186 bool DynamixelNoGripperDriverNode::tool_closeIsFinishedCallback(void)
00187 {
00188 bool ret = false;
00189
00190 driver_.lock();
00191
00192 if (driver_.is_at_min_angle())
00193 {
00194 ret = true;
00195 }
00196
00197 driver_.unlock();
00198
00199 return ret;
00200 }
00201
00202 bool DynamixelNoGripperDriverNode::tool_closeHasSucceedCallback(void)
00203 {
00204 bool ret = false;
00205
00206 driver_.lock();
00207
00208 ret = true;
00209 driver_.unlock();
00210
00211 return ret;
00212 }
00213
00214 void DynamixelNoGripperDriverNode::tool_closeGetResultCallback(iri_common_drivers_msgs::tool_closeResultPtr& result)
00215 {
00216 driver_.lock();
00217
00218 result->successful = is_closed_;
00219 driver_.unlock();
00220 }
00221
00222 void DynamixelNoGripperDriverNode::tool_closeGetFeedbackCallback(iri_common_drivers_msgs::tool_closeFeedbackPtr& feedback)
00223 {
00224 driver_.lock();
00225 try
00226 {
00227 feedback->angle = driver_.get_current_angle();
00228 feedback->effort = driver_.get_current_effort();
00229 ROS_INFO("[angle]: %f, [effort]: %f", feedback->angle, feedback->effort);
00230 }
00231 catch(...)
00232 {
00233 ROS_WARN("Uncatched exception");
00234 }
00235 driver_.unlock();
00236 }
00237
00238
00239
00240 void DynamixelNoGripperDriverNode::postNodeOpenHook(void)
00241 {
00242 }
00243
00244 void DynamixelNoGripperDriverNode::addNodeDiagnostics(void)
00245 {
00246 }
00247
00248 void DynamixelNoGripperDriverNode::addNodeOpenedTests(void)
00249 {
00250 }
00251
00252 void DynamixelNoGripperDriverNode::addNodeStoppedTests(void)
00253 {
00254 }
00255
00256 void DynamixelNoGripperDriverNode::addNodeRunningTests(void)
00257 {
00258 }
00259
00260 void DynamixelNoGripperDriverNode::reconfigureNodeHook(int level)
00261 {
00262 }
00263
00264 DynamixelNoGripperDriverNode::~DynamixelNoGripperDriverNode(void)
00265 {
00266
00267 }
00268
00269
00270 int main(int argc,char *argv[])
00271 {
00272 return driver_base::main<DynamixelNoGripperDriverNode>(argc, argv, "dynamixel_no_gripper_driver_node");
00273 }