ros::spin()和ros::AsyncSpinner
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)情况
- 当有多个回调函数时。
- 有一个订阅和一个服务,服务的回调需要一些时间来响应,则订阅者回调会存在延迟。
4)参考
ROS AsyncSpinner Example
ros::spin()和ros::AsyncSpinner相关推荐
- ros::spin() 和 ros::spinOnce()
ROS的回调处理函数spin/spinOnce 作用 区别 使用 作用 spin/spinOnce是ROS消息回调处理函数.它俩通常会出现在ROS的主循环中,程序需要不断调用ros::spin() 或 ...
- ros::spin() 和 ros::spinOnce() 区别及详解
1 函数意义 首先要知道,这俩兄弟学名叫ROS消息回调处理函数.它俩通常会出现在ROS的主循环中,程序需要不断调用ros::spin() 或 ros::spinOnce(),两者区别在于前者调用后不会 ...
- 【ROS进阶】常用函数——ros::ok(),ros::Rate,ros::spin()和ros::spinOnce()
(一)ros::ok() 用于检查系统状态,适用于在while循环中判断状态 语法: while(ros::ok()) {//... } ros::ok()在以下几种情况下会返回false: 1.按下 ...
- ros::spin() 和 ros::spinOnce() 区别及用法
1 函数意义 ros::spin() 和 ros::spinOnce() 是ROS消息回调处理函数.它俩通常会出现在ROS的主循环中,程序需要不断调用ros::spin() 或 ros::spinOn ...
- 一文搞懂ROS2的spin_some, spin和ROS的spinOnce
目录 写在前面 1. ROS里的spin和spinOnce 1.1 回调机制浅析 1.2 为什么订阅话题时要指定queue_size? 1.3 设置queue_size的小技巧 1.4 spin和sp ...
- ROSNOTE : ros::spin() / ros::spinOnce() /rospy.spin()
如果写了消息订阅函数,那一定要写ros::spin() 或者ros::spinOnce(),不然是得不到另一边发出的消息或者信息 #include "ros/ros.h" #inc ...
- ros中关于ros::Rate 和ros::spin()等的理解
1.关于ros::Rate rate()和rate.sleep()的使用和理解 这两个函数是用来控制发布频率的,控制的是循环的频率,不是消息和服务的发布频率,通过控制循环频率从而可以控制发布频率 ro ...
- ros spin spinone 详细解释
函数意义: 先了解这个 http://wiki.ros.org/roscpp/Overview/Publishers%20and%20Subscribers ros的消息订阅和发布机制官方教程,最简单 ...
- 【ROS笔记本】ros::Rate loop_rate( ) loop_rate.sleep()
ros::Rate是一个类 1 ros::Rate loop_rate( ) & loop_rate.sleep() 这两个函数必须一起使用,控制的是循环的频率,与消息或者服务的发布频率无直接 ...
最新文章
- 创意留言墙图片_年会攻略2|创意合影墙、特色文化墙,有点意思启动仪式,继续玩出彩!!...
- python编程语法大全-python语法汇总
- 遇到虚拟系统内存问题怎么办?Hypervisor帮你除bug
- innerhtml js执行_JS 中 DOM 操作
- URL URI傻傻分不清楚,dart告诉你该怎么用
- Python 学习随笔1
- 小熊的人生回忆(五)
- 13.相机和图像——介绍,太阳摄影机,成像系统,图像形成,光圈(Aperture)_1
- 未能加载文件或程序集 请移除注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog] 解决方法
- java mysql limit分页,MySQL limit使用方法以及超大分页问题解决
- android中的用户资源访问(一)
- files函数提取文件名HTML,Excel小技巧之轻松提取文件夹中的文件名
- LaTex学习笔记——中文排版
- 微分方程c语言求解,使用C语言解常微分方程 C ODE.doc
- 异地灾备,利用华为云就可以实现
- ImportError: cannot import name ‘get_all_providers‘ from ‘onnxruntime.capi._pybind_state‘
- 什么是 DNS 故障?常见原因和解决方案
- 开放redis指定端口连接方法
- PHP导出Excel时数据量过大的问题
- IntelliJ IDEA 之 jdk Language level
热门文章
- 零钱通项目(两个版本)含思路详解
- python的json格式_python读取json格式
- 什么服务器维修最贵,百万元的服务器什么样?CPU成本不是最高的,存储才是大头...
- 教育部第四轮学科评估pdf版重磅发布!!!立即下载!
- 华硕ezflash3找不到u盘_华硕主板如何通过ASUS EZ Flash 3更新BIOS?
- s8 android z,三星S8官方国行版安卓9固件系统线刷升级包:CHC-G9500ZCS4DSI1
- python链表详细教程_详细介绍python数据结构之链表
- ios swift5 自定义初始化方法 convenience init UIViewController
- 小白必读-所有测试大咖都知道的自动化知识
- Flutter 启动页面