首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROS发布布尔阵列

ROS发布布尔阵列
EN

Stack Overflow用户
提问于 2014-12-10 10:18:27
回答 1查看 3.1K关注 0票数 0

我试图在ROS msg中发布一个布尔数组。布尔阵列由Open边缘检测器生成。因此,数组中只有真值或假值。该数组具有图像大小,在我的例子中是1280x1024。

我正在尝试使用来自ByteMultiArray的std_msgs消息。下面显示了我到目前为止得到的代码(这只是解决这个问题的重要内容):

代码语言:javascript
复制
import rospy
from std_msgs.msg import ByteMultiArray

NeedleBorder = rospy.Publisher('NeedleBorder', ByteMultiArray, queue_size=10)

frame_edges = cv2.Canny(frame_gray, threshold1, threshold2)
frame_edges_bool = frame_edges.astype(bool)

NeedleBorder.publish(frame_edges_bool)

如果运行此代码,将得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "VideoPublisher.py", line 73, in <module>
    NeedleBorder.publish(frame_edges_bool)
  File "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/topics.py", line 816, in publish
    data = args_kwds_to_message(self.data_class, args, kwds)
  File "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/msg.py", line 122, in args_kwds_to_message
    return data_class(*args)
  File "/opt/ros/indigo/lib/python2.7/dist-packages/std_msgs/msg/_ByteMultiArray.py", line 72, in __init__
    super(ByteMultiArray, self).__init__(*args, **kwds)
  File "/opt/ros/indigo/lib/python2.7/dist-packages/genpy/message.py", line 276, in __init__
    raise TypeError("Invalid number of arguments, args should be %s"%str(self.__slots__)+" args are"+str(args))
TypeError: Invalid number of arguments, args should be ['layout', 'data'] args are(array([[False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       ..., 
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False]], dtype=bool),)

在这种情况下,ROS wiki帮不了我。虽然我认为这个msgs/html/msg/ByteMultiArray.html和这个msgs/html/msg/MultiArrayLayout.html以某种方式找到了答案,但遗憾的是,对我来说并非如此。

谢谢您的每一个帮助和提示!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-10 14:40:47

我建议仅仅发布图像信息,如果这是实际对应的数据。为此,已经有了一个助手库,用于在opencv2类型和ROS消息类型之间进行转换:

代码语言:javascript
复制
import rospy
from cv_bridge import CvBridge
from sensor_msgs.msg import Image

image_pub = rospy.Publisher("image_topic_2",Image)

frame_edges = cv2.Canny(frame_gray, threshold1, threshold2)

image_pub.publish(self.bridge.cv2_to_imgmsg(frame_edges, "mono8"))

有关cv_bridge的详细信息,请参阅本教程:bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython

如果您真的想使用ByteMultiArray,那么您可以这样做,但是您确实需要创建一个描述数据维度的MultiArrayLayout。但是,这样做有点麻烦,而且您将无法使用标准的ROS工具来可视化图像。

而且,在将来,你最好在http://answers.ros.org上问这样的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27398443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档