ROS(六)服务中的Server和Client

本文介绍了ROS中的服务(Service)概念,包括客户端和服务器节点如何交互。通过一个简单的加法运算例子,展示了如何自定义服务数据,并创建服务服务器和客户端。在示例中,客户端发送两个整数,服务器接收到请求后计算它们的和,并将结果返回给客户端。文章还提供了创建服务服务器和客户端的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务(Service)是节点之间同步通信的一种方式,
允许客户端(Client)节点发布请求(Request),
由服务端(Server)节点处理后反馈应答(Response)。

$ rosservice list (如下命令查看系统中的服务列表)

可以使用代码或者终端对列表中的服务进行调用。例如使用以下命令调用“/spawn”服务新生一只乌龟:
(终端输入rosservice call /spawn 后边直接用tab键补全,然后再写名字,更改坐标即可)
在这里插入图片描述
后边尝试修改代码,让两只乌龟一起转圈。。。

我们以一个简单的加法运算为例,具体研究ROS中的服务应用。在该例程中,Client发布两个需要相加的int类型变量,Server节点接收请求后完成运算并返回加法运算结果。

如何自定义服务数据

与话题消息类似,ROS中的服务数据可以通过srv文件进行语言无关的接口定义,一般放置在功能包根目录下的srv文件夹中。该文件包含请求与应答两个数据域,数据域中的内容与话题消息的数据类型相同,只是在请求与应答的描述之间,需要使用“—”进行分割。

int64 a
int64 b
---
int64 sum

在这里插入图片描述

如何创建Server

初始化ROS节点。 ·创建Server实例。 ·循环等待服务请求,进入回调函数。 ·在回调函数中完成服务功能的处理并反馈应答数据。

/**
 * AddTwoInts Server
 */
 
#include "ros/ros.h"
#include "learning_com/AddTwoInts.h"

// service回调函数,输入参数req,输出参数res
bool add(learning_com::AddTwoInts::Request  &req,
         learning_com::AddTwoInts::Response &res)
{
   
   
    // 将输入参数中的请求数据相加,结果放到应答变量中
    res.sum = req.a + req.</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值