laserscan_multi_merger是基于ROS的将多个激光雷达传感器扫描的topic整合成一个topic的工具。
先上代码,然后一句一句解读
#include <ros/ros.h>
#include <string.h>#include <tf/transform_listener.h>
#include <pcl_ros/transforms.h>
#include <laser_geometry/laser_geometry.h>
#include <pcl/ros/conversions.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <sensor_msgs/PointCloud.h>
#include <sensor_msgs/PointCloud2.h>
#include <sensor_msgs/point_cloud_conversion.h>
#include "sensor_msgs/LaserScan.h"
#include "pcl_ros/point_cloud.h"
#include <Eigen/Dense>
#include <dynamic_reconfigure/server.h>
#include <ira_laser_tools/laserscan_multi_mergerConfig.h>
using namespace std;
using namespace pcl;
using namespace laserscan_multi_merger;
class LaserscanMerger
{
public:
LaserscanMerger();
void scanCallback(const sensor_msgs::LaserScan::ConstPtr& scan, std::string topic);
void pointcloud_to_laserscan(Eigen::MatrixXf points, pcl::PCLPointCloud2 *merged_cloud, const sensor_msgs::LaserScan::ConstPtr& scan);
void reconfigureCallback(laserscan_multi_mergerConfig &config, uint32_t level);
private:
ros::NodeHandle node_;
laser_geometry::LaserProjection projector_;
tf::TransformListener tfListener_;
ros::Publisher point_cloud_publisher_;
ros::Publisher laser_scan_publisher_;
vector<ros::Subscriber> scan_subscribers;
vector<bool> clouds_modified;
vector<pcl::PCLPointCloud2> clouds;
vector<string> input_topics;
void laserscan_topic_parser();
double angle_min;
double angle_max;
double angle_increment;
double time_increment;
double scan_time;
double range_min;
double range_max;
string destination_frame;
string cloud_destination_topic;
string scan_destination_topic;
string laserscan_topics;
};
//
//
void LaserscanMerger::reconfigureCallback(laserscan_multi_mergerConfig &config, uint32_t level)
{
this->angle_min = config.angle_min;
this->angle_max = config.angle_max;
this->angle_increment = config.angle_increment;
this->time_increment = config.time_increment;
this->scan_time = config.scan_time;
this->range_min = config.range_min;
this->range_max = config.range_max;
}