diff --git a/src/laserMappingNode.cpp b/src/laserMappingNode.cpp index d386554..fbc4f22 100755 --- a/src/laserMappingNode.cpp +++ b/src/laserMappingNode.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include //ros lib #include @@ -16,11 +18,13 @@ #include #include #include +#include //pcl lib #include #include #include +#include //local lib #include "laserMappingClass.h" @@ -111,6 +115,21 @@ void laser_mapping(){ } } +bool saveMapCallback(std_srvs::Trigger::Request& req, std_srvs::Trigger::Response& res) +{ + pcl::PointCloud::Ptr pc_map = laserMapping.getMap(); + + std::stringstream ss; + ss << "cloud_" << ros::Time::now() << ".pcd"; + + pcl::PCDWriter writer; + writer.writeBinary(ss.str(), *pc_map); + + res.success = true; + res.message = "Saved to " + ss.str(); + return true; +} + int main(int argc, char **argv) { ros::init(argc, argv, "main"); @@ -140,6 +159,8 @@ int main(int argc, char **argv) ros::Subscriber subLaserCloud = nh.subscribe("/velodyne_points_filtered", 100, velodyneHandler); ros::Subscriber subOdometry = nh.subscribe("/odom", 100, odomCallback); + ros::ServiceServer srv_save = nh.advertiseService("save_map", saveMapCallback); + map_pub = nh.advertise("/map", 100); std::thread laser_mapping_process{laser_mapping};