首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用numpy在rospy中发布一组单词

尝试使用numpy在rospy中发布一组单词
EN

Stack Overflow用户
提问于 2014-06-01 22:18:26
回答 2查看 3.1K关注 0票数 0

我正在创建一个订阅服务器,它接受一个单词(意思是一个字符串),然后将这些单词收集到一个数组中,然后发布这些单词的数组。

我试着用numpy来做这件事。我的数组的长度必须是3,最后一个单词是最新的。通过这种方式,我将在数组的末尾有两个前面的单词和最新的单词。

这是代码:

代码语言:javascript
复制
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
from rospy.numpy_msg import numpy_msg
import numpy
#added

def callback(data):
    global c
    pub = rospy.Publisher('tag_history',numpy_msg(String))

c.append(str(data.data))
if len(c)>3:
   c=c[1:4]    
d=numpy.array(c,dtype=numpy.str)
print c
pub.publish(d)
rospy.sleep(0.5)



def listener():

   rospy.init_node('tag_history', anonymous=True)

   rospy.Subscriber("DA_tags", String, callback)
   rospy.spin()


 if __name__ == '__main__':

 global c
 c=[]
 listener()

当我运行这段代码时,我得到的错误是:

代码语言:javascript
复制
[ERROR] [WallTime: 1401656539.688481] bad callback: <function callback at 0x2456758>
Traceback (most recent call last):
File "/opt/ros/hydro/lib/python2.7/dist-packages/rospy/topics.py", line 682, in          _invoke_callback
cb(msg)
File "./tag_history.py", line 17, in callback
pub.publish(d)
File "/opt/ros/hydro/lib/python2.7/dist-packages/rospy/topics.py", line 802, in publish
raise ROSSerializationException(str(e))
ROSSerializationException: field data must be of type str

“字段数据必须是str”类型的错误意味着什么?我该怎么移除它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-01 22:24:09

该错误意味着,在第17行,您将向pub.publish传递一个numpy数组,但它需要一个字符串。

票数 0
EN

Stack Overflow用户

发布于 2014-06-02 05:40:24

THanks指出它的RodrigoOlma。我通过在ros中创建一个自定义msg来解决我的问题,它是一个字符串数组。我将其声明为string[]数据,并将数据类型命名为StringArray。我把我的代码改为:

代码语言:javascript
复制
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
from beginner_tutorials.msg import StringArray


def callback(data):
    global c
    str=StringArray()
    pub = rospy.Publisher('tag_history',StringArray)
    c.append(data.data)
    if len(c)>3:
       c=c[1:4]    
    str.data=c
    print str
    pub.publish(str)

def listener():

     rospy.init_node('tag_history', anonymous=True)

     rospy.Subscriber("DA_tags", String, callback)
     rospy.spin()


if __name__ == '__main__':

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

https://stackoverflow.com/questions/23985092

复制
相关文章

相似问题

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