本节以创建简单的服务(Client)节点turtle_spawn.py为例进行讲解。该节点通过程序的形式发布一个让客户端产生一个新的小乌龟的请求。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 这个脚本用于请求turtlesim包提供的/spawn服务以创建新的海龟,服务的数据类型为turtlesim::Spawn
# 导入Python的sys模块,用于访问与Python解释器相关的变量和函数
import sys
# 导入ROS的python接口模块
import rospy
# 从turtlesim包的srv模块中导入Spawn服务
from turtlesim.srv import Spawn
# 定义一个函数用于生成(spawn)海龟
def turtle_spawn():
# 初始化ROS节点,节点名为'turtle_spawn'
rospy.init_node('turtle_spawn')
# 阻塞等待直到发现/spawn服务,才继续执行下去
rospy.wait_for_service('/spawn')
try:
# 创建一个ServiceProxy,作为/spawn服务的客户端,服务类型为Spawn
add_turtle = rospy.ServiceProxy('/spawn', Spawn)
# 请求服务调用,传入请求数据,这里是在坐标(2.0, 2.0)处,朝向为0.0弧度创建一个名为"turtle2"的海龟
response = add_turtle(2.0, 2.0, 0.0, "turtle2")
# 返回从服务中得到的响应,其中包括新海龟的名字
return response.name
except rospy.ServiceException as e: # 捕获异常,异常类型为服务异常
# 如果服务调用失败,打印错误信息
print "Service call failed: %s" % e
# 当该脚本被执行,而非被其他模块导入时
if __name__ == "__main__":
# 调用上面定义的函数请求生成海龟,并打印出生成的海龟名字
print "Spwan turtle successfully [name:%s]" % (turtle_spawn())
3) 输入指令“chmod +x turtle_spawn.py”回车,为保存的turtle_spawn.py赋予可执行权限