ROS订阅者接收String类型消息出现Data前缀导致转换报错求解
ROS订阅者接收String消息前缀问题解决
问题根源
- ROS的
std_msgs/String是专门定义的消息类型,并非Python原生字符串,回调函数传入的data参数是该消息类型的实例对象 - 实际发布的字符串内容存储在该对象的
data属性中,直接打印消息对象时,会输出data: "xxx"格式的结构化描述,这就是你看到额外前缀的来源 - 直接将消息对象赋值给变量、或者将整个消息对象转字符串,都会保留前缀信息,导致后续转int时报错
修正代码
只需要修改订阅者的回调函数,从消息对象的data字段取实际内容即可,原有后续逻辑不需要改动:
class clicker(object): def __init__(self): self.jugada_sub = rospy.Subscriber("jugada",String, self.callback) def callback(self, data): # 取出std_msgs/String消息中存储的实际字符串内容 jugada = data.data print(jugada) # 原有转换逻辑可直接正常运行 if jugada != "None": jugada = int(jugada)
内容的提问来源于stack exchange,提问作者Forquilla
相关产品推荐
相关产品推荐

