ros订阅话题python_如何在ROS中发布/订阅python“列表列表”作为主题

我是ROS和rospy的新手,我不熟悉非简单数据类型作为主题.

我想构建一个ROS节点作为订阅者和发布者:它接收一个主题(两个float64的列表),并使用一个函数(比如my_function)返回一个float64列表列表,然后将这个列表列表发布为一个话题.

为此,我构建了一个如下节点:

from pymongo import MongoClient

from myfile import my_function

import rospy

import numpy as np

pub = None

sub = None

def callback(req):

client = MongoClient()

db = client.block

lon = np.float64(req.b)

lat = np.float64(req.a)

point_list = my_function(lon, lat, db)

pub.publish(point_list)

def calculator():

global sub, pub

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

pub = rospy.Publisher('output_data', list)

# Listen

sub = rospy.Subscriber('input_data', list, callback)

print "Calculation finished. \n"

ros.spin()

if __name__ == '__main__':

try:

calculator()

except rospy.ROSInterruptException:

pass

我清楚地知道Subscriber和Publisher中的列表不是消息数据,但我无法弄清楚如何修复它,因为它不是整数也不是整数列表.

最佳答案 你可以通过在msg中定义一个新的ros类型来复杂化自己,或者使用默认的并且易于实现std_msgs类型,可能对使用json模块很有用,所以你在发布之前序列化数据,然后在另一侧反序列化它接收…

其余的Pub / Sub,主题和处理程序保持不变:)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值