2015-03-10 3 views
2

Я следую за графическим оформлением учебника на официальной странице ROS. при запуске my_subscriber не появляется всплывающее окно окна. Я типа -ROS Image подписчик - всплывающее окно окна не отображается

rosrun image_transport_tutorial my_subscriber 

выход -

init done 
opengl support available 

И ничего не происходит. (Даже выход «INIT сделано» необъяснимая, потому что не выводится строка в my_subscriber.cpp)

Я после этого учебника - ROS tutorial

У меня есть roscore и rosrun image_transport_tutorial my_publisher pathtofile уже работает в dofferent терминалах. Я проверил, что издатель издает, запустив команду

rostopic list -v 

my_subscriber файл имеет следующее содержание -

#include <ros/ros.h> 
#include <ros/ros.h> 
#include <image_transport/image_transport.h> 
#include <opencv2/highgui/highgui.hpp> 
#include <cv_bridge/cv_bridge.h> 
#include <stdio.h> 
void imageCallback(const sensor_msgs::ImageConstPtr& msg) 
{ 
    try 
    { 
    cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image); 
    } 
    catch (cv_bridge::Exception& e) 
    { 
    ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str()); 
    } 
} 

int main(int argc, char **argv) 
{ 
    std::cout<<"kapil"; 
    ros::init(argc, argv, "image_listener"); 
    ros::NodeHandle nh; 
    cv::namedWindow("view"); 
    cv::startWindowThread(); 
    image_transport::ImageTransport it(nh); 
    image_transport::Subscriber sub = it.subscribe("camera/image", 1, imageCallback); 
    ros::spin(); 
    cv::destroyWindow("view"); 
} 

Решено: я добавил функцию WaitKey в блоке попробовать, как это предлагается в одном из ответов.

cv::waitKey(30); 
+0

Вы проверили, что тема камеры/изображения что-то публикует? Запустите это: $ rostopic list -v –

+0

да ... я проверил .. он публикуется. здесь выход - Опубликованные темы: .. */камера/изображение [sensor_msgs/Image] 1 издатель Подписанные темы: */rosout [rosgraph_msgs/Log] 1 подписчик */камеры/изображения [sensor_msgs/Image] 1 абонент – user12340

+0

, если у вас установлен пакет image_view, попробуйте выполнить следующее: $ rosrun image_view image_view image: =/camera/image. Скажи мне, что у тебя есть. –

ответ

2

Согласно комментарию к this answer, используя cv::startWindowThread() не всегда работает. Возможно, это проблема в вашем случае.

Попробуйте добавить cv::waitKey(10) после cv::imshow. Это подождет некоторое нажатие клавиши в течение 10 миллисекунд, показывая время окна, чтобы показать изображение. (Это всегда казалось мне грязным взломом, но это обычный способ показать изображения в OpenCV ...)