Я работаю с проектом, связанным с ROS Kinetic. Я написал свои узлы, используя Python3, и попытался передать некоторую информацию с помощью ros-сервиса с одного узла на другой. Эта информация представляет собой огромный объект, который не может быть легко отформатирован для обычных типов ROS, поэтому я использовал pickle.dumps(object, 0).decode()
и отправлял его как строку. На стороне сервера я не мог использовать pickle и встретил исключение: No module named search
. код на стороне сервера:using python3 libs in ros kinetic
#!/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()
Я попытался сделать это, не вызывая рассол и проблема была решена, так что я думаю, что я не могу назвать рассол от сервера каким-то образом