sending image to html
Hi,
I am getting the following error in Rosbridge WebSocket server when I try to send an image to a html web page using roslibjs with cvbridge
"Tried to register topic /camera/image/compressed with type sensor_msgs/CompressedImage but it is already established with type sensor_msgs/Image"
Any ideas on what I am doing wrong? i can see the image being published to rviz and I have the option there to choose raw or compressed so I'm assuming it's something I am doing wrong on the html side
This is what I have on the html side
var image_listener = new ROSLIB.Topic({
ros : ros,
name : '/camera/image/compressed',
messageType : 'sensor_msgs/CompressedImage'
});
image_listener.subscribe(function(message) {
//document.getElementById("liveimage").innerHTML = m.data;
console.log("image listenerr event fired");
var imagedata = "data:image/png;base64," + message.data;
document.getElementById("liveimage").src = imagedata;
//document.getElementById("liveimage").src = m.data;
});
this is what I have on the C++ side
ros::init(argc, argv, "test image");
ros::NodeHandle n;
cv::Mat image2 = cv::imread("test.png" ,0);
image_transport::ImageTransport it_(n);
image_transport::Publisher image_pub_ = it_.advertise("/camera/image/compressed", 1);
cv_bridge::CvImagePtr cv_ptr(new cv_bridge::CvImage);
ros::Rate loop_rate(10); //10 hz
while(ros::ok()){
#if 1
ros::Time time = ros::Time::now();
//cv_ptr->encoding = "bgr8";
cv_ptr->encoding = "mono8";
cv_ptr->header.stamp = time;
cv_ptr->header.frame_id = "/camera/image/compressed";
#endif
//cv_ptr->image = image;
cv_ptr->image = image2;
image_pub_.publish(cv_ptr->toImageMsg());
ROS_INFO("ImageMsg Sent.");
ROS_INFO("Subscribers: %d", image_pub_.getNumSubscribers());
ros::spinOnce();
loop_rate.sleep();
}
#endif
ros::spin();
return 0;