ROS学习——通信机制(服务通信)

这篇具有很好参考价值的文章主要介绍了ROS学习——通信机制(服务通信)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 2.2.3 服务通信自定义srv调用A(C++) · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

 

 068服务通信(C++)3_客户端优化_Chapter2-ROS通信机制_哔哩哔哩_bilibili

一、理论模型

服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即: 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。比如如下场景:

机器人巡逻过程中,控制系统分析传感器数据发现可疑物体或人... 此时需要拍摄照片并留存。

在上述场景中,就使用到了服务通信。

  • 一个节点需要向相机节点发送拍照请求,相机节点处理请求,并返回处理结果

与上述应用类似的,服务通信更适用于对时时性有要求、具有一定逻辑处理的应用场景。

1.概念

以请求响应的方式实现不同节点之间数据交互的通信模式。

2.作用

用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。

3.

ROS学习——通信机制(服务通信)

 二、自定义srv

需求:

服务通信中,客户端提交两个整数至服务端,服务端求和并响应结果到客户端,请创建服务器与客户端通信的数据载体。

流程:

srv 文件内的可用数据类型与 msg 文件一致,且定义 srv 实现流程与自定义 msg 实现流程类似:

  • 按照固定格式创建srv文件

  • 编辑配置文件

  • 编译生成中间文件

srv=请求部分+相应部分

1.在src下新建功能包并添加依赖

ROS学习——通信机制(服务通信)

2.按照固定格式创建srv文件

新建文件夹->新建文件(该文件是自定义的服务消息的载体)

ROS学习——通信机制(服务通信)

 请求与相应部分使用---分割

 3.编辑配置文件

ROS学习——通信机制(服务通信)

 注意不要用同一个复制只改中间名,这两个前后不一致

 ②

ROS学习——通信机制(服务通信)

 ③

 放开注释成都

ROS学习——通信机制(服务通信)

 更改名

ROS学习——通信机制(服务通信)

 ④

放开注释(添加依赖)

ROS学习——通信机制(服务通信)

⑤ 

放开注释ROS学习——通信机制(服务通信)

添加

ROS学习——通信机制(服务通信)

 4.编译(ctrl+shift+B)

5.生成中间文件

ROS学习——通信机制(服务通信)

 三、需求分析及vscode配置

1.

需求:

编写服务通信,客户端提交两个整数至服务端,服务端求和并响应结果到客户端。

分析:

在模型实现中,ROS master 不需要实现,而连接的建立也已经被封装了,需要关注的关键点有三个:

  • 服务端
  • 客户端
  • 数据

流程:

  • 编写服务端实现;
  • 编写客户端实现;
  • 编辑配置文件;
  • 编译并执行。

2.vscode配置

在devel中使用集成终端打开,打印路径,复制路径到c_cpp_properties.json中,修改格式与上文对齐(如果在话题通信中配置就不需要重复操作)

ROS学习——通信机制(服务通信)

 四、服务方实现

1.新建文件,搭建框架(删除char 后面的const修饰)

ROS学习——通信机制(服务通信)

 2.包含头文件

ROS学习——通信机制(服务通信)

3.初始化ROS节点

 4.创建节点句柄

 ROS学习——通信机制(服务通信)

5.创建一个服务对象,定义回调函数

ROS学习——通信机制(服务通信)

 回调函数返回值为bool值

ROS学习——通信机制(服务通信)

ROS学习——通信机制(服务通信)

有中文输出需要此函数:

ROS学习——通信机制(服务通信)

 加上打印语句

ROS学习——通信机制(服务通信)

6. spin()函数

ROS学习——通信机制(服务通信)

 7.配置

ROS学习——通信机制(服务通信)

参数1——要映射的名称,建议和原名称一致

参数2——被执行的cpp源文件名

ROS学习——通信机制(服务通信)

③ ROS学习——通信机制(服务通信)

 更改为:

ROS学习——通信机制(服务通信)

 8.编译,测试

(1)roscore

(2)启动服务器端

ROS学习——通信机制(服务通信)

(3)调用命令测试

rosservice call addInts空一个tab双击能够补齐,再改动num数字

ROS学习——通信机制(服务通信)

 五、客户端实现

1.新建文件夹,搭建框架

ROS学习——通信机制(服务通信)

2. 包含头文件

ROS学习——通信机制(服务通信)

头文件报错编译一下就好 

3.初始化ROS节点

ROS学习——通信机制(服务通信)

4.创建节点句柄

ROS学习——通信机制(服务通信)

 5.创建一个客户端对象

ROS学习——通信机制(服务通信)

 6.提交请求并处理相应

(1)创建addInts对象

ROS学习——通信机制(服务通信)

(2)组织请求 ROS学习——通信机制(服务通信)

(3)处理响应

ROS学习——通信机制(服务通信)

有中文输出,使用该函数,否则乱码: 

ROS学习——通信机制(服务通信)  

 7.配置

① ROS学习——通信机制(服务通信)

② ROS学习——通信机制(服务通信)

8.编译

9.测试

 (1)先运行服务端

rosrun 包名 服务

ROS学习——通信机制(服务通信)

(2)再运行客户端

rosrun 包名 客户端 参数1 参数2

ROS学习——通信机制(服务通信)

 10.优化

(1)实现参数的动态提交

获取命令中的参数

argc就是arg count,就是程序的参数个数。argc≥1,这个1是指该函数本身,所以有一个参数的话argc=2,函数本身1+参数1=argc2。

在该例中argc=3,因为第一个参数是程序名,第二个才是12,第三个是34

ROS学习——通信机制(服务通信)

char* argv[]是一个数组  每个元素都存储一个指针  也就是你传进去参数的地址

ROS学习——通信机制(服务通信)

  atoi是字符串转成int

结果:

ROS学习——通信机制(服务通信)

 

(2)解决先启动客户端导致运行失败问题

ROS学习——通信机制(服务通信)

①方法一

在客户端发送请求前添加:

ROS学习——通信机制(服务通信)

 ②方法二

ROS学习——通信机制(服务通信)

 该函数传入参数为被等待的服务

两个函数都必须卸载 bool flag前面,否则会出现一直响应失败的现象(需要理解一下这两行代码和if的先后关系)文章来源地址https://www.toymoban.com/news/detail-479609.html

到了这里,关于ROS学习——通信机制(服务通信)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ROS学习——通信机制(话题通信③—注意事项)

    2.1.2 话题通信基本操作A(C++) · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程   043话题通信(C++)4_注意事项_Chapter2-ROS通信机制_哔哩哔哩_bilibili 1. int main(int argc, char const *argv[]){} vscode 中的 main 函数 声明 int main(int argc, char const *argv[]){},默认生成 argv 被 const 修饰,需要

    2024年02月08日
    浏览(35)
  • 【ROS】—— ROS通信机制——话题通信(二)

    📢本系列将依托赵虚左老师的ROS课程,写下自己的一些心得与笔记。 📢课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 📢讲义链接:http://www.autolabor.com.cn/book/ROSTutorials/index.html 📢 文章可能存在疏漏的地方,恳请大家指出。     机器人是一种高度复杂的系统性实现,在机器

    2023年04月18日
    浏览(28)
  • [ROS 系列学习教程] ROS参数服务器(Param):通信模型、Hello World与拓展

    ROS 系列学习教程(总目录) 参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据。 使用场景一般存储一些机器人的固有参数,

    2024年02月01日
    浏览(37)
  • ROS:话题通信机制详解

    话题在ROS中使用最为频繁,其通信模型也较为复杂。在ROS中有两个节点:一个是发布者Talker,另一个是订阅着Listener。两个节点分别发布、订阅同一个话题,启动顺序没有强制要求,此处假设Talker首先启动,可分为如下七步分析建立通信的详细过程。 0、Talker注册 Talker启动,

    2024年02月11日
    浏览(21)
  • 理解ROS Topic 通信频率背后的机制

    Topic是ROS的三种通信方式中最为基本、也是常用的一种。本文对于ROS的Topic通信背后的数据吞吐机制做一个较为详细、深入的介绍。 ROS中发布一个topic的函数是这样的 有三个参数: topic 就是我们要发布的话题, queue_size 是publisher队列中可以存储的消息数量, latch 是锁存,比如

    2024年02月08日
    浏览(30)
  • 【ROS】服务通信、话题通信的应用

    Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我吧!你定不会失望。 本章将来学习如何利用话题通信,服务通信两种种方式对turtlesim进行一个控制 利用话题通信发布一个位姿信息,让乌龟一直做圆周运动 首先,先启动 turtlesim 这个节点 现在可以直

    2024年02月06日
    浏览(27)
  • 【ROS】如何让ROS中节点实现数据交换Ⅱ --服务通信

    Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我吧!你定不会失望。 本章将介绍如何通过服务通信的方式实现节点数据交换以及ROS相关指令 在ros中,一个节点想要获取某种服务(例如: 一个节点想要获取此时的相机数据,节点就需要向相机发送一个请

    2024年02月03日
    浏览(26)
  • 【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍

    Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我吧!你定不会失望。 相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。 而在参数服务器中: ROSMASTER变为了一个存储消息的容器 ,

    2024年02月04日
    浏览(40)
  • 【ROS2指南-14】创建自定义的消息和服务

    目标: 自定义接口文件( .msg 和 .srv )并将它们与 Python 和 C++ 节点一起使用。 教程级别: 初学者 时间: 20分钟 内容 背景 先决条件 任务 1 创建一个新包 2 创建自定义定义 3个CMakeLists.txt 4个package.xml 5 构建tutorial_interfaces包 6 确认 msg 和 srv 创建 7 测试新接口 概括 下一步 在之

    2023年04月12日
    浏览(25)
  • 创建 ROS action操作涉及编写操作定义以及相应的服务器和客户端代码

    架构师指南 创建 ROS 操作涉及编写操作定义以及相应的服务器和客户端代码。我将提供详细的分步指南来说明如何完成此操作。 第 1 步:定义操作 首先,您需要在** .action 文件中定义您的操作。让我们创建一个名为 的简单操作 Example.action **,用于发送一个数字、对其进行处

    2024年02月22日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包