首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ros kinetic中使用python3库

在ros kinetic中使用python3库
EN

Stack Overflow用户
提问于 2016-11-01 23:05:03
回答 1查看 1.6K关注 0票数 0

我正在与ROS Kinetic连接的项目工作。我使用Python3编写节点,并尝试使用ros-service将一些信息从一个节点传输到另一个节点。这个信息代表了一个巨大的对象,它不能简单地格式化为普通的ROS类型,所以我使用pickle.dumps(object, 0).decode()并像string.In一样发送它在服务器端,我不能使用pickle,并且遇到了一个异常:No module named search。服务端代码如下:

代码语言:javascript
复制
#!/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

EN

回答 1

Stack Overflow用户

发布于 2017-09-07 16:02:47

很晚才开始,但是“没有名为search的模块”听起来像是您的pickle字符串包含一个自定义类"search“,该类在接收端不可用。这是正确的吗?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40362802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档