[FATAL] [1689234851.372089368]: SingleThreadedSpinner: Attempt to spin a callback queue from two spi

问题场景:

遇到这个报错的原因是我开了两个线程,分别订阅话题,使用两个ros::spin(),然后就报了这个错误

解决办法:

使用ros::MultiThreadedSpinner
使用方法:

ros::MultiThreadedSpinner spinner(4); // Use 4 threads
spinner.spin(0); // spin() will not return until the node has been shutdown

模板示例:

// ros基础头文件
#include <ros/ros.h>
// C++线程头文件
#include <thread>
#include <unistd.h>

ros::MultiThreadedSpinner spinner(2);   // 这个2是根据下面的线程个数定的

void subscribeThread1() {
    ros::NodeHandle nh;
    ros::Subscriber goal_sub = nh.subscribe("/subscribe_goal", 10, GoalCallback);
    ROS_INFO("Subscribe /subscribe_goal successfully!");
    spinner.spin(0);  // 这个可以一直写0,0的话就是根据当前主机的线程数自己决定
}

void subscribeThread2() {
    ros::NodeHandle nh;
    ros::Subscriber phone_send_sub = nh.subscribe("/phone_send", 10, PhoneSendCallback);
    spinner.spin(0);   // 这个可以一直写0,0的话就是根据当前主机的线程数自己决定
}

int main(int argc, char** argv){
    ros::init(argc, argv, "node");
    // 创建两个订阅线程
    std::thread subscribeThreadObj1(subscribeThread1);
    std::thread subscribeThreadObj2(subscribeThread2);
    // 等待线程完成
    subscribeThreadObj1.join();
    subscribeThreadObj2.join();

    return 0;

}

你可能感兴趣的:(ROS,ros)