Go to the documentation of this file.00001
00008
00009
00010
00011
00012 #ifndef tibi_dabo_gui_QNODE_HPP_
00013 #define tibi_dabo_gui_QNODE_HPP_
00014
00015
00016
00017
00018
00019 #include <ros/ros.h>
00020 #include <string>
00021 #include <QThread>
00022 #include <QStringListModel>
00023 #include <QMutex>
00024
00025 #include <sensor_msgs/Joy.h>
00026 #include <sensor_msgs/Image.h>
00027 #include <face_detector_mono/RectArray.h>
00028 #include <wiimote/State.h>
00029
00030 #include <actionlib/client/simple_action_client.h>
00031 #include <actionlib/client/terminal_state.h>
00032 #include <tibi_dabo_msgs/sequenceAction.h>
00033 #include <tibi_dabo_msgs/haodAction.h>
00034
00035
00036
00037
00038
00039 namespace tibi_dabo_gui {
00040
00041 struct qa_data
00042 {
00043 std::vector<std::string> question;
00044 std::vector<std::string> answer;
00045 std::vector<std::string> answer_hri;
00046 };
00047
00048
00049
00050
00051
00052 class QNode : public QThread {
00053 Q_OBJECT
00054 public:
00055 QNode(int argc, char** argv );
00056 virtual ~QNode();
00057 bool initialize();
00058 void run();
00059
00060 void buttonPressed(int button);
00061 bool getImage(uchar* & data, int & width, int & height, std::string & encoding);
00062 bool getImageDetect(uchar* & data, int & width, int & height, std::string & encoding);
00063 void setLanguage(int index);
00064 std::string processAnswer(int question);
00065 void setImagePoint(std::vector<int> point);
00066 void haodButtonPressed(int button);
00067 bool needAssistance();
00068 void cancelHri();
00069 bool haodRunning();
00070 std::vector<std::vector<int> > getRects();
00071 std::vector<struct qa_data> qas;
00072
00073
00074 Q_SIGNALS:
00075 void rosShutdown();
00076
00077 private:
00078 int init_argc;
00079 char** init_argv;
00080 QMutex mutex;
00081
00082 ros::Publisher joy_publisher;
00083
00084 void imageCallback(const sensor_msgs::Image::ConstPtr &msg);
00085 ros::Subscriber image_subscriber;
00086 void imageDetectCallback(const sensor_msgs::Image::ConstPtr &msg);
00087 ros::Subscriber imageDetect_subscriber;
00088 void facesCallback(const face_detector_mono::RectArray::ConstPtr &msg);
00089 ros::Subscriber faces_subscriber;
00090
00091
00092 actionlib::SimpleActionClient<tibi_dabo_msgs::sequenceAction> hri_action;
00093 tibi_dabo_msgs::sequenceGoal hri_goal;
00094 void hriMakeActionRequest(std::vector<std::string> &xml_files);
00095 void hriDone(const actionlib::SimpleClientGoalState& state, const tibi_dabo_msgs::sequenceResultConstPtr& result);
00096 void hriActive();
00097 void hriFeedback(const tibi_dabo_msgs::sequenceFeedbackConstPtr& feedback);
00098 bool hri_active;
00099
00100
00101 actionlib::SimpleActionClient<tibi_dabo_msgs::haodAction> haod_action;
00102 tibi_dabo_msgs::haodGoal haod_goal;
00103 void haodMakeActionRequest(std::vector<int> &point);
00104 void haodDone(const actionlib::SimpleClientGoalState& state, const tibi_dabo_msgs::haodResultConstPtr& result);
00105 void haodActive();
00106 void haodFeedback(const tibi_dabo_msgs::haodFeedbackConstPtr& feedback);
00107 bool haod_active;
00108
00109 bool imageReady;
00110 sensor_msgs::Image image;
00111 bool imageDetectReady;
00112 sensor_msgs::Image imageDetect;
00113 std::vector< std::vector<std::string> > answers;
00114 std::vector< std::vector<std::string> > answers_hri;
00115 typedef enum {TTS_=0,LEDS_=1,HEAD_=2,LEFT_ARM_=3,RIGHT_ARM_=4} clients;
00116 static const int NUM_CLIENTS=RIGHT_ARM_-TTS_+1;
00117 std::vector<std::string> xml_files;
00118
00119 int language;
00120 std::string hri_prefix;
00121 bool assistance;
00122
00123 void setHriPrefix(int index);
00124 void loadQuestions();
00125 std::vector<std::vector<int> > rects;
00126 };
00127
00128 }
00129
00130 #endif