415|0

548

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

《ROS2智能机器人开发实践》--5.服务、通信接口、参数、动作、分布式通信、DDS [复制链接]

 
本帖最后由 dirty 于 2025-2-23 16:04 编辑

      本篇将梳理学习ROS2应用开发方法之服务、通信接口、参数、动作、分布式通信、DDS。

一.服务

1.通信模型

      发送一个请求,反馈一个应答的形式,这种通信机制在ROS中成为服务,Service。

2.客户端服务端模型

      从服务的实现机制上来看,这种你问我答的形式叫做客户端/服务器模型,简称为CS模型,客户端在需要某些数据的时候,针对某个具体的服务,发送请求信息,服务器端收到请求之后,就会进行处理并反馈应答信息。

3.同步通讯

       在服务通信中,客户端可以通过接收到的应答信息,判断服务器端的状态,我们也称之为同步通信。

4.一对多通信

      服务通信模型中,服务器端唯一,但客户端可以不唯一。

5.服务接口

      服务通信的核心还是要传递数据,数据变成了两个部分,一个请求的数据,还有一个反馈的数据,这些数据和话题消息一样,在ROS中也是要标准定义的,话题使用.msg文件定义,服务使用的是.srv文件定义。

6.案例:加法求解器

(1)启动两个终端,并运行如下节点,第一个节点是服务端,等待请求数据并提供求和功能,第二个节点是客户端,发送传入的两个加数并等待求和结果。

  • ros2 run learning_service service_adder_server
  • ros2 run learning_service service_adder_client 2 3

      运行结果

(2)代码

(3)流程总结

      客户端流程

●编程接口初始化
●创建节点并初始化
●创建客户端对象
●创建并发送请求数据
●等待服务器端应答数据
●销毁节点并关闭接口

 

      服务端流程

●编程接口初始化
●创建节点并初始化
●创建服务器端对象
●通过回调函数处进行服务
●向客户端反馈应答结果
●销毁节点并关闭接口

 

二.通信接口

1.接口定义

      ROS的通信系统,它的主要目的就是传输数据,那就得让大家高效的建立连接,并且准确包装和解析传输的数据内容,话题、服务等机制也就诞生了,他们传输的数据,都要符合通信接口的标准定义。

2.ROS通信接口

      接口可以让程序之间的依赖降低,便于我们使用别人的代码,减少重复造轮子。

      ROS有三种常用的通信机制,分别是话题、服务、动作,通过每一种通信种定义的接口,各种节点才能有机的联系到一起。

3.语言无关

      为了保证每一个节点可以使用不同语言编程,ROS将这些接口的设计做成了和语言无关的。

●话题通信接口的定义使用的是msg文件,由于是单向传输,只需要描述传输的每一帧数据是什么就行。
●服务通信接口的定义使用的是.srv文件,包含请求和应答两部分定义,通过中间的“---”区分。
●动作是另外一种通信机制,用来描述机器人的一个运动过程,使用.action文件定义,此时接口的定义分成了三个部分,分别是动作的目标、运动的结果、周期反馈。

4.标准接口

      在ROS安装路径中的share文件夹中找到,涵盖众多标准定义。

 

三.动作

      动作是一种一种ROS通信机制。目的就是便于对机器人某一完整行为的流程进行管理。

1.通信模型

      一个需要执行一段时间的行为,使用动作的通信机制就更为合适,就像装了一个进度条,我们可以随时把控进度,如果运动过程当中,我们还可以随时发送一个取消运动的命令。

客户端/服务器模型

      动作和服务类似,使用的也是客户端和服务器模型,客户端发送动作的目标,想让机器人干什么,服务器端执行动作过程, 控制机器人达到运动的目标,同时周期反馈动作执行过程中的状态。

      客户端发送一个运动的目标,想让机器人动起来,服务器端收到之后,就开始控制机器人运动,一边运动,一边反馈当前的状态,如果是一个导航动作,这个反馈可能是当前所处的坐标,如果是机械臂抓取,这个反馈可能又是机械臂的实时姿态。当运动执行结束后,服务器再反馈一个动作结束的信息。整个通信过程就此结束。

2.一对多通信

      和服务一样,动作通信中的客户端可以有多个,大家都可以发送运动命令,但是服务器端只能有一个,一个机器人,先执行完成一个动作,才能执行下一个动作。

3.同步通信

      有反馈,动作也是一种同步通信机制,之前我们也介绍过,动作过程中的数据通信接口,使用.action文件进行定义。

4.由服务和话题合成

      上面的动图,动作的三个通信模块,有两个是服务,一个是话题。当客户端发送运动目标时,使用的是服务的请求调用,服务器端也会反馈一个应带,表示收到命令。动作的反馈过程,其实就是一个话题的周期发布,服务器端是发布者,客户端是订阅者。

      动作是一种应用层的通信机制,其底层就是基于话题和服务来实现的。

 

四.参数

      参数是ROS机器人系统中的全局字典,可以运行多个节点中共享数据。

1.全局字典

      在ROS系统中,参数是以全局字典的形态存在的。字典由名称和数值组成,也叫做键和值,合成键值。

2.可动态监控

      在ROS2中,参数的特性非常丰富,比如某一个节点共享了一个参数,其他节点都可以访问,如果某一个节点对参数进行了修改,其他节点也有办法立刻知道,从而获取最新的数值。这在参数的高级编程中,大家都可能会用到。

 

五.分布式通信

      在ROS系统中,机器人功能是由各种节点组成的,这些节点可能位于不同的计算机中,这种结构可以将原本资源消耗较多的任务,分配到不同的平台上,减轻计算压力,这就是分布式通信框架的典型应用之一。

      分布式网络搭建包括装系统、安装ROS2、远程桌面网络控制。分布式数据传输确保设备与电脑连在同一个局域网络中,打通两个计算平台的通信能力,包括话题、服务、动作等通信。

分布式网络分组 

      ROS2提供了一个DOMAIN的机制,就类似分组一样,处于同一个DOMAIN中的计算机才能通信,我们可以在电脑和树莓派端的.bashrc中加入这样一句配置,即可将两者分配到一个小组中。

  • export ROS_DOMAIN_ID=<your_domain_id>

 

六.DDS

      ROS2中最为重大的变化--DDS,前面学习的话题、服务、动作,他们底层通信的具体实现过程,都是靠DDS来完成的,它相当于是ROS机器人系统中的神经网络。

1.通信模型

      DDS的核心是通信,能够实现通信的模型和软件框架非常多,这里我们列出常用的四种模型:

●点对点模型,许多客户端连接到一个服务端,每次通信时,通信双方必须建立一条连接。当通信节点增多时,连接数也会增多。而且每个客户端都需要知道服务器的具体地址和所提供的服务,一旦服务器地址发生变化,所有客户端都会受到影响。

●Broker模型,针对点对点模型进行了优化,由Broker集中处理所有人的请求,并进一步找到真正能响应该服务的角色。优点:客户端就不用关心服务器的具体地址了。缺点:Broker作为核心,它的处理速度会影响所有节点的效率,当系统规模增长到一定程度,Broker就会成为整个系统的性能瓶颈。如果Broker发生异常,可能导致整个系统都无法正常运转。之前的ROS1系统,使用的就是类似这样的架构。

●广播模型,所有节点都可以在通道上广播消息,并且节点都可以收到消息。这个模型解决了服务器地址的问题,而且通信双方也不用单独建立连接,但是广播通道上的消息太多了,所有节点都必须关心每条消息,其实很多是和自己没有关系的。

●以数据为中心的DDS模型了,这种模型与广播模型有些类似,所有节点都可以在DataBus上发布和订阅消息。但它的先进之处在于,通信中包含了很多并行的通路,每个节点可以只关心自己感兴趣的消息,忽略不感兴趣的消息,有点像是一个旋转火锅,各种好吃的都在这个DataBus传送,我们只需要拿自己想吃的就行,其他的和我们没有关系。

      在这几种通信模型中,DDS的优势更加明显。

2.DDS

      DDS的全称是Data Distribution Service,也就是数据分发服务,是一套专门为实时系统设计的数据分发/订阅标准.

      DDS强调以数据为中心,可以提供丰富的服务质量策略,以保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。

3.DDS在ROS2中的应用

      DDS在ROS2系统中的位置至关重要,所有上层建设都建立在DDS之上。在这个ROS2的架构图中,蓝色和红色部分就是DDS。

      DDS是一种通信的标准,DDS是一种通信的标准,能够按照DDS标准实现的通信系统很多,这里每一个红色模块,就是某一企业或组织实现的一种DDS系统。

      为了实现对多个DDS的兼容,ROS设计了一个Middleware中间件,也就是一个统一的标准,不管我们用那个DDS,保证上层编程使用的函数接口都是一样的。

      DDS通讯模型如下

      DDS中的基本结构是Domain,Domain将各个应用程序绑定在一起进行通信。DDS中另外一个重要特性就是质量服务策略,QoS

      QoS是一种网络传输策略,应用程序指定所需要的网络传输质量行为,QoS服务实现这种行为要求,尽可能地满足客户对通信质量的需求,可以理解为数据提供者和接收者之间的合约。具体策略如下:

●DEADLINE策略,表示通信数据必须要在每次截止时间内完成一次通信;
●HISTORY策略,表示针对历史数据的一个缓存大小;
●RELIABILITY策略,表示数据通信的模式,配置成BEST_EFFORT,就是尽力传输模式,网络情况不好的时候,也要保证数据流畅,此时可能会导致数据丢失,配置成RELIABLE,就是可信赖模式,可以在通信中尽量保证图像的完整性,我们可以根据应用功能场景选择合适的通信模式;
●DURABILITY策略,可以配置针对晚加入的节点,也保证有一定的历史数据发送过去,可以让新节点快速适应系统。

      DDS的加入,让ROS2的通信系统焕然一新,多众多样的通信配置,可以更好的满足不同场景下的机器人应用。

4.案例:DDS编程

(1)代码配置DDS,以Hello World话题通信为例。

      执行以下指令运行

  • ros2 run learning_qos qos_helloworld_pub
  • ros2 run learning_qos qos_helloworld_sub

      运行结果如下:

(2)代码解析

      发布者代码learning_qos/qos_helloworld_pub.py,订阅者代码learning_qos/qos_helloworld_sub.py

 

      至此,ROS2的应用开发方法基本梳理学习实践了一遍,为后面进一步学习与深入奠定一个好的基础。

查看本帖全部内容,请登录或者注册
点赞 关注
个人签名

保持热爱

 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 2

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表