服务端——编码实现向 turtlesim 发送请求,在乌龟显示节点的窗体指定位置生成一乌龟

需求描述:

编码实现向 turtlesim 发送请求,在乌龟显示节点的窗体指定位置生成一乌龟,这是一个服务请求操作。

结果演示:

在这里插入图片描述

参考案例:小乌龟显示节点

即:请求产生一个小乌龟,属于service_client模型

#启动小乌龟显示节点
rosrun turtlesim turtlesim_node 

查看服务列表:
rosservice list
在这里插入图片描述
得到产生服务:/spawn

查看服务具体信息:
rosservice info /spawn
在这里插入图片描述
得到消息类型:turtlesim/Spawn

查看消息结构:
rossrv info turtlesim/Spawn
在这里插入图片描述

实现思路

编写请求服务的节点,通过传入乌龟的名称,位置进行产生乌龟

准备工作

准备工作,可供参考:

https://blog.csdn.net/ccy1522929997/article/details/141064438?spm=1001.2014.3001.5502

代码实现:

#! usr/bin/env python




import rospy

from turtlesim.srv import Spawn,SpawnRequest,SpawnResponse

import sys 
'''
需求描述:编码实现向 turtlesim 发送请求,在乌龟显示节点的窗体指定位置生成一乌龟,这是一个服务请求操作。
实现流程:
    1. 导入相关包
    2. 初始化ROS节点
    3. 创建服务客户端,并调用服务
    4. 创建服务请求对象,并发送请求
    5. 处理服务响应结果
    6. 循环执行

'''

if __name__ == "__main__":

    #节点初始化
    rospy.init_node(sys.argv[1])
    rospy.loginfo("服务客户端启动")

    #创建服务客户端
    '''
    服务话题:/Spawn
    消息类型:turtlesim/Spawn
    
    '''
    client = rospy.ServiceProxy("/spawn",Spawn)

    #发送请求
    req = SpawnRequest()

    #发送的内容
    '''
    
    float32 x
    float32 y
    float32 theta
    string name
    ---
    string name

    '''
    rospy.loginfo(sys.argv[1])
    req.name = sys.argv[1]
    req.x = float(sys.argv[2])
    req.y = float(sys.argv[3])
    req.theta = float(sys.argv[4])
    rospy.loginfo( type(
        req.x))
    rospy.loginfo( req.x)

    rospy.loginfo( req.y)

    rospy.loginfo( req.theta)

    #等待服务启动
    client.wait_for_service()
    


    #处理响应
    resp = client.call(req)





实现结果:通过输入命令行,可以添加不同的乌龟

rosrun comunication_learn turtlesim_create.py turtle3 5.2 2.3 1.57

在这里插入图片描述

总结:

关键API:

client = rospy.ServiceProxy(“/spawn”,Spawn)
服务话题:/Spawn
消息类型:turtlesim/Spawn
在这里插入图片描述

req = SpawnRequest()
#发送请求
根据消息结构,编写发送内容
req.name =
req.x =
req.y =
req.theta =

client.wait_for_service()
等待服务启动

resp = client.call(req)
处理响应

细节注意:

通信分为:
发布方和订阅方模型:通常用来信息查询
服务端与客户端模型:通常用来处理短暂事件,如要请求产生等

服务端与客户端模型有先后顺序,要先有服务端模型,才能启动客户端模型发送请求,得到响应。
所以之间在客户端进行优化,等待服务端的启动即可

client.wait_for_service()

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值