def service_builder(self, service_def):
"""
Method for generating service endpoints for this Client.
Each service contains a type and a service definition, as
defined in the service's .srv file.
For each service, a method is attached to the client that provides an
endpoint with which other nodes can interact with the service.
Because services must be uniquely namespaced, each service proxy will be
exposed externally omitting the class's namespace as defined at
construction time, but mapping to a service that uses the service
class's namepspace. This means service proxies map as follows
self.method('some message') -> /self.namespace_method
Args:
service (string): the name of the service
"""
service_name, service_type = service_def
namespaced_service = '{}_{}'.format(self.namespace, service_name)
def service_method(self, *args, **kwargs):
rospy.wait_for_service(namespaced_service)
service_proxy = rospy.ServiceProxy(namespaced_service, service_type)
return service_proxy(self, *args, **kwargs)
setattr(self, service_name, service_method)
评论列表
文章目录