1)区别

ros::spin():是一个单线程,它根据消息到达的时间一一执行对应的回调函数,只有当前一个回调函数执行结束后,新的回调函数才能执行,如果前一个回调函数执行太长时间,有可能阻塞新的回调函数执行。

ros::AsyncSpinner:是一个多线程,将为每个回调函数创建一个自己的线程,这样就不存在ros::spin()的问题。

2)使用

int main(int argc, char **argv)
{ros::init(argc, argv, "talker_subscribers");ros::NodeHandle nh;ros::AsyncSpinner spinner(0);spinner.start();ros::Subscriber counter1_sub = nh.subscribe("talker1", 10, callbackTalker1);ros::Subscriber counter2_sub = nh.subscribe("talker2", 10, callbackTalker2);ros::waitForShutdown();// ros::spin(); --> we don't use that anymore
}
  • ros::AsyncSpinner spinner(0):创建一个spinner,参数为可以使用的线程数,0代表将使用计算机中尽可能多的线程,如果为3,表示只使用3个线程。
  • spinner.start():AsyncSpinner将异步启动,运行在后台,程序继续执行。
  • ros::waitForShutdown():因为AsyncSpinner不会阻塞,这行命令等待节点被杀死。

3)情况

  1. 当有多个回调函数时。
  2. 有一个订阅和一个服务,服务的回调需要一些时间来响应,则订阅者回调会存在延迟。

4)参考

ROS AsyncSpinner Example

ros::spin()和ros::AsyncSpinner相关推荐

  1. ros::spin() 和 ros::spinOnce()

    ROS的回调处理函数spin/spinOnce 作用 区别 使用 作用 spin/spinOnce是ROS消息回调处理函数.它俩通常会出现在ROS的主循环中,程序需要不断调用ros::spin() 或 ...

  2. ros::spin() 和 ros::spinOnce() 区别及详解

    1 函数意义 首先要知道,这俩兄弟学名叫ROS消息回调处理函数.它俩通常会出现在ROS的主循环中,程序需要不断调用ros::spin() 或 ros::spinOnce(),两者区别在于前者调用后不会 ...

  3. 【ROS进阶】常用函数——ros::ok(),ros::Rate,ros::spin()和ros::spinOnce()

    (一)ros::ok() 用于检查系统状态,适用于在while循环中判断状态 语法: while(ros::ok()) {//... } ros::ok()在以下几种情况下会返回false: 1.按下 ...

  4. ros::spin() 和 ros::spinOnce() 区别及用法

    1 函数意义 ros::spin() 和 ros::spinOnce() 是ROS消息回调处理函数.它俩通常会出现在ROS的主循环中,程序需要不断调用ros::spin() 或 ros::spinOn ...

  5. 一文搞懂ROS2的spin_some, spin和ROS的spinOnce

    目录 写在前面 1. ROS里的spin和spinOnce 1.1 回调机制浅析 1.2 为什么订阅话题时要指定queue_size? 1.3 设置queue_size的小技巧 1.4 spin和sp ...

  6. ROSNOTE : ros::spin() / ros::spinOnce() /rospy.spin()

    如果写了消息订阅函数,那一定要写ros::spin() 或者ros::spinOnce(),不然是得不到另一边发出的消息或者信息 #include "ros/ros.h" #inc ...

  7. ros中关于ros::Rate 和ros::spin()等的理解

    1.关于ros::Rate rate()和rate.sleep()的使用和理解 这两个函数是用来控制发布频率的,控制的是循环的频率,不是消息和服务的发布频率,通过控制循环频率从而可以控制发布频率 ro ...

  8. ros spin spinone 详细解释

    函数意义: 先了解这个 http://wiki.ros.org/roscpp/Overview/Publishers%20and%20Subscribers ros的消息订阅和发布机制官方教程,最简单 ...

  9. 【ROS笔记本】ros::Rate loop_rate( ) loop_rate.sleep()

    ros::Rate是一个类 1 ros::Rate loop_rate( ) & loop_rate.sleep() 这两个函数必须一起使用,控制的是循环的频率,与消息或者服务的发布频率无直接 ...

最新文章

  1. 创意留言墙图片_年会攻略2|创意合影墙、特色文化墙,有点意思启动仪式,继续玩出彩!!...
  2. python编程语法大全-python语法汇总
  3. 遇到虚拟系统内存问题怎么办?Hypervisor帮你除bug
  4. innerhtml js执行_JS 中 DOM 操作
  5. URL URI傻傻分不清楚,dart告诉你该怎么用
  6. Python 学习随笔1
  7. 小熊的人生回忆(五)
  8. 13.相机和图像——介绍,太阳摄影机,成像系统,图像形成,光圈(Aperture)_1
  9. 未能加载文件或程序集 请移除注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog] 解决方法
  10. java mysql limit分页,MySQL limit使用方法以及超大分页问题解决
  11. android中的用户资源访问(一)
  12. files函数提取文件名HTML,Excel小技巧之轻松提取文件夹中的文件名
  13. LaTex学习笔记——中文排版
  14. 微分方程c语言求解,使用C语言解常微分方程 C ODE.doc
  15. 异地灾备,利用华为云就可以实现
  16. ImportError: cannot import name ‘get_all_providers‘ from ‘onnxruntime.capi._pybind_state‘
  17. 什么是 DNS 故障?常见原因和解决方案
  18. 开放redis指定端口连接方法
  19. PHP导出Excel时数据量过大的问题
  20. IntelliJ IDEA 之 jdk Language level

热门文章

  1. 零钱通项目(两个版本)含思路详解
  2. python的json格式_python读取json格式
  3. 什么服务器维修最贵,百万元的服务器什么样?CPU成本不是最高的,存储才是大头...
  4. 教育部第四轮学科评估pdf版重磅发布!!!立即下载!
  5. 华硕ezflash3找不到u盘_华硕主板如何通过ASUS EZ Flash 3更新BIOS?
  6. s8 android z,三星S8官方国行版安卓9固件系统线刷升级包:CHC-G9500ZCS4DSI1
  7. python链表详细教程_详细介绍python数据结构之链表
  8. ios swift5 自定义初始化方法 convenience init UIViewController
  9. 小白必读-所有测试大咖都知道的自动化知识
  10. Flutter 启动页面