在ros kinetic中使用python3库

时间:2016-11-01 15:05:03

标签: python-3.x pickle ros

我正在使用与ROS Kinetic相关的项目。我使用Python3编写了我的节点,并尝试将ros-service的一些信息从1个节点传输到另一个节点。这些信息代表了一个巨大的对象,无法轻松格式化为普通的ROS类型,因此我使用pickle.dumps(object, 0).decode()并将其发送为字符串。在服务器端,我无法使用pickle并遇到例外:No module named search。 服务器端的代码:

#!/usr/bin/env python3
from visualization.srv import *
import rospy
import pickle

megafoo = []

def handle_nodes(req):
    global megafoo
    print(type(req.nodes))
    megafoo.extend(pickle.loads(req.nodes.encode()))
    print(len(megafoo))
    a=1
    print("A request type: {0}".format(type(req)))
    return ListNodesResponse(a)

def nodes_creater_server():
    rospy.init_node('nodes_server')
    s = rospy.Service('draw_some_nodes', ListNodes, handle_nodes)
    print('ready to draw nodes')
    rospy.spin()

if __name__ == "__main__":
    nodes_creater_server()

我试图在不调用pickle的情况下做到这一点并且问题已经解决,所以我认为我不能以某种方式从服务器调用pickle

1 个答案:

答案 0 :(得分:0)

聚会很晚,但"没有名为search"听起来你的泡菜字符串包含一个自定义类"搜索"接收方无法提供。这是正确的吗?

要验证您可以尝试使用ROS中的pickle(这应该有效)来传输一些简单的本机Python值,如(123," abc")。 另一种选择是编写两个独立的程序,一个将pickle写入磁盘,另一个从该文件读取pickle。然后你可以尝试加载,例如决定你需要导入哪些模块。