ROS 一、核心概念


ROS 一:核心概念

ros提供了一种松耦合分布式通信框架。这些框架可以抽象成一个节点图。

每一个功能都可以是一个节点,比如一个图像采集功能为一个节点、图像检测又是一个节点、slam导航功能也放在一个节点。**每一个具体的功能都是一个节点。**我们用一个椭圆形代表一个节点。

每个节点通过通讯连接,互相传输数据。我们用箭头表示桐乡数据的流向。

  • 由节点(椭圆形)和通讯的方向(椭圆形上的箭头)构成ros的计算图

计算图

如下图,每一个node节点就是机器人完成某一个具体功能的进程

每一个node的编程语言可以是不一样的。比如可以使用python,c++等。只要有统一的通讯标准就可以完成整个机器人系统的搭建。

1、节点与节点管理器

  • 节点(node)——执行单元

    • 是执行具体任务的进程,是独立的可执行文件。
    • 不同节点可以使用不同的编程语言(常用python或c++),可以分布式运行在不同的主机。
    • 节点在系统中的名称必须是唯一的。
  • 节点管理器(ROS Master)——控制中心

    • 为各个节点提供命名、注册服务。

    • 跟踪、记录话题或者服务通信,辅助节点相互查找,建立连接,帮助各个节点之间传输数据。

      节点之间互相不知道彼此之间的存在,都需要ROS Master来帮忙建立连接。

    • 提供参数服务器,节点使用此服务器来存储、检索运行时的参数。(可以理解为全局的对象字典,会记录一些全局变量,给各个节点提供服务)

2、话题通信

以下是ros通信的两种方式:

2.1 话题(topic)——异步通信机制

  • 节点之间用来传输数据的重要总线,是传输的管道
  • 使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以是不唯一的。
  • 如下图,发布者(publisher)给订阅者(subscriber)的通讯是单向的数据传输。而通讯的通道就是话题(Topic)

话题模型(发布/订阅)

  • 消息(message)——话题里头的 “数据”
    • 描述传输数据的详细定义就是消息。
    • 具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义的类型
    • 使用编程语言无关的.msg文件来定义消息,编译过程中会生成对应的代码文件。
  • 区分:
    • 话题:传输数据的管道。
    • 消息:传输数据的详细定义。

eg:

在上图中,摄像头把获取到的数据给CameraNodeCameraNode把这些画面发布出去。

Image Processing Node要处理图像数据,使用需要订阅CameraNode发布的数据。

在笔记本电脑(Laptop)区,笔记本电脑想要显示图像,Image Display Node也就需要订阅这个图像数据

所以在上图模型中:

  • 有一个图像数据Publisher,两个图像数据Subscriber,一个Topic(Image data Message),传输图像数据消息。

2.2 服务(service)——同步通信机制

  • 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后,返回应答数据。

    是双向的数据传输

  • 使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件。

ros-1-4.png

2.3 话题与服务的区别

话题 服务
同步性 异步 同步
通信模型 发布/订阅 客户端/服务器
底层协议 ROS TCP/ROS UDP ROS TCP/ROS UDP
反馈机制
缓冲区
实时性
节点关系 多对多 一对多(一个server)
适用场景 数据传输 逻辑处理

3、参数(Parameter)全局共享字典

  • ROS Master里面的参数服务器。
  • 可通过网络访问的共享、多变量字典,数据类型不唯一。
  • 节点使用次服务器来存储&检索运行时的参数。
  • 适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。

eg:

如上图,Talker存入setParam了一个参数("foo",1)到ROS Master

Listener需要调用foo底下的值,就发出一个请求getParam

然后Listener就可以获得ROS Master返回的("foo",1)

  • 观察可以发现,如果Listener只get一次参数,如果参数有变化的话,就没办法及时更新了,就不适合存储动态变化的数据。
  • 如果需要实时更新参数,就需要用到ROS的高级功能 “动态参数配置”的功能。

4、文件系统

  • 功能包(package)

    ROS软件中的基本单元,包含了节点源码、配置文件、数据定义……

    用于完成一些具体的功能,人脸识别、图像识别等等

  • 功能包清单(package manifest)

    记录了功能包的基本信息,包含了作者信息、许可信息、依赖选项、变异标志……

  • 元功能包(meta package)

    组织多个用于同一个目的的功能包

    比如很多个图像识别的功能包组织成一个大工程,这个大工程就是元功能包。

graph TB
A(文件系统) -->B[元功能包]
B -->C[功能包]
C -->D1[功能包清单]
C -->D2[消息类型]
C -->D3[服务类型]
C -->D4[代码]
C -->D5[其他]

参考自: 古月居ros教程


文章作者: 拓佑豪
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 拓佑豪 !
评论
  目录