添加库
#include <signal.h>
定义点云保存函数和中断回调函数
pcl::PointCloud<PointType>::Ptr laserCloudSurround(new pcl::PointCloud<PointType>());
void savePointCloud(const std::string &filename) {
if (pcl::io::savePCDFileBinary(filename, *laserCloudSurround) == -1) {
PCL_ERROR("Couldn't write file %s\n", filename.c_str());
} else {
std::cout << "Saved " << laserCloudSurround->points.size() << " data points to " << filename << std::endl;
}
}
void signalHandler(int signum) {
std::cout << "Interrupt signal (" << signum << ") received.\n";
savePointCloud("laserCloudSurround.pcd");
// Terminate program
exit(signum);
}
主函数中注册中断信号回调函数
int main(int argc, char **argv) {
ros::init(argc, argv, "laserMapping");
ros::NodeHandle nh;
// Register signal handler
signal(SIGINT, signalHandler);
signal(SIGTERM, signalHandler);
ros::Subscriber subLaserCloudCornerLast = nh.subscribe<sensor_msgs::PointCloud2>("/laser_cloud_corner_last", 100, laserCloudCornerLastHandler);
std::thread mapping_process{process};
ros::spin();
// Wait for the mapping thread to finish
if (mapping_process.joinable()) {
mapping_process.join();
}
return 0;
}