需求描述:编码实现向 turtlesim 发送请求,在乌龟显示节点的窗体指定位置生成一乌龟,这是一个服务请求操作。
实现分析:
- 首先,需要启动乌龟显示节点。
- 要通过ROS命令,来获取乌龟生成服务的服务名称以及服务消息类型。
- 编写服务请求节点,生成新的乌龟。
实现流程:
- 通过ros命令获取服务与服务消息信息。
- 编码实现服务请求节点。
- 启动 roscore、turtlesim_node 、乌龟生成节点,生成新的乌龟。
服务名称与服务消息获取
简单实现,通过命令的形式调用服务并生成一只小乌龟
服务客户端实现
创建功能包需要依赖的功能包: roscpp rospy std_msgs turtlesim
#! /usr/bin/env python
import rospy
from turtlesim.srv import Spawn,SpawnRequest,SpawnResponse
"""
需求:向服务器发送请求生成一只乌龟
话题:/spawn
消息:turtlesim/Spawn
1、导包
2、初始化ROS节点
3、创建服务的客户端对象
4、组织数据并发送请求
5、处理响应结果
"""
if __name__=="__main__":
#2、初始化ROS节点
rospy.init_node("service_call_p")
#3、创建服务的客户端对象
client=rospy.ServiceProxy("/spawn",Spawn)
#4、组织数据并发送请求
request = SpawnRequest()
request.x=4.5
request.y=2.0
request.theta=-3
request.name="turtle3"
#4-2 判断服务器状态并发送
client.wait_for_service()#客户端等待服务,若服务端没有启动则挂起
try:
response=client.call(request)
#5、处理响应结果
rospy.loginfo("生成乌龟的名字叫:%s",response.name)
except Exception as e:
rospy.logerr("请求处理异常")
修改scripts权限
修改CMakeLists.txt文件
编译运行
结果显示