本文首先简单的介绍ROS是什么和核心概念,然后主要介绍ROS的通信机制。
1、ROS是什么
ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。
![v2-0d3d58745c227563942ade7106efa753_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/643dc19cae709ad4f3ae21a180333dcc.png)
ROS的以下特性使得我们可以使用ROS高效、便捷地搭建出机器人原型机:
- ROS采用了一种松耦合分布式的通信框架机制
- ROS提供了丰富的功能包和测试、仿真等工具
- ROS使用广泛,文档丰富
![v2-0f0b2eaf432a58738f62799695e87649_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/2de5cd6a133ca6d11b921a949fba73c7.jpeg)
2、ROS核心概念
下面我们来看一下ROS最核心的概念:节点(Node)和节点管理器(ROS Master)。
每个节点是一个执行具体某项任务的、独立运行的可执行文件(例如采集图像节点、图像处理节点),节点名称不可重复。不同的节点甚至可以使用不同的编程语言,以及运行在不同的主机上。
ROS启动于节点管理器,管理器用于管理ROS中的不同节点,为节点提供命名和注册服务,辅助不同节点之间相互查找和通信,如下图所示。通过这种方式,我们就不必指定“发送传感器数据到IP为127.0.0.1的主机”,只需要告诉Node1发送消息到Node2,十分便捷。节点管理器还提供了参数服务器,节点使用该服务器存储和检索运行时的参数。
![v2-3a652500e219c36a055eab13dc182693_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/6bbc4aad485fce7c490555f93be3de15.jpeg)
3、通信机制
那么节点之间是如何通信的呢?主要有话题通信和服务通信两种方式,我们以下图为例详细介绍。
(1)话题通信
此时我们有一台搭载了相机的机器人,我们希望机器人能够获取并处理相机采集的图像数据,同时可以在笔记本上看到这些图像。因此,我们定义了三个节点:相机节点(Camera Node)、图像处理节点(Image Processing Node)和图像显示节点(Image Display Node)。所有的节点都注册在节点管理器(ROS Master)中,管理器可以视为一个查询表,各个节点能查到消息要发送到其他的哪个节点。
![v2-a506968142b0403bc071157b3623c215_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/90ed86fb285398980a3154aef3bf5279.jpeg)
完成注册后,Camera Node声明它发布(Publish)了一个叫做/image_data的话题(Topic)。Image Processing Node和Image Display Node声明它们订阅(Subscribe)了这个Topic。话题中数据为Message,具有一定类型和数据结构(ROS中提供了标准数据类型,用户也可自己定义),当Camera Node接收到相机发动的数据后,就立即将数据发送到另外两个节点上。
![v2-807eb23a66a0bdd64ccb0d87b989997a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/fe99bdfea156e5c1b74ea1e72988ee23.jpeg)
可以看出以下几点:
- 话题通信是一种异步通信,即数据的传输是单向的,只出不进。
- 同一个话题的订阅者或发布者可以不唯一。
(2)服务通信
话题通信的数据传输是单向的,订阅端(Image Processing Node)被动接收发布端(Camera Node)的数据?这时候有人就问了,如果Image Processing Node想主动接收数据怎么办。ROS中提供了另一种通信方式:服务通信。服务通信由请求方(Client)和应答方(Server)组成。
Camera Node可以在ROS Master上注册一个特定的服务(Service)。客户端(Camera Node)发动请求数据,请求方(Image Processing Node)发送一个request,等待应答方(Camera Node)处理后,反馈回一个reply。
![v2-20262fb859b3bc1e6c64fd6be04f6d93_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/b5ad07677b8e1bc52c19d48d1d5a62a5.jpeg)
以上就是ROS的通信机制。