diff --git a/qr_detector/CMakeLists.txt b/qr_detector/CMakeLists.txt index c53e292d3336e8c7308a12ef555a85ed3f6365b7..61e8fea4b8b51cafd6609eccd6de3e96f439ccd1 100644 --- a/qr_detector/CMakeLists.txt +++ b/qr_detector/CMakeLists.txt @@ -6,7 +6,7 @@ find_package(catkin REQUIRED) # ******************************************************************** # Add catkin additional components here # ******************************************************************** -find_package(catkin REQUIRED COMPONENTS iri_base_driver geometry_msgs sensor_msgs cv_bridge tf) +find_package(catkin REQUIRED COMPONENTS iri_base_driver humanoid_common_msgs geometry_msgs sensor_msgs cv_bridge tf) ## System dependencies are found with CMake's conventions # find_package(Boost REQUIRED COMPONENTS system) @@ -61,7 +61,7 @@ catkin_package( # ******************************************************************** # Add ROS and IRI ROS run time dependencies # ******************************************************************** - CATKIN_DEPENDS iri_base_driver geometry_msgs sensor_msgs cv_bridge tf + CATKIN_DEPENDS iri_base_driver humanoid_common_msgs geometry_msgs sensor_msgs cv_bridge tf # ******************************************************************** # Add system and labrobotica run time dependencies here # ******************************************************************** @@ -97,6 +97,7 @@ target_link_libraries(${PROJECT_NAME} ${detectqrcode_LIBRARY}) # Add message headers dependencies # ******************************************************************** # add_dependencies(${PROJECT_NAME} <msg_package_name>_generate_messages_cpp) +add_dependencies(${PROJECT_NAME} humanoid_common_msgs_generate_messages_cpp) add_dependencies(${PROJECT_NAME} geometry_msgs_generate_messages_cpp) add_dependencies(${PROJECT_NAME} sensor_msgs_generate_messages_cpp) # ******************************************************************** diff --git a/qr_detector/include/qr_detector_driver.h b/qr_detector/include/qr_detector_driver.h index 4b92bb4bdf2f444dd6e4524800123ab1d7279e52..a239f41deeb154d83ea57c1d1440c16e5135e773 100644 --- a/qr_detector/include/qr_detector_driver.h +++ b/qr_detector/include/qr_detector_driver.h @@ -161,6 +161,7 @@ class QrDetectorDriver : public iri_base_driver::IriBaseDriver ~QrDetectorDriver(void); void init(double fx, double fy, double cx, double cy); + void set_qr_size(double qr_x,double qr_y); void findQR(cv::Mat& grey, std::vector<std::string> &tag_ids,std::vector< std::vector<double> >& poses); std::string get_camera_frame(void); }; diff --git a/qr_detector/include/qr_detector_driver_node.h b/qr_detector/include/qr_detector_driver_node.h index 2b9dfad60cc6930ada94887fa3065cdb27298d3b..c4b1b5a8a42ba624d970c57e907172cad98e63e6 100644 --- a/qr_detector/include/qr_detector_driver_node.h +++ b/qr_detector/include/qr_detector_driver_node.h @@ -39,6 +39,7 @@ #include <tf/transform_broadcaster.h> // [service client headers] +#include <humanoid_common_msgs/set_qr_size.h> // [action server client headers] @@ -84,6 +85,12 @@ class QrDetectorDriverNode : public iri_base_driver::IriBaseNodeDriver<QrDetecto tf::TransformBroadcaster tag_pose_br; // [service attributes] + ros::ServiceServer set_qr_size_server_; + bool set_qr_sizeCallback(humanoid_common_msgs::set_qr_size::Request &req, humanoid_common_msgs::set_qr_size::Response &res); + pthread_mutex_t set_qr_size_mutex_; + void set_qr_size_mutex_enter(void); + void set_qr_size_mutex_exit(void); + // [client attributes] diff --git a/qr_detector/package.xml b/qr_detector/package.xml index 60ea206ce6335bfc1e3bf0d3ecf543ada777de55..a7a9e394d3ec4b8c29e9422206b22bc417f04145 100644 --- a/qr_detector/package.xml +++ b/qr_detector/package.xml @@ -41,11 +41,13 @@ <!-- <test_depend>gtest</test_depend> --> <buildtool_depend>catkin</buildtool_depend> <build_depend>iri_base_driver</build_depend> + <build_depend>humanoid_common_msgs</build_depend> <build_depend>geometry_msgs</build_depend> <build_depend>sensor_msgs</build_depend> <build_depend>cv_bridge</build_depend> <build_depend>tf</build_depend> <run_depend>iri_base_driver</run_depend> + <run_depend>humanoid_common_msgs</run_depend> <run_depend>geometry_msgs</run_depend> <run_depend>sensor_msgs</run_depend> <run_depend>cv_bridge</run_depend> diff --git a/qr_detector/src/qr_detector_driver.cpp b/qr_detector/src/qr_detector_driver.cpp index 9b03f67ab7175f9d477c6ffd15c9bcb3f6747d98..93f8d5ee806faa20dcdd4a4f9d22d70202007a49 100644 --- a/qr_detector/src/qr_detector_driver.cpp +++ b/qr_detector/src/qr_detector_driver.cpp @@ -87,6 +87,11 @@ void QrDetectorDriver::init(double fx, double fy, double cx, double cy) this->detector->init(fx,fy,cx,cy,this->config_.qr_x,this->config_.qr_y); } +void QrDetectorDriver::set_qr_size(double qr_x,double qr_y) +{ + this->detector->set_qr_size(qr_x,qr_y); +} + void QrDetectorDriver::findQR(cv::Mat& grey,std::vector<std::string> &tag_ids, std::vector< std::vector<double> >& poses) { std::vector<TQRInfo> tags; diff --git a/qr_detector/src/qr_detector_driver_node.cpp b/qr_detector/src/qr_detector_driver_node.cpp index b5831053f937ffdf2727c7561cadb651934128c3..235e4e503fd29abcd85d831d22330c2e836a4631 100644 --- a/qr_detector/src/qr_detector_driver_node.cpp +++ b/qr_detector/src/qr_detector_driver_node.cpp @@ -19,6 +19,9 @@ QrDetectorDriverNode::QrDetectorDriverNode(ros::NodeHandle &nh) : // [init services] + this->set_qr_size_server_ = this->public_node_handle_.advertiseService("set_qr_size", &QrDetectorDriverNode::set_qr_sizeCallback, this); + pthread_mutex_init(&this->set_qr_size_mutex_,NULL); + // [init clients] @@ -33,16 +36,9 @@ void QrDetectorDriverNode::mainNodeThread(void) this->driver_.lock(); // [fill msg Header if necessary] - //<publisher_name>.header.frame_id = "<publisher_topic_name>"; // [fill msg structures] - - //detector.findSquares(gray, squares); - //detector.drawSquares(frame, squares); - // publish frame - - // [fill srv structure and make request to the server] // [fill action structure and make request to the action server] @@ -99,15 +95,6 @@ void QrDetectorDriverNode::image_callback(const sensor_msgs::Image::ConstPtr& ms { ROS_INFO("Camera not configured. camera_info not received"); } - //use appropiate mutex to shared variables if necessary - //this->driver_.lock(); - //this->image_mutex_enter(); - - //std::cout << msg->data << std::endl; - - //unlock previously blocked shared variables - //this->driver_.unlock(); - //this->image_mutex_exit(); } void QrDetectorDriverNode::image_mutex_enter(void) @@ -123,8 +110,6 @@ void QrDetectorDriverNode::camera_info_callback(const sensor_msgs::CameraInfo::C { ROS_INFO("QrDetectorDriverNode::camera_info_callback: New Message Received"); - //use appropiate mutex to shared variables if necessary - //this->driver_.lock(); this->camera_info_mutex_enter(); double fx,fy,cx,cy; @@ -135,10 +120,6 @@ void QrDetectorDriverNode::camera_info_callback(const sensor_msgs::CameraInfo::C this->driver_.init(fx,fy,cx,cy); this->camera_info_subscriber_.shutdown(); cam_info_received = true; - //std::cout << msg->data << std::endl; - - //unlock previously blocked shared variables - //this->driver_.unlock(); this->camera_info_mutex_exit(); } @@ -153,6 +134,31 @@ void QrDetectorDriverNode::camera_info_mutex_exit(void) } /* [service callbacks] */ +bool QrDetectorDriverNode::set_qr_sizeCallback(humanoid_common_msgs::set_qr_size::Request &req, humanoid_common_msgs::set_qr_size::Response &res) +{ + ROS_INFO("QrDetectorDriverNode::set_qr_sizeCallback: New Request Received!"); + + //use appropiate mutex to shared variables if necessary + this->driver_.lock(); + + this->driver_.set_qr_size(req.qr_x,req.qr_y); + res.success=true; + + this->driver_.unlock(); + + return true; +} + +void QrDetectorDriverNode::set_qr_size_mutex_enter(void) +{ + pthread_mutex_lock(&this->set_qr_size_mutex_); +} + +void QrDetectorDriverNode::set_qr_size_mutex_exit(void) +{ + pthread_mutex_unlock(&this->set_qr_size_mutex_); +} + /* [action callbacks] */ @@ -185,6 +191,7 @@ void QrDetectorDriverNode::reconfigureNodeHook(int level) QrDetectorDriverNode::~QrDetectorDriverNode(void) { // [free dynamic memory] + pthread_mutex_destroy(&this->set_qr_size_mutex_); pthread_mutex_destroy(&this->image_mutex_); pthread_mutex_destroy(&this->camera_info_mutex_); }