ros::spin()和ros::spinOnce()

本文主要记录自己对ros::spin()和ros::spinOnce()函数的理解

一、函数的意义

ros::spin()和ros::spinOnce()学名叫ROS消息回调处理函数,通常出现在ROS的主循环中,程序会不断调用ros::spin()或者ros::spinOnce(),这样订阅者的callback函数才会不断的执行。原因是ROS程序在执行过程中,除了主程序以外,ROS还会在后台按照规定的格式接收订阅的消息,但所接收的消息不是立刻就会被处理,而是必须等到ros::spin()或者ros::spinOnce()被执行的时候才会调用相关的callback函数

二、区别

ros::spin()在调用后不会在返回,也就是主程序执行到ros::spin()下面的程序不会在执行了,但ros::spinOnce()还会继续执行之后的程序。

ros::spin() 循环且监听反馈函数,ros::spinOnce() 监听反馈函数,没有循环。

看函数名也可以很容易理解,一个一直调用(ros::spin()),一个只调用一次(ros::spinOnce())。

三、常见的使用方法

ros::spin()通常在main函数中使用,并且写在程序的末尾。

ros::spinOnce()通常放在while循环中使用。

例子:

// 接收速率为 10Hz
ros::Rate loop_rate(10);

while(ros::ok())
{
    ros::spinOnce();
    
    loop_rate.sleep();   // 睡眠时间为 1 / loop_rate,即1/10 = 0.1s
}
int main(int argc, char  *argv[])
{
    ros::spin();   //注意编写发布者的时候,不需要加ros::spin(),加上也可以。
}

参考网址:ROS/Tutorials/WritingPublisherSubscriber(c++) - ROS Wiki

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值