订阅者收到带有 'Data: ""' 的字符串
Subscriber receives String with 'Data: ""'
我有一个发布者发送一个从 0 到 6 的数字,或 None。所以我在发送之前将它转换为字符串以确保它可以发送“None”值。
self.pub = rospy.Publisher("jugada", String, queue_size=1)
self.pub.publish(str(col))
然后我希望订阅者收到它:
class clicker(object):
def __init__(self):
self.jugada_sub = rospy.Subscriber("jugada",String, self.callback)
def callback(self, data):
jugada = data
print(jugada)
而不是打印:
3
而是打印
数据:“3”
它分解了我需要该数字(或 None)的其余代码。
我尝试 str(data) 然后尝试编辑字符串以删除 'Data:' 部分,但这不起作用。
我尝试了 google 它大约一个小时,但无法弄清楚如何摆脱“数据:”或如何更改消息类型以仅发送字符串。
PS 稍后在我的代码中:
if jugada != "None":
jugada = int(jugada)
我收到错误:int() 参数必须是字符串
如果我在开头执行 jugada = str(data),我会收到错误消息:Invalid literal for int() with base 10: 'data: "3"'
ROS 消息定义为 类,不是内置类型。对于 std_msg
类型,您需要使用 .data
属性直接检索数据。举个例子:
def callback(self, data):
jugada = data.data
print(jugada)
另外几个注意事项。发布数据时,通常最好不要将原始类型直接传递给 .publish
,而是使用如下消息类型:
output_msg = String()
output_msg.data = 'some string val'
pub.publish(output_msg)
最后,如果您要发布整数数据,则应使用以下整数类型之一:Int8
、Int16
、Int32
等
我有一个发布者发送一个从 0 到 6 的数字,或 None。所以我在发送之前将它转换为字符串以确保它可以发送“None”值。
self.pub = rospy.Publisher("jugada", String, queue_size=1)
self.pub.publish(str(col))
然后我希望订阅者收到它:
class clicker(object):
def __init__(self):
self.jugada_sub = rospy.Subscriber("jugada",String, self.callback)
def callback(self, data):
jugada = data
print(jugada)
而不是打印:
3
而是打印
数据:“3”
它分解了我需要该数字(或 None)的其余代码。 我尝试 str(data) 然后尝试编辑字符串以删除 'Data:' 部分,但这不起作用。 我尝试了 google 它大约一个小时,但无法弄清楚如何摆脱“数据:”或如何更改消息类型以仅发送字符串。
PS 稍后在我的代码中:
if jugada != "None":
jugada = int(jugada)
我收到错误:int() 参数必须是字符串
如果我在开头执行 jugada = str(data),我会收到错误消息:Invalid literal for int() with base 10: 'data: "3"'
ROS 消息定义为 类,不是内置类型。对于 std_msg
类型,您需要使用 .data
属性直接检索数据。举个例子:
def callback(self, data):
jugada = data.data
print(jugada)
另外几个注意事项。发布数据时,通常最好不要将原始类型直接传递给 .publish
,而是使用如下消息类型:
output_msg = String()
output_msg.data = 'some string val'
pub.publish(output_msg)
最后,如果您要发布整数数据,则应使用以下整数类型之一:Int8
、Int16
、Int32
等