当前位置: 首页 > 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服务器

创建一个发布器

http://www.lryc.cn/news/226131.html

相关文章:

  • vue+css动画 实现文字的上下轮播切换
  • debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)
  • LeetCode146.LRU缓存
  • 5-7 使用函数求余弦函数的近似
  • Kotlin HashMap entries.filter过滤forEach
  • css的预处理
  • [云原生案例2.2 ] Kubernetes的部署安装 【单master集群架构 ---- (二进制安装部署)】网络插件部分
  • Go开发基础环境搭建
  • Vue简单使用Echart图表柱形图 vue使用柱形图 vue使用 echart图表柱形图 vue使用柱形图
  • centos 7.9系统安装老版本jenkins,并解决插件问题
  • BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练
  • 《嵌入式虚拟化技术与应用》:深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!
  • 【Java开发】之获取客户端真实 IP 地址
  • Linux RPM包安装、卸载和升级
  • ROS 多级tf坐标转换
  • ceph rados对象存储索引残留问题排查与处理
  • 十年测试工龄,揭露软件测试痛点以及分析
  • 【星海出品】flask(三) 组件
  • 关于卷积神经网络的池化层(pooling)
  • GNU链接脚本详解
  • 酷柚易汛ERP-账户管理操作指南
  • 函数的连续性
  • Pandas groupby方法中的group_keys属性
  • win 命令替代鼠标的操作
  • Shopee活动取消规则是什么?shopee官方促销活动怎么取消?
  • 安卓常见设计模式2------构建者模式(Kotlin版)
  • redis主从复制+哨兵
  • html动态爱心超文本标记代码,丝滑流畅有特效,附源码
  • 力扣:162. 寻找峰值(Python3)
  • 【Python】20大报告生成词云