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
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 };