Python实现Server端
Server创建流程
1. 创建节点
| rospy.init_node(nodeName)
|
2. 创建server
Tip
第一个参数serviceName
为服务名称,为一个uri地址
第二个参数是服务需要的数据类型。
第三个参数为服务请求的回调
3.处理请求的逻辑
1
2
3
4
5
6
7
8
9
10
11
12 | def callback(request):
if not isinstance(request, AddTwoIntsRequest):
return
# 获取请求数据
a = request.a
b = request.b
# 返回响应结果
response = AddTwoIntsResponse()
response.sum = a + b
return response
|
Tip
回调函数的参数是请求过来的数据
返回值是响应的数据
完整示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 | #!/usr/bin/env python
# coding:utf-8
import rospy
from rospy_tutorials.srv import AddTwoInts, AddTwoIntsRequest, AddTwoIntsResponse
def callback(request):
if not isinstance(request, AddTwoIntsRequest):
return
# 获取请求数据
a = request.a
b = request.b
# 返回响应结果
response = AddTwoIntsResponse()
response.sum = a + b
return response
if __name__ == '__main__':
# 创建节点
nodeName = "my_server_node"
rospy.init_node(nodeName)
# 创建Service Server
serviceName = "my_service"
rospy.Service(serviceName, AddTwoInts, callback)
# 阻塞线程
rospy.spin()
|
调试Server
调试server端
主要是查看server端
是否能接收到请求,并根据请求数据处理相应的业务逻辑,然后返回处理好的结果。
在这里,我们只需要模拟client端
发送请求就可以了。
ROS提供了命令行工具和图形化工具供我们调试开发。
1. rosservice命令行调试
通过rosservice list
命令可以帮助我们查询出当前运行的所有service
查询的结果中,我们可以得到对应的服务名称/demo_service/add_tow_int
通过查询的服务名称,来调用此服务
| rosservice call /my_service "a:1 b:3"
|
Tip
rosservice call
负责调用service。第一个参数是要调用的service的名称,后面的参数是调用时需要传入的参数。
2.rqt_service_caller工具调试
通过命令呼出工具
| rosrun rqt_service_caller rqt_service_caller
|