ros之服务(2)

在上一服务中直接通过call子命令调用服务,这里在代码中调用服务

service_client.py

 1 #!/usr/bin/env python                                                                            
 2  
 3 import rospy
 4  
 5 from basic.srv import WordCount 
 6  
 7 import sys 
 8  
 9 rospy.init_node('service_client')
10  
11 rospy.wait_for_service('word_count')
12  
13 word_counter = rospy.ServiceProxy('word_count',WordCount)
14  
15 words = ' '.join(sys.argv[1:])
16  
17 word_count = word_counter(words)
18  
19 print words, '->',word_count.count

首先要等待服务端声明之前的服务,如果在服务声明之前使用它,这个调用会失败,并抛出异常,

这里与话题的区别是即使话题没有声明也可以调用它。

rospy,wait_for_service('word_count')   

客户端要指定服务的名字和类型,这会使我们像调用本地函数一样使用服务,它将会帮我们作服务调用

miao@openlib:~$ rosrun basic service_client.py  these are some words  hhh
these are some words hhh -> 5

停止服务端并重新运行客户端节点,客户端节点将会阻塞。等待服务被声明。此时启动服务端节点会使客户端节点继续工作。

ros最大的限制是:当服务端因为某些原因不可用时服务端可能将永远等下去。服务意外终止,或者客户端在调用服务时弄错了名字等情况都会造成客户端卡住。

原文地址:https://www.cnblogs.com/miaorn/p/11755811.html