bitwise_and_alg_node.cpp
Go to the documentation of this file.
00001 #include "bitwise_and_alg_node.h"
00002 
00003 
00004 using namespace cv;
00005 
00006 BitwiseAndAlgNode::BitwiseAndAlgNode(void) :
00007   algorithm_base::IriBaseAlgorithm<BitwiseAndAlgorithm>()
00008 {
00009         //init class attributes if necessary
00010         this->loop_rate_ = 2;//in [Hz]
00011         has_image1_ = false;
00012         has_image2_ = false;
00013 
00014         // [init publishers]
00015         this->image_out_publisher_ = this->public_node_handle_.advertise<sensor_msgs::Image>("image_out", 1);
00016         
00017         // [init subscribers]
00018         this->image_in1_subscriber_ = this->public_node_handle_.subscribe("image_in1", 1, &BitwiseAndAlgNode::image_in1_callback, this);
00019         this->image_in2_subscriber_ = this->public_node_handle_.subscribe("image_in2", 1, &BitwiseAndAlgNode::image_in2_callback, this);
00020         
00021         // [init services]
00022         
00023         // [init clients]
00024         
00025         // [init action servers]
00026         
00027         // [init action clients]
00028         
00029 }
00030 
00031 BitwiseAndAlgNode::~BitwiseAndAlgNode(void)
00032 {
00033         // [free dynamic memory]
00034 }
00035 
00036 void BitwiseAndAlgNode::mainNodeThread(void)
00037 {
00038         // [fill msg structures]
00039         //this->Image_msg_.data = my_var;
00040         
00041         // [fill srv structure and make request to the server]
00042         
00043         // [fill action structure and make request to the action server]
00044 
00045         // [publish messages]
00046 //      this->image_out_publisher_.publish( cvimage_to_rosimage( bitwise_and_last_images() ) );
00047 }
00048 
00049 /*  [subscriber callbacks] */
00050 void BitwiseAndAlgNode::image_in1_callback(const sensor_msgs::Image::ConstPtr& msg) 
00051 { 
00052         cv_bridge::CvImagePtr cv_ptr;
00053         try
00054         {
00055                 cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
00056         }
00057         catch (cv_bridge::Exception& e)
00058         {
00059                 ROS_ERROR("cv_bridge exception: %s", e.what());
00060                 return;
00061         }
00062         last_image1_ = cv_ptr->image;
00063         has_image1_ = true; 
00064         
00065         publish_bitwise_and_last_images();
00066 }
00067 
00068 void BitwiseAndAlgNode::image_in2_callback(const sensor_msgs::Image::ConstPtr& msg) 
00069 { 
00070         cv_bridge::CvImagePtr cv_ptr;
00071         try
00072         {
00073                 cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
00074         }
00075         catch (cv_bridge::Exception& e)
00076         {
00077                 ROS_ERROR("cv_bridge exception: %s", e.what());
00078                 return;
00079         }
00080         last_image2_ = cv_ptr->image;
00081         has_image2_ = true; 
00082         
00083         publish_bitwise_and_last_images();
00084 }
00085 
00086 /*  [service callbacks] */
00087 
00088 /*  [action callbacks] */
00089 
00090 /*  [action requests] */
00091 
00092 /* Other */
00093 void BitwiseAndAlgNode::publish_bitwise_and_last_images()
00094 {
00095         Mat dst;
00096         
00097         // check if already has images
00098         if (has_image1_ && has_image2_) {
00099                 cv::bitwise_and(last_image1_, last_image2_, dst);
00100                 has_image1_ = false;
00101                 has_image2_ = false;
00102                 this->image_out_publisher_.publish( cvimage_to_rosimage(dst));
00103         }
00104         else {
00105                 ROS_WARN("BitwiseAndAlgNode: Input images aren't ready!");
00106         }
00107 }
00108 
00109 void BitwiseAndAlgNode::node_config_update(Config &config, uint32_t level)
00110 {
00111         this->alg_.lock();
00112 
00113         // save the current configuration
00114         this->alg_.config_=config;
00115         
00116         this->alg_.unlock();
00117 }
00118 
00119 void BitwiseAndAlgNode::addNodeDiagnostics(void)
00120 {
00121 }
00122 
00123 sensor_msgs::ImagePtr BitwiseAndAlgNode::cvimage_to_rosimage(cv::Mat cvimage)
00124 {
00125         cv_bridge::CvImage out_msg;
00126         out_msg.encoding = sensor_msgs::image_encodings::BGR8;
00127         out_msg.image    = cvimage;
00128         out_msg.header.stamp = ros::Time::now();
00129         //out_msg.header.stamp = header.stamp; // This fails.
00130         return out_msg.toImageMsg();
00131 }
00132 
00133 /* main function */
00134 int main(int argc,char *argv[])
00135 {
00136         return algorithm_base::main<BitwiseAndAlgNode>(argc, argv, "bitwise_and_alg_node");
00137 }


iri_opencv_filters
Author(s): David Martinez
autogenerated on Fri Dec 6 2013 22:43:25