Go to the documentation of this file.00001 #include "wam_dmp_tracker_driver_node.h"
00002
00003 WamDmpTrackerDriverNode::WamDmpTrackerDriverNode(ros::NodeHandle &nh) :
00004 iri_base_driver::IriBaseNodeDriver<WamDmpTrackerDriver>(nh),
00005 DMPTracker_client_("/estirabot/estirabot_controller/DMPTracker", true)
00006 {
00007
00008
00009
00010
00011 this->DMPTrackerNewGoal_publisher_ = this->public_node_handle_.advertise<trajectory_msgs::JointTrajectoryPoint>("DMPTracker_output", 1);
00012
00013
00014 this->pose_surface_subscriber_ = this->public_node_handle_.subscribe("pose_surface", 1, &WamDmpTrackerDriverNode::pose_surface_callback, this);
00015
00016
00017
00018
00019 wamik_client_ = this->public_node_handle_.serviceClient<iri_wam_common_msgs::wamInverseKinematics>("DMP_ik");
00020
00021
00022
00023
00024
00025
00026 DMPTrackerMakeActionRequest();
00027
00028
00029 }
00030
00031 void WamDmpTrackerDriverNode::mainNodeThread(void)
00032 {
00033
00034 this->driver_.lock();
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 this->driver_.unlock();
00053 }
00054
00055
00056 void WamDmpTrackerDriverNode::pose_surface_callback(const geometry_msgs::PoseStamped::ConstPtr& msg)
00057 {
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081 wamik_srv_.request.pose.header.frame_id = msg->header.frame_id;
00082 wamik_srv_.request.pose.pose = msg->pose;
00083 wamik_srv_.request.pose.pose.orientation.x = 0.635;
00084 wamik_srv_.request.pose.pose.orientation.y = 0.474;
00085 wamik_srv_.request.pose.pose.orientation.z = 0.415;
00086 wamik_srv_.request.pose.pose.orientation.w = -0.445;
00087 ROS_INFO("WamDmpTrackerDriverNode:: Response: %f %f %f %f %f %f %f",
00088 wamik_srv_.request.pose.pose.position.x,
00089 wamik_srv_.request.pose.pose.position.y,
00090 wamik_srv_.request.pose.pose.position.z,
00091 wamik_srv_.request.pose.pose.orientation.x,
00092 wamik_srv_.request.pose.pose.orientation.y,
00093 wamik_srv_.request.pose.pose.orientation.z,
00094 wamik_srv_.request.pose.pose.orientation.w
00095 );
00096 ROS_INFO("WamDmpTrackerDriverNode:: Sending New Request!");
00097 if (wamik_client_.call(wamik_srv_))
00098 {
00099 ROS_INFO("WamDmpTrackerDriverNode:: Response: %f %f %f %f %f %f %f",
00100 wamik_srv_.response.joints.position[0],
00101 wamik_srv_.response.joints.position[1],
00102 wamik_srv_.response.joints.position[2],
00103 wamik_srv_.response.joints.position[3],
00104 wamik_srv_.response.joints.position[4],
00105 wamik_srv_.response.joints.position[5],
00106 wamik_srv_.response.joints.position[6]
00107 );
00108
00109
00110
00111 trajectory_msgs::JointTrajectoryPoint new_joints;
00112 new_joints.positions.resize(7);
00113 for (size_t i=0;i<7;i++)
00114 new_joints.positions[i] = wamik_srv_.response.joints.position[i];
00115
00116 this->DMPTrackerNewGoal_publisher_.publish(new_joints);
00117
00118 }
00119 else
00120 {
00121 ROS_INFO("WamDmpTrackerDriverNode:: Failed to Call Server on topic wamik ");
00122 }
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137 }
00138
00139
00140
00141
00142 void WamDmpTrackerDriverNode::DMPTrackerDone(const actionlib::SimpleClientGoalState& state, const iri_wam_common_msgs::DMPTrackerResultConstPtr& result)
00143 {
00144 if( state.toString().compare("SUCCEEDED") == 0 )
00145 ROS_INFO("WamDmpTrackerDriverNode::DMPTrackerDone: Goal Achieved!");
00146 else
00147 ROS_INFO("WamDmpTrackerDriverNode::DMPTrackerDone: %s", state.toString().c_str());
00148
00149
00150 }
00151
00152 void WamDmpTrackerDriverNode::DMPTrackerActive()
00153 {
00154
00155 }
00156
00157 void WamDmpTrackerDriverNode::DMPTrackerFeedback(const iri_wam_common_msgs::DMPTrackerFeedbackConstPtr& feedback)
00158 {
00159
00160
00161 bool feedback_is_ok = true;
00162
00163
00164
00165
00166
00167 if( !feedback_is_ok )
00168 {
00169 DMPTracker_client_.cancelGoal();
00170
00171 }
00172 }
00173
00174
00175 void WamDmpTrackerDriverNode::DMPTrackerMakeActionRequest()
00176 {
00177 ROS_INFO("WamDmpTrackerDriverNode::DMPTrackerMakeActionRequest: Starting New Request!");
00178
00179
00180
00181 DMPTracker_client_.waitForServer();
00182 ROS_INFO("WamDmpTrackerDriverNode::DMPTrackerMakeActionRequest: Server is Available!");
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205 DMPTracker_goal_.initial.positions.resize(7);
00206 DMPTracker_goal_.initial.positions[0] = 0.851;
00207 DMPTracker_goal_.initial.positions[1] = 1.33;
00208 DMPTracker_goal_.initial.positions[2] = -1.23;
00209 DMPTracker_goal_.initial.positions[3] = 2.18;
00210 DMPTracker_goal_.initial.positions[4] = 0.24;
00211 DMPTracker_goal_.initial.positions[5] = -1.37;
00212 DMPTracker_goal_.initial.positions[6] = 1.23;
00213
00214 DMPTracker_goal_.goal.positions.resize(7);
00215 DMPTracker_goal_.goal.positions[0] = 0.54;
00216 DMPTracker_goal_.goal.positions[1] = 1.56;
00217 DMPTracker_goal_.goal.positions[2] = -1.43;
00218 DMPTracker_goal_.goal.positions[3] = 1.63;
00219 DMPTracker_goal_.goal.positions[4] = 0.14;
00220 DMPTracker_goal_.goal.positions[5] = -1.16;
00221 DMPTracker_goal_.goal.positions[6] = 1.53;
00222
00223 DMPTracker_client_.sendGoal(DMPTracker_goal_,
00224 boost::bind(&WamDmpTrackerDriverNode::DMPTrackerDone, this, _1, _2),
00225 boost::bind(&WamDmpTrackerDriverNode::DMPTrackerActive, this),
00226 boost::bind(&WamDmpTrackerDriverNode::DMPTrackerFeedback, this, _1));
00227 ROS_INFO("WamDmpTrackerDriverNode::DMPTrackerMakeActionRequest: Goal Sent. Wait for Result!");
00228 }
00229
00230 void WamDmpTrackerDriverNode::postNodeOpenHook(void)
00231 {
00232 }
00233
00234 void WamDmpTrackerDriverNode::addNodeDiagnostics(void)
00235 {
00236 }
00237
00238 void WamDmpTrackerDriverNode::addNodeOpenedTests(void)
00239 {
00240 }
00241
00242 void WamDmpTrackerDriverNode::addNodeStoppedTests(void)
00243 {
00244 }
00245
00246 void WamDmpTrackerDriverNode::addNodeRunningTests(void)
00247 {
00248 }
00249
00250 void WamDmpTrackerDriverNode::reconfigureNodeHook(int level)
00251 {
00252 }
00253
00254 WamDmpTrackerDriverNode::~WamDmpTrackerDriverNode(void)
00255 {
00256
00257 }
00258
00259
00260 int main(int argc,char *argv[])
00261 {
00262 return driver_base::main<WamDmpTrackerDriverNode>(argc, argv, "wam_dmp_tracker_driver_node");
00263 }