ROS 小技巧 - Ctrl+C 退出 ROS 程序

7 篇文章 0 订阅
当使用ROS运行节点时,默认情况下Ctrl+C无法正常退出程序。原因是ROS可能接管了信号处理。解决方法是在代码中自定义SIGINT信号处理函数,覆盖默认行为。通过调用`ros::shutdown()`来关闭节点。在`ros::init`之后设置这个自定义处理函数,确保在创建第一个NodeHandle之后。
摘要由CSDN通过智能技术生成

1. 现象

  • 在使用 rosrun 启动 ROS 节点的时候,默认情况下使用 ctrl+c 无法退出程序。

  • 原因我也不太清楚,可能是 ROS 程序默认接管了所有信号量(ctrl+c就是一个信号量)

2. 解决

切换行号显示
#include <ros/ros.h>
#include <signal.h>

void mySigintHandler(int sig)
{
  // Do some custom action.
  // For example, publish a stop message to some other nodes.
  
  // All the default sigint handler does is call shutdown()
  ros::shutdown();
}

int main(int argc, char** argv)
{
  ros::init(argc, argv, "my_node_name", ros::init_options::NoSigintHandler);
  ros::NodeHandle nh;

  // Override the default ros sigint handler.
  // This must be set after the first NodeHandle is created.
  signal(SIGINT, mySigintHandler);
  
  //...
  ros::spin();
  return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值