5 #include <laser_geometry/laser_geometry.h> 8 #include <geometry_msgs/Pose.h> 9 #include <message_filters/subscriber.h> 10 #include <nav_msgs/Odometry.h> 11 #include <sensor_msgs/LaserScan.h> 12 #include <sensor_msgs/PointCloud.h> 13 #include <std_msgs/ColorRGBA.h> 14 #include <std_msgs/Bool.h> 15 #include <visualization_msgs/MarkerArray.h> 18 #include <std_srvs/Empty.h> 21 #include <tf/message_filter.h> 22 #include <tf/transform_listener.h> 25 #include <octomap/octomap.h> 26 #include <octomap_msgs/conversions.h> 28 #include <octomap_msgs/GetOctomap.h> 29 typedef octomap_msgs::GetOctomap OctomapSrv;
32 #include <octomap_ros/conversions.h> 37 void stopNode(
int sig)
52 void laserScanCallback(
const sensor_msgs::LaserScanConstPtr& scan);
57 ros::NodeHandle node_hand_;
58 ros::Subscriber laser_scan_sub_;
59 ros::Publisher pc_pub_;
62 tf::TransformListener listener_;
65 laser_geometry::LaserProjection projector_;
74 laser_scan_sub_ = node_hand_.subscribe(
"/scan", 2, &LaserScanToPointCloud::laserScanCallback,
this);
79 pc_pub_ = node_hand_.advertise<sensor_msgs::PointCloud2>(
"pc_from_scan", 2,
true);
99 void LaserScanToPointCloud::laserScanCallback(
const sensor_msgs::LaserScanConstPtr &scan){
100 if(!listener_.waitForTransform(
101 scan->header.frame_id,
103 scan->header.stamp + ros::Duration().fromSec(scan->ranges.size()*scan->time_increment),
104 ros::Duration(1.0))){
108 sensor_msgs::PointCloud2 cloud;
109 projector_.transformLaserScanToPointCloud(
"/base_link",*scan,
113 pc_pub_.publish(cloud);
117 int main(
int argc,
char** argv){
122 signal(SIGINT, stopNode);
125 ros::init(argc, argv,
"laserscan_to_pointcloud");
126 ros::NodeHandle private_nh(
"~");
CLASS DEFINITION ===========================================================.
LaserScanToPointCloud()
Constructor and destructor =================================================.