ROS中spinning主要包括单线程spining和多线程spinning,下面分别介绍各自用法。
1 单线程spining
(1)ros::spin()
ros::spin()是单线程中最简单的形式,如下示例中所有回调函数通过ros::spin()调用,ros::spin()一旦运行起来就不会退出返回(除非主动调用ros::shutdown()或者ctrl+c)。
ros::init(argc, argv, "my_node"); ros::NodeHandle nh; ros::Subscriber sub = nh.subscribe(...); ... ros::spin();
(2)ros::spinOnce()
这是单线程的另一种形式,通常主动周期性调用使用(如publish场合),如下所示:
ros::Rate r(10); // 10 hz while (should_continue) { ... do some work, publish some messages, etc. ... ros::spinOnce(); r.sleep(); }
ros::spinOnce将在定时到时刻调用所有等候调用的函数,它可以返回。
2 多线程spinning
(1)ros::MultiThreadedSpinner
MultiThreadedSpinner是blocking spinner,类似于ros::spin()。 可以在它的构造函数指定线程数,如果设置为0或者未指定的话,将在CPU的每个core上创建一个线程。
ros::MultiThreadedSpinner spinner(4); // Use 4 threads spinner.spin(); // spin() will not return until the node has been shutdown
(2)ros::AsyncSpinner ()
AsyncSpinner不是blocking spin,更好使用, 支持start()和stop()功能。 当它被销毁时候,自动会停止。以下例子等效于上面例子功能:
ros::AsyncSpinner spinner(4); // Use 4 threads spinner.start(); ros::waitForShutdown();
今天的文章 ROS Spinning-----简介分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/92295.html