ROS学习笔记—编写&检验服务和客户端(Python)

目录

一、编写服务节点

二、编写客户端节点

三、构建节点

四、检验服务和客户端


学习ROSwiki官方教程时的笔记,以便后续回顾

一、编写服务节点

跳转到创建的功能包目录

$ roscd beginner_tutorials

在beginner_tutorials包中创建scripts/add_two_ints_server.py文件:

#!/usr/bin/env python

from __future__ import print_function

from beginner_tutorials.srv import AddTwoInts,AddTwoIntsResponse
import rospy

def handle_add_two_ints(req):
    print("Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b)))
    return AddTwoIntsResponse(req.a + req.b)

def add_two_ints_server():
    rospy.init_node('add_two_ints_server')
    s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
    print("Ready to add two ints.")
    rospy.spin()

if __name__ == "__main__":
    add_two_ints_server()

给节点添加执行权限(scripts目录下):

$ chmod +x scripts/add_two_ints_server.py

然后将以下内容添加到CMakeLists.txt文件。这样可以确保正确安装Python脚本,并使用合适的Python解释器。(必要性?)

catkin_install_python(PROGRAMS scripts/add_two_ints_server.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

二、编写客户端节点

在beginner_tutorials包中创建scripts/add_two_ints_client.py文件:

#!/usr/bin/env python

from __future__ import print_function

import sys
import rospy
from beginner_tutorials.srv import *

def add_two_ints_client(x, y):
    rospy.wait_for_service('add_two_ints')
    try:
        add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)
        resp1 = add_two_ints(x, y)
        return resp1.sum
    except rospy.ServiceException as e:
        print("Service call failed: %s"%e)

def usage():
    return "%s [x y]"%sys.argv[0]

if __name__ == "__main__":
    if len(sys.argv) == 3:
        x = int(sys.argv[1])
        y = int(sys.argv[2])
    else:
        print(usage())
        sys.exit(1)
    print("Requesting %s+%s"%(x, y))
    print("%s + %s = %s"%(x, y, add_two_ints_client(x, y)))

同样给节点添加执行权限:

$ chmod +x scripts/add_two_ints_client.py

然后,修改CMakeLists.txt中编辑catkin_install_python()调用:

catkin_install_python(PROGRAMS scripts/add_two_ints_server.py scripts/add_two_ints_client.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

三、构建节点

切换当前目录到你的catkin工作空间,然后运行catkin_make:

$ cd ~/catkin_ws
$ catkin_make

四、检验服务和客户端

确保roscore已经开启:

$ roscore

打开新终端,运行服务:

rosrun beginner_tutorials add_two_ints_server.py 


#或者在scripts目录下运行
 
$ python add_two_ints_server.py 

打开新终端,运行客户端:

rosrun beginner_tutorials add_two_ints_client.py  1 9


#或者在scripts目录下运行
 
$ python add_two_ints_client.py 1 9

完成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS系统中,服务端和客户端的概念可以理解为提供服务和请求服务的节点。服务端节点提供服务客户端节点请求服务,它们之间通过消息传递进行通信。 下面是一个简单的服务端和客户端Python编程示例: 服务端代码: ```python #!/usr/bin/env python import rospy from std_srvs.srv import Empty def my_service_callback(request): print("My service has been called!") #实现服务功能 return [] rospy.init_node('my_service_server') my_service = rospy.Service('/my_service', Empty, my_service_callback) print("My service is ready to receive requests!") rospy.spin() #保持节点运行状态 ``` 客户端代码: ```python #!/usr/bin/env python import rospy from std_srvs.srv import Empty rospy.init_node('my_service_client') rospy.wait_for_service('/my_service') #等待服务启动 my_service_proxy = rospy.ServiceProxy('/my_service', Empty) response = my_service_proxy() #发送请求 ``` 上述代码中,服务端使用`rospy.Service`函数创建一个服务节点,指定服务名称为`/my_service`,服务类型为`Empty`,并指定回调函数`my_service_callback`用于处理服务请求。 客户端使用`rospy.ServiceProxy`函数创建一个服务代理,指定服务名称为`/my_service`,服务类型为`Empty`,并通过调用`my_service_proxy()`方法发送请求,最终获得服务的响应结果。 需要注意的是,服务端和客户端的节点名称应该相互独立,避免节点名称冲突。同时,在ROS系统中,服务端和客户端节点的启动顺序也很重要,需要确保服务端节点在客户端节点之前启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值