美文网首页
01-ROS入门-09 Python运行server与clien

01-ROS入门-09 Python运行server与clien

作者: joey_zhou | 来源:发表于2016-06-08 16:29 被阅读653次

    1 编写srv文件

    cd ~/workspace/src/package_name
    mkdir srv
    roscp rospy_tutorials AddTwoInts.srv srv/Sum_Two.srv

    2 更改package.xml文件与CMakeList.txt

    vim ~/workspace/src/package_name/package.xml

    <build_depend>message_generation</build_depend>
    <run_depend>message_runtime</run_depend>
    

    vim ~/workspace/src/package_name/CMakelist

    find_package(catkin REQUIRED COMPONENTS  roscpp  rospy  std_msgs message_generation)
    generate_messages(  DEPENDENCIES  std_msgs)
    add_service_files(  FILES  Sum_Two.srv)
    

    3 新建server

    vim ~/workspace/src/ex1/src/sum_two_server.py

    #!/usr/bin/env python
    
    from ex1.srv import *
    import rospy
    
    def handle_sum_two(req):
        print "Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b))
        # 貌似是默认的 srvice回调函数的参数中,req.a req.b 是client中传递的数据。不清楚
        return Sum_TwoResponse(req.a + req.b)
    
    def sum_two_server():
        rospy.init_node('sum_two_server')
        #初始化 节点 用节点 发布服务数据
        s = rospy.Service('sum_two', Sum_Two, handle_sum_two)
        # 声明了一个 'sum_two'的服务, 数据类型为Sum_Two, 调用handles_sum_two回调函数
        print "Ready to add two ints."
        rospy.spin()
    
    if __name__ == "__main__":
        sum_two_server()
    

    4 新建client

    vim ~/workspace/src/ex1/sum_two_client.py

    #!/usr/bin/env python
    
    import sys
    import rospy
    from ex1.srv import *
    
    def sum_two_client(x, y):
        rospy.wait_for_service('sum_two')
        #等待'sum_two'服务开启 
        try:
            sum_two = rospy.ServiceProxy('sum_two', Sum_Two)
            #服务开启后,从'sum_two'服务 Sum_Two数据类型关联数据
            resp1 = sum_two(x, y)
            #将函数定义成模块,用resp1 调用
            return resp1.sum
            #返回resp1.sum 的值,及sum_two(x,y)函数中sum的参数值
        except rospy.ServiceException, e:
            print "Service call failed: %s"%e
    
    def usage():
        return "%s [x y]"%sys.argv[0]
    
    if __name__ == "__main__":
        if len(sys.argv) == 3:
        # 当命令行输入的程序 及参数总数为3 里 rosrun exam sum_two_server.py 是一个 后面的数字是两个
            x = int(sys.argv[1])
            #第一个参数给x
            y = int(sys.argv[2])
            第二个参数给y
        else:
            print usage()
            sys.exit(1)
            #如果参数数目不对则退出
        print "Requesting %s+%s"%(x, y)
        print "%s + %s = %s"%(x, y, sum_two_client(x, y))
    

    5 python文件改为执行文件

    chmod +x ~/workspace/src/ex1/src/sum_two_server.py
    chmod +x ~/workspace/src/ex1/src/sum_two_client.py

    6 运行程序

    cd ~/workspace/src/ex1/src
    catkin_make
    rosrun ex1 sum_two_server.py
    rosrun ex1 sum_two_client.py

    相关文章

      网友评论

          本文标题:01-ROS入门-09 Python运行server与clien

          本文链接:https://www.haomeiwen.com/subject/iwezrttx.html