跳到主要内容

OS 消息回调处理函数

ros::spin()

单线程自旋,类似于死循环,程序不会往下执行,已经对话题订阅,就会不断的捕获回调函数,ros::shutdown()Ctrl-C可以让程序停止,执行一次回调函数,返回一次。

参数

示例

ros::init(argc, argv, "my_node");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe(...);
...
ros::spin();

ros::spinOnce()

执行完不会阻塞,一次处理完所有的回调函数然后返回

参数

示例

ros::Rate r(10); // 10 hz
while (should_continue)
{
... do some work, publish some messages, etc. ...
ros::spinOnce();
}

提示

ros::Rate r()r.sleep() 这两个函数必须一起使用,控制的是循环的频率,与消息或者服务的发布 publish 频率没有直接关系。 这两者一个写在循环内部r.sleep(),一个写在循环外部ros::Rate r()

ros::AsyncSpinner

应用于多线程

可以设置启动 start()结束 stop()

参数

示例

ros::AsyncSpinner spinner(4); // 4个线程
spinner.start();
...
ros::waitForShutdown();//等待被销毁