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 #ifndef __PRESSURE_H__
00031 #define __PRESSURE_H__
00032
00033
00034 #include <ros/ros.h>
00035
00036 #include <actionlib/client/simple_action_client.h>
00037 #include <tf/transform_listener.h>
00038 #include <pr2_msgs/PressureState.h>
00039 #include <boost/thread/mutex.hpp>
00040
00041 class Pressure {
00042 private:
00043 ros::Subscriber sub_;
00044 ros::NodeHandle n_;
00045
00046 long zero_cnt_;
00047
00048
00049 double r_center[2];
00050 double l_center[2];
00051 double r_sum[22];
00052 double l_sum[22];
00053 double r_zero[22];
00054 double l_zero[22];
00055
00056 double r_curr[22];
00057 double l_curr[22];
00058
00059 int val_prev_prev[2][22],val_prev[2][22],touched[2][22];
00060 double slope[2][22];
00061
00062 void calcCenter(double pressure[], double &xcenter, double &ycenter);
00063
00064 boost::mutex pressure_mutex;
00065
00066 void pressureCallback(const pr2_msgs::PressureState::ConstPtr& msg);
00067
00068 Pressure(int side);
00069
00070 ~Pressure();
00071
00072 static Pressure *instance_[];
00073
00074 bool initialized;
00075
00076
00077 public:
00078
00079 static Pressure *getInstance(int side=0);
00080
00081 void reset();
00082
00083 void getCenter(double *r, double *l);
00084
00085 void getCurrent(double r[], double l[], bool zero = true);
00086
00087
00088 void getInside(double &r, double &l, bool zero = true);
00089
00090 void getFront(double &r, double &l, bool zero = true);
00091
00092 void getInsideTouched(double &r, double &l);
00093
00094 void getFrontTouched(double &r, double &l);
00095
00096 int side_;
00097
00098
00099 };
00100
00101
00102
00103 #endif