我正在使用ROS动能的服务客户。我想使用客户端激活服务器。服务器接收到int后,它将订阅Voxel并返回一些数据。我的问题是,虽然我已经定义了list_1作为一个全局变量,这个错误消息出现: 服务器代码:
#!/usr/bin/env python
from sensor_msgs.msg import PointCloud2
from sensor_msgs import point_cloud2
import rospy
import numpy as np
# ROS Server srv file
from pcl_navid.srv import obst_kin_data, obst_kin_dataRequest, obst_kin_dataResponse
# Main Function: Point Cloud
def callback_pointcloud(data):
.
.
.
global list_1
list_1=[1,2,3]
def handle_add_two_ints(req):
sub_once=rospy.Subscriber('/voxel_cloud', PointCloud2, callback_pointcloud)
print list_1
return list_1
def main():
rospy.init_node('pcl_listener', anonymous=True)
s = rospy.Service('add_two_ints', obst_kin_data, handle_add_two_ints)
rospy.spin()
if __name__ == "__main__":
main()
我尝试初始化list_1=[]。所以我这样编辑了第一行:
#!/usr/bin/env python
...
import numpy as np
# ROS Server srv file
from pcl_navid.srv import obst_kin_data, obst_kin_dataRequest, obst_kin_dataResponse
list_1=[]
...
之后,我第一次调用服务器时,它返回一个空列表。但我第二次调用它时,它工作正常。有人能解释一下为什么会这样吗? 编辑1: 这是我每次调用服务器时使用的客户机代码。 客户机代码:
#!/usr/bin/env python
import sys
import rospy
from pcl_navid.srv import obst_kin_data
def add_two_ints_client(a):
rospy.wait_for_service('add_two_ints')
try:
add_two_ints = rospy.ServiceProxy('add_two_ints', obst_kin_data)
resp1 = add_two_ints(a)
return resp1
except rospy.ServiceException, e:
print "Service call failed: %s"%e
if __name__ == "__main__":
if len(sys.argv) == 2:
a = int(sys.argv[1])
else:
sys.exit(1)
obst_from_kinect=add_two_ints_client(a)
print obst_from_kinect.number_of_obstalces
问题来源StackOverflow 地址:/questions/59466515/global-variable-in-a-ros-server-callback
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。