omnix_laser_node.cpp
Go to the documentation of this file.
00001 #include <ros/ros.h>
00002 #include <message_filters/subscriber.h>
00003 #include <message_filters/synchronizer.h>
00004 #include <message_filters/sync_policies/approximate_time.h>
00005 #include <sensor_msgs/LaserScan.h>
00006 #include <tf/transform_listener.h>
00007 
00008 typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::LaserScan, sensor_msgs::LaserScan> LaserSyncPolicy;
00009 
00010 class OmnixLaserMergeNode
00011 {
00012 public:
00013   ros::NodeHandle n_;
00014   message_filters::Subscriber<sensor_msgs::LaserScan> laser1_sub_;
00015   message_filters::Subscriber<sensor_msgs::LaserScan> laser2_sub_;
00016   tf::TransformListener tf_listener_;
00017 
00018   OmnixLaserMergeNode():
00019     n_("~"),
00020     tf_listener_(ros::Duration(60.0))
00021   {
00022     message_filters::Subscriber<sensor_msgs::LaserScan>  laser1_sub_(n_,"/utm30_1", 1);
00023     message_filters::Subscriber<sensor_msgs::LaserScan>  laser2_sub_(n_,"/utm30_2", 1);
00024 
00025     message_filters::Synchronizer<LaserSyncPolicy> sync(LaserSyncPolicy(10), laser1_sub_, laser2_sub_);
00026     sync.registerCallback(boost::bind(&this->doubleLaserCallback, _1, _2));
00027     
00028   }
00029 
00030   void doubleLaserCallback(const sensor_msgs::LaserScan& scan1, const sensor_msgs::LaserScan& scan2)
00031   {
00032     //transform both to the base frame, and republish this to the laser line extractor.
00033     tf::StampedTransform laser1_to_base;
00034     tf::StampedTransform laser2_to_base;
00035     try{
00036       tf_listener_->waitForTransform("/laser1", "/base_link",scan1.header.stamp, ros::Duration(0.6));
00037       tf_listener_->lookupTransform("/laser1","/base_link",scan1.header.stamp, laser1_to_base);
00038       tf_listener_->waitForTransform("/laser2", "/base_link",scan2.header.stamp, ros::Duration(0.6));
00039       tf_listener_->lookupTransform("/laser2","/base_link",scan2.header.stamp, laser2_to_base);
00040     } catch(tf::TransformException ex){
00041       ROS_ERROR("Laser Merge Callback failure: %s",ex.what());
00042     }
00043     
00044     
00045   }
00046 };


omnix
Author(s): Alexander J Trevor
autogenerated on Wed Nov 27 2013 12:06:10