在ROS中,ros::NodeHandle
是一个重要的类,它用于与ROS系统进行通信和管理节点。在创建了ros::NodeHandle
对象之后,程序确实无法通过Ctrl+C正常退出。
这是因为ROS节点使用ros::spin()
函数来进入主循环以处理消息和回调函数。当使用ros::spin()
时,程序会阻塞在该函数处,直到收到终止信号(例如Ctrl+C)或者调用了ros::shutdown()
才能正常退出。
如果你希望能够通过Ctrl+C退出程序,在创建完ros::NodeHandle nh;
之后可以添加如下代码:
// 在此处添加其他需要执行的操作
while (ros::ok()) {
// 执行其他任务
ros::spinOnce(); // 处理消息和回调函数
}
// 在此处进行清理和资源释放操作
上述代码中,在主循环中使用了 ros::ok()
来判断是否收到终止信号或者调用了 ros::shutdown()
,从而退出循环并结束程序。这样就可以使得程序能够通过Ctrl+C正常退出。
内容由零声教学AI助手提供,问题来源于学员提问