问题描述:使用ROS接收RGBD图像进行处理时(单目、双目可能也存在类似问题),在运行到ros::spin()前一切正常。当需要使用ctrl+c退出ros::spin()并继续后续代码时,出现触发一次ctrl+c直接退出整个程序的问题(无法保存轨迹)
解决:以ros_rgbd.cc为例:
1.进入ros_rgbd.cc文件
2.添加信号处理函数在文件中(ImageGrabber类内外都可)
void MySigintHandler(int sig)
{
//这里主要进行退出前的数据保存、内存清理、告知其他节点等工作
// sleep(3);
ROS_INFO("shutting down!");
ros::shutdown();
sleep(1);
}
2.在末尾Track主函数上下任意位置加入linux中的signal信号函数
signal(SIGINT, MySigintHandler);
mpSLAM->TrackRGBD(cv_ptrRGB->image, cv_ptrD->image, cv_ptrRGB->header.stamp.toSec());
// signal(SIGINT, MySigintHandler);
3.重新编译,运行build_ros.sh
效果:解决无法保存轨迹文件的问题,在按ctrl+c后可以继续运行ros::spin()后续程序而不会直接退出程序
遗留问题:仍然无法解决当没有接收到rostopic信息时,按ctrl+c直接退出程序的问题(不过正常使用中也仅仅需要在运行一段时间后生成了关键帧数据的情况下才会保存轨迹,在没有任何图片数据时完全是空白的,无需保存轨迹)