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

news2024/11/17 5:59:27

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

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

一、理论模型

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

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

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

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

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

1.概念

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

2.作用

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

3.

 二、自定义srv

需求:

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

流程:

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

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

  • 编辑配置文件

  • 编译生成中间文件

srv=请求部分+相应部分

1.新建文件并添加功能包

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

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

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

 3.编辑配置文件

 ②

 ③

 放开注释

 更改名

 ④

添加依赖,放开注释 

⑤ 

放开注释

添加

 4.编译(ctrl+shift+B)

5.生成中间文件

 三、需求分析及vscode配置

1.

需求:

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

分析:

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

  • 服务端
  • 客户端
  • 数据

流程:

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

2.vscode配置

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

 四、服务方实现

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

 2.包含头文件

3.初始化ROS节点

 4.创建节点句柄

 

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

 回调函数返回值为bool值

有中文输出需要此函数:

 加上打印语句

6. spin()函数

 7.配置

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

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

③ 

 更改为:

 8.编译,测试

(1)roscore

(2)启动服务器端

(3)调用命令测试

 五、客户端实现

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

2. 包含头文件

3.初始化ROS节点

4.创建节点句柄

 5.创建一个客户端对象

 6.提交请求并处理相应

(1)创建addInts对象

(2)组织请求 

(3)处理响应

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

  

 7.配置

① 

② 

8.编译

9.测试

 (1)先运行服务端

rosrun 包名 服务

(2)再运行客户端

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

 10.优化

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

获取命令中的参数

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

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

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

  atoi是字符串转成int

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

①方法一

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

 ②方法二

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java|多线程与高并发】volatile关键字和内存可见性问题

文章目录 1.前言2. 编译器优化带来的内存可见性问题3. 使用volatile保证内存可见性5.volatile不能保证原子性以JMM的角度看待volatile总结 1.前言 synchronized和volatile都是Java多线程中很重要的关键字,但它们的作用和使用场景有所不同。 synchronized关键字可以…

Linux之文件打包和解压缩

任务描述 有时,我们会在Linux系统中将多个文件打包成一个单独的文件,通过本关的学习,我们将学会如何在Linux系统中将多个文件/目录打包生成一个文件。 本关任务:使用tar命令完成文件和目录的打包操作。 相关知识 tar&#xff…

验证断言(立即断言并行断言)

目录 1.何为断言 2.断言的作用: 3.断言的种类 3.1立即断言 3.2并发断言 4.断言层次结构 4.1 sequence 序列 4.2 property 序列 5.sequence和property的异同 6.补充知识点(assert/cover/assume) 7.写在后边 1.何为断言 断言主要…

网络知识点之-FTP协议

FTP协议指文件传输协议(File Transfer Protocol,FTP),是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UD…

第一节 初识C语言

第一节 初识C语言 目录 一. 什么是C语言二. 第一个C语言程序三. 数据类型四. 变量与常量五. 未完待续 本章重点: 什么是C语言第一个C语言程序数据类型变量、常量字符串转义字符注释选择语句循环语句函数数组…

【LeetCode】每日一题 -- 1171. 从链表中删去总和值为零的连续节点 -- Java Version

题目链接:https://leetcode.cn/problems/remove-zero-sum-consecutive-nodes-from-linked-list/ 1. 题解(1171. 从链表中删去总和值为零的连续节点) 2021年字节二面真题 1.1 暴力解法:穷举 时间复杂度 O(n2),空间复杂…

Python系列之面向对象编程

目录 一、面向对象编程 1.1 面向对象三大特征 1.2 什么是对象 二、类(class)和实例(instance) 2.1 类的构成 2.2 创建类 2.3 创建实例对象和访问属性 2.4 Python内置类属性 2.5 类属性与方法 三、类的继承 3.1 方法重写 四、多态 一、面向对象编程 1.1 面向对象三大…

抖音短视频矩阵系统-源码-系统搭建

目录 1. 短视频AI智能创作 2. 托管式账号管理: 3. 数据分析 4. 智能营销获客 开发流程 抖音账号矩阵系统开发,抖音账号矩阵系统源码搭建,抖音账号技术系统源码部署 抖音矩阵系统专注于为短视频私域运营达人或企业提供一站式赋能服务平台。具体包括智…

小议CSDN周赛57期 - 凑数

本期周赛几乎忘记参加,在最后几分钟的时候上来看了看。那些选择判断一通乱选,填空题也已经被吐槽得差不多了,这里不多说,只说我对第一道编程题的看法(吐槽)。因为 C 站的机制是,即使它错了&…

彻底理解HTTPS加密原理

目录 1.为什么需要加密? 2.什么是对称加密? 3.什么是非对称加密? 4.非对称加密对称加密? 5.数字证书 6.数字签名 相信大家对于HTTP与HTTPS的区别都有了解,那么对于HTTPS的加密过程你是否知道呢? 对称…

单片机内存管理

单片机内存管理 1、随机存储器 RAM是随机存储器,读写速度快,但掉电以后数据会丢失。它分为SRAM(静态RAM)和DRAM(动态RAM)。SRAM无需刷新就可以保存数据;DRAM需要不断刷新才可以保存数据。在CPU内部的RAM,就叫内部RAM&#xff0c…

算法模板(3):搜索(4):高等图论

高等图论 有向图的强连通分量 相关概念 强连通分量:Strongly Connected Component (SCC).对于一个有向图顶点的子集 S S S,如果在 S S S 内任取两个顶点 u u u 和 v v v,都能找到一条 u u u 到 v v v 的路径,那么称 S S…

JVM零基础到高级实战之Java程序员不可不知的对象创建底层步骤细节

JVM零基础到高级实战之Java程序员不可不知的对象创建底层步骤细节 JVM零基础到高级实战之Java程序员不可不知的对象创建底层步骤细节 文章目录 JVM零基础到高级实战之Java程序员不可不知的对象创建底层步骤细节前言Java对象创建的流程步骤包括哪些?总结 前言 JVM零…

【云原生 | 53】Docker三剑客之Docker Compose应用案例一:Web负载均衡

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

基于Echarts构建停车场数据可视化大屏(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【部署LVS-DR 群集】

目录 一、DR模式 LVS负载均衡群集1、数据包流向分析2、DR 模式的特点 二、DR模式 LVS负载均衡群集部署1、1.配置负载调度器(192.168.80.30)(1)配置虚拟 IP 地址(VIP:192.168.102.188)&#xff0…

《设计模式》之装饰器模式

文章目录 1、定义2、动机3、类结构4、优缺点5、注意事项6、总结7、代码实现(C) 1、定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码…

PPT中这8个隐藏技巧-掌握了马上让你幸福感满满

开篇 一个好的PPT需要精雕细琢。即使我们使用了AIGC特别是时下流行的用GPT书写大纲,然后把大纲内的内容放到一些自动GC PPT内容的生成器里生成后的PPT其实也不是马上可以拿来用的。工作上一份大领导、公司、集团级别的PPT不可能90%使用GPT GC生成就可以直接交付的。比如说我们…

Trie树模板与应用

文章和代码已经归档至【Github仓库:https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。 文章目录 Trie树(字典树)基本思想例题 Trie字符串统计code关于idx的理解 模板总结应用 最大异或对分…

初探BERTPre-trainSelf-supervise

初探Bert 因为一次偶然的原因,自己有再次对Bert有了一个更深层地了解,特别是对预训练这个概念,首先说明,自己是看了李宏毅老师的讲解,这里只是尝试进行简单的总结复述并加一些自己的看法。 说Bert之前不得不说现在的…