ROS ImagePtr 和图像编译混乱

ksi*_*mar 2 compilation image ros

我正在尝试创建发布包含两个图像的自定义消息。这是自定义消息文件:

\n
Header header\nsensor_msgs/Image leftimage\nsensor_msgs/Image rightimage\n
Run Code Online (Sandbox Code Playgroud)\n

这是我尝试使用自定义消息通过 ROS 发布立体相机图像的文件:

\n
sensor_msgs::ImagePtr leftmsg;\nsensor_msgs::ImagePtr rightmsg;\nleftmsg = cv_bridge::CvImage(std_msgs::Header(), "mono8", leftframe).toImageMsg();\nrightmsg = cv_bridge::CvImage(std_msgs::Header(), "mono8", rightframe).toImageMsg();\nstereo.leftimage = leftmsg;\nstereo.rightimage = rightmsg;\nstereo_pub.publish(stereo);\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我执行以下操作时,出现以下编译错误catkin_make

\n
    error: no match for \xe2\x80\x98operator=\xe2\x80\x99 (operand types are \xe2\x80\x98duo_cam::Stereo_<std::allocator<void> >::_leftimage_type {aka sensor_msgs::Image_<std::allocator<void> >}\xe2\x80\x99 and \xe2\x80\x98sensor_msgs::ImagePtr {aka boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > >}\xe2\x80\x99)\n            stereo.leftimage = leftmsg;\n                             ^\n    note: candidate is:\n    In file included from /opt/ros/indigo/include/image_transport/publisher.h:39:0,\n             from /opt/ros/indigo/include/image_transport/image_transport.h:38,\n    sensor_msgs::Image_<std::allocator<void> >& sensor_msgs::Image_<std::allocator<void> >::operator=(const sensor_msgs::Image_<std::allocator<void> >&)\n     struct Image_\n            ^\n
Run Code Online (Sandbox Code Playgroud)\n

我该如何纠正这个问题?我已经在使用 toImageMsg() 函数,我在网上看到该函数将 ImagePtr 转换为图像,所以不确定出了什么问题。

\n

lua*_*tor 5

根据文档,签名toImageMsg

sensor_msgs::ImagePtr toImageMsg() const;
Run Code Online (Sandbox Code Playgroud)

也就是说,它不会转换ImagePtrImage用于CvImage将 OpenCV 图像转换为 ROS 图像)。leftmsg这也可以从您声明and rightmsgas的事实看出ImagePtr;如果toImageMsg返回Image,这将不起作用。

要获取Imagea 的ImagePtr,只需取消引用该指针即可。以下应该有效:

stereo.leftimage = *leftmsg;
stereo.rightimage = *rightmsg;
Run Code Online (Sandbox Code Playgroud)