如果没有ROS_WARN

时间:2017-11-29 03:02:38

标签: c++ multithreading ros

ROS Indigo与Ubuntu14.04

我现在正在编写一个ros程序并尝试在ROS节点中启动一个线程, 在main函数中,我使用了一个线程 std::thread my_process{process}; 奇怪的是,如果我在一开始就添加一个ROS_WARN或一个cout,一切正常,如果我评论该行,就找不到其他输出(既不是cout也不是cv :: imshow)。 我不确定导致这个问题的原因是,流程是完全移到后台还是没有被执行?有人可以帮忙吗?

我的代码看起来像这样

void process() {
        while (true) {
            if (raw_image_buf.empty() || depth_image_buf.empty())  {
               ROS_WARN("Loop skipped");
               // std::cout << "\nLOOP SKIPPED\n";
            } else {
               ROS_WARN("Thread loop");
               cv::Mat raw_img, depth_img;
               ri_buf.lock();

               if (!raw_image_buf.empty()) {
                  raw_img = raw_image_buf.front().first;
                  rawstamp = raw_image_buf.front().second;
                  cv::imshow("raw", raw_img);
                  raw_image_buf.pop();
               }
               ri_buf.unlock();
               di_buf.lock();
               if (!depth_image_buf.empty()) {
                 depth_img = depth_image_buf.front().first;
                 depthstamp = depth_image_buf.front().second;
                 cv::imshow("depth", depth_img);
                 depth_image_buf.pop();
               }
               di_buf.unlock();
            }
       }
}

int main(int argc, char **argv) {
     ros::init(argc,argv, "mynode");
     ros::NodeHandle n("~");
     ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, 
            ros::console::levels::Info);
     ros::Subscriber sub_raw_img = n.subscribe("image_raw", 100, 
            raw_img_callback);
     ros::Subscriber sub_depth_img = n.subscribe("image_depth", 100, 
            depth_img_callback);
     std::thread estimation_process{process};
     ros::spin();
     return 0;
}

0 个答案:

没有答案