pen_gripper.h
Go to the documentation of this file.
00001 /*
00002  * pen_gripper.h
00003  *
00004  *  Created on: 15.12.2010
00005  *      Author: Richard Schneider
00006  *
00007  */
00008 #ifndef PEN_GRIPPER_H_
00009 #include <ros/ros.h>
00010 #include <opencv/cv.h>
00011 
00012 // communication
00013 #include <portrait_robot_msgs/alubsc_node_instr.h>
00014 #include <portrait_robot_msgs/alubsc_status_msg.h>
00015 
00016 // pointcloud processing
00017 #include <pcl/point_types.h>
00018 #include <pcl/point_cloud.h>
00019 #include <sensor_msgs/point_cloud_conversion.h>
00020 #include <sensor_msgs/PointCloud2.h>
00021 #include <pcl/kdtree/kdtree_flann.h>
00022 #include <pcl/filters/passthrough.h>
00023 #include <pcl/surface/convex_hull.h>
00024 #include <pcl/ModelCoefficients.h>
00025 #include <pcl/common/vector_average.h>
00026 #include <pcl/features/normal_3d.h>
00027 #include <pcl/filters/extract_indices.h>
00028 #include <pcl/pcl_base.h>
00029 #include "pcl/filters/statistical_outlier_removal.h"
00030 #include <pcl/sample_consensus/method_types.h>
00031 #include <pcl/sample_consensus/model_types.h>
00032 #include <pcl/segmentation/sac_segmentation.h>
00033 
00034 // frame transformation
00035 #include <tf/transform_datatypes.h>
00036 #include <tf/transform_listener.h>
00037 
00038 // marker visualization
00039 #include <visualization_msgs/Marker.h>
00040 
00041 // arm movement
00042 #include <actionlib/client/simple_action_client.h>
00043 #include <ee_cart_imped_action/ee_cart_imped_arm.hh>
00044 
00045 // gripper control
00046 #include <pr2_controllers_msgs/Pr2GripperCommandAction.h>
00047 
00048 // head control
00049 #include <pr2_controllers_msgs/PointHeadAction.h>
00050 
00051 #include <iostream>
00052 #include <fstream>
00053 #include <algorithm>
00054 #include <string>
00055 using namespace std;
00056 
00057 //#define PEN_GRIPPER_H_
00058 
00062 struct pen {
00063         pcl::PointXYZ middle;
00064         pcl::PointXYZ head;
00065         bool isReady;
00066 };
00067 
00068 class PenGripper {
00069 
00070 private:
00071 
00072         // nodehandle
00073         ros::NodeHandle *n;
00074 
00075         // pointer to the gripper controller
00076         EECartImpedArm *arm_r, *arm_l;
00077 
00078         // left and right gripper start position
00079         pcl::PointXYZ r_start_pos;
00080         pcl::PointXYZ l_start_pos;
00081 
00082         // pointer to the head client
00083         actionlib::SimpleActionClient<pr2_controllers_msgs::PointHeadAction>* head;
00084 
00085         //right and left gripperclient pointer
00086         actionlib::SimpleActionClient<pr2_controllers_msgs::Pr2GripperCommandAction>* GripperRight;
00087         actionlib::SimpleActionClient<pr2_controllers_msgs::Pr2GripperCommandAction>* GripperLeft;
00088 
00089         // incomming pen cloud
00090         pcl::PointCloud<pcl::PointXYZ> pen_cloud;
00091 
00092         // pen reprasentation
00093         pen red_pen;
00094 
00095         // pcl subscriber/ publisher for narrow_stereo_textured
00096         ros::Subscriber pcl_sub;
00097         ros::Publisher pcl_pub;
00098 
00099         // visualization stuff for rviz
00100         ros::Publisher marker_middle_pub;
00101 
00102         // frame transformer
00103         tf::TransformListener tflistener;
00104 
00105 public:
00106 
00108         bool success;
00109 
00111         bool abort;
00112 
00114         portrait_robot_msgs::alubsc_status_msg status;
00115 
00117         ros::ServiceClient status_clt;
00118 
00120         PenGripper(ros::NodeHandle& nh);
00121 
00123         ~PenGripper();
00124 
00135         void narrow_stereo_cb(const sensor_msgs::PointCloud2ConstPtr& cloud_msg);
00136 
00140         void grip_pen();
00141 
00147         void take_start_position();
00148 
00153         void open_gripper(const string gripper);
00154 
00159         void close_gripper(const string gripper);
00160 
00164         void reset();
00165 
00169         bool handle_req(portrait_robot_msgs::alubsc_node_instr::Request &req,
00170                         portrait_robot_msgs::alubsc_node_instr::Response &res);
00171 };
00172 
00173 #endif /* PEN_GRIPPER_H_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Friends Defines


pen_gripper
Author(s): Richard Schneider
autogenerated on Wed Dec 26 2012 16:16:39