【问题标题】:ROS Image subscriber - window popup does not appearROS 图像订阅者 - 不出现弹出窗口
【发布时间】:2015-03-10 11:35:55
【问题描述】:

我正在关注官方 ROS 页面上的图像订阅教程。当我运行 my_subscriber 时,不会出现任何窗口弹出窗口。我输入 -

rosrun image_transport_tutorial my_subscriber

输出是 -

init done
opengl support available

然后什么都没有发生。 (即使输出“init done”也无法解释,因为 my_subscriber.cpp 中没有输出行)

我正在关注本教程 - ROS tutorial

我已经在不同的终端中运行了 roscore 和 rosrun image_transport_tutorial my_publisher pathtofile。 我通过运行命令检查了发布者是否正在发布

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");
}

已解决:按照其中一个答案的建议,我在 try 块中添加了 waitKey 函数。

cv::waitKey(30);

【问题讨论】:

  • 您是否检查过主题相机/图像是否正在发布某些内容?运行这个: $ rostopic list -v
  • 是的...我检查过..它正在发布。这是输出 - 已发布的主题:.. * /camera/image [sensor_msgs/Image] 1 个发布者订阅的主题:* /rosout [rosgraph_msgs/Log] 1 个订阅者 * /camera/image [sensor_msgs/Image] 1 个订阅者
  • 如果您安装了 image_view 软件包,请尝试以下操作: $rosrun image_view image_view image:=/camera/image 。告诉我你得到了什么。
  • 我已经安装好了。它不工作。这是输出 - [ INFO] [1425987943.187518428]:使用传输“原始”初始化完成 opengl 支持可用(image_view:12714):GLib-GObject-WARNING **:无效的不可实例化类型“(null)”转换为“GtkWidget” (image_view:12714):GLib-GObject-WARNING **:无效的不可实例化类型“(null)”的实例(image_view:12714):GLib-GObject-CRITICAL **:g_signal_connect_data:断言“G_TYPE_CHECK_INSTANCE(实例)”失败
  • 试试这个:$rostopic echo /camera/image。告诉我你得到了什么。

标签: opencv camera-calibration ros subscriber


【解决方案1】:

根据this answer 的评论,使用cv::startWindowThread() 并不总是有效。也许这就是你的问题。

尝试在cv::imshow 之后添加cv::waitKey(10)。这将等待一些按键 10 毫秒,给窗口时间来显示图像。 (在我看来,这总是一种肮脏的 hack,但这是在 OpenCV 中显示图像的常用方式......)

【讨论】:

    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 2010-12-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多