【发布时间】: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