Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef PR2_ARM_IK_NODE_H
00038 #define PR2_ARM_IK_NODE_H
00039
00040 #include <ros/ros.h>
00041 #include <tf/tf.h>
00042 #include <tf/transform_listener.h>
00043
00044 #include <angles/angles.h>
00045 #include <moveit/pr2_arm_kinematics/pr2_arm_ik_solver.h>
00046 #include <tf_conversions/tf_kdl.h>
00047
00048 #include <moveit_msgs/GetPositionFK.h>
00049 #include <moveit_msgs/GetPositionIK.h>
00050 #include <moveit_msgs/GetKinematicSolverInfo.h>
00051 #include <moveit_msgs/MoveItErrorCodes.h>
00052
00053 #include <kdl/chainfksolverpos_recursive.hpp>
00054
00055 #include <boost/shared_ptr.hpp>
00056
00057 #include <moveit/kinematics_base/kinematics_base.h>
00058
00060 namespace pr2_arm_kinematics
00061 {
00062 class PR2ArmKinematicsPlugin : public kinematics::KinematicsBase
00063 {
00064 public:
00065
00069 PR2ArmKinematicsPlugin();
00070
00075 bool isActive();
00076
00077 virtual bool getPositionIK(const geometry_msgs::Pose &ik_pose,
00078 const std::vector<double> &ik_seed_state,
00079 std::vector<double> &solution,
00080 moveit_msgs::MoveItErrorCodes &error_code,
00081 const kinematics::KinematicsQueryOptions &options = kinematics::KinematicsQueryOptions()) const;
00082
00083 virtual bool searchPositionIK(const geometry_msgs::Pose &ik_pose,
00084 const std::vector<double> &ik_seed_state,
00085 double timeout,
00086 std::vector<double> &solution,
00087 moveit_msgs::MoveItErrorCodes &error_code,
00088 const kinematics::KinematicsQueryOptions &options = kinematics::KinematicsQueryOptions()) const;
00089
00090 virtual bool searchPositionIK(const geometry_msgs::Pose &ik_pose,
00091 const std::vector<double> &ik_seed_state,
00092 double timeout,
00093 const std::vector<double> &consistency_limits,
00094 std::vector<double> &solution,
00095 moveit_msgs::MoveItErrorCodes &error_code,
00096 const kinematics::KinematicsQueryOptions &options = kinematics::KinematicsQueryOptions()) const;
00097
00098 virtual bool searchPositionIK(const geometry_msgs::Pose &ik_pose,
00099 const std::vector<double> &ik_seed_state,
00100 double timeout,
00101 std::vector<double> &solution,
00102 const IKCallbackFn &solution_callback,
00103 moveit_msgs::MoveItErrorCodes &error_code,
00104 const kinematics::KinematicsQueryOptions &options = kinematics::KinematicsQueryOptions()) const;
00105
00106 virtual bool searchPositionIK(const geometry_msgs::Pose &ik_pose,
00107 const std::vector<double> &ik_seed_state,
00108 double timeout,
00109 const std::vector<double> &consistency_limits,
00110 std::vector<double> &solution,
00111 const IKCallbackFn &solution_callback,
00112 moveit_msgs::MoveItErrorCodes &error_code,
00113 const kinematics::KinematicsQueryOptions &options = kinematics::KinematicsQueryOptions()) const;
00114
00115 virtual bool getPositionFK(const std::vector<std::string> &link_names,
00116 const std::vector<double> &joint_angles,
00117 std::vector<geometry_msgs::Pose> &poses) const;
00118
00123 virtual bool initialize(const std::string& robot_description,
00124 const std::string& group_name,
00125 const std::string& base_frame,
00126 const std::string& tip_frame,
00127 double search_discretization);
00128
00132 const std::vector<std::string>& getJointNames() const;
00133
00137 const std::vector<std::string>& getLinkNames() const;
00138
00139 protected:
00140
00141 bool active_;
00142 int free_angle_;
00143 urdf::Model robot_model_;
00144 ros::NodeHandle node_handle_, root_handle_;
00145 boost::shared_ptr<pr2_arm_kinematics::PR2ArmIKSolver> pr2_arm_ik_solver_;
00146 ros::ServiceServer ik_service_,fk_service_,ik_solver_info_service_,fk_solver_info_service_;
00147
00148 std::string root_name_;
00149 int dimension_;
00150 boost::shared_ptr<KDL::ChainFkSolverPos_recursive> jnt_to_pose_solver_;
00151 KDL::Chain kdl_chain_;
00152 moveit_msgs::KinematicSolverInfo ik_solver_info_, fk_solver_info_;
00153
00154 };
00155 }
00156
00157 #endif