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:
在上图中,摄像头把获取到的数据给
CameraNode
,CameraNode
把这些画面发布出去。
Image Processing Node
要处理图像数据,使用需要订阅CameraNode
发布的数据。在笔记本电脑(Laptop)区,笔记本电脑想要显示图像,
Image Display Node
也就需要订阅这个图像数据所以在上图模型中:
- 有一个图像数据Publisher,两个图像数据Subscriber,一个Topic(Image data Message),传输图像数据消息。
2.2 服务(service)——同步通信机制
-
使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后,返回应答数据。
是双向的数据传输
-
使用编程语言无关的
.srv
文件定义请求和应答数据结构,编译过程中生成对应的代码文件。
2.3 话题与服务的区别
话题 | 服务 | |
---|---|---|
同步性 | 异步 | 同步 |
通信模型 | 发布/订阅 | 客户端/服务器 |
底层协议 | ROS TCP/ROS UDP | ROS TCP/ROS UDP |
反馈机制 | 无 | 有 |
缓冲区 | 有 | 无 |
实时性 | 弱 | 强 |
节点关系 | 多对多 | 一对多(一个server) |
适用场景 | 数据传输 | 逻辑处理 |
3、参数(Parameter)全局共享字典
- ROS Master里面的参数服务器。
- 可通过网络访问的共享、多变量字典,数据类型不唯一。
- 节点使用次服务器来存储&检索运行时的参数。
- 适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。
eg:
如上图,Talker存入
setParam
了一个参数("foo",1)
到ROS MasterListener需要调用
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教程