当前位置: 首页 > news >正文

ROS 学习应用篇(三)服务Server学习之Server

话题Topic是订阅器与发布器节点之间的,而服务则是客户端(Client)和服务器(Server)间的,前者是异步的,后者是同步的。而且话题是单项的不需要服务器上线,而服务是双向的。在开启服务之前要先打开客户端,所以流程应该是客户端的建立→服务的建立,就像是要现有饭店才能有菜单,客人才能点菜,才能凭借饭店给客人提供服务。

创建功能包

src文件夹下输入一下内容

客户端实现

 引入库

在这里python程序多了一个sys库但是后面的代码里并没有看见。

 c++                                                                                python   

ROS 节点初始化

 c++                                                                                python   

这里还是一样的定义节点的名称,python函数的名字和节点的名字一样都是turtle_spawn 。

定义客户端

c++                                                                                python    

 可以看出在定义客户端的时候,C++语言依旧创建了一个句柄,之前创建的句柄是n在n.publicer这里定义的句柄是node所以是node.serviceClient,老规矩定义了服务名是/spawn,客户端的名字是add_turtle,服务的数据类型是Spawn它存在于turtlesim依赖下。特别的是,客户端定义的时候多了一个等待要等待到名为/spawn的服务的时候才开始定义客户端。

客户端响应

c++                                                                                python   

客户端调用

在这里C++是通过客户端.call的方式调用数据,call也是自带等待的,等待service的应答处理结果,一直等着知道小海龟建立成功,就像百度搜索的时候网不好它会一直转圈圈一样。ROS_INFO也不过是print一下数据,同样字符串的位置是多了一个c_str()的;而python的服客户端调用显然更加方便,之前定义的add_turtle直接就可以送入数据得到响应变量reponse,只需要返回输出一下reponse.name,这里我觉的返回那个值都行,反正函数也不输出什么。except是try对应出现的,如果出现错误就输出一下错误。

数据初始化(设定数据输入)

C++文件将数据送入到srv 变量中,在通过服务器调用,python我们之前也提过了直接就能送入数据。

主程序调用

 c++                                                                                python   

这一部分是根据代码逻辑来的,C++输出一下,然后返回个0就结束了。python也需要print一下,这个print的语句打印的是名字,所有函数turtle_spwan函数的返回值必须是名字,所以之前说的可以返回其他选项就不合适了,但是这套程序是将try封装在了函数turtle_spawn中,之前的publisher是封装在主函数外面的,其实也是可以的。

CMakeList.txt文件

封装成可执行文件,python函数不用调用的时候输入程序名.py就可以

python调用的时候输入程序名.py

c++                                                                                python   

多生成几个海龟是一样的,多输入数据,然后返回就可以了。

服务器实现

节点初始化

创建Server服务器

创建一个发布器

相关文章:

ROS 学习应用篇(三)服务Server学习之Server

话题Topic是订阅器与发布器节点之间的,而服务则是客户端(Client)和服务器(Server)间的,前者是异步的,后者是同步的。而且话题是单项的不需要服务器上线,而服务是双向的。在开启服务之…...

vue+css动画 实现文字的上下轮播切换

突然间碰到一个比较丝滑的特效,就研究了一下想把它实现出来。 效果:渐隐消失,底部往上走覆盖出现 以下是完整代码,复制粘贴即可运行 <template><div class="aaa"><divclass="page1":class="{ private-fade-out: prevIndex === 1…...

debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)

文章目录 前言一、服务器配置安装wireguard软件生成私钥公钥配置服务器参数配置服务器sysctl参数启动、停止服务端 二、用户端配置安装wireguard软件生成私钥公钥配置客户端参数启动、停止客户端配置服务开机启动 三、服务器添加、删除客户四、配置掉线自启动配置掉线自启动脚本…...

LeetCode146.LRU缓存

写了一个小时&#xff0c;终于把示例跑过了&#xff0c;没想到啊提交之后第19/22个测试用例没过 我把测试用例的输出复制在word上看看和我的有什么不同&#xff0c;没想到有18页的word&#xff0c;然后我一直检查终于找出了问题&#xff0c;而且这个bug真的太活该了&#xff0c…...

5-7 使用函数求余弦函数的近似

实现一个函数&#xff0c;用下列公式求cos(x)的近似值&#xff0c;精确到最后一项的绝对值小于e&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬…...

Kotlin HashMap entries.filter过滤forEach

Kotlin HashMap entries.filter过滤forEach fun main(args: Array<String>) {val hashMap HashMap<String, Int>()hashMap["a"] 1hashMap["b"] 2hashMap["c"] 3println(hashMap)hashMap.entries.filter {println("filter $…...

css的预处理

CSS的预处理器是一种CSS的扩展&#xff0c;可以让开发者使用更加高效、灵活的方式来编写CSS代码。 常用的CSS预处理器包括&#xff1a; Sass&#xff1a;基于Ruby的CSS预处理器&#xff0c;提供了大量的函数和变量等扩展功能。 Less&#xff1a;基于JavaScript的CSS预处理器&…...

[云原生案例2.2 ] Kubernetes的部署安装 【单master集群架构 ---- (二进制安装部署)】网络插件部分

文章目录 1. Kubernetes的网络类别2. Kubernetes的接口类型3. CNI网络插件 ---- Flannel的介绍及部署3.1 简介3.2 flannel的三种模式3.3 flannel的UDP模式工作原理3.4 flannel的VXLAN模式工作原理3.5 Flannel CNI 网络插件部署3.5.1 上传flannel镜像文件和插件包到node节点3.5.…...

Go开发基础环境搭建

前面&#xff0c;我们写了下关于GO的入门简介&#xff0c;今天我们打算实操&#xff0c;在实操之前需要准备下基础环境。 IDE开发工具 GoLand 是一款由捷克软件开发公司 JetBrains 专为 Go 开发的跨平台商业 IDE。Goland 具有 Strong Code Insight、Navigation & Search、…...

Vue简单使用Echart图表柱形图 vue使用柱形图 vue使用 echart图表柱形图 vue使用柱形图

Vue简单使用Echart图表柱形图 vue使用柱形图 vue使用 echart图表柱形图 vue使用柱形图 1、安装依赖2、页面Demo使用3、效果图 1、安装依赖 官方文档&#xff1a;https://echarts.apache.org/zh/option.html#title 官方在线示例&#xff1a;https://echarts.apache.org/exampl…...

centos 7.9系统安装老版本jenkins,并解决插件问题

1.初衷 因为jenkins随着时间推移&#xff0c;其版本也越来越新&#xff0c;支持它运行的JDK也越来越新。基于不折腾的目标&#xff0c;我们安装一个老的固定版本就行。以前安装新版本&#xff0c;经常碰到的问题就是插件安装不兼容的问题。现在这个问题&#xff0c;可以把以前…...

BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2306.02329 摘要&#xff1a; 训练模型将常识性语言知识和视觉概念从 2D 图像应用到 3D 场景理解是研究人员最近才开始探索的一个有前景的方向。然而&#xff0c…...

《嵌入式虚拟化技术与应用》:深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!

目录 关于博主前言专家推荐本书适合谁&#xff1f;内容简介书本目录权威作者团队其他 关于博主 &#x1f680;Python爬虫项目实战系列文章&#xff01;&#xff01; ⭐⭐欢迎订阅⭐⭐ 【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码&#xff08;过Authorization认…...

【Java开发】之获取客户端真实 IP 地址

一、应用场景 在投票系统开发中&#xff0c;为了防止刷票&#xff0c;我们需要限制每个 IP 地址只能投票一次&#xff1b;当网站受到诸如 DDoS&#xff08;Distributed Denial of Service&#xff0c;分布式拒绝服务攻击&#xff09;等攻击时&#xff0c;我们需要快速定位攻击者…...

Linux RPM包安装、卸载和升级

我们以安装 apache 程序为例。因为后续章节还会介绍使用源码包的方式安装 apache 程序&#xff0c;读者可以直观地感受到源码包和 RPM 包的区别。 RPM包默认安装路径 通常情况下&#xff0c;RPM 包采用系统默认的安装路径&#xff0c;所有安装文件会按照类别分散安装到表 1 所…...

ROS 多级tf坐标转换

题目 现有一移动机器人&#xff0c;该机器人的基坐标系为“base_link”&#xff0c;机器人包含3个子坐标系分别为“joint1”&#xff0c;“joint2”&#xff0c;“joint3”。 要求&#xff1a;利用多坐标转换&#xff0c;实现joint1下的坐标向joint2下的坐标转换&#xff0c;…...

ceph rados对象存储索引残留问题排查与处理

问题现象 对象存储存储桶无法删除&#xff0c;检查发现生命周期过期后存储桶中有文件残留&#xff0c;未完全删除&#xff0c;但实际访问文件时为404&#xff0c;通过s3cmd无法删除对象&#xff0c;且无报错。 问题定位 检查bucket当前状态&#xff0c;发现桶内有大量object…...

十年测试工龄,揭露软件测试痛点以及分析

做软件测试的同学们&#xff0c;你在平时的测试工作中有哪些困惑或困扰呢&#xff1f;你可以自行简单思考一下。下面我梳理一下&#xff0c;大家可以看看自己是不是也有如此的感受。 从测试整体角度分析&#xff1a; 第一个痛点是入门容易深入难。 很多人认为软件测试也就那么…...

【星海出品】flask(三) 组件

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架 wsgiref 因为我们不希望接触到TCP连接、HTTP原始请求和响应格式&#xff0c;所以&#xff0c;需要一个统一的接口协议来实现这样的服务器软件&#xff0c;让我们专心用Python编写Web业务。 这个…...

关于卷积神经网络的池化层(pooling)

了解池化层 池化层又称“下采样层”或“子采样层”&#xff0c;池化层可以大大降低特征的维度&#xff0c;减少计算量&#xff0c;同时可以避免过拟合问题。 顾名思义&#xff0c;最大池化层就是从输入的矩阵中某一范围内&#xff0c;选择最大的元素进行保留&#xff1b;平均池…...

T536主板的UART功能(RS232/RS485)的使用-盈鹏飞嵌入式

CoM-T536产品特性&#xff1a;采用Allwinner公司Cortex-A55四核T536处理器&#xff0c;最高速度为1.6GHZ&#xff1b;支持2TOPS NPU,仅特定型号支持&#xff1b;支持4K/25fps H.264视频编码&#xff0c;支持4K/15fps MJPEG编码&#xff1b;支持1-4G Bytes LPDDR4 SDRAM&#xf…...

LVGL Spinner控件实战:5分钟搞定3种酷炫加载动画(附ESP32/STM32代码)

LVGL Spinner控件实战&#xff1a;5分钟搞定3种酷炫加载动画&#xff08;附ESP32/STM32代码&#xff09; 在嵌入式GUI开发中&#xff0c;加载动画是提升用户体验的关键细节。LVGL作为轻量级图形库&#xff0c;其Spinner控件能以极低资源消耗实现专业级视觉效果。本文将带你快速…...

告别Source Insight卡顿!用Vim + Ctags + Cscope打造Linux下丝滑的C/C++代码阅读环境

打造Linux下极致流畅的C/C代码阅读环境&#xff1a;Vim Ctags Cscope实战指南 第一次在Linux服务器上打开一个大型C项目时&#xff0c;我盯着终端里密密麻麻的代码手足无措。图形化IDE在远程桌面上的卡顿让我几乎无法工作&#xff0c;每次跳转定义都要等待数秒&#xff0c;开…...

大模型总“胡说八道“?用RAG技术让它秒变“知识库小能手“

大模型很强大&#xff0c;但让它回答企业内部问题就经常"胡说八道"。RAG 技术能解决这个问题——通过检索私有数据增强生成&#xff0c;让 AI 回答更准确。本文从零开始搭建 RAG 系统&#xff0c;分享核心架构、实战经验和踩坑记录。开篇引入 上周有个朋友问我&#…...

iOS捷径(快捷指令)注入JavaScript:在移动端实现网页元素动态调试与修改

1. 为什么iOS开发者需要网页元素调试工具 作为一个长期在移动端折腾的前端开发者&#xff0c;我深刻理解在iPhone上调试网页的痛苦。安卓用户至少还能用Chrome的远程调试功能&#xff0c;但iOS上的Safari就像个黑盒子——你想改个按钮颜色&#xff1f;想看看某个元素为什么错位…...

Linux命令:netstat

netstat 命令 基本介绍 netstat 命令用于显示网络状态&#xff0c;包括网络连接、路由表、接口统计等信息。它是 Linux 系统中常用的网络工具之一&#xff0c;用于监控网络连接和排查网络问题。 资料合集&#xff1a;https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.c…...

Claude Opus 4.7 正式发布:Anthropic 在推理模型上的又一次突破

Anthropic CEO Dario Amodei 本周谈到 Project Glasswing&#xff0c;这是 Anthropic 联合 AWS、Apple、Google、Microsoft、NVIDIA 等公司发起的软件安全倡议。背景过去一周&#xff08;4.10-4.17&#xff09;&#xff0c;AI 编程领域迎来了一波密集更新。Anthropic 发布 Clau…...

Dev-C++ 6.3与5.11版本对比:如何根据你的Windows系统选择最佳IDE版本

Dev-C 6.3与5.11版本深度对比&#xff1a;如何为你的Windows系统选择最佳开发环境 当你在Windows系统上寻找一款轻量级C/C集成开发环境时&#xff0c;Dev-C总是会出现在推荐列表中。但面对Embarcadero Dev-C 6.3和经典的Dev-Cpp 5.11两个主要版本&#xff0c;很多开发者都会陷入…...

STM32G0系列读保护功能实战:从代码实现到问题解决

1. STM32G0读保护功能入门指南 第一次接触STM32G0的读保护功能时&#xff0c;我也是一头雾水。这个功能就像给你的代码上了一把锁&#xff0c;防止别人通过调试接口读取芯片内部的内容。想象一下&#xff0c;你辛苦开发的算法被别人轻易复制&#xff0c;那感觉就像自家保险箱被…...

Qwen3-ASR-0.6B实战案例:使用Qwen3-ASR-0.6B构建智能语音笔记工具

Qwen3-ASR-0.6B实战案例&#xff1a;使用Qwen3-ASR-0.6B构建智能语音笔记工具 1. 引言&#xff1a;语音转文字的新选择 你有没有遇到过这样的情况&#xff1a;开会时忙着记录要点却总是漏掉重点&#xff0c;听课录音后还要花大量时间整理成文字&#xff0c;或者想快速把语音想…...