ksi*_*mar 2 compilation image ros
我正在尝试创建发布包含两个图像的自定义消息。这是自定义消息文件:
\nHeader header\nsensor_msgs/Image leftimage\nsensor_msgs/Image rightimage\nRun Code Online (Sandbox Code Playgroud)\n这是我尝试使用自定义消息通过 ROS 发布立体相机图像的文件:
\nsensor_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);\nRun Code Online (Sandbox Code Playgroud)\n但是,当我执行以下操作时,出现以下编译错误catkin_make:
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 ^\nRun Code Online (Sandbox Code Playgroud)\n我该如何纠正这个问题?我已经在使用 toImageMsg() 函数,我在网上看到该函数将 ImagePtr 转换为图像,所以不确定出了什么问题。
\n根据文档,签名toImageMsg是
sensor_msgs::ImagePtr toImageMsg() const;
Run Code Online (Sandbox Code Playgroud)
也就是说,它不会转换为ImagePtr(Image用于CvImage将 OpenCV 图像转换为 ROS 图像)。leftmsg这也可以从您声明and rightmsgas的事实看出ImagePtr;如果toImageMsg返回Image,这将不起作用。
要获取Imagea 的ImagePtr,只需取消引用该指针即可。以下应该有效:
stereo.leftimage = *leftmsg;
stereo.rightimage = *rightmsg;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2295 次 |
| 最近记录: |