我试图理解ROS中的AsyncSpinner是如何工作的,因为我可能会有一些误解.你可以在这里找到类似的问题.
如此处所示,其定义提到:
异步微调器:生成几个线程(可配置),它们将并行执行回调,而不会阻塞调用它的线程.启动/停止方法允许控制何时开始处理回调以及何时停止回调.
而官方的文档中这里的AsyncSpinning也说作为一种多线程纺纱.
所以说,我有一个非常简单的例子,发布者和订阅者使用AsyncSpinner来测试多线程行为.
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char **argv)
{
ros::init(argc, argv, "publisher");
ros::NodeHandle nh;
ros::Publisher chatter_pub = nh.advertise<std_msgs::String>("chatter", 1000);
ros::Rate loop_rate(10);
while (ros::ok())
{
std_msgs::String msg;
msg.data = "hello world";
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以及定义和使用微调器的订户:
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <boost/thread.hpp>
int count = 0;
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
count++;
ROS_INFO("Subscriber %i callback: I heard %s", count, msg->data.c_str());
sleep(1);
}
int main(int argc, …Run Code Online (Sandbox Code Playgroud)