00001 #ifndef _WAM_IK_H_ 00002 #define _WAM_IK_H_ 00003 00004 #include <math.h> 00005 #include <Eigen/StdVector> 00006 #include <Eigen/Dense> 00007 #include <string> 00008 #include "ros/this_node.h" 00009 #include "ros/names.h" 00010 #include "ros/node_handle.h" 00011 #include "ros/rate.h" 00012 extern "C" { 00013 #include "wamik.h" //kaijen wam IK library 00014 } 00015 00016 // [publisher subscriber headers] 00017 #include "sensor_msgs/JointState.h" 00018 00019 // [service client headers] 00020 #include "iri_wam_common_msgs/pose_move.h" 00021 #include "iri_wam_common_msgs/joints_move.h" 00022 #include "iri_wam_common_msgs/wamInverseKinematics.h" 00023 00024 // [action server client headers] 00025 00026 class WamIK { 00027 private: 00028 ros::NodeHandle nh_; 00029 // [publisher attributes] 00030 sensor_msgs::JointState ik_joints_msg; 00031 ros::Publisher ik_joints_publisher_; 00032 Eigen::VectorXd joints_; 00033 00034 // [subscriber attributes] 00035 ros::Subscriber joint_states_subscriber; 00036 void joint_states_callback(const sensor_msgs::JointState::ConstPtr& msg); 00037 std::vector<double> currentjoints; 00038 00039 // [service attributes] 00040 ros::ServiceServer pose_move_server; 00041 bool pose_moveCallback(iri_wam_common_msgs::pose_move::Request &req, iri_wam_common_msgs::pose_move::Response &res); 00042 ros::ServiceServer wamik_server; 00043 bool wamikCallback(iri_wam_common_msgs::wamInverseKinematics::Request &req, iri_wam_common_msgs::wamInverseKinematics::Response &res); 00044 00045 // [client attributes] 00046 ros::ServiceClient joint_move_client; 00047 iri_wam_common_msgs::joints_move joint_move_srv; 00048 static bool ik(std::vector<double> pose, std::vector<double> currentjoints, std::vector<double>& joints); 00049 00050 // [action server attributes] 00051 00052 // [action client attributes] 00053 00054 protected: 00055 public: 00056 WamIK(); 00057 void ikPub(void); 00058 00059 }; 00060 #endif