ROS原理学习第二天--ROS通信机制(Service)笔记---继第一天学习笔记

11 篇文章 1 订阅
8 篇文章 6 订阅
  • 继续昨天内容:

  • 3.建立TCPROS/UDPROS连接

    • 底层实际还是通过基础的Socket流,在连接的过程中会创建三个层次的类对象,以建立和维护发布者与订阅者之间的连接,分别如下图所示:

      在这里插入图片描述

    • 具体实现过程:

      • 分析源码可知,他实际上是发布者和订阅者之间通过互相发送header头,初始化Connection对象和TransportLink对象,从而建立Connection对象层和TransportLink对象层的连接

回调函数处理

  • 因为订阅者无法确定消息到达的时间,所以利用回调函数来进行处理,把响应收到的消息时间的代码放到回调函数里,通过轮转函数实现回调函数的调用,从而实现消息处理。
  • 通常在订阅者节点中,使用ros::spin()函数和ros::spinOnce();函数来进行回调函数的处理。
  • spin()函数和spinOnce()的区别
    • ros::spin()函数会使所有用户编写的回调函数执行,并且一旦被调用将不会返回直到节点通过ros::shutdown()或Ctrl+C被关闭才返回
      • 使用ros::spin()时,一般在初始化时已经设置好了所有消息的回调函数,并且不需要其他辅助程序运行。这样,每次消息到达时都会调用用户的回调函数,相当于程序是消息事件驱动的。
    • ros::spinOnce()调用后会及时返回,并且还可以继续执行之后的程序。他会在某个时间段内及时调用所有的回调函数,一般还需要其他辅助程序的执行,如定时任务、数据处理、用户界面等。
  • 原理就不多剖析了~~~

基于服务(Service)的同步RPC通信

  • Topic主题属于发布/订阅模型,是一个灵活的节点间通信方式,但他属于多对多,单向传输方式,不适合RPC(远程过程调用)请求/应答模型。请求/应答是分布式系统常用的信息交互方式。
  • 发布/订阅类似,基于Service服务的同步RPC通信也需要通过XMLRPCMaster上注册服务客户端节点通过XMLRPC在Master上寻找与服务对应的服务器端节点,然后与其建立TCPROS连接,之后才能进行数据流通信。但与发布/订阅不同的是,同步RPC服务通信只支持TCPROS协议客户端不需要通过XMLRPC与服务器端协商共同支持的协议因为他的架构是基于请求/响应模型,有请求必然当时就进行响应,无需确定协议进行长时间传输),RPC服务通信数据流是双向的,需要分别发送请求与响应消息来实现数据通信。
  • 客户端发现服务器端
    • 对于服务器端,在Master上注册服务,Master将会保存服务的名称、服务节点的URI和服务的XMLRPC URI
    • 对于客户端,不需要在节点管理器Master上注册,只是通过Master确定服务的URI
    • 由于Service通信方式仅支持TCPROS协议,所以客户端不需要与服务器通过XMLRPC协商共同支持的协议。
  • 建立TCPROS连接
    • 与Topic主题的发布/订阅模型类似,只是发送的header不同。
    • 在建立Connection对象层连接时,客户端首先向服务器发送一个header,在服务器端收到来自客户端header后,会给客户端再发送一个相应的header。只有当客户端与服务器端的服务类型和md5校验值匹配时,连接才会成功建立。

基于参数服务器的数据传递

  • 参数服务器是ROS上一种共享的多变量参数字典,节点Node利用参数服务器获取和存储运行时的参数。他通常用于存储一些静态的非二进制数据,如配置参数、机器人模型文件等。他是全局可见的,也就是说所有节点都可以获取和存储参数,在必要时可进行修改,删除参数。

  • ROS中的参数都属于参数服务器管理,也就是说即使节点创建了参数,但在节点终止时参数仍然继续存在,参数服务器使用XMLRPC实现,并且本身运行与ROS节点管理器Master中,这就意味着他的API可以通过XMLRPC库进行访问。

  • 具体实现过程参考书P57

小结

ROS是一个分布式的进程框架,这些框架分装在易于分享和发布的功能包和功能包集中,每个节点就是一个进程。ROS的运行框架是一种使用多模式ROS通信机制实现节点间点对点的松耦合Socket网络连接的处理架构,本章主要介绍三种主要通信方式,具体如下:

  • 基于主题的异步数据流通信(Topic):本章对topic通信方式进行了详细分析,首先概述了通信过程,然后介绍了主题、XMLRPC、网络消息格式等概念,实现过程也进行了分析。
  • 基于服务的同步RPC通信(Service),同上
  • 基于参数服务器的数据传递:参数服务器运行于节点管理器Master上,主要实现了一些全局参数和配置文件的存储,具体实现过程做了解。

参考《机器人操作系统ROS原理与应用》一书进行学习,刚开始使用与了解 ROS,希望可以通过记录笔记将自己的理解分享给大家,如果有理解错误的地方,还请各位大神批评指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值