我是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中的list不是消息数据,但我无法确定如何修复它,因为它不是整数或整数列表。

最佳答案

您可以在msg中定义一个新的ros类型,或者使用默认的、易于实现的std_msgs类型,这可能对使用json模块很有用,因此您可以在发布数据之前对其进行序列化,并在接收到数据后将其反序列化回来。。。
其余的发布/订阅、主题和处理程序保持不变:)

09-06 04:19