开发者社区> 问答> 正文

ros服务器回调中的全局变量

我正在使用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

展开
收起
kun坤 2019-12-25 09:59:53 784 0
1 条回答
写回答
取消 提交回答
  • 要用strcpy()而不是用 = 来赋值。

    2019-12-26 14:01:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS块储存产品全面解析 立即下载

相关镜像