我正在尝试创建一个接受单词(表示字符串)的订阅者,然后将这些单词收集到一个数组中,然后发布这些单词的数组。
我正在尝试使用numpy。我的数组的长度总是必须为3,最后的最后一个单词。这样我就会在数组末尾有两个最新单词。
这是代码:
#!/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()
当我运行此代码时,这是我得到的错误:
[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类型”是什么意思?如何删除它?
答案 0 :(得分:0)
该错误意味着在第17行您将numpy数组传递给pub.publish
,但它需要一个字符串。
答案 1 :(得分:0)
指出RodrigoOlma。我通过在ros中创建一个自定义消息来修复我的问题,这是一个字符串数组。我声明它就像这个string []数据并命名为数据类型StringArray。我把我的代码更改为:
#!/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()