ROS Custom message with sensor_msgs/Image Publisher

匿名 (未验证) 提交于 2019-12-03 02:38:01

问题:

I have a custom .msg file MyImage.msg

sensor_msgs/Image im float32 age string name 

I have configured the custom .msg fle as illustrated in link:CreatingMsgAndSrv

Further, I am trying to write a simple publisher with this msg.

#include <ros/ros.h>  #include <custom_msg/MyImage.h> #include <image_transport/image_transport.h>   #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <cv_bridge/cv_bridge.h>    int main( int argc, char ** argv ) {     ros::init(argc, argv, "publish_custom");     ros::NodeHandle nh;      ros::Publisher pub2 = nh.advertise<custom_msg::MyImage>("custom_image", 2 );      cv::Mat image = cv::imread( "Lenna.png", CV_LOAD_IMAGE_COLOR );     sensor_msgs::ImagePtr im_msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();      ros::Rate rate( 2 );      while( ros::ok() )     {         ROS_INFO_STREAM_ONCE( "IN main loop");           custom_msg::MyImage msg2;         msg2.age=54.3;         msg2.im = im_msg;         msg2.name="Gena";          pub2.publish(msg2);          rate.sleep();     } } 

This does not seem to compile with catkin_make. The error messages are -

/home/eeuser/ros_workspaces/HeloRosProject/src/custom_msg/publish.cpp: In function ‘int main(int, char**)’: /home/eeuser/ros_workspaces/HeloRosProject/src/custom_msg/publish.cpp:40:19: error: no match for ‘operator=’ in ‘msg2.custom_msg::MyImage_<std::allocator<void> >::im = im_msg’ /home/eeuser/ros_workspaces/HeloRosProject/src/custom_msg/publish.cpp:40:19: note: candidate is: /opt/ros/hydro/include/sensor_msgs/Image.h:56:8: note: sensor_msgs::Image_<std::allocator<void> >& sensor_msgs::Image_<std::allocator<void> >::operator=(const sensor_msgs::Image_<std::allocator<void> >&) /opt/ros/hydro/include/sensor_msgs/Image.h:56:8: note:   no known conversion for argument 1 from ‘sensor_msgs::ImagePtr {aka boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > >}’ to ‘const sensor_msgs::Image_<std::allocator<void> >&’ make[2]: *** [custom_msg/CMakeFiles/publish.dir/publish.cpp.o] Error 1 make[1]: *** [custom_msg/CMakeFiles/publish.dir/all] Error 2 make: *** [all] Error 2 Invoking "make" failed 

I can understand that msg2.im = im_msg; isn't correct. Please help me fix this.

回答1:

You are trying to assign a sensor_msgs::ImagePtr (a pointer) to a sensor_msgs::Image field. Simply you can't. Just look at the fifth line of your error log:

no known conversion for argument 1 from ‘sensor_msgs::ImagePtr {aka boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > >}’ to ‘const sensor_msgs::Image_<std::allocator<void> >&’ 

To solve this simple issue, just add the dereference operator (*) to that pointer:

msg2.im = *im_msg; 

I assume that there are no other errors in the code.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!